コンテンツにスキップ

ConfigMap系@リソース定義

はじめに

本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。


01. 専用ConfigMap

Istioの各コンポーネントの機密でない変数やファイルを管理する。


02 istio-ca-root-cert

istio-ca-root-certとは

Istiodコントロールプレーン (discoveryコンテナ) による中間認証局を使用する場合に、istio-ca-root-certを自動的に作成する。

ルート認証局から発行されたCA証明書 (ルート証明書) をもち、各マイクロサービスのPodにマウントされる。

各マイクロサービスに配布された証明書を検証するために使用される。

Istioコントロールプレーンのログから、CA証明書の作成を確認できる。

2025-01-26T11:21:09.391516Z info    initializing Istiod DNS certificates host: istiod-1-24-2.istio-system.svc, custom host:
2025-01-29T11:43:03.694183Z info    Generating istiod-signed cert for [istio-pilot.istio-system.svc istiod-1-24-2.istio-system.svc istiod-remote.istio-system.svc istiod.istio-system.svc]:

-----BEGIN CERTIFICATE-----
*****
-----END CERTIFICATE-----

istio_istio-ca-root-cert


root-cert.pem

▼ root-cert.pemとは

CA証明書 (ルート証明書) を設定する。

kind: ConfigMap
apiVersion: v1
metadata:
  name: istio-ca-root-cert
  namespace: app # マイクロサービスのNamespace
data:
  root-cert.pem: |
    -----BEGIN CERTIFICATE-----
    *****
    -----END CERTIFICATE-----


03. istio-cni-config

kind: ConfigMap
apiVersion: v1
metadata:
  name: istio-cni-config
  namespace: kube-system
data:
  CURRENT_AGENT_VERSION: 1.24.2
  AMBIENT_ENABLED: "true"
  AMBIENT_DNS_CAPTURE: "false"
  AMBIENT_IPV6: "true"
  CHAINED_CNI_PLUGIN: "true"
  EXCLUDED_NAMESPACES: kube-system
  REPAIR_ENABLED: "true"
  REPAIR_LABEL_PODS: "false"
  REPAIR_DELETE_PODS: "false"
  REPAIR_REPAIR_PODS: "true"
  REPAIR_INIT_CONTAINER_NAME: istio-validation
  REPAIR_BROKEN_POD_LABEL_KEY: cni.istio.io/uninitialized
  REPAIR_BROKEN_POD_LABEL_VALUE: "true"


04. istio-mesh-cm (istio-<バージョン値>)

istio-mesh-cmとは

Istiodコントロールプレーン (discoveryコンテナ) のため、全てのistio-proxyコンテナにグローバルに設定する変数を管理する。

apiVersion: v1
kind: ConfigMap
metadata:
  name: istio-mesh-cm
  namespace: istio-system
data:
  mesh: |

代わりに、IstioOperatorの.spec.meshConfigキーで定義することもできるが、これは非推奨である。

# これは非推奨
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
  name: istio-operator
  namespace: istio-system
spec:
  meshConfig: ...


accessLogEncoding

▼ accessLogEncodingとは

istio-proxyコンテナで作成するアクセスログのファイル形式を設定する。

apiVersion: v1
kind: ConfigMap
metadata:
  name: istio-mesh-cm
  namespace: istio-system
data:
  mesh: |
    accessLogEncoding: JSON


accessLogFile

▼ accessLogFileとは

istio-proxyコンテナで作成するアクセスログの出力先を設定する。

設定しないと、Envoyはアクセスログを出力しない。

apiVersion: v1
kind: ConfigMap
metadata:
  name: istio-mesh-cm
  namespace: istio-system
data:
  mesh: |
    accessLogFile: /dev/stdout


caCertificates

▼ caCertificatesとは

ルート認証局のCA証明書や、中間認証局名を設定する。

apiVersion: v1
kind: ConfigMap
metadata:
  name: istio-mesh-cm
  namespace: istio-system
data:
  mesh: |
    defaultConfig:
      proxyMetadata:
        ISTIO_META_CERT_SIGNER: istio-system
    caCertificates:
        # ルート認証局のCA証明書 
      - pem: |
          Ci0tLS0tQk...
        # 中間認証局名
        certSigners:
          - clusterissuers.cert-manager.io/istio-system
          - clusterissuers.cert-manager.io/foo
          - clusterissuers.cert-manager.io/bar


discoverySelectors

▼ discoverySelectorsとは

ENHANCED_RESOURCE_SCOPINGを有効化し、IstiodコントロールプレーンがwatchするNamespaceを限定する。

これは、サイドカーをインジェクションするistio.io/revキーよりも強い影響力がある。

例えば、サイドカーをインジェクションしているNamespaceのみをwatchすることにより、Istiodコントロールプレーンの負荷を下げられる。

apiVersion: v1
kind: ConfigMap
metadata:
  name: istio-mesh-cm
  namespace: istio-system
data:
  mesh: |
    discoverySelectors:
      - matchLabels:
          istio.io/rev: default

▼ REGISTRY_ONLY

サービスメッシュ外へのリクエストの宛先をBlackHoleCluster (502 Bad Gatewayで通信負荷) として扱う。

また、ServiceEntryとして登録した宛先には固有の名前がつく。

サービスメッシュ外への通信のたびにServiceEntryを作成しなければならず、少しめんどくさくなる。

apiVersion: v1
kind: ConfigMap
metadata:
  name: istio-mesh-cm
  namespace: istio-system
data:
  mesh: |
    outboundTrafficPolicy:
      mode: REGISTRY_ONLY


defaultHttpRetryPolicy

▼ defaultHttpRetryPolicyとは

リトライポリシーのデフォルト値を設定する。

ただし、.spec.http[*].retries.perTryTimeoutキーは個別のVirtualServiceで設定する必要がある。

apiVersion: v1
kind: ConfigMap
metadata:
  name: istio-mesh-cm
  namespace: istio-system
data:
  mesh: |
    defaultHttpRetryPolicy: 
      attempts: 3
      retryOn: connect-failure,deadline-exceeded,refused-stream,unavailable

▼ アウトバウンド時のリトライ条件

istio-proxyコンテナのアウトバウンド時のリトライ条件は以下である。

宛先に通信が届いておらず、リトライすると問題が解決する可能性があるステータスコードは、リトライしてもよい。

  • リトライすると解決する可能性がある
  • リクエストを繰り返しても状態が変わらずに冪等性がある (二重処理にならない) がある

503resetによるリトライは冪等性に問題があり、設定に注意が必要である。

