Quarkus Kubernetes Operator:如何在应用容器而非Operator容器中设置环境变量?
问题描述
我使用的是基于Quarkus实现的Keycloak Operator,之前尝试在Operator的application.properties里通过quarkus.kubernetes.env.vars.*格式设置环境变量,比如:
quarkus.kubernetes.env.vars.kc-hostname=localhost quarkus.kubernetes.env.vars.kc-proxy=edge quarkus.kubernetes.env.vars.proxy-address-forwarding=true
但这些变量最终都被注入到了Operator容器中,而非我实际需要部署的Keycloak应用容器里。
验证情况:
- Operator容器的环境变量确实包含了这些设置:
$ kubectl describe pod keycloak-operator --namespace=keycloak ... Environment: KUBERNETES_NAMESPACE: keycloak (v1:metadata.namespace) KC_HOSTNAME: localhost PROXY_ADDRESS_FORWARDING: true OPERATOR_KEYCLOAK_IMAGE: quay.io/keycloak/keycloak:nightly KC_PROXY: edge
- 用官方基础部署清单部署的Keycloak应用Pod中,
KC_HOSTNAME可以通过修改CR里的hostname字段生效,但KC_PROXY和PROXY_ADDRESS_FORWARDING不知道该如何配置到应用容器中。
解决方案
要把这两个环境变量设置到Keycloak应用容器,不需要修改Operator的配置,直接通过**Keycloak自定义资源(CR)**配置即可:
- 配置
KC_PROXY
在Keycloak CR的spec段添加proxy字段,值对应你需要的代理模式(比如edge):
apiVersion: k8s.keycloak.org/v2alpha1 kind: Keycloak metadata: name: example-kc spec: proxy: edge # 保留你原有其他配置,比如数据库、存储等
- 配置
PROXY_ADDRESS_FORWARDING
这个变量对应CR里的proxyAddressForwarding字段,设置为true即可:
apiVersion: k8s.keycloak.org/v2alpha1 kind: Keycloak metadata: name: example-kc spec: proxyAddressForwarding: true # 保留你原有其他配置
- 完整配置示例
把两个配置整合到CR中:
apiVersion: k8s.keycloak.org/v2alpha1 kind: Keycloak metadata: name: example-kc spec: hostname: localhost proxy: edge proxyAddressForwarding: true # 保留你原有数据库、初始管理员、证书等配置
修改完成后,重新应用这个CR:
kubectl apply -f your-keycloak-cr.yaml -n keycloak
之后查看Keycloak应用Pod的环境变量,就能看到KC_PROXY=edge和PROXY_ADDRESS_FORWARDING=true已正确注入到应用容器中。
内容的提问来源于stack exchange,提问作者Peter Becich
相关产品推荐
相关产品推荐

