Istio 1.8 で holdApplicationUntilProxyStarts 設定に変更がありました

Advent Calendar 2020 全部オレシリーズ 7日目です。もう完走は諦めました。

8月にリリースされた Istio 1.7 で追加され、「メインコンテナの起動前に istio-proxy の起動を完了させる」で紹介した機能ですが、1.8 で設定方法に変更が入っていました。

これまで通りに Istio のインストールを行おうとしたら早くも deprecated だと警告が出ました。

! values.global.proxy.holdApplicationUntilProxyStarts is deprecated; use ProxyConfig holdApplicationUntilProxyStarts instead

Istio 1.7 では次のように values.global.proxy.holdApplicationUntilProxyStarts に設定していたのですがもう推奨されない。

apiVersion: install.istio.io/v1alpha2
kind: IstioOperator
spec:
  values:
    global:
      proxy:
        holdApplicationUntilProxyStarts: true

Istio 1.8 では Pod 単位でこれを有効・無効化できるようになったみたいです。Change Notes にも次のように書かれています。

Added holdApplicationUntilProxyStarts field to ProxyConfig, allowing it to be configured at the pod level. Should not be used in conjunction with the deprecated values.global.proxy.holdApplicationUntilProxyStarts value. (Issue #27696)

ProxyConfig ってなんだよ!っていろいろ探したのですがこれは source code を追う必要がありそう。これだろうってのは分かりましたけど、証拠は掴んでいない。

Istio 1.8 ではどう設定するかですが、Pod 単位で上書きできるので meshConfig.defaultConfig.holdApplicationUntilProxyStarts でデフォルトを指定します。

apiVersion: install.istio.io/v1alpha2
kind: IstioOperator
spec:
  meshConfig:
    defaultConfig:
      holdApplicationUntilProxyStarts: true

Pod で指定する場合は次のように annotation に設定します。

annotations:
  proxy.istio.io/config: '{ "holdApplicationUntilProxyStarts": false }'

これらの設定は istio-proxy container の env に次のように入っています。

env:
- name: PROXY_CONFIG
  value: |
        {"proxyMetadata":{"DNS_AGENT":""},"holdApplicationUntilProxyStarts":false}

おそらくこれが ProxyConfig の元になるやつですね。

istio-systemistio-sidecar-injector という ConfigMap の template という値に次のような感じで使われているので 1.7 の設定でもまだ使えます。

{{- $holdProxy := or .ProxyConfig.HoldApplicationUntilProxyStarts.GetValue .Values.global.proxy.holdApplicationUntilProxyStarts }}
Built with Hugo
テーマ StackJimmy によって設計されています。