我是 Kapitan、Helm 和 K8s 的新手。 这也是我在这里的第一个问题。
我在应用程序类中有 aws-load-balancer-controller.yml。 我正在尝试使用 gkms refs 来获取证书。请参阅 webhookTLS 部分。
---
parameters:
apps:
aws-load-balancer-controller:
version: ${global_release}
clusterName: ${cluster:cluster_name}
...
webhookTLS:
caCert: ?{gkms:certificates/aws_load_balancer_controller_webhook/${cluster:env_type}@ca_cert}
cert: ?{gkms:certificates/aws_load_balancer_controller_webhook/${cluster:env_type}@cert}
key: ?{gkms:certificates/aws_load_balancer_controller_webhook/${cluster:env_type}@key}
kapitan:
dependencies:
- type: git
source: [email protected]:container-ops/helm.git
subdir: charts/aws-load-balancer-controller
ref: ${apps:aws-load-balancer-controller:version}
output_path: .charts/${apps:aws-load-balancer-controller:version}/aws-load-balancer-controller
compile:
- input_type: helm
input_paths:
- .charts/${apps:aws-load-balancer-controller:version}/aws-load-balancer-controller
helm_values: ${apps:aws-load-balancer-controller}
helm_params:
namespace: ingress
name: aws-load-balancer-controller
output_file: aws-load-balancer-controller.yml
output_path: apps/10-core/aws-load-balancer-controller/templates
编译期间 - ${cluster:env_type} 解析正常。但是 ?{} 不是,我在 diff 中看到它:
120,146 name: aws-load-balancer-webhook-service
@@ update validatingwebhookconfiguration/aws-load-balancer-webhook (admissionregistration.k8s.io/v1) cluster @@
...
103,103 clientConfig:
104 - caBundle: LS0tLS1...
104 + caBundle: P3tna21zOmNlcnRpZmljYXRlcy9hd3NfbG9hZF9iYWxhbmNlcl9jb250cm9sbGVyX3dlYmhvb2svbGFiQGNhX2NlcnR9
这只是base64的值:
➜ ~ echo "P3tna21zOmNlcnRpZmljYXRlcy9hd3NfbG9hZF9iYWxhbmNlcl9jb250cm9sbGVyX3dlYmhvb2svbGFiQGNhX2NlcnR9" | base64 -d
?{gkms:certificates/aws_load_balancer_controller_webhook/lab@ca_cert}
参考路径是正确的,我可以透露一下:
$ kapitan refs --reveal --tag "?{gkms:certificates/aws_load_balancer_controller_webhook/lab}"
{
"ca_cert": "LS0tLS1C...",
"key": "LS0tL...",
"cert": "LS0tLS1CRUd..."
}
图表中:
/charts/aws-load-balancer-controller/values.yaml:
# webhookTLS specifies TLS cert/key for the webhook
webhookTLS:
caCert:
cert:
key:
/charts/aws-load-balancer-controller/templates/webhook.yaml:
webhooks:
- clientConfig:
{{ if not $.Values.enableCertManager -}}
caBundle: {{ $tls.caCert }}
{{ end }}
/charts/aws-load-balancer-controller/templates/_helpers.tpl:
{{/*
Generate certificates for webhook
*/}}
...
{{- if (and .Values.webhookTLS.caCert .Values.webhookTLS.cert .Values.webhookTLS.key) -}}
caCert: {{ .Values.webhookTLS.caCert | b64enc }}
clientCert: {{ .Values.webhookTLS.cert | b64enc }}
clientKey: {{ .Values.webhookTLS.key | b64enc }}
{{- else if and .Values.keepTLSSecret $secret -}}
... (generate by aws)
我尝试显式地将 helm 值添加到 kapitan 编译部分,但没有任何效果。 奇怪的是相同的语法适用于另一个应用程序 - f5:
f5-bigip-ctrl.yml
---
parameters:
apps:
f5_bigip_ctlr:
secret:
bigip_username: ?{gkms:passwords/f5/${cluster:env_type}@bigip_username}
bigip_password: ?{gkms:passwords/f5/${cluster:env_type}@bigip_password}
args:
ipam : true
kapitan:
dependencies:
- type: git
source: [email protected]:container-ops/helm.git
subdir: charts/f5-bigip-ctlr
ref: ${apps:f5_bigip_ctlr:version}
output_path: .charts/${apps:f5_bigip_ctlr:version}/f5-bigip-ctlr
compile:
- output_path: apps/
input_type: helm
input_paths:
- .charts/${apps:f5_bigip_ctlr:version}/f5-bigip-ctlr
helm_values:
image:
registry: ${cluster:registry}
secret:
bigip_username: ${apps:f5_bigip_ctlr:secret:bigip_username}
bigip_password: ${apps:f5_bigip_ctlr:secret:bigip_password}
...
我是kapitan创始人之一👋
不幸的是,在 kapitan 可以采取任何措施之前,helm 倾向于对值进行 base64 处理。
有多种方法可以解决该问题,特别是当 helm 图表提供传递秘密名称(可以使用 Kapitan 生成)而不是实际值时。
另一个解决方案是使用“突变”,允许 kapitan 操作 helm 对象,但另一个选项更容易。
如果您需要帮助,还可以考虑加入 kubernetes slack 上的 #kapitan 频道