クラスター内のアプリケーションコンテナにサイドカープロキシを注入することで、サービス呼び出しのネットワークセキュリティ、信頼性、および可観測性が向上します。ビジネス要件に基づいて、リソース、ライフサイクル、トラフィックインターセプトポリシー、可観測性機能などのサイドカープロキシのパラメーターを柔軟に設定できます。このトピックでは、サイドカープロキシの設定方法と関連パラメーターについて説明します。
サイドカープロキシの設定レベル
サイドカープロキシの設定レベルが異なると、有効範囲と優先度も異なります。サイドカープロキシの設定レベルは、優先度の低い順に、グローバル、名前空間、ワークロード、Pod スコープとなります。
ビジネス要件に応じて、同じサイドカープロキシを異なるレベルで設定できます。ASM は、サイドカープロキシが注入される際に、各サイドカー設定レベルの優先度に基づいて最終的に有効となるパラメーターを決定します。例えば、同じサイドカープロキシを名前空間レベルとグローバルレベルの両方で設定し、名前空間レベルの設定が default 名前空間に適用されるとします。default 名前空間に新しいワークロードをデプロイすると、注入されるサイドカープロキシは、名前空間レベルがグローバルレベルよりも優先度が高いため、名前空間レベルのパラメーターを使用します。
|
サイドカープロキシの設定レベル
|
説明
|
|
グローバル
|
サイドカープロキシの設定がグローバルに有効になります。この設定は、サイドカープロキシが注入される際にすべての Pod に適用されます。
|
|
名前空間
|
サイドカープロキシの設定が指定された名前空間で有効になります。この設定は、サイドカープロキシが注入される際に、その名前空間内の Pod にのみ適用されます。このレベルでサイドカープロキシを設定するには、名前空間を選択する必要があります。
|
|
ワークロード
|
サイドカープロキシの設定が指定されたワークロードで有効になります。この設定は、サイドカープロキシが注入される際に、指定されたラベルセレクターによって選択されたワークロードにのみ適用されます。このレベルでサイドカープロキシを設定するには、設定が適用されるワークロードを決定するためにワークロードのラベルセレクターを指定する必要があります。
|
|
Pod スコープ
|
このレベルのサイドカープロキシ設定は ASM コンソールでは設定できません。Pod にアノテーションを追加することで設定できます。詳細については、「アノテーションを使用したサイドカープロキシの設定」をご参照ください。
|
操作手順
以下のセクションでは、異なるレベルでサイドカープロキシを設定する方法について説明します。新しいサイドカープロキシ設定をワークロードに有効にするには、Pod を再デプロイする必要があります。詳細については、「ワークロードの再デプロイ」をご参照ください。
グローバルレベル
-
ASM コンソールにログインします。 左側のナビゲーションウィンドウで、 を選択します。
-
メッシュ管理 ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
-
Sidecar プロキシ設定 ページで、グローバル タブをクリックして、必要に応じてサイドカーパラメーターを設定し、設定項目の更新 をクリックします。
サイドカープロキシのパラメーターの詳細については、「サイドカープロキシのパラメーター」をご参照ください。
-
サイドカープロキシの設定が有効になったか確認します。
-
左側のナビゲーションウィンドウで、を選択します。
-
基本情報 セクションで、メッシュの 状態 を確認します。
状態 が 実行中 の場合、グローバルレベルのサイドカープロキシ構成が有効になりました。
名前空間レベル
-
ASM コンソールにログインします。 左側のナビゲーションウィンドウで、を選択します。
-
メッシュ管理 ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
-
Sidecar プロキシ設定 ページで、名前空間 タブをクリックし、構成が有効になる 名前空間 を選択し、ターゲットの Sidecar 構成をクリックし、必須パラメーターを選択して設定してから、設定項目の更新 をクリックします。
名前空間レベルは最も低いサイドカープロキシ構成レベルではないため、どのサイドカープロキシパラメーターもデフォルト値を持ちません。 デフォルトでは、パラメーターはグローバルレベルの構成を使用します。 設定項目の更新 をクリックすると、名前空間レベルのサイドカープロキシ構成がすぐに有効になります。 サイドカープロキシパラメーターの詳細については、「サイドカープロキシパラメーター」をご参照ください。
ワークロードレベル
同じ名前空間内で、異なるワークロードに適用される複数のワークロードレベルのサイドカープロキシ設定を作成できます。
-
ASM コンソールにログインします。左側のナビゲーションウィンドウで、を選択します。
-
メッシュ管理 ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
-
Sidecar プロキシ設定 ページで、ワークロード タブをクリックし、次に 作成 をクリックします。
-
ワークロード タブで、構成が有効になる 名前空間 を選択し、ワークロードレベルのサイドカープロキシ構成の 名前 を指定し、マッチラベル でワークロードのラベルと一致するラベルセレクターを作成し、対象のサイドカー構成をクリックして、必須パラメーターを選択して構成してから、作成 をクリックします。
ワークロードレベルは最も低いサイドカープロキシ構成レベルではないため、どのサイドカープロキシパラメーターにもデフォルト値はありません。デフォルトでは、パラメーターはグローバルレベルの構成を使用します。作成をクリックすると、ワークロードレベルのサイドカープロキシ構成がすぐに作成されます。サイドカープロキシパラメーターの詳細については、「サイドカープロキシパラメーター」をご参照ください。
設定を作成した後、更新または削除することもできます。
-
ワークロードレベルのサイドカープロキシ構成を更新するには、ワークロード タブで対象のサイドカープロキシ構成を探し、アクション 列の 更新 をクリックします。必要に応じて マッチラベル 設定とサイドカープロキシ構成を変更して、更新 をクリックします。
-
ワークロードレベルのサイドカープロキシ構成の削除:ワークロード タブで、対象のサイドカープロキシ構成を見つけ、アクション 列の 削除 をクリックします。次に、確認 ダイアログボックスで OK をクリックします。
すでにデプロイされている Pod の設定は変更できないため、サイドカープロキシの設定はすぐには有効になりません。したがって、サイドカープロキシを設定した後は、Pod を再デプロイする必要があります。再デプロイ後、Pod に注入されたサイドカープロキシは新しい設定を使用します。
-
ACK コンソールにログインします。左側のナビゲーションウィンドウで、クラスターリストをクリックします。
-
クラスターリスト ページで、クラスターの名前をクリックします。左側のナビゲーションウィンドウで、 をクリックします。
-
展開 ページで、次のいずれかの操作を実行してワークロードを再デプロイします。
|
シナリオ
|
アクション
|
|
単一のワークロード
|
アクション 列で、ターゲットワークロードの を選択します。 次に、再デプロイ ダイアログボックスで OK をクリックします。
|
|
複数のワークロード
|
名前 列で、複数の対象ワークロードを選択し、ページ下部の 一括で再デプロイ をクリックします。次に、確認 ダイアログボックスで OK をクリックします。
|
サイドカープロキシパラメーターの最小要件バージョン
異なる ASM バージョンでサポートされる機能は異なる場合があります。ほとんどの場合、新しい ASM バージョンのサイドカープロキシは、古いバージョンよりも多くの機能とパラメーターを提供します。サイドカープロキシのパラメーターが見つからない場合は、次の表を参照して ASM バージョンのアップグレードが必要かどうかを確認してください。ASM バージョンのアップグレード方法の詳細については、「ASM インスタンスのアップグレード」をご参照ください。
次の表の [パラメーター] 列で、リンクをクリックすると、パラメーターの説明と設定例が表示されます。
重要
ご利用の ASM インスタンスがバージョン 1.22 以降で、データプレーンクラスターがバージョン 1.30 以降の場合、サイドカープロキシはネイティブサイドカーコンテナとしてデプロイされます。この場合、Kubernetes クラスターはサイドカープロキシコンテナのライフサイクルを直接管理し、ライフサイクル管理タイプのすべてのサイドカープロキシパラメーターをオーバーライドします。
サイドカープロキシのパラメーター
サイドカープロキシのリソース使用量、トラフィックインターセプトポリシー、DNS プロキシ、およびライフサイクルを設定できます。以下のセクションでは、サイドカープロキシのパラメーターについて説明し、設定例を示します。
注入された Istio プロキシのリソース設定
注入された Istio プロキシのリソース設定の説明と設定例を展開して表示
パラメーターの説明
このパラメーターは、サイドカープロキシコンテナが実行時に必要とする最小の CPU およびメモリリソースと、コンテナが要求できる最大の CPU およびメモリリソースを指定します。
|
パラメーター
|
説明
|
|
リソース制限
|
サイドカープロキシコンテナが要求できる最大の CPU およびメモリリソース。CPU リソースはコア単位で、メモリリソースは MiB 単位で測定されます。
|
|
リソース要求
|
サイドカープロキシコンテナが実行時に必要とする最小の CPU およびメモリリソース。CPU リソースはコア単位で、メモリリソースは MiB 単位で測定されます。
|
設定例
-
Sidecar プロキシ設定 ページで、ターゲットのサイドカープロキシ構成レベルのタブをクリックし、次に リソース設定 をクリックします。
-
(オプション) リソース設定 セクションで、Istio プロキシのリソース設定 を選択します。
このステップは、名前空間 タブと ワークロード タブでは必須です。グローバル タブではこのステップをスキップできます。
-
リソース制限で、[CPU] を 2 コア、メモリ を 1025 MiB に設定します。リソース要求で、[CPU] を 0.1 コア、メモリ を 128 MiB に設定します。次に、ページの下部にある 設定項目の更新 をクリックします。
-
ワークロードを再デプロイして、サイドカープロキシの設定を有効にします。
-
設定した Istio プロキシのリソースを表示します。
kubectl get pod -n <namespace> <pod-name> -o yaml
期待される出力:
apiVersion: v1
kind: Pod
...
spec:
containers:
- args:
- proxy
...
name: istio-proxy
...
resources:
limits:
cpu: '2'
memory: 1025Mi
requests:
cpu: 100m
memory: 128Mi
...
istio-proxy コンテナはサイドカープロキシコンテナです。Pod 内の istio-proxy という名前のコンテナの resources フィールドが対象のリソース値に設定されている場合、Istio プロキシのリソース設定 構成が有効になっています。
パーセンテージによるサイドカーリソースの設定
パーセンテージによるサイドカーリソースの設定の説明と設定例を展開して表示
パラメーターの説明
このパラメーターは、アプリケーションコンテナに基づいてサイドカーリソースを自動的に計算します。このパラメーターを有効にすると、注入された Istio プロキシのリソース設定が上書きされます。この機能は、アプリケーションコンテナの最大リソース設定に基づいてサイドカーにリソースを割り当てるため、異なる Pod に対してサイドカーリソースを動的に調整できます。次の計算戦略がサポートされています:
-
最大コンテナリソース:システムは Pod 内のすべてのコンテナを走査し、最大のリソース値を計算のベースラインとして使用します。
-
指定されたコンテナ名:システムは Pod 内の指定された名前のコンテナのリソースを計算のベースラインとして使用します。この戦略を使用するには、計算のベースラインとしてコンテナを指定する必要があります。指定されたコンテナが Pod に見つからない場合、注入された Istio プロキシのリソース設定で設定されたサイドカーリソースが使用されます。さらに、Pod に scaled-resource.inject.istio.alibabacloud.com/container-ref アノテーションが含まれている場合、アノテーションで定義されたコンテナが計算のベースラインとして優先されます。
重要
選択した戦略に関係なく:
-
計算のベースラインとして使用されるコンテナに limits が設定されていない場合、システムはサイドカーリソースを無制限とみなし、サイドカーに limits を設定しません。
-
計算のベースラインとして使用されるコンテナに requests が設定されていない場合、システムはサイドカーの正常な動作を保証するために最小限の実行可能なリソースを割り当てます。この場合、requests の CPU リソースは 100m 以上、メモリリソースは 128Mi 以上になります。
-
サイドカーが必要とする最小リソース:requests と limits の CPU リソースは 100m 未満にはできず、メモリリソースは 128Mi 未満にはできません。計算されたリソースがサイドカーが必要とする最小リソースより低い場合、サイドカーリソースは最小値に設定されます。
設定例
以下の例は、異なるシナリオでの異なるリソースパーセンテージの実際の効果を示しています。サンプルコンテナの設定は次のとおりです:
通常のアプリケーション設定
resources:
requests:
cpu: 300m
memory: 512Mi
limits:
cpu: 500m
memory: 1Gi
requests が設定されていない場合
resources:
limits:
cpu: 500m
memory: 1Gi
limits が設定されていない場合
resources:
requests:
cpu: 300m
memory: 512Mi
-
Sidecar プロキシ設定 ページで、ターゲットサイドカープロキシ構成レベルのタブをクリックし、次に リソース設定 をクリックします。
-
リソース設定 セクションで、Sidecar リソースの比例設定 を選択します。
-
リソース比率 を設定し、コンピューティングポリシー (オプション) を選択し、設定項目の更新 をクリックします。
要件に応じて、計算方法として最大コンテナリソース または コンテナ名の指定 を選択します。
-
ワークロードを再デプロイして、サイドカープロキシの設定を有効にします。
-
設定した Istio プロキシのリソースを表示します。
kubectl get pod -n <namespace> <pod-name> -o yaml
期待される出力:
通常のアプリケーション設定
|
通常の設定
リソースのパーセンテージを 50 に設定した場合、つまりサイドカーがアプリケーションコンテナに設定されたリソースの 50% を取得する場合、最終的なサイドカーのリソース割り当ては次のようになります: ...
resources:
requests:
cpu: 150m
memory: 256Mi
limits:
cpu: 250m
memory: 512Mi
|
最小設定
リソースのパーセンテージを 20 に設定した場合、つまりサイドカーがアプリケーションコンテナに設定されたリソースの 20% を取得する場合、最終的なサイドカーのリソース割り当ては次のようになります: ...
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 100m
memory: 204Mi
|
requests が設定されていない場合
リソースのパーセンテージを 50 に設定した場合、つまりサイドカーがアプリケーションコンテナに設定されたリソースの 50% を取得する場合、最終的なサイドカーのリソース割り当ては次のようになります:
...
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 250m
memory: 512Mi
limits が設定されていない場合
リソースのパーセンテージを 50 に設定した場合、つまりサイドカーがアプリケーションコンテナに設定されたリソースの 50% を取得する場合、最終的なサイドカーのリソース割り当ては次のようになります:
...
resources:
requests:
cpu: 150m
memory: 256Mi
istio-init init コンテナのリソース設定
istio-init init コンテナのリソース設定の説明と設定例を展開して表示
パラメーターの説明
このパラメーターは、サイドカープロキシが注入された Pod 内で、istio-init コンテナが実行時に必要とする最小の CPU およびメモリリソースと、コンテナが要求できる最大の CPU およびメモリリソースを指定します。istio-init コンテナは、サイドカープロキシが注入された Pod が起動する際に実行される init コンテナであり、サイドカープロキシコンテナのトラフィックインターセプトルーティングルールを設定します。
|
パラメーター
|
説明
|
|
リソース制限
|
istio-init コンテナが要求できる最大の CPU およびメモリリソース。CPU リソースはコア単位で、メモリリソースは MiB 単位で測定されます。
|
|
リソース要求
|
istio-init コンテナが実行時に必要とする最小の CPU およびメモリリソース。CPU リソースはコア単位で、メモリリソースは MiB 単位で測定されます。
|
設定例
-
Sidecar プロキシ設定 ページで、ターゲットのサイドカープロキシ構成レベルのタブをクリックし、その後 リソース設定 をクリックします。
-
(任意) リソース設定 セクションで、istio-init 初期化コンテナのリソース設定項目 を選択します。
このステップは、名前空間 および ワークロード タブで必須です。グローバル タブでは、このステップをスキップできます。
-
リソース制限 では、[CPU] を 1 コアに、メモリ を 512 MiB に設定します。リソース要求 では、[CPU] を 0.1 コアに、メモリ を 128 MiB に設定します。次に、ページ下部にある 設定項目の更新 をクリックします。
-
ワークロードを再デプロイして、サイドカープロキシの設定を有効にします。
-
設定した istio-init init コンテナのリソースを表示します。
kubectl get pod -n <namespace> <pod-name> -o yaml
期待される出力:
apiVersion: v1
kind: Pod
...
spec:
...
initContainers:
- args:
...
name: istio-init
resources:
limits:
cpu: '1'
memory: 512Mi
requests:
cpu: 100m
memory: 128Mi
...
Pod 内の istio-init という名前の init コンテナの リソース フィールドがターゲットリソース値に設定されている場合、istio-init 初期化コンテナのリソース設定項目 構成が適用されています。
サイドカー用の ACK 動的オーバーセルドリソース
サイドカー用の ACK 動的オーバーセルドリソースの説明と設定例を展開して表示
パラメーターの説明
このパラメーターは、注入された Istio プロキシと istio-init init コンテナに割り当てられる ACK 動的オーバーセルドリソースを指定します。動的オーバーセルドリソースの詳細については、「動的リソースオーバーコミットメントの有効化」をご参照ください。
このパラメーターは、注入された Istio プロキシのリソース設定およびistio-init init コンテナのリソース設定と同じ方法で設定されます。設定後、Pod が ACK 動的リソースオーバーセリングの label koordinator.sh/qosClass を持っている場合、Pod 内の Istio プロキシと istio-init init コンテナには、通常の Kubernetes CPU およびメモリリソースの代わりに ACK 動的オーバーセルドリソースが割り当てられます。
説明
サイドカー用の ACK 動的オーバーセルドリソースを設定する場合、CPU リソースはミリコア単位で測定されます。
設定例
-
Sidecar プロキシ設定 ページで、ターゲットのサイドカープロキシ構成レベルのタブをクリックし、リソース設定 をクリックし、Sidecar の ACK 動的オーバーコミットリソースを設定 を選択し、関連するパラメーターを設定してから、ページ下部にある 設定項目の更新 をクリックします。
|
パラメーター
|
サブパラメーター
|
説明
|
|
Istio プロキシのリソース設定 (ACK 動的オーバーコミットリソース)
|
リソース制限
|
[CPU] を 2000 ミリコアに、メモリ を 2048 MiB に設定します。
|
|
リソース要求
|
[CPU] を 200 ミリコアに、メモリ を 256 MiB に設定します。
|
|
istio-init 初期化コンテナリソース (ACK SLO リソース)
|
リソース制限
|
[CPU] を 1000 ミリコアに、メモリを 1024 MiB に設定します。
|
|
リソース要求
|
[CPU] を 100 ミリコアに、メモリ を 128 MiB に設定します。
|
-
ワークロードを再デプロイして、サイドカープロキシの設定を有効にします。
-
次のコマンドを実行して、設定した istio-init init コンテナのリソースを表示します。
kubectl get pod -n <namespace> <pod-name> -o yaml
期待される出力:
apiVersion: v1
kind: Pod
metadata:
...
labels:
koordinator.sh/qosClass: BE
spec:
containers:
- args:
...
name: istio-proxy
...
resources:
limits:
kubernetes.io/batch-cpu: 2k
kubernetes.io/batch-memory: 2Gi
requests:
kubernetes.io/batch-cpu: '200'
kubernetes.io/batch-memory: 256Mi
...
initContainers:
- args:
...
name: istio-init
resources:
limits:
kubernetes.io/batch-cpu: 1k
kubernetes.io/batch-memory: 1Gi
requests:
kubernetes.io/batch-cpu: '100'
kubernetes.io/batch-memory: 128Mi
...
Pod 内の istio-proxy コンテナ (Istio プロキシコンテナ) と istio-init init コンテナの両方に resources フィールドがターゲットリソース値に設定されていることは、Sidecar の ACK 動的オーバーコミットリソースを設定 構成が有効になったことを示します。
Istio-Proxy の同時実行数
Istio-Proxy の同時実行数の説明と設定例を展開して表示
パラメーターの説明
このパラメーターは、サイドカープロキシコンテナのワーカースレッドの数を指定します。ワーカースレッドの数として非負の整数を指定する必要があります。このパラメーターを 0 に設定すると、ワーカースレッドの数は、サイドカープロキシに設定された要求された CPU リソースまたは CPU リソース制限に基づいて自動的に決定されます。リソース制限は要求されたリソースよりも優先されます。
設定例
-
Sidecar プロキシ設定 ページで、ターゲットのサイドカープロキシ構成レベルのタブをクリックし、次に リソース設定 をクリックします。
-
(オプション) リソース設定 セクションで、Istio プロキシのスレッド数 を選択します。
このステップは、名前空間 タブと ワークロード タブで必須です。グローバル タブでは、このステップを省略できます。
-
Istio プロキシのスレッド数 を 3 に設定し、ページ下部にある 設定項目の更新 をクリックします。
この設定は、サイドカープロキシコンテナが実行時に 3 つのワーカースレッドを実行することを示します。
-
ワークロードを再デプロイして、サイドカープロキシの設定を有効にします。
-
次のコマンドを実行して、設定した Istio-Proxy の同時実行数を表示します。
kubectl get pod -n <namespace> <pod-name> -o yaml
期待される出力:
apiVersion: v1
kind: Pod
...
spec:
...
- args:
- proxy
- sidecar
- '--domain'
- $(POD_NAMESPACE).svc.cluster.local
- '--proxyLogLevel=warning'
- '--proxyComponentLogLevel=misc:error'
- '--log_output_level=default:info'
- '--concurrency'
- '3'
...
name: istio-proxy
...
istio-proxy コンテナの concurrency パラメーターは 3 に設定されています。これは、Istio プロキシのスレッド数 構成が有効になったことを示します。
アウトバウンドトラフィックをインターセプトするアドレス範囲
アウトバウンドトラフィックをインターセプトするアドレス範囲の説明と設定例を展開して表示
パラメーターの説明
カンマ (,) で区切られた IP アドレス範囲のリストを指定する必要があります。各 IP アドレス範囲は CIDR 表記です。サイドカープロキシが注入されたワークロードが他のサービスにアクセスする場合、宛先 IP アドレスが設定されたアドレス範囲内にあるリクエストのみがサイドカープロキシコンテナによってインターセプトされます。その他のリクエストは、サイドカープロキシを経由せずに直接宛先に送信されます。デフォルトでは、このパラメーターは * に設定されており、サイドカープロキシコンテナがワークロードのすべてのアウトバウンドトラフィックをインターセプトすることを示します。
設定例
-
Sidecar プロキシ設定 ページで、ターゲットのサイドカープロキシ構成レベルのタブをクリックし、次に ポートまたはアドレスによる Sidecar プロキシの有効化/無効化 をクリックします。
-
(オプション) ポートまたはアドレスによる Sidecar プロキシの有効化/無効化 セクションで、インターセプト対象の外部アクセスアドレス範囲 を選択します。
このステップは、名前空間 タブと ワークロード タブで必須です。グローバル タブでは、このステップをスキップできます。
-
インターセプト対象の外部アクセスアドレス範囲 を 192.168.0.0/16,10.1.0.0/24 に設定し、ページの下部にある 設定項目の更新 をクリックします。
この設定は、サイドカープロキシコンテナが、宛先 IP アドレスが 2 つの CIDR ブロック 192.168.0.0/16 および 10.1.0.0/24 内にあるリクエストをインターセプトすることを示します。
-
ワークロードを再デプロイして、サイドカープロキシの設定を有効にします。
-
次のコマンドを実行して、設定したアウトバウンドトラフィックをインターセプトするアドレス範囲を表示します。
kubectl get pod -n <namespace> <pod-name> -o yaml
期待される出力:
apiVersion: v1
kind: Pod
...
spec:
...
initContainers:
- args:
- istio-iptables
- '-p'
- '15001'
- '-z'
- '15006'
- '-u'
- '1337'
- '-m'
- REDIRECT
- '-i'
- '192.168.0.0/16,10.1.0.0/24'
- '-x'
- 192.168.0.1/32
- '-b'
- '*'
- '-d'
- '15090,15021,15081,9191,15020'
- '--log_output_level=default:info'
...
name: istio-init
...
istio-init コンテナの実行時パラメーターには -i 192.168.0.0/16,10.1.0.0/24 が含まれます。これは、インターセプト対象の外部アクセスアドレス範囲 構成が有効になったことを示します。
アウトバウンドトラフィックのインターセプトから除外されるアドレス範囲
アウトバウンドトラフィックのインターセプトから除外されるアドレス範囲の説明と設定例を展開して表示
パラメーターの説明
カンマ (,) で区切られた IP アドレス範囲のリストを指定する必要があります。各 IP アドレス範囲は CIDR 表記です。サイドカープロキシが注入されたワークロードが他のサービスにアクセスする場合、サイドカープロキシコンテナはアウトバウンドトラフィックをインターセプトします。リクエストの宛先 IP アドレスがこのパラメーターに設定された CIDR ブロック内にある場合、そのリクエストはサイドカープロキシコンテナによってインターセプトされません。
重要
[アウトバウンドトラフィックインターセプトの除外アドレス範囲] に インターセプト対象の外部アクセスアドレス範囲 で指定されたアドレスが含まれる場合、このアドレスへのリクエストはサイドカープロキシによってインターセプトされません。 詳細については、「アウトバウンドトラフィックをインターセプトするアドレス範囲」をご参照ください。
設定例
-
Sidecar プロキシ設定 ページで、ターゲットのサイドカープロキシ構成レベルのタブをクリックし、次に ポートまたはアドレスによる Sidecar プロキシの有効化/無効化 をクリックします。
-
(オプション) ポートまたはアドレスによる Sidecar プロキシの有効化/無効化 セクションで、外部へのアクセスをブロックしないアドレス範囲 を選択します。
このステップは、名前空間 タブと ワークロード タブでは必須です。グローバル タブでは、このステップをスキップできます。
-
外部へのアクセスをブロックしないアドレス範囲 を 10.1.0.0/24 に設定し、ページの下部にある 設定項目の更新 をクリックします。
この設定は、サイドカープロキシコンテナが、宛先 IP アドレスが CIDR ブロック 10.1.0.0/24 内にあるリクエストをインターセプトしないことを示します。
-
ワークロードを再デプロイして、サイドカープロキシの設定を有効にします。
-
次のコマンドを実行して、設定したアウトバウンドトラフィックのインターセプトから除外されるアドレス範囲を表示します。
kubectl get pod -n <namespace> <pod-name> -o yaml
期待される出力:
apiVersion: v1
kind: Pod
...
spec:
...
initContainers:
- args:
- istio-iptables
- '-p'
- '15001'
- '-z'
- '15006'
- '-u'
- '1337'
- '-m'
- REDIRECT
- '-i'
- '*'
- '-x'
- '192.168.0.1/32,10.1.0.0/24'
- '-b'
- '*'
- '-d'
- '15090,15021,15081,9191,15020'
- '--log_output_level=default:info'
...
name: istio-init
...
istio-init コンテナの実行時パラメーターには、-x 192.168.0.1/32,10.1.0.0/24 が含まれています。192.168.0.1/32 は、デフォルトのホストアドレスの CIDR ブロックです。10.1.0.0/24 は、サイドカープロキシに設定された IP アドレス範囲と一致します。これは、外部へのアクセスをブロックしないアドレス範囲 構成が有効になったことを示しています。
インバウンドトラフィックをサイドカープロキシ経由でルーティングするポート
インバウンドトラフィックをサイドカープロキシ経由でルーティングするポートの説明と設定例を展開して表示
パラメーターの説明
カンマ (,) で区切られたポートのリストを指定する必要があります。リスト内のポート宛のトラフィックは、サイドカープロキシコンテナによってインターセプトされます。デフォルトでは、このパラメーターは * に設定されており、サイドカープロキシコンテナがワークロードのすべてのインバウンドトラフィックをインターセプトすることを示します。
設定例
-
Sidecar プロキシ設定 ページで、ターゲットのサイドカープロキシ構成レベルのタブをクリックし、次に ポートまたはアドレスによる Sidecar プロキシの有効化/無効化 をクリックします。
-
(オプション) ポートまたはアドレスによる Sidecar プロキシの有効化/無効化 セクションで、ポートを設定して、イングレストラフィックが Sidecar プロキシを経由するようにします。 を選択します。
このステップは、名前空間 タブおよび ワークロード タブでは必須です。グローバル タブではこのステップを省略できます。
-
ポートを設定して、イングレストラフィックが Sidecar プロキシを経由するようにします。 を 80,443 に設定し、設定項目の更新 をクリックします。
この設定は、サイドカープロキシコンテナがワークロードのポート 80 およびポート 443 に送信されたリクエストのみをインターセプトすることを示します。
-
ワークロードを再デプロイして、サイドカープロキシの設定を有効にします。
-
次のコマンドを実行して、設定したインバウンドトラフィックインターセプトポートを表示します。
kubectl get pod -n <namespace> <pod-name> -o yaml
期待される出力:
apiVersion: v1
kind: Pod
...
spec:
...
initContainers:
- args:
- istio-iptables
- '-p'
- '15001'
- '-z'
- '15006'
- '-u'
- '1337'
- '-m'
- REDIRECT
- '-i'
- '*'
- '-x'
- 192.168.0.1/32
- '-b'
- '80,443'
- '-d'
- '15090,15021,15081,9191,15020'
- '--log_output_level=default:info'
...
name: istio-init
...
istio-init コンテナの実行時パラメーターには、サイドカープロキシ用に構成されたインバウンドポートと一致する -b 80,443 が含まれています。これは、ポートを設定して、イングレストラフィックが Sidecar プロキシを経由するようにします。 構成が有効になったことを示します。
アウトバウンドトラフィックをサイドカープロキシ経由でルーティングするポート
アウトバウンドトラフィックをサイドカープロキシ経由でルーティングするポートの説明と設定例を展開して表示
パラメーターの説明
カンマ (,) で区切られたポートのリストを指定する必要があります。これは、すべてのアウトバウンドトラフィックの宛先サービスポートを表します。宛先サービスポートがリスト内にあるリクエストは、サイドカープロキシコンテナによってインターセプトされます。
重要
このパラメーターが 外部へのアクセスをブロックしないアドレス範囲 または アウトバウンドトラフィックを sidecar から除外するポートを設定します。 と共に設定されており、リクエストの宛先 IP アドレスがインターセプトされない CIDR ブロック内に含まれるか、またはリクエストの宛先サービスポートがインターセプトされないポートリストに含まれる場合、たとえ宛先ポートがこのパラメーターのリストに含まれていても、そのリクエストはサイドカープロキシによってインターセプトされません。詳細については、「アウトバウンドトラフィックのインターセプトから除外されるアドレス範囲」および「アウトバウンドトラフィックのサイドカープロキシをバイパスするポート」をご参照ください。
設定例
-
Sidecar プロキシ設定 ページで、対象のサイドカープロキシ構成レベルのタブをクリックし、次に ポートまたはアドレスによる Sidecar プロキシの有効化/無効化 をクリックします。
-
(オプション) ポートまたはアドレスによる Sidecar プロキシの有効化/無効化 セクションで、Sidecar プロキシ経由にするアウトバウンドポートの設定 を選択します。
このステップは、名前空間 タブと ワークロード タブでは必須です。グローバル タブでは、このステップを省略できます。
-
Sidecar プロキシ経由にするアウトバウンドポートの設定 を 80,443 に設定し、ページの下部にある 設定項目の更新 をクリックします。
この設定は、サイドカープロキシコンテナがポート 80 およびポート 443 のサービスに送信されるリクエストをインターセプトすることを示します。
-
ワークロードを再デプロイして、サイドカープロキシの設定を有効にします。
-
次のコマンドを実行して、設定したアウトバウンドトラフィックインターセプトポートを表示します。
kubectl get pod -n <namespace> <pod-name> -o yaml
期待される出力:
apiVersion: v1
kind: Pod
...
spec:
...
initContainers:
- args:
- istio-iptables
- '-p'
- '15001'
- '-z'
- '15006'
- '-u'
- '1337'
- '-m'
- REDIRECT
- '-i'
- '*'
- '-x'
- 192.168.0.1/32
- '-b'
- '*'
- '-d'
- '15090,15021,15081,9191,15020'
- '--log_output_level=default:info'
- '-q'
- '80,443'
- '--log_output_level=default:info'
...
name: istio-init
...
istio-init コンテナの実行時パラメーターに、サイドカープロキシ用に構成されたアウトバウンドポートと一致する -q 80,443 が含まれていることは、Sidecar プロキシ経由にするアウトバウンドポートの設定 構成が有効になったことを示しています。
インバウンドトラフィックでサイドカープロキシをバイパスするポート
インバウンドトラフィックでサイドカープロキシをバイパスするポートの説明と設定例を展開して表示
パラメーターの説明
カンマ (,) で区切られたポートのリストを指定する必要があります。リスト内のポート宛のトラフィックは、サイドカープロキシコンテナによってインターセプトされません。
重要
このパラメーターは、ポートを設定して、イングレストラフィックが Sidecar プロキシを経由するようにします。 が [ * ] に設定されている場合、つまりサイドカープロキシコンテナがデフォルトですべてのインバウンドトラフィックをインターセプトする場合にのみ有効になります。
設定例
-
Sidecar プロキシ設定 ページで、ターゲットサイドカープロキシ構成レベルのタブをクリックし、次に ポートまたはアドレスによる Sidecar プロキシの有効化/無効化 をクリックします。
-
(任意) ポートまたはアドレスによる Sidecar プロキシの有効化/無効化 セクションで、インバウンドトラフィックを sidecar から除外する を選択します。
このステップは、名前空間 タブと ワークロード タブでは必須です。グローバル タブでは、このステップをスキップできます。
-
インバウンドトラフィックを sidecar から除外する を 8000 に設定し、ページの下部にある 設定項目の更新 をクリックします。
この設定は、サイドカープロキシコンテナがワークロードのポート 8000 に送信されたリクエストをインターセプトしなくなることを示します。
-
ワークロードを再デプロイして、サイドカープロキシの設定を有効にします。
-
次のコマンドを実行して、設定したインバウンドトラフィックバイパスポートを表示します。
kubectl get pod -n <namespace> <pod-name> -o yaml
期待される出力:
apiVersion: v1
kind: Pod
...
spec:
...
initContainers:
- args:
- istio-iptables
- '-p'
- '15001'
- '-z'
- '15006'
- '-u'
- '1337'
- '-m'
- REDIRECT
- '-i'
- '*'
- '-x'
- 192.168.0.1/32
- '-b'
- '*'
- '-d'
- '15090,15021,15081,9191,15020,8000'
- '--log_output_level=default:info'
...
name: istio-init
...
istio-init コンテナの実行時パラメーターには、-d 15090,15021,15081,9191,8000 が含まれます。ポート 15090,15021,15081,9191 はサイドカープロキシのアプリケーションポートであり、デフォルトでインターセプトから除外されます。ポート 8000 は、サイドカープロキシ用に構成されたインバウンドポートと一致します。これは、インバウンドトラフィックを sidecar から除外する 構成が有効になったことを示します。
アウトバウンドトラフィックでサイドカープロキシをバイパスするポート
アウトバウンドトラフィックでサイドカープロキシをバイパスするポートの説明と設定例を展開して表示
パラメーターの説明
カンマ (,) で区切られたポートのリストを指定する必要があります。これは、すべてのアウトバウンドトラフィックの宛先サービスポートを表します。宛先サービスポートがリスト内にあるリクエストは、宛先 IP アドレスがインターセプトされるアウトバウンドアドレス範囲内にあるか、宛先ポートがインターセプトされるアウトバウンドポートリスト内にあるかに関わらず、サイドカープロキシコンテナによってインターセプトされません。
設定例
-
Sidecar プロキシ設定 ページで、ターゲットのサイドカープロキシ構成レベルのタブをクリックし、次に ポートまたはアドレスによる Sidecar プロキシの有効化/無効化 をクリックします。
-
(オプション) ポートまたはアドレスによる Sidecar プロキシの有効化/無効化 セクションで、アウトバウンドトラフィックを sidecar から除外するポートを設定します。 を選択します。
名前空間 タブと ワークロード タブでは、このステップは必須です。グローバル タブでは、このステップをスキップできます。
-
アウトバウンドトラフィックを sidecar から除外するポートを設定します。 を 8000 に設定し、次にページの下部にある 構成の更新 をクリックします。
この設定は、サイドカープロキシコンテナがポート 8000 のサービスに送信されたリクエストをインターセプトしなくなることを示します。
-
ワークロードを再デプロイして、サイドカープロキシの設定を有効にします。
-
次のコマンドを実行して、設定したアウトバウンドトラフィックバイパスポートを表示します。
kubectl get pod -n <namespace> <pod-name> -o yaml
期待される出力:
apiVersion: v1
kind: Pod
...
spec:
...
initContainers:
- args:
- istio-iptables
- '-p'
- '15001'
- '-z'
- '15006'
- '-u'
- '1337'
- '-m'
- REDIRECT
- '-i'
- '*'
- '-x'
- 192.168.0.1/32
- '-b'
- '*'
- '-d'
- '15090,15021,15081,9191,15020'
- '--log_output_level=default:info'
- '-o'
- '8000'
...
name: istio-init
...
istio-init コンテナの実行時パラメーターに -o 8000 が含まれていることは、サイドカープロキシ用に構成されたアウトバウンドポートと一致します。これにより、アウトバウンドトラフィックを sidecar から除外するポートを設定します。 構成が有効になったことがわかります。
DNS プロキシ機能の有効化
DNS プロキシ機能の説明と設定例を展開して表示
パラメーターの説明
サイドカープロキシコンテナの DNS プロキシ機能を有効または無効にできます。DNS プロキシ機能が有効になると、サイドカープロキシコンテナはワークロードの DNS リクエストをインターセプトして、Service Mesh のパフォーマンスと可用性を向上させます。ワークロードからのすべてのリクエストはサイドカープロキシコンテナにリダイレクトされます。サイドカープロキシコンテナは IP アドレスとローカルドメイン名のマッピングをローカルに保存するため、リモートの DNS サービスにリクエストを送信することなく、DNS 応答を直接ワークロードに返すことができます。DNS リクエストがサイドカープロキシコンテナで処理できない場合、サイドカーは DNS リクエストを直接転送します。詳細については、「ASM での DNS プロキシの使用」をご参照ください。
重要
ネットワーク権限の問題により、サーバーレス Kubernetes (ACK Serverless) クラスターまたは ECI Pod を持つ ACK クラスターのサイドカープロキシコンテナでは DNS プロキシ機能を有効にできません。
設定例
-
Sidecar プロキシ設定 ページで、対象のサイドカープロキシ構成レベルのタブをクリックし、DNS プロキシ機能 をクリックします。
-
(オプション) DNS プロキシ機能 セクションで、[DNS プロキシを有効にする] を選択し、右側のスイッチをオンにして、設定項目の更新 をクリックします。
このステップは、名前空間 タブおよび ワークロード タブで必須です。グローバル タブでは、このステップは省略可能です。スイッチをオンにすると、サイドカープロキシの DNS プロキシ機能が有効になります。
-
ワークロードを再デプロイして、サイドカープロキシの設定を有効にします。
-
次のコマンドを実行して、設定した DNS プロキシ機能を表示します。
kubectl get pod -n <namespace> <pod-name> -o yaml
期待される出力:
apiVersion: v1
kind: Pod
spec:
containers:
- args:
- proxy
- sidecar
- '--domain'
- $(POD_NAMESPACE).svc.cluster.local
- '--proxyLogLevel=warning'
- '--proxyComponentLogLevel=misc:error'
- '--log_output_level=default:info'
- '--concurrency'
- '3'
env:
...
- name: ISTIO_META_DNS_AUTO_ALLOCATE
value: 'true'
- name: ISTIO_META_DNS_CAPTURE
value: 'true'
...
name: istio-proxy
istio-proxy コンテナの ISTIO_META_DNS_AUTO_ALLOCATE および ISTIO_META_DNS_CAPTURE 環境変数は true に設定されます。これは、DNS プロキシ機能構成が有効になったことを示します。
サイドカープロキシの環境変数管理
サイドカープロキシの環境変数管理の説明と設定例を展開して表示
パラメーターの説明
このパラメーターは、サイドカープロキシコンテナに追加される追加の環境変数を指定します。次の 2 種類のサイドカープロキシ環境変数を設定できます。
|
パラメーター
|
説明
|
|
Sidecar のグレースフル終了 (EXIT_ON_ZERO_ACTIVE_CONNECTIONS) (EXIT_ON_ZERO_ACTIVE_CONNECTIONS)
|
このパラメーターを有効にすると、環境変数 EXIT_ON_ZERO_ACTIVE_CONNECTIONS: "true" がサイドカープロキシコンテナに追加されます。この環境変数は次のように機能します:
デフォルトでは、サイドカープロキシコンテナが停止すると、コンテナ内の pilot-agent プロセスは Envoy プロキシがインバウンドトラフィックをリッスンするのを停止し、サイドカープロキシの終了ドレイン期間パラメーターによって決定される期間待機してから、Envoy プロキシプロセスを停止します。
EXIT_ON_ZERO_ACTIVE_CONNECTIONS を設定すると、サイドカープロキシコンテナが停止する際に、コンテナ内の pilot-agent プロセスはまず Envoy プロキシがインバウンドトラフィックをリッスンするのを停止し、デフォルトで 5 秒間待機します。待機後、プロセスは Envoy プロキシのアクティブな接続数をポーリングし、アクティブな接続数が 0 になった後にのみ Envoy プロキシプロセスを停止します。EXIT_ON_ZERO_ACTIVE_CONNECTIONS を設定すると、終了時間と終了中にドロップされるリクエスト数の両方を削減することで、一般的なケースでのサイドカープロキシコンテナの終了ライフサイクルが改善されます。
|
設定例
-
Sidecar プロキシ設定 ページで、対象のサイドカープロキシ構成レベルのタブをクリックし、次に Sidecar プロキシの環境変数管理 をクリックします。
-
(オプション) Sidecar プロキシの環境変数管理 セクションで、Sidecar のグレースフル終了 (EXIT_ON_ZERO_ACTIVE_CONNECTIONS) (EXIT_ON_ZERO_ACTIVE_CONNECTIONS) を選択します。
このステップは、名前空間 タブおよび ワークロード タブでは必須です。グローバル タブでは、このステップをスキップできます。
-
Sidecar のグレースフル終了 (EXIT_ON_ZERO_ACTIVE_CONNECTIONS) (EXIT_ON_ZERO_ACTIVE_CONNECTIONS) の右にあるスイッチをオンにして、構成の更新 をクリックします。
-
ワークロードを再デプロイして、サイドカープロキシの設定を有効にします。
-
次のコマンドを実行して、設定したサイドカープロキシの環境変数を表示します。
kubectl get pod -n <namespace> <pod-name> -o yaml
期待される出力:
apiVersion: v1
kind: Pod
...
spec:
containers:
- args:
...
env:
- name: EXIT_ON_ZERO_ACTIVE_CONNECTIONS
value: 'true'
name: istio-proxy
...
EXIT_ON_ZERO_ACTIVE_CONNECTIONS 環境変数が、Pod 内の istio-proxy コンテナのサイドカーの環境変数に追加されます。これは、Sidecar プロキシの環境変数管理 構成が有効になったことを示します。
サイドカープロキシのグレースフルスタートアップ (HoldApplicationUntilProxyStarts)
HoldApplicationUntilProxyStarts の説明と設定例を展開して表示
パラメーターの説明
HoldApplicationUntilProxyStarts は、サイドカープロキシのライフサイクル管理パラメーターです。HoldApplicationUntilProxyStarts はデフォルトで有効になっており、サイドカープロキシが注入された Pod では、Pod 内のアプリケーションコンテナが起動する前にサイドカープロキシコンテナが正常に起動する必要があります。これにより、サイドカープロキシの起動が完了していないためにアプリケーションコンテナへのトラフィックが失われるのを防ぎます。
このパラメーターを無効にすると、Pod 内のサイドカープロキシコンテナとアプリケーションコンテナが同時に起動します。クラスターに多数の Pod がデプロイされている場合、APIServer の負荷が高いためにサイドカープロキシコンテナの起動が遅くなることがあります。HoldApplicationUntilProxyStarts を無効にすることで、デプロイメントを高速化できます。
設定例
次の例では、グローバル タブで HoldApplicationUntilProxyStarts を無効にする方法を説明します。
-
Sidecar プロキシ設定 ページで、グローバル タブをクリックし、ライフサイクル管理 をクリックします。
-
サイドカーのグレースフル起動 (HoldApplicationUntilProxyStarts) (HoldApplicationUntilProxyStarts) の右にあるスイッチをオフにし、設定項目の更新 をクリックします。
この設定は、HoldApplicationUntilProxyStarts 機能が無効になることを示します。
-
ワークロードを再デプロイして、サイドカープロキシの設定を有効にします。
-
次のコマンドを実行して、HoldApplicationUntilProxyStarts の設定を表示します。
kubectl get pod -n <namespace> <pod-name> -o yaml
期待される出力:
apiVersion: v1
kind: Pod
...
spec:
containers:
- command:
...
name: sleep
...
env:
- name: PROXY_CONFIG
value: >-
{..."holdApplicationUntilProxyStarts":false,...}
...
name: istio-proxy
...
holdApplicationUntilProxyStarts 機能が無効になると、istio-proxy コンテナはアプリケーションコンテナの前に強制的に宣言されなくなり、デフォルトの lifecycle フィールドも宣言されなくなります。この場合、Service Mesh は、アプリケーションコンテナが起動する前にサイドカープロキシコンテナが正常に起動することを保証しなくなります。
サイドカープロキシの終了ドレイン期間
サイドカープロキシの終了ドレイン期間の説明と設定例を展開して表示
パラメーターの説明
サイドカープロキシの終了ドレイン期間は、サイドカープロキシのライフサイクル管理パラメーターです。サイドカープロキシが Pod に注入されると、アプリケーション Pod のトラフィックはサイドカープロキシコンテナによってインターセプトされます。
Pod が停止を開始すると、対応するサービスは Pod へのトラフィック転送を停止します。サイドカープロキシコンテナが終了シグナルを受信すると、一定期間待機します。この期間中、コンテナは新しいインバウンドトラフィックの受け入れを停止しますが、既存のインバウンドトラフィックの処理は続行します。アウトバウンドトラフィックは影響を受けず、通常通り送信できます。この期間をサイドカープロキシの終了ドレイン期間と呼びます。サイドカープロキシコンテナのデフォルトの終了ドレイン期間は 5s です。s 単位で期間を設定できます (例:10s)。
停止したサービスが提供するインターフェイス呼び出しに時間がかかり、サイドカープロキシコンテナの終了ドレイン期間を超えると、既存のインバウンドおよびアウトバウンド接続は完全に処理されていなくても終了し、一部のリクエストが失われる可能性があります。この場合、このパラメーターを使用してサイドカープロキシの終了ドレイン期間を延長し、インバウンドおよびアウトバウンドトラフィックが完全に処理されるようにすることができます。
サイドカープロキシの終了ドレイン期間は、10s のように s 単位で秒数を指定する必要があります。
設定例
-
Sidecar プロキシ設定 ページで、対象のサイドカープロキシ構成レベルのタブをクリックし、次に ライフサイクル管理 をクリックします。
-
(任意) ライフサイクル管理 セクションで、Sidecar プロキシの終了待機時間 を選択します。
このステップは、名前空間 タブおよび ワークロード タブでは必須です。グローバル タブではこのステップをスキップできます。
-
Sidecar プロキシの終了待機時間 を 10s に設定し、設定項目の更新 をクリックします。
この設定は、サイドカープロキシが終了時に既存の接続を処理するために 10 秒間待機することを示します。
-
ワークロードを再デプロイして、サイドカープロキシの設定を有効にします。
-
次のコマンドを実行して、設定したサイドカープロキシの終了ドレイン期間を表示します。
kubectl get pod -n <namespace> <pod-name> -o yaml
期待される出力:
apiVersion: v1
kind: Pod
...
spec:
containers:
- args:
...
env:
- name: TERMINATION_DRAIN_DURATION_SECONDS
value: '10'
...
- name: PROXY_CONFIG
value: >-
{..."terminationDrainDuration":"10s"}
...
name: istio-proxy
...
Pod 内の istio-proxy コンテナでは、環境変数 TERMINATION_DRAIN_DURATION_SECONDS が 10 に設定され、環境変数 PROXY_CONFIG には terminationDrainDuration が 10s として記録されます。これは、Sidecar プロキシの終了待機時間 構成が有効になったことを示します。
サイドカープロキシのライフサイクル
サイドカープロキシのライフサイクルの説明と設定例を展開して表示
パラメーターの説明
サイドカープロキシのライフサイクルパラメーターを使用すると、サイドカープロキシコンテナのコンテナライフサイクルフックを完全にカスタマイズできます。このパラメーターには、JSON 形式で宣言されたコンテナライフサイクルフックフィールド (lifecycle) を入力する必要があります。このフィールドは、サイドカープロキシコンテナのデフォルトのコンテナライフサイクルフックフィールドを置き換えます。詳細については、「コンテナライフサイクルフック」をご参照ください。
設定例
-
Sidecar プロキシ設定 ページで、対象のサイドカープロキシ構成レベルのタブをクリックし、次に ライフサイクル管理 をクリックします。
-
(オプション) ライフサイクル管理 セクションで、サイドカープロキシのライフサイクル を選択します。
このステップは、名前空間 タブと ワークロード タブでは必須です。グローバル タブでは、このステップを省略できます。
-
サイドカープロキシのライフサイクル で、次の YAML コンテンツを入力し、設定項目の更新 をクリックします。
この YAML コンテンツは、postStart および preStop フックパラメーターを設定します。
{
"postStart": {
"exec": {
"command": [
"pilot-agent",
"wait"
]
}
},
"preStop": {
"exec": {
"command": [
"/bin/sh",
"-c",
"sleep 13"
]
}
}
}
-
ワークロードを再デプロイして、サイドカープロキシの設定を有効にします。
-
次のコマンドを実行して、設定したサイドカープロキシのライフサイクルを表示します。
kubectl get pod -n <namespace> <pod-name> -o yaml
期待される出力:
apiVersion: v1
kind: Pod
...
spec:
containers:
- args:
...
...
lifecycle:
postStart:
exec:
command:
- pilot-agent
- wait
preStop:
exec:
command:
- /bin/sh
- -c
- sleep 13
name: istio-proxy
...
Pod 内の istio-proxy コンテナのコンテナライフサイクルフックフィールド (lifecycle) がターゲット構成に変更されます。これは、サイドカープロキシのライフサイクル 構成が有効になったことを示します。
外部サービスへのアクセスポリシー
外部サービスへのアクセスポリシーの説明と設定例を展開して表示
パラメーターの説明
このパラメーターは、サイドカープロキシコンテナの外部サービスへのアクセスポリシーを指定します。外部サービスとは、メッシュ外にあり、Service Mesh に登録されていないサービスのことです。デフォルトでは、Service Mesh が管理する Kubernetes クラスター内のすべてのサービスは登録済みサービスです。ServiceEntry リソースを宣言することで、手動でサービスを Service Mesh に登録できます。登録されていないサービスは外部サービスと見なされます。
このパラメーターは、次の 2 つのポリシーをサポートしています:
説明
このパラメーターはグローバル設定であり、グローバルレベルでのみ設定できます。名前空間またはワークロードレベルで外部サービスへのアクセスポリシーを設定するには、ASM コンソールにログインし、ページで設定します。
設定例
-
グローバル タブ、Sidecar プロキシ設定 ページで、外部サービスアクセスポリシー をクリックし、外部サービスへのアクセスポリシー OutboundTrafficPolicy の右側で [REGISTRY_ONLY] を選択し、設定項目の更新 をクリックします。
この設定により、メッシュ内のサービスが外部サービスにアクセスすることが制限されます。
-
ワークロードを再デプロイして、サイドカープロキシの設定を有効にします。
-
次の内容で sleep.yaml を作成します。
apiVersion: v1
kind: ServiceAccount
metadata:
name: sleep
---
apiVersion: v1
kind: Service
metadata:
name: sleep
labels:
app: sleep
service: sleep
spec:
ports:
- port: 80
name: http
selector:
app: sleep
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: sleep
spec:
replicas: 1
selector:
matchLabels:
app: sleep
template:
metadata:
labels:
app: sleep
spec:
terminationGracePeriodSeconds: 0
serviceAccountName: sleep
containers:
- name: sleep
image: curlimages/curl
command: ["/bin/sleep", "3650d"]
imagePullPolicy: IfNotPresent
volumeMounts:
- mountPath: /etc/sleep/tls
name: secret-volume
volumes:
- name: secret-volume
secret:
secretName: sleep-secret
optional: true
---
-
次のコマンドを実行して、sleep アプリケーションをデプロイします。
kubectl apply -f sleep.yaml -n default
-
次のコマンドを実行して、sleep アプリケーションを使用して外部サービスにアクセスします。
kubectl exec -it {sleep-pod-name} -c sleep -- curl www.aliyun.com -v
期待される出力:
* Trying *********...
* Connected to www.aliyun.com (********) port 80 (#0)
> GET / HTTP/1.1
> Host: www.aliyun.com
> User-Agent: curl/7.87.0-DEV
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 502 Bad Gateway
< date: Mon,********* 03:25:00 GMT
< server: envoy
< content-length: 0
<
* Connection #0 to host www.aliyun.com left intact
502 応答は、サイドカープロキシが注入された sleep アプリケーションが外部サービス www.aliyun.com にアクセスできないことを示します。これは、外部サービスアクセスポリシー 構成が有効になったことを示します。
サイドカーのインバウンドトラフィックインターセプトポリシー
サイドカーのインバウンドトラフィックインターセプトポリシーの説明と設定例を展開して表示
パラメーターの説明
このパラメーターは、サイドカープロキシのインバウンドトラフィックに対するインターセプトポリシーを指定します。デフォルトでは、サイドカープロキシコンテナは iptables の REDIRECT ポリシーを使用して、アプリケーションワークロードに送信されるインバウンドトラフィックをインターセプトします。リダイレクトによってインバウンドトラフィックがインターセプトされた後、アプリケーションはリクエストのソース IP アドレスとしてサイドカープロキシコンテナの IP アドレスしか見ることができず、クライアントの元の IP アドレスを見ることはできません。
インバウンドトラフィックのインターセプトポリシーを透過型プロキシ (TPROXY) ポリシーに変更すると、Service Mesh はサイドカープロキシコンテナが iptables の透過型プロキシモードでインバウンドトラフィックをインターセプトできるようにします。このパラメーターを設定すると、アプリケーションはクライアントの元の IP アドレスを見ることができます。詳細については、「Service Mesh でクライアントのソース IP を取得する」をご参照ください。
重要
透過型プロキシポリシーは、CentOS を実行しているノードをサポートしていません。Pod が実行されているノードが CentOS を使用している場合は、REDIRECT ポリシーを使用してください。
設定例
-
Sidecar プロキシ設定 ページで、対象のサイドカープロキシ構成レベルのタブをクリックし、次に Sidecar のインバウンドトラフィックインターセプトポリシー をクリックします。
-
(オプション) Sidecar のインバウンドトラフィックインターセプトポリシー セクションで、Sidecar のインバウンドトラフィックインターセプトポリシー を選択します。
このステップは、名前空間 タブと ワークロード タブでは必須です。グローバル タブでは、このステップをスキップできます。
-
Sidecar のインバウンドトラフィックインターセプトポリシー の右側で、透過型プロキシポリシー を選択し、設定項目の更新 をクリックします。
-
ワークロードを再デプロイして、サイドカープロキシの設定を有効にします。
-
次のコマンドを実行して、設定したサイドカーのインバウンドトラフィックインターセプトポリシーを表示します。
kubectl get pod -n <namespace> <pod-name> -o yaml
期待される出力:
apiVersion: v1
kind: Pod
...
spec:
containers:
- args:
...
- name: PROXY_CONFIG
value: >-
{..."interceptionMode":"TPROXY",...}
- name: ISTIO_META_POD_PORTS
value: |-
[
]
...
name: istio-proxy
...
initContainers:
- args:
- istio-iptables
- '-p'
- '15001'
- '-z'
- '15006'
- '-u'
- '1337'
- '-m'
- TPROXY
...
name: istio-init
...
Pod 内の istio-proxy コンテナのサイドカー環境変数には "interceptionMode":"TPROXY" が記録され、istio-init コンテナも TPROXY パラメーターを使用して初期化コマンドを実行します。これは、Sidecar のインバウンドトラフィックインターセプトポリシー 構成が有効になったことを示しています。
ログレベル
ログレベルの説明と設定例を展開して表示
パラメーターの説明
このパラメーターは、サイドカープロキシコンテナのログレベルを指定します。デフォルトでは、サイドカープロキシは info ログレベルを使用します。サイドカープロキシからより多くの、またはより少ないログ情報を取得するために、サイドカープロキシのログレベルを info、debug、trace、warning、error、critical、off の 7 つのレベルのいずれかに変更できます。
設定例
-
Sidecar プロキシ設定 ページで、対象のサイドカープロキシ構成レベルのタブをクリックし、モニタリング統計 をクリックします。
-
(オプション) モニタリング統計 セクションで、ログレベル を選択します。
このステップは、名前空間 タブと ワークロード タブでは必須です。グローバル タブでは、このステップをスキップできます。
-
ログレベル の右側で、[error] を選択し、設定項目の更新 をクリックします。
この設定は、サイドカープロキシが error レベルでログを出力し、error レベル以上のログのみが出力されることを示します。
-
ワークロードを再デプロイして、サイドカープロキシの設定を有効にします。
-
次のコマンドを実行して、設定したサイドカープロキシのログレベルを表示します。
kubectl get pod -n <namespace> <pod-name> -o yaml
期待される出力:
apiVersion: v1
kind: Pod
...
spec:
containers:
- args:
- proxy
- sidecar
- '--domain'
- $(POD_NAMESPACE).svc.cluster.local
- '--proxyLogLevel=error'
...
name: istio-proxy
...
istio-proxy コンテナの実行時パラメーターは --proxyLogLevel=error に設定されています。これは、ログレベル 構成が有効になったことを示しています。
proxyStatsMatcher
proxyStatsMatcher の説明と設定例を展開して表示
パラメーターの説明
このパラメーターは、サイドカープロキシによって報告されるカスタム Envoy 統計を定義します。Envoy はサイドカープロキシの技術的実装であり、一連のメトリックを収集して報告できます。しかし、Service Mesh は、サイドカープロキシのパフォーマンスオーバーヘッドを削減するために、デフォルトで一部のメトリックの収集と公開のみを有効にします。このパラメーターを使用して、プレフィックスマッチング、サフィックスマッチング、または正規表現マッチングによって、サイドカープロキシが収集および報告する必要がある追加のメトリックを指定できます。
設定例
-
Sidecar プロキシ設定 ページで、対象のサイドカープロキシ構成レベルのタブをクリックし、モニタリング統計 をクリックします。
-
モニタリング統計 セクションで、[proxyStatsMatcher] を選択し、正規表現マッチング を選択して .*outlier_detection.* に設定します。
この設定により、サイドカープロキシのサーキットブレーカーメトリクスの収集が追加されます。
-
ワークロードを再デプロイして、サイドカープロキシの設定を有効にします。
-
次のコマンドを実行して、設定したサイドカープロキシのカスタム統計を表示します。
kubectl get pod -n <namespace> <pod-name> -o yaml
期待される出力:
apiVersion: v1
kind: Pod
...
spec:
containers:
- args:
...
- name: PROXY_CONFIG
value: >-
{..."proxyStatsMatcher":{"inclusionRegexps":[".*outlier_detection.*"]},...}
...
Pod 内の istio-proxy コンテナのサイドカー環境変数内のカスタム統計が更新されています。これは、proxyStatsMatcher の設定が有効になっていることを示します。
Envoy 実行時パラメーター
Envoy 実行時パラメーターの説明と設定例を展開して表示
パラメーターの説明
このパラメーターは、サイドカープロキシコンテナ内の Envoy プロセスの実行時パラメーターを指定します。次の実行時パラメーターを設定できます。
|
パラメーター
|
説明
|
|
ダウンストリーム接続の制限
|
デフォルトでは、サイドカープロキシはダウンストリーム接続数に制限がなく、悪意のある活動に悪用される可能性があります。詳細については、「セキュリティ速報 2020-007」をご参照ください。ビジネス要件に基づいて、サイドカープロキシが受け入れることができるダウンストリーム接続の最大数を設定できます。
|
設定例
-
Sidecar プロキシ設定 ページで、ターゲットのサイドカープロキシ構成レベルのタブをクリックし、次に Sidecar プロキシの環境変数管理 をクリックします。
-
(任意) Envoy ランタイムパラメーター セクションで、ダウンストリーム接続数制限 の右側にある入力フィールドに 5000 を入力し、構成の更新 をクリックします。
-
ワークロードを再デプロイして、サイドカープロキシの設定を有効にします。
-
次のコマンドを実行して、設定したサイドカープロキシの環境変数を表示します。
kubectl get pod -n <namespace> <pod-name> -o yaml
期待される出力:
apiVersion: v1
kind: Pod
...
spec:
containers:
- args:
...
env:
- name: PROXY_CONFIG
value: >-
{"concurrency":2,"configPath":"/etc/istio/proxy","discoveryAddress":"istiod-1-22-6.istio-system.svc:15012","holdApplicationUntilProxyStarts":true,"interceptionMode":"REDIRECT","proxyMetadata":{"BOOTSTRAP_XDS_AGENT":"false","DNS_AGENT":"","EXIT_ON_ZERO_ACTIVE_CONNECTIONS":"true"},"runtimeValues":{"overload.global_downstream_max_connections":"5000"},"terminationDrainDuration":"5s","tracing":{"zipkin":{"address":"zipkin.istio-system:9411"}}}
name: istio-proxy
...
Pod 内の istio-proxy コンテナのサイドカー設定の PROXY_CONFIG 環境変数に "runtimeValues":{"overload.global_downstream_max_connections":"5000"} フィールドが追加されています。これは、Envoy 実行時パラメーターの設定が有効になっていることを示します。