istio_inbound-retry_reset

HTTP/1.1のステータスコード マイクロサービスに通信が届いている リトライしてもよい リトライ条件
connect-failure ⭕️ istio-proxyコンテナからのアウトバウンド通信のレスポンスで、接続タイムアウト (Connection timeout) が起こった。
gateway-error ⭕️ △ (システムによってはリトライによって、冪等性のない二重処理が起こる可能性がある) istio-proxyコンテナからのアウトバウンド通信のレスポンスで、Gateway系ステータスコード (502503504) が返信された。
retriable-status-codes (任意のステータスコードを設定する) ⭕️ リトライによって、冪等性のない二重処理が起こる可能性がある。 istio-proxyコンテナからのアウトバウンド通信のレスポンスで、指定したHTTPステータスであった。EXCLUDE_UNSAFE_503_FROM_DEFAULT_RETRY変数をtrueにすると、元はデフォルト値であった503を設定できる。
reset ⭕️ リトライによって、冪等性のない二重処理が起こる可能性がある。 istio-proxyコンテナからのアウトバウンド通信で接続切断/接続リセット/読み取りタイムアウト (Read timeout) が起こった。
HTTP/2のステータスコード マイクロサービスに通信が届いている リトライしてもよい リトライ条件
cancelled ⭕️ 送信元がリクエストを切断しているため、リトライが不要の可能性がある。 istio-proxyコンテナからのアウトバウンド通信のレスポンスで、gRPCステータスコードがCancelledであった。
deadline-exceeded ⭕️ istio-proxyコンテナからのアウトバウンド通信のレスポンスで、gRPCステータスコードがDeadlineExceededであった。
refused-stream ⭕️ 同時接続上限数を超過するストリームをマイクロサービスが作成しようとした。
resource-exhausted ⭕️ istio-proxyコンテナからのアウトバウンド通信のレスポンスで、gRPCステータスコードがResourceExhaustedであった。
unavailable ⭕️ istio-proxyコンテナからのアウトバウンド通信のレスポンスで、gRPCステータスコードがUnavailableであった。

▼ インバウンド時のリトライ条件

istio-proxyコンテナのインバウンド時のリトライ条件は以下である。

執筆時点 (2025/02/26) では、ENABLE_INBOUND_RETRY_POLICY変数をtrue (デフォルト値) にすると使用できる。

HTTP/1.1のステータスコード マイクロサービスに通信が届いている リトライしてもよい 理由
reset-before-request × istio-proxyコンテナへのインバウンド通信で、マイクロサービスにリクエストを転送できなかった。


defaultProviders

▼ defaultProvidersとは

extensionProvidersキーで定義したもののうち、デフォルトで使用するプロバイダーを設定する。

Envoyを使用してアクセスログを収集する場合、.mesh.defaultProviders.accessLoggingキーには何も設定しなくてよい。

また、Istioがデフォルトで用意している分散トレースツールを使用する場合も同様に不要である。

apiVersion: v1
kind: ConfigMap
metadata:
  name: istio-mesh-cm
  namespace: istio-system
data:
  mesh: |
    defaultProviders:
       metrics:
         - prometheus
       accessLogging:
         - stackdriver
       tracing:
         - opentelemetry-grpc
    enableTracing: true
    extensionProviders:
      - name: opentelemetry-grpc
        opentelemetry:
          # OpenTelemetry Collectorを宛先として設定する
          service: opentelemetry-collector.foo-namespace.svc.cluster.local
          # gRPC用のエンドポイントを設定する
          port: 4317

Envoyのアクセスログの場合、代わりに.mesh.accessLogEncodingキーと.mesh.accessLogFileキーを設定する。

apiVersion: v1
kind: ConfigMap
metadata:
  name: istio-mesh-cm
  namespace: istio-system
data:
  mesh: |
    accessLogEncoding: JSON
    accessLogFile: /dev/stdout

分散トレースの場合、代わりに.mesh.enableTracingキーと.mesh.extensionProvidersキーを設定する。

apiVersion: v1
kind: ConfigMap
metadata:
  name: istio-mesh-cm
  namespace: istio-system
data:
  mesh: |
    enableTracing: true
    extensionProviders:
      - name: opentelemetry-grpc
        opentelemetry:
          service: opentelemetry-collector.foo-namespace.svc.cluster.local
          port: 4317


enablePrometheusMerge

▼ enablePrometheusMergeとは

アプリケーションのメトリクスをistio-proxyコンテナを介して取得できるようにする (マージする) かどうかを設定する。

apiVersion: v1
kind: ConfigMap
metadata:
  name: istio-mesh-cm
  namespace: istio-system
data:
  mesh: |
    enablePrometheusMerge: true


enableTracing

▼ enableTracingとは

istio-proxyコンテナでトレースIDとスパンIDを作成するか否かを設定する。

apiVersion: v1
kind: ConfigMap
metadata:
  name: istio-mesh-cm
  namespace: istio-system
data:
  mesh: |
    enableTracing: true


inboundClusterStatName

apiVersion: v1
kind: ConfigMap
metadata:
  name: istio-mesh-cm
  namespace: istio-system
data:
  mesh: |
    inboundClusterStatName: inbound|%SERVICE_PORT%|%SERVICE_PORT_NAME%|%SERVICE_FQDN%


ingressSelector

▼ ingressSelectorとは

全てのistio-proxyコンテナに関して、使用するGatewayの.metadata.labels.istioキーの値を設定する。

デフォルトでは、Ingressとしてingressgatewayが設定される。

apiVersion: v1
kind: ConfigMap
metadata:
  name: istio-mesh-cm
  namespace: istio-system
data:
  mesh: |
    ingressSelector: ingressgateway


ingressService

▼ ingressServiceとは

全てのistio-proxyコンテナに関して、使用するIngress Controllerの.metadata.labels.istioキーの値を設定する。

デフォルトでは、Ingressとしてingressgatewayが設定される。

apiVersion: v1
kind: ConfigMap
metadata:
  name: istio-mesh-cm
  namespace: istio-system
data:
  mesh: |
    ingressService: ingressgateway


proxyHttpPort

▼ proxyHttpPortとは

全てのistio-proxyコンテナに関して、Cluster外からのインバウンド通信 (特にHTTPプロトコル) を待ち受けるポート番号を設定する。

apiVersion: v1
kind: ConfigMap
metadata:
  name: istio-mesh-cm
  namespace: istio-system
data:
  mesh: |
    proxyHttpPort: 80


