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 toProxyConfig
, allowing it to be configured at the pod level. Should not be used in conjunction with the deprecatedvalues.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-system の istio-sidecar-injector
という ConfigMap の template という値に次のような感じで使われているので 1.7 の設定でもまだ使えます。
{{- $holdProxy := or .ProxyConfig.HoldApplicationUntilProxyStarts.GetValue .Values.global.proxy.holdApplicationUntilProxyStarts }}