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 プロキシを使用して実行されます。

    ZipZip
    $ 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
この情報は役に立ちましたか?
改善のための提案はありますか?

フィードバックありがとうございます!