outboundClusterStatName

apiVersion: v1
kind: ConfigMap
metadata:
  name: istio-mesh-cm
  namespace: istio-system
data:
  mesh: |
    outboundClusterStatName: outbound|%SERVICE_PORT%|%%SUBSET_NAME%%|%SERVICE_FQDN%


outboundTrafficPolicy

▼ outboundTrafficPolicyとは

サービスメッシュ外へのリクエストの宛先の種類 (PassthroughClusterBlackHoleCluster) を設定する。

▼ ALLOW_ANY (デフォルト)

サービスメッシュ外へのリクエストの宛先をPassthroughClusterとして扱う。

また、ServiceEntryとして登録した宛先には固有の名前がつく。

apiVersion: v1
kind: ConfigMap
metadata:
  name: istio-mesh-cm
  namespace: istio-system
data:
  mesh: |
    outboundTrafficPolicy:
      mode: ALLOW_ANY


proxyListenPort

▼ proxyListenPortとは

全てのistio-proxyコンテナに関して、他マイクロサービスからのインバウンド通信を待ち受けるポート番号を設定する。

apiVersion: v1
kind: ConfigMap
metadata:
  name: istio-mesh-cm
  namespace: istio-system
data:
  mesh: |
    proxyListenPort: 80


04-02. defaultConfig

defaultConfigとは

Istioの全てのコンポーネントに適用する変数のデフォルト値を設定する。

他にProxyConfigの.spec.environmentVariablesキー、Podの.metadata.annotations.proxy.istio.io/configキーでも設定できる。

ProxyConfigが最優先であり、これらの設定はマージされる。

.meshConfig.defaultConfigキーにデフォルト値を設定しておき、ProxyConfigでNamespaceやマイクロサービスPodごとに上書きするのがよい。

3つの箇所で設定できる。

meshConfig:
  defaultConfig:
    discoveryAddress: istiod:15012
annotations:
  proxy.istio.io/config: |
    discoveryAddress: istiod:15012
apiVersion: networking.istio.io/v1beta1
kind: ProxyConfig
metadata:
  name: foo-proxyconfig
spec:
  discoveryAddress: istiod:15012


controlPlaneAuthPolicy

データプレーン (istio-proxyコンテナ) とコントロールプレーン間の通信に相互TLSを実施する。

apiVersion: v1
kind: ConfigMap
metadata:
  name: istio-mesh-cm
  namespace: istio-system
data:
  mesh: |
    defaultConfig:
      controlPlaneAuthPolicy: MUTUAL_TLS
apiVersion: networking.istio.io/v1beta1
kind: ProxyConfig
metadata:
  name: foo-proxyconfig
spec:
  controlPlaneAuthPolicy: MUTUAL_TLS

discoveryAddress

apiVersion: v1
kind: ConfigMap
metadata:
  name: istio-mesh-cm
  namespace: istio-system
data:
  mesh: |
    defaultConfig:
      discoveryAddress: istiod-<リビジョン番号>.istio-system.svc:15012
apiVersion: networking.istio.io/v1beta1
kind: ProxyConfig
metadata:
  name: foo-proxyconfig
spec:
  discoveryAddress: istiod-<リビジョン番号>.istio-system.svc:15012


drainDuration

apiVersion: v1
kind: ConfigMap
metadata:
  name: istio-mesh-cm
  namespace: istio-system
data:
  mesh: |
    defaultConfig:
      drainDuration: 45s
apiVersion: networking.istio.io/v1beta1
kind: ProxyConfig
metadata:
  name: foo-proxyconfig
spec:
  drainDuration: 45s


envoyAccessLogService

Envoyのアクセスログを、標準出力に出力するのではなく宛先 (例:レシーバー) に送信する。

apiVersion: v1
kind: ConfigMap
metadata:
  name: istio-mesh-cm
  namespace: istio-system
data:
  mesh: |
    enableEnvoyAccessLogService: true
    defaultConfig:
      envoyAccessLogService: 
        address: <Envoyのアクセスログの宛先Service名>:15000
        # Istioコントロールプレーンをルート認証局とする
        tlsSettings: ISTIO_MUTUAL
        # TCP KeepAliveを実施する
        tcpKeepalive:
          probes: 9
          time: 2
          interval: 75


envoyMetricsService

Envoyのメトリクスを、Prometheusにスクレイピングしてもらうのではなく宛先 (例:レシーバー) に送信する。

apiVersion: v1
kind: ConfigMap
metadata:
  name: istio-mesh-cm
  namespace: istio-system
data:
  mesh: |
    # enableEnvoyMetricsService: true という設定がありそうだが、ドキュメントに記載がない
    defaultConfig:
      envoyMetricsService: 
        address: <Envoyのメトリクスの宛先Service名>:15000
        # Istioコントロールプレーンをルート認証局とする
        tlsSettings: ISTIO_MUTUAL
        # TCP KeepAliveを実施する
        tcpKeepalive:
          probes: 9
          time: 2
          interval: 75


holdApplicationUntilProxyStarts

istio-proxyコンテナが、必ずマイクロサービスよりも先に起動するか否かを設定する。

apiVersion: v1
kind: ConfigMap
metadata:
  name: istio-mesh-cm
  namespace: istio-system
data:
  mesh: |
    defaultConfig:
      holdApplicationUntilProxyStarts: true
apiVersion: networking.istio.io/v1beta1
kind: ProxyConfig
metadata:
  name: foo-proxyconfig
spec:
  holdApplicationUntilProxyStarts: true

オプションを有効化すると、istio-proxyコンテナの.spec.containers[*].lifecycle.postStart.exec.commandキーに、pilot-agent -waitコマンドが挿入される。

.spec.containers[*].lifecycle.preStop.exec.commandキーへの自動設定は、EXIT_ON_ZERO_ACTIVE_CONNECTIONS変数で対応する。

...

spec:
  containers:
    - name: istio-proxy

      ...

      lifecycle:
        postStart:
          exec:
            command: |
              pilot-agent wait

...


image

istio-proxyコンテナのコンテナイメージのタイプを設定する。

これは、ConfigMapではなくProxyConfigでも設定できる。

distroless型を選ぶと、istio-proxyコンテナにログインできなくなり、より安全なイメージになる。

一方で、デバッグしにくくなる。

apiVersion: v1
kind: ConfigMap
metadata:
  name: istio-mesh-cm
  namespace: istio-system
data:
  mesh: |
    defaultConfig:
      image:
        imageType: distroless

