小ネタ。
TKG2.1以降のclass-basedで作成したクラスタのkapp-controllerのconfigは、従来のkapp-controller-configの変更方法では変更できない。
kapp-controller-configを編集しても、リコンサイルで元に戻ってしまう。
これを編集する方法のメモ。
編集方法
Workload Clusterのkapp-controller-configはManagement Clusterのkind: KappControllerConfig
のオブジェクトで管理されている。
$ k get kappcontrollerconfigs -A
NAMESPACE NAME NAMESPACE GLOBALNAMESPACE SECRETNAME
default imurata-wdc-huge-tap-kapp-controller-package tkg-system tkg-system
tkg-system v1.23.17---vmware.1-tkg.1 tkg-system tkg-system
tkg-system v1.24.11---vmware.1-tkg.1 tkg-system tkg-system
tkg-system v1.25.7---vmware.2-tkg.1 tkg-system tkg-system
tkg-system wdc-huge-mc-kapp-controller-package tkg-system tkg-system
このリソースをkubectl explain
で見ると、spec.kappController.config
のところにkapp-controllerのconfigと同じような項目が確認できる。
$ kubectl explain KappControllerConfig.spec.kappController --recursive
KIND: KappControllerConfig
VERSION: run.tanzu.vmware.com/v1alpha3
RESOURCE: kappController <Object>:
DESCRIPTION:
<empty>
FIELDS:
config <Object>
caCerts <string>
dangerousSkipTLSVerify <string>
httpProxy <string>
httpsProxy <string>
noProxy <string>
createNamespace <boolean>
deployment <Object>
apiPort <integer>
concurrency <integer>
hostNetwork <boolean>
metricsBindAddress <string>
priorityClassName <string>
tolerations <[]map[string]string>
globalNamespace <string>
実際に書き換えて反映されるか確認してみる。
今回はHarborの証明書を追加してみる。
現在のWorkload Clusterのconfigの内容は以下となっている。
$ kubectl get cm -o jsonpath={.data} -n tkg-system kapp-controller-config | jq .
{
"caCerts": "",
"dangerousSkipTLSVerify": "",
"httpProxy": "",
"httpsProxy": "",
"noProxy": ""
}
KubeControllerConfigを編集する。使い回せるよう、yttによるoverlay+attachで編集する。
一度ファイルに落とし込む。
kubectl get kappcontrollerconfigs imurata-wdc-huge-tap-kapp-controller-package -o yaml | kubectl neat -f - > ./kapp-config.yaml
overlayファイルを作成する。なお、Harborの証明書はカレントディレクトリにca.crtで置いてあるものとする。
cat << 'EOF' > ./overlay.yaml
#@ load("@ytt:overlay", "overlay")
#@ load("@ytt:data", "data")
#@ cert = data.read("ca.crt")
#@overlay/match by=overlay.subset({"kind":"KappControllerConfig"})
---
spec:
kappController:
#@overlay/match missing_ok=True
config:
caCerts: #@ cert
EOF
overlayして適切に値が変わっているか確認する。
ytt -f overlay.yaml -f kapp-config.yaml -f ca.crt
問題なければ、yttで生成したyamlを使ってapplyする。
ytt -f overlay.yaml -f kapp-config.yaml -f ca.crt | k apply -f -
コマンド実行後、再びkapp-controller-configを見てみる。
$ kubectl get cm -o jsonpath={.data} -n tkg-system kapp-controller-config | jq .
{
"caCerts": "-----BEGIN CERTIFICATE-----\nMII..(省略)",
"dangerousSkipTLSVerify": "",
"httpProxy": "",
"httpsProxy": "",
"noProxy": ""
}
上手く設定されたようだ。