Istio ワークロードの最小 TLS バージョン設定
このタスクでは、Istio ワークロードの最小 TLS バージョンを設定する方法を示します。Istio ワークロードの最大 TLS バージョンは 1.3 です。
Istio ワークロードの最小 TLS バージョンの設定
最小 TLS バージョンを設定して、
istioctl
経由で Istio をインストールします。istioctl install
コマンドで Istio を設定するために使用されるIstioOperator
カスタムリソースには、Istio ワークロードの最小 TLS バージョンのフィールドが含まれています。minProtocolVersion
フィールドは、Istio ワークロード間の TLS 接続の最小 TLS バージョンを指定します。次の例では、Istio ワークロードの最小 TLS バージョンは 1.3 に設定されています。$ cat <<EOF > ./istio.yaml apiVersion: install.istio.io/v1alpha1 kind: IstioOperator spec: meshConfig: meshMTLS: minProtocolVersion: TLSV1_3 EOF $ istioctl install -f ./istio.yaml
Istio ワークロードの TLS 設定を確認する
Istio ワークロードの最小 TLS バージョンを設定した後、最小 TLS バージョンが設定され、期待どおりに機能していることを確認できます。
2つのワークロード、`httpbin` と `curl` をデプロイします。これらを単一のネームスペース(例:`foo`)にデプロイします。両方のワークロードは、それぞれの前段に Envoy プロキシを使用して実行されます。
$ kubectl create ns foo $ kubectl apply -f <(istioctl kube-inject -f @samples/httpbin/httpbin.yaml@) -n foo $ kubectl apply -f <(istioctl kube-inject -f @samples/curl/curl.yaml@) -n foo
`curl` が `httpbin` と正常に通信することを以下のコマンドで確認します。
$ kubectl exec "$(kubectl get pod -l app=curl -n foo -o jsonpath={.items..metadata.name})" -c curl -n foo -- curl http://httpbin.foo:8000/ip -sS -o /dev/null -w "%{http_code}\n" 200
この例では、TLS の最小バージョンが 1.3 に設定されています。TLS 1.3 が許可されていることを確認するには、次のコマンドを実行します。
$ kubectl exec "$(kubectl get pod -l app=curl -n foo -o jsonpath={.items..metadata.name})" -c istio-proxy -n foo -- openssl s_client -alpn istio -tls1_3 -connect httpbin.foo:8000 | grep "TLSv1.3"
テキスト出力には以下が含まれているはずです。
TLSv1.3
TLS 1.2 が許可されていないことを確認するには、次のコマンドを実行します。
$ kubectl exec "$(kubectl get pod -l app=curl -n foo -o jsonpath={.items..metadata.name})" -c istio-proxy -n foo -- openssl s_client -alpn istio -tls1_2 -connect httpbin.foo:8000 | grep "Cipher is (NONE)"
テキスト出力には以下が含まれているはずです。
Cipher is (NONE)
クリーンアップ
サンプルアプリケーション `curl` と `httpbin` を `foo` ネームスペースから削除します。
$ kubectl delete -f samples/httpbin/httpbin.yaml -n foo
$ kubectl delete -f samples/curl/curl.yaml -n foo
クラスタから Istio をアンインストールします。
$ istioctl uninstall --purge -y
`foo` と `istio-system` ネームスペースを削除するには
$ kubectl delete ns foo istio-system