istio-cniでも、Helmチャートで別に設定すれば、distroless型を選べる。


privateKeyProvider

apiVersion: v1
kind: ConfigMap
metadata:
  name: istio-mesh-cm
  namespace: istio-system
data:
  mesh: |
    defaultConfig:
      privateKeyProvider:


proxyHeaders

デフォルト値はtrueである。

x-envoyヘッダーを有効化するか否かを設定する。

例えば、接続プール上限超過によるサーキットブレイカーが起こったことを示すx-envoy-overloadedヘッダーがある。

apiVersion: v1
kind: ConfigMap
metadata:
  name: istio-mesh-cm
  namespace: istio-system
data:
  mesh: |
    defaultConfig:
      proxyHeaders:
        envoyDebugHeaders: 
          forwardedClientCert: SANITIZE
        server:
          disabled: true
        requestId:
          disabled: true
        attemptCount:
          disabled: true
        envoyDebugHeaders:
          disabled: true
        metadataExchangeHeaders:
          mode: IN_MESH


proxyMetadata

istio-proxyコンテナに環境変数を設定する。

apiVersion: v1
kind: ConfigMap
metadata:
  name: istio-mesh-cm
  namespace: istio-system
data:
  mesh: |
    defaultConfig:
      proxyMetadata:
        # ここに環境変数を設定する
apiVersion: networking.istio.io/v1beta1
kind: ProxyConfig
metadata:
  name: foo-proxyconfig
spec:
  proxyMetadata: ...


rootNamespace

apiVersion: v1
kind: ConfigMap
metadata:
  name: istio-mesh-cm
  namespace: istio-system
data:
  mesh: |
    defaultConfig:
      rootNamespace: istio-system
apiVersion: networking.istio.io/v1beta1
kind: ProxyConfig
metadata:
  name: foo-proxyconfig
spec:
  rootNamespace: istio-system


tracing (非推奨)

いずれのトレース仕様 (例:Zipkin、Datadog、LightStepなど) でトレースIDとスパンIDを作成するかを設定する。

ZipkinとJaegerはトレースコンテキスト仕様が同じであるため、zipkinパッケージをJaegerのクライアントとしても使用できる。

.mesh.defaultConfig.enableTracingキーも有効化する必要がある。

apiVersion: v1
kind: ConfigMap
metadata:
  name: istio-mesh-cm
  namespace: istio-system
data:
  mesh: |
    defaultConfig:
      enableTracing: true
      tracing:
        sampling: 100
        zipkin:
          address: "jaeger-collector.observability:9411"

ただし、非推奨であるためextensionProvidersキーを使用した方が良い

apiVersion: v1
kind: ConfigMap
metadata:
  name: istio-mesh-cm
  namespace: istio-system
data:
  mesh: |
    defaultConfig:
      tracing: {}
    extensionProviders:
      ...


tracingServiceName

マイクロサービス名を設定する。

マイクロサービスがバージョニングされている場合に、マイクロサービスの正式名 (canonical-name) でグループ化できる。

apiVersion: v1
kind: ConfigMap
metadata:
  name: istio-mesh-cm
  namespace: istio-system
data:
  mesh: |
    defaultConfig:
      tracingServiceName: foo
apiVersion: networking.istio.io/v1beta1
kind: ProxyConfig
metadata:
  name: foo-proxyconfig
spec:
  tracingServiceName: foo


trustDomain

相互TLSを採用している場合に、送信元として許可する信頼ドメインを設定する。

例えば、信頼ドメインはServiceAccountごとに異なる。

apiVersion: v1
kind: ConfigMap
metadata:
  name: istio-mesh-cm
  namespace: istio-system
data:
  mesh: |
    defaultConfig:
      trustDomain: cluster.local
apiVersion: networking.istio.io/v1beta1
kind: ProxyConfig
metadata:
  name: foo-proxyconfig
spec:
  trustDomain: cluster.local


04-03. defaultConfig.proxyMetadata

BOOTSTRAP_XDS_AGENT

*実装例*

apiVersion: v1
kind: ConfigMap
metadata:
  name: istio-mesh-cm
  namespace: istio-system
data:
  mesh: |
    defaultConfig:
      proxyMetadata:
        BOOTSTRAP_XDS_AGENT: "true"


ENABLE_DEFERRED_CLUSTER_CREATION

pilot-discoveryコマンドでも設定できるため、そちらを参照せよ。

*実装例*

apiVersion: v1
kind: ConfigMap
metadata:
  name: istio-mesh-cm
  namespace: istio-system
data:
  mesh: |
    defaultConfig:
      proxyMetadata:
        ENABLE_DEFERRED_CLUSTER_CREATION: "true"


EXCLUDE_UNSAFE_503_FROM_DEFAULT_RETRY

pilot-discoveryコマンドでも設定できるため、そちらを参照せよ。

*実装例*

apiVersion: v1
kind: ConfigMap
metadata:
  name: istio-mesh-cm
  namespace: istio-system
data:
  mesh: |
    defaultConfig:
      proxyMetadata:
        EXCLUDE_UNSAFE_503_FROM_DEFAULT_RETRY: "true"


ENABLE_INBOUND_RETRY_POLICY

pilot-discoveryコマンドでも設定できるため、そちらを参照せよ。

*実装例*

apiVersion: v1
kind: ConfigMap
metadata:
  name: istio-mesh-cm
  namespace: istio-system
data:
  mesh: |
    defaultConfig:
      proxyMetadata:
        ENABLE_INBOUND_RETRY_POLICY: "true"


EXIT_ON_ZERO_ACTIVE_CONNECTIONS

pod_terminating_process_istio-proxy

デフォルト値はfalseである。

istio-proxyコンテナへのリクエストが無くなってから、Envoyのプロセスを終了する。

具体的には、downstream_cx_activeメトリクスの値 (アクティブな接続数) を監視し、0になり次第、Envoyのプロセスを終了する。

オプションを有効化すると、istio-proxyコンテナの.spec.containers[*].lifecycle.preStop.exec.commandキーに、sleepコマンドが挿入される。

.spec.containers[*].lifecycle.postStart.exec.commandキーへの自動設定は、.mesh.defaultConfig.holdApplicationUntilProxyStartsキーで対応する。

*実装例*

apiVersion: v1
kind: ConfigMap
metadata:
  name: istio-mesh-cm
  namespace: istio-system
data:
  mesh: |
    defaultConfig:
      proxyMetadata:
        EXIT_ON_ZERO_ACTIVE_CONNECTIONS: "false"


ISTIO_META_CERT_SIGNER

デフォルトで"" (空文字) である。

*実装例*

apiVersion: v1
kind: ConfigMap
metadata:
  name: istio-mesh-cm
  namespace: istio-system
data:
  mesh: |
    defaultConfig:
      proxyMetadata:
        ISTIO_META_CERT_SIGNER: ""


ISTIO_META_DNS_AUTO_ALLOCATE

デフォルト値はfalseである。

IPアドレスが設定されていないServiceEntryに対して、IPアドレスを自動的に設定する。

ISTIO_META_DNS_CAPTUREを有効にしないと、ISTIO_META_DNS_AUTO_ALLOCATEは機能しない。

PILOT_ENABLE_IP_AUTOALLOCATEと同じであり、Istio 1.25以降で、PILOT_ENABLE_IP_AUTOALLOCATEの方が推奨になった。

*実装例*

apiVersion: v1
kind: ConfigMap
metadata:
  name: istio-mesh-cm
  namespace: istio-system
data:
  mesh: |
    defaultConfig:
      proxyMetadata:
        ISTIO_META_DNS_AUTO_ALLOCATE: "false"
apiVersion: networking.istio.io/v1
kind: ServiceEntry
metadata:
  name: external-address
spec:
  hosts:
    - address.internal
  ports:
    - name: http
      number: 80
      protocol: HTTP


ISTIO_META_DNS_CAPTURE

デフォルト値はfalseである。

マイクロサービスからのアウトバウンド通信時に、Pod内のistio-proxyコンテナやztunnelプロキシをDNSプロキシとして使用できるようになる。

もしistio-proxyコンテナやztunnelプロキシがドメインに紐づくIPアドレスのキャッシュを持つ場合、マイクロサービスにレスポンスを返信する。

一方でキャッシュを持たない場合、istio-proxyコンテナやztunnelプロキシは宛先Podにリクエストを送信する。

なお、DNSキャッシュのドメインとIPアドレスを固定で紐付けることもできる。

▼ 固定 (HTTPリクエスト)

ServiceEntryでHTTPリクエストを受信した場合に、DNSキャッシュのドメインとIPアドレスを固定で紐づける。

apiVersion: v1
kind: ConfigMap
metadata:
  name: istio-mesh-cm
  namespace: istio-system
data:
  mesh: |
    defaultConfig:
      proxyMetadata:
        ISTIO_META_DNS_CAPTURE: "true"
apiVersion: networking.istio.io/v1
kind: ServiceEntry
metadata:
  name: external-address
spec:
  hosts:
    - address.internal
  ports:
    - name: http
      number: 80
      protocol: HTTP

▼ 動的 (HTTPリクエスト)

ServiceEntryでHTTPリクエストを受信した場合に、DNSキャッシュのドメインとIPアドレスを動的に紐づける。

apiVersion: v1
kind: ConfigMap
metadata:
  name: istio-mesh-cm
  namespace: istio-system
data:
  mesh: |
    defaultConfig:
      proxyMetadata:
        ISTIO_META_DNS_CAPTURE: "true"
apiVersion: networking.istio.io/v1
kind: ServiceEntry
metadata:
  name: external-address
spec:
  hosts:
    - address.internal
  addresses:
    - 198.51.100.1
  ports:
    - name: http
      number: 80
      protocol: HTTP

▼ 動的 (TCPリクエスト)

ServiceEntryで、TCPリクエストとして扱われるホストヘッダー持ち独自プロトコル (例:MySQLやRedis以外の非対応プロトコルなど) を受信した場合に、DNSキャッシュのドメインとIPアドレスを動的に紐づける。

注意点として、Istio EgressGatewayを経由してServiceEntryに至る場合には、この設定が機能しない。

Pod ➡️ Istio EgressGateway ➡️ ServiceEntry

Istio IngressGateway (厳密に言うとGateway) は、独自プロトコルをTCPプロコトルとして扱う。

そのため、受信した独自プロトコルリクエストにホストヘッダーがあったとしても、これを宛先に転送できない。

宛先が独自プロトコルリクエストのポート番号だけで宛先 (例:ServiceEntry、外部サーバーなど) を決めてしまう。

同じポート番号で待ち受ける複数のServiceEntryがあると、.spec.hostsキーを設定していたとしても、誤った方のServiceEntryを選ぶ可能性がある。

apiVersion: v1
kind: ConfigMap
metadata:
  name: istio-mesh-cm
  namespace: istio-system
data:
  mesh: |
    defaultConfig:
      proxyMetadata:
        ISTIO_META_DNS_CAPTURE: "true"
apiVersion: networking.istio.io/v1
kind: ServiceEntry
metadata:
  name: aws-aurora-endpoint
spec:
  hosts:
    - <AWS AuroraのDBクラスター名>.cluster-<id>.ap-northeast-1.rds.amazonaws.com
  ports:
    - name: cluster-endpoint
      number: 3306
      protocol: TCP
  resolution: DNS
---
apiVersion: networking.istio.io/v1
kind: ServiceEntry
metadata:
  name: aws-aurora-endpoint
spec:
  hosts:
    - <AWS AuroraのDBクラスター名>.cluster-ro-<id>.ap-northeast-1.rds.amazonaws.com
  ports:
    - name: reader-endpoint
      number: 3306
      protocol: TCP
  resolution: DNS


MINIMUM_DRAIN_DURATION

pod_terminating_process_istio-proxy

デフォルト値は5である (対応する.metadata.annotations.proxy.istio.io/config.terminationDrainDurationキーと同じ) 。

EXIT_ON_ZERO_ACTIVE_CONNECTIONS変数がtrueな場合にのみ設定できる。

falseの場合は、代わりに.metadata.annotations.proxy.istio.io/config.terminationDrainDurationを設定する。

istio-proxyコンテナ内のEnvoyプロセスは、終了時に接続のドレイン処理を実施する。

この接続のドレイン処理時間で、新しい接続を受け入れ続ける時間を設定する。

Podの.metadata.annotations.proxy.istio.io/config.drainDurationキーで起こるレースコンディションを解決するための設定で、同じ値を設定するとよい。

*実装例*

Envoyプロセスのドレイン処理5秒間に実施する。

apiVersion: v1
kind: ConfigMap
metadata:
  name: istio-mesh-cm
  namespace: istio-system
data:
  mesh: |
    defaultConfig:
      proxyMetadata:
        MINIMUM_DRAIN_DURATION: "10s"


PILOT_ENABLE_IP_AUTOALLOCATE

デフォルト値はtrueである。

ISTIO_META_DNS_AUTO_ALLOCATEと同じであり、Istio 1.25以降で、PILOT_ENABLE_IP_AUTOALLOCATEの方が推奨になった。

ISTIO_META_DNS_CAPTUREを有効にしないと、PILOT_ENABLE_IP_AUTOALLOCATEは機能しない。


04-05. extensionProviders (認証/認可系)

extensionProviders (認証/認可系) とは

AuthorizationPolicyによる認可処理を外部の認可プロバイダーに委譲する。


envoyExtAuthzHttp

▼ envoyExtAuthzHttpとは

外部の認可プロバイダーへの通信にHTTP/1.1プロトコルを使用する。

▼ OAuth2 Proxyの場合

OAuth2 Proxyを任意の認可プロバイダーの前段に置き、OAuth2 Proxyで認可プロバイダーを宛先に設定する。

*実装例*

apiVersion: v1
kind: ConfigMap
metadata:
  name: istio-mesh-cm
  namespace: istio-system
data:
  mesh: |
    extensionProviders:
      - name: OAuth2 Proxy
        envoyExtAuthzHttp:
          service: oauth2-proxy.foo-namespace.svc.cluster.local
          port: 80
        includeHeadersInCheck:
          - cookie
          - authorization

AuthorizationPolicyで、認可処理をOAuth2 Proxyに委譲できるようになる。

apiVersion: security.istio.io/v1
kind: AuthorizationPolicy
metadata:
  name: oauth2-proxy-authorization-policy
  namespace: istio-system
spec:
  action: CUSTOM
  provider:
    name: oauth2-proxy
  rules:
    # ルールは外部の認可プロバイダーに定義されている
    - to:
        - operation:
            paths: ["/login"]

▼ OpenAgent Policyの場合

OpenAgent Policyを外部の認可プロバイダーとして設定する。

実装例

▼ Keycloakの場合

Keycloakは、IDプロバイダーとしてだけでなく認可プロバイダーとしても使用できる。

ただし、前段にOAuth2 Proxyを置くことが一般的である。


envoyExtAuthzGrpc

認可プロバイダーへの通信にHTTP/2プロトコルを使用する。


04-06. extensionProviders (可観測系)

extensionProviders (可観測系) とは

監視バックエンドの宛先情報を設定する。

プロバイダーによって、いずれのテレメトリーを送信するのかが異なる。


datadog

▼ datadogとは

datadogのトレースコンテキスト仕様 (datadogの独自仕様) でトレースIDとスパンIDを作成する。

datadogエージェントの宛先情報をIstioに登録する必要があるため、これのPodをサービスメッシュ内に配置するか、サービスメッシュ外に配置してIstio EgressGatewayやServiceEntry経由で接続できるようにする。

ただ、datadogエージェントをサービスメッシュ内に配置すると、Telemetryリソースがdatadogエージェント自体の分散トレースを作成してしまうため、メッシュ外に配置するべきである。

.mesh.enableTracingキーも有効化する必要がある。

apiVersion: v1
kind: ConfigMap
metadata:
  name: istio-mesh-cm
  namespace: istio-system
data:
  mesh: |
    enableTracing: true
    extensionProviders:
      - name: datadog-http
        datadog:
          # datadogエージェントを宛先として設定する
          service: datadog-agent.foo-namespace.svc.cluster.local
          port: 8126
      - name: envoy-log
        envoyFileAccessLog

▼ Telemetryの定義

Datadogに送信するためには、.mesh.extensionProviders[*].datadogキーに設定した宛先情報を使用して、Telemetryを定義する必要がある。

分散トレースの設定は以下の通りである。

apiVersion: telemetry.istio.io/v1
kind: Telemetry
metadata:
  name: tracing-provider
  # サイドカーをインジェクションしている各Namespaceで作成する
  # もしistio-systemを指定した場合は、istio-proxyコンテナのある全てのNamespaceが対象になる
  namespace: foo
spec:
  # Datadogにスパンを送信させるPodを設定する
  selector:
    matchLabels:
      name: app
  tracing:
    - providers:
        # mesh.extensionProviders[*].nameキーで設定した名前
        - name: datadog-http
      randomSamplingPercentage: 100

アクセスログの設定は以下の通りである。

apiVersion: telemetry.istio.io/v1
kind: Telemetry
metadata:
  name: access-log-provider
  # サイドカーをインジェクションしている各Namespaceで作成する
  # もしistio-systemを指定した場合は、istio-proxyコンテナのある全てのNamespaceが対象になる
  namespace: foo
spec:
  # Datadogにアクセスログを送信させるPodを設定する
  selector:
    matchLabels:
      name: app
  # Envoyをアクセスログプロバイダーとして設定する
  accessLogging:
    - providers:
        # mesh.extensionProviders[*].nameキーで設定した名前
        - name: envoy-log


opentelemetry

▼ opentelemetryとは

OpenTelemetryのトレースコンテキスト仕様 (W3C Trace Context) でトレースIDとスパンIDを作成する。

OTLP形式のエンドポイントであればよいため、OpenTelemetry Collectorも指定できる。

OpenTelemetry Collectorの宛先情報をIstioに登録する必要があるため、これのPodをサービスメッシュ内に配置するか、サービスメッシュ外に配置してIstio EgressGatewayやServiceEntry経由で接続できるようにする。

ただ、OpenTelemetry Collectorをサービスメッシュ内に配置すると、TelemetryリソースがOpenTelemetry Collector自体の分散トレースを作成してしまうため、メッシュ外に配置するべきである。

.mesh.enableTracingキーも有効化する必要がある。

apiVersion: v1
kind: ConfigMap
metadata:
  name: istio-mesh-cm
  namespace: istio-system
data:
  mesh: |
    enableTracing: true
    extensionProviders:
      - name: opentelemetry-grpc
        opentelemetry:
          # OpenTelemetry Collectorを宛先として設定する
          service: opentelemetry-collector.foo-namespace.svc.cluster.local
          # gRPC用のエンドポイントを設定する
          port: 4317
      - name: opentelemetry-http
        opentelemetry:
          # OpenTelemetry Collectorを宛先として設定する
          service: opentelemetry-collector.foo-namespace.svc.cluster.local
          # HTTP用のエンドポイントを設定する
          port: 4318
            http:
            # HTTPの場合はパスが必要である
            path: /v1/traces
      - name: envoy-log
        envoyFileAccessLog:
          path: /dev/stdout

▼ Telemetryの定義

OpenTelemetryに送信するためには、.mesh.extensionProviders[*].opentelemetryキーに設定した宛先情報を使用して、Telemetryを定義する必要がある。

分散トレースの設定は以下の通りである。

apiVersion: telemetry.istio.io/v1
kind: Telemetry
metadata:
  name: tracing-provider
  # サイドカーをインジェクションしている各Namespaceで作成する
  # もしistio-systemを指定した場合は、istio-proxyコンテナのある全てのNamespaceが対象になる
  namespace: foo
spec:
  # Opentelemetryにスパンを送信させるPodを設定する
  selector:
    matchLabels:
      name: app
  tracing:
    - providers:
        # mesh.extensionProviders[*].nameキーで設定した名前
        - name: opentelemetry-grpc
      randomSamplingPercentage: 100

アクセスログの設定は以下の通りである。

apiVersion: telemetry.istio.io/v1
kind: Telemetry
metadata:
  name: access-log-provider
  # サイドカーをインジェクションしている各Namespaceで作成する
  # もしistio-systemを指定した場合は、istio-proxyコンテナのある全てのNamespaceが対象になる
  namespace: foo
spec:
  # OpenTelemetryにアクセスログを送信させるPodを設定する
  selector:
    matchLabels:
      name: app
  # Envoyをアクセスログプロバイダーとして設定する
  accessLogging:
    - providers:
        # mesh.extensionProviders[*].nameキーで設定した名前
        - name: envoy-log


prometheus

▼ prometheusとは

メトリクスの監視バックエンドとするPrometheusの宛先情報を設定する。


zipkin (jaeger)

▼ zipkin (jaeger) とは

Zipkinのトレースコンテキスト仕様 (B3コンテキスト) でトレースIDとスパンIDを作成する。

JaegerはB3をサポートしているため、Jaegerのクライアントとしても使用できる。

jaegerエージェントの宛先情報をIstioに登録する必要があるため、これのPodをサービスメッシュ内に配置するか、サービスメッシュ外に配置してIstio EgressGatewayやServiceEntry経由で接続できるようにする。

ただ、jaegerエージェントをサービスメッシュ内に配置すると、Telemetryリソースがjaegerエージェント自体の分散トレースを作成してしまうため、メッシュ外に配置するべきである。

.mesh.enableTracingキーも有効化する必要がある。

apiVersion: v1
kind: ConfigMap
metadata:
  name: istio-mesh-cm
  namespace: istio-system
data:
  mesh: |
    enableTracing: true
    extensionProviders:
      - name: jaeger-http
        jaeger:
          # jaegerエージェントを宛先として設定する
          service: jaeger-agent.foo-namespace.svc.cluster.local
          port: 8126
      - name: envoy-log
        envoyFileAccessLog:
          path: /dev/stdout

ZipkinやJaegerに送信するためには、.mesh.extensionProviders[*].zipkinキーに設定した宛先情報を使用して、Telemetryを定義する必要がある。

分散トレースの設定は以下の通りである。

apiVersion: telemetry.istio.io/v1
kind: Telemetry
metadata:
  name: tracing-provider
  # サイドカーをインジェクションしている各Namespaceで作成する
  # もしistio-systemを指定した場合は、istio-proxyコンテナのある全てのNamespaceが対象になる
  namespace: foo
spec:
  # Datadogにスパンを送信させるPodを設定する
  selector:
    matchLabels:
      name: app
  tracing:
    - providers:
        # mesh.extensionProviders[*].nameキーで設定した名前
        - name: jaeger-http
      randomSamplingPercentage: 100

アクセスログの設定は以下の通りである。

apiVersion: telemetry.istio.io/v1
kind: Telemetry
metadata:
  name: access-log-provider
  # サイドカーをインジェクションしている各Namespaceで作成する
  # もしistio-systemを指定した場合は、istio-proxyコンテナのある全てのNamespaceが対象になる
  namespace: foo
spec:
  # ZipkinやJaegerにアクセスログを送信させるPodを設定する
  selector:
    matchLabels:
      name: app
  # Envoyをアクセスログプロバイダーとして設定する
  accessLogging:
    - providers:
        # mesh.extensionProviders[*].nameキーで設定した名前
        - name: envoy-log


envoyFileAccessLog

▼ envoyFileAccessLogとは

Envoyのアクセスログを設定する。

apiVersion: v1
kind: ConfigMap
metadata:
  name: istio-mesh-cm
  namespace: istio-system
data:
  mesh: |
    extensionProviders:
      - name: envoy-grpc
        envoyFileAccessLog:
          logFormat:
            labels:
              access_log_type: '%ACCESS_LOG_TYPE%'
              bytes_received: '%BYTES_RECEIVED%'
              bytes_sent: '%BYTES_SENT%'
              downstream_transport_failure_reason: '%DOWNSTREAM_TRANSPORT_FAILURE_REASON%'
              downstream_remote_port: '%DOWNSTREAM_REMOTE_PORT%'
              duration: '%DURATION%'
              grpc_status: '%GRPC_STATUS(CAMEL_STRING)%'
              method: '%REQ(:METHOD)%'
              path: '%REQ(X-ENVOY-ORIGINAL-PATH?:PATH)%'
              protocol: '%PROTOCOL%'
              response_code: '%RESPONSE_CODE%'
              response_flags: '%RESPONSE_FLAGS%'
              start_time: '%START_TIME%'
              trace_id: '%TRACE_ID%'
              traceparent: '%REQ(TRACEPARENT)%'
              upstream_remote_port: '%UPSTREAM_REMOTE_PORT%'
              upstream_transport_failure_reason: '%UPSTREAM_TRANSPORT_FAILURE_REASON%'
              user_agent: '%REQ(USER-AGENT)%'
              x_forwarded_for: '%REQ(X-FORWARDED-FOR)%'


05. istio-sidecar-injector

config

▼ configとは

Istiodコントロールプレーン (discoveryコンテナ) のため、Istioのサイドカーインジェクションの変数やpatch処理の内容を管理する。

apiVersion: v1
kind: ConfigMap
metadata:
  name: istio-sidecar-injector-<リビジョン番号>
  namespace: istio-system
data:
  config: |
    defaultTemplates: [sidecar]
    policy: enabled
    alwaysInjectSelector: []
    neverInjectSelector:[]
    injectedAnnotations:
    template: "{{ Template_Version_And_Istio_Version_Mismatched_Check_Installation }}"
    templates:
      sidecar: |
        # Helmのテンプレート

▼ .templates.sidecar

istio-proxyコンテナの設定値をHelmテンプレートの状態で管理する。

Istioは、istio-sidecar-injectorの.valuesキーを使用してテンプレートを動的に完成させる。

apiVersion: v1
kind: ConfigMap
metadata:
  name: istio-sidecar-injector-<リビジョン番号>
  namespace: istio-system
data:
  config: |
    templates:
      sidecar: |

        ... # Helmのテンプレート


values

istio-sidecar-injectorの.templates.sidecarキーに出力する値をvaluesファイルとして管理する。

apiVersion: v1
kind: ConfigMap
metadata:
  name: istio-sidecar-injector-<リビジョン番号>
  namespace: istio-system
data:
  values: |
    { 
      global: { ... }
      revision: <リビジョン番号>
      sidecarInjectorWebhook: { ... }
    }


06. pilot-discoveryコマンド

CITADEL_SELF_SIGNED_CA_CERT_TTL

Istioコントロールプレーンが自身を署名するオレオレ証明書の有効期限を設定する。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: istiod
  namespace: istio-system
spec:
  template:
    containers:
      - name: discovery
        env:
          - name: CITADEL_SELF_SIGNED_CA_CERT_TTL
            value: 87600h0m0s


CITADEL_SELF_SIGNED_ROOT_CERT_CHECK_INTERVAL

Istioコントロールプレーンのオレオレ証明書の検証間隔を設定する。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: istiod
  namespace: istio-system
spec:
  template:
    containers:
      - name: discovery
        env:
          - name: CITADEL_SELF_SIGNED_ROOT_CERT_CHECK_INTERVAL
            value: 1h0m0s


CLUSTER_ID

Istiodのサービスレジストリを設定する。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: istiod
  namespace: istio-system
spec:
  template:
    containers:
      - name: discovery
        env:
          - name: CLUSTER_ID
            value: Kubernetes


DEFAULT_WORKLOAD_CERT_TTL

istio-proxyコンテナの証明書の有効期限を設定する。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: istiod
  namespace: istio-system
spec:
  template:
    containers:
      - name: discovery
        env:
          - name: DEFAULT_WORKLOAD_CERT_TTL
            value: 24h0m0s


ENABLE_DEFERRED_CLUSTER_CREATION

デフォルト値はtrueである。

リクエストがある場合にのみ、Envoyのクラスターを作成する。

実際に使用されていないEnvoyのクラスターを作成しないことにより、ハードウェアリソースを節約できる。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: istiod
  namespace: istio-system
spec:
  template:
    containers:
      - name: discovery
        env:
          - name: ENABLE_DEFERRED_CLUSTER_CREATION
            value: "true"


ENABLE_DEFERRED_STATS_CREATION

デフォルト値はtrueである。

Envoyの統計情報を遅延初期化する。

ハードウェアリソースを節約できる。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: istiod
  namespace: istio-system
spec:
  template:
    containers:
      - name: discovery
        env:
          - name: ENABLE_DEFERRED_STATS_CREATION
            value: "true"


ENABLE_ENHANCED_RESOURCE_SCOPING

デフォルト値はtrueである。

meshConfig.discoverySelectorsキーを使用できるようにする。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: istiod
  namespace: istio-system
spec:
  template:
    containers:
      - name: discovery
        env:
          - name: ENABLE_ENHANCED_RESOURCE_SCOPING
            value: "true"


ENABLE_ENHANCED_DESTINATIONRULE_MERGE

デフォルト値はtrueである。

複数のDestinationRuleで.spec.exportToキーの対象のNamespaceが同じ場合、これらの設定をマージして処理する。

もし対象のNamespaceが異なる場合、独立した設定として処理する。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: istiod
  namespace: istio-system
spec:
  template:
    containers:
      - name: discovery
        env:
          - name: ENABLE_ENHANCED_DESTINATIONRULE_MERGE
            value: "true"


ENABLE_INBOUND_RETRY_POLICY

デフォルト値はtrueである。

istio-proxyコンテナがインバウンド通信をマイクロサービスに送信するときのリトライ (執筆時点2025/02/26ではreset-before-requestのみ) を設定する。

今後は、宛先istio-proxyコンテナがマイクロサービスに対してリトライできるようになる。

istio-proxyコンテナ間の問題の切り分けがしやすくなる。

falseの場合、送信元istio-proxyコンテナから宛先istio-proxyコンテナへ通信時に、送信元istio-proxyコンテナしかリトライできない。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: istiod
  namespace: istio-system
spec:
  template:
    containers:
      - name: discovery
        env:
          - name: ENABLE_INBOUND_RETRY_POLICY
            value: "true"


EXCLUDE_UNSAFE_503_FROM_DEFAULT_RETRY

デフォルト値はtrueである。

POSTリクエストの結果で、マイクロサービスから503ステータスが返信された場合に、未処理とは限らない。

この場合にリトライすると結果的に二重で処理が実行されてしまう。

そのため、マイクロサービスから503ステータスが返信された場合は、リトライしないようにする。

なおこの問題は、resetによるリトライでも起こりうるため、resetもデフォルトから外れている。

リトライの結果でistio-proxyコンテナが503ステータスを返信する場合とは区別する。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: istiod
  namespace: istio-system
spec:
  template:
    spec:
      containers:
        - name: discovery
          env:
            - name: EXCLUDE_UNSAFE_503_FROM_DEFAULT_RETRY
              value: "true"


PILOT_TRACE_SAMPLING

分散トレースの収集率を設定する。

基本的には100% (値は1) を設定する。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: istiod
  namespace: istio-system
spec:
  template:
    containers:
      - name: discovery
        env:
          - name: PILOT_TRACE_SAMPLING
            value: 1


PILOT_CERT_PROVIDER

istio-proxyコンテナに設定するSSL証明書のプロバイダーを設定する。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: istiod
  namespace: istio-system
spec:
  template:
    containers:
      - name: discovery
        env:
          - name: PILOT_CERT_PROVIDER
            value: istiod
設定値 説明
istiod Istiodが提供するSSL証明書を使用する。
kubernetes KubernetesのSecretで管理するSSL証明書を使用する。
none SSL証明書を使用しない。


PILOT_JWT_PUB_KEY_REFRESH_INTERVAL

アクセストークンの署名検証の間隔を設定する。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: istiod
  namespace: istio-system
spec:
  template:
    containers:
      - name: discovery
        env:
          - name: PILOT_JWT_PUB_KEY_REFRESH_INTERVAL
            value: 20m0s