You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Helm模板中读取Elasticsearch TLS证书Secret并挂载到Kafka Pod

解决方案

Kubernetes 默认禁止跨命名空间直接引用 Secret 资源,因此无法直接在其他命名空间的 Deployment 中直接挂载 elasticsearch 命名空间下的证书 Secret,可选择以下两种方案实现需求:

方案一:同步 Secret 到 Kafka 部署的命名空间(推荐,维护成本低)

操作步骤如下:

  1. 手动将 Elasticsearch 命名空间下的证书 Secret 同步到 Kafka 部署的目标命名空间(示例中目标命名空间为 kafka,可替换为你实际使用的命名空间):
# 导出原Secret配置并替换命名空间后导入
kubectl get secret -n elasticsearch elasticsearch-coordinating-only-crt -o yaml \
  | yq eval 'del(.metadata.creationTimestamp, .metadata.resourceVersion, .metadata.uid, .metadata.ownerReferences)' - \
  | sed "s/namespace: elasticsearch/namespace: kafka/" \
  | kubectl apply -f -

如果没有安装yq工具,也可以手动导出Secret配置后删除不需要的元信息,修改命名空间后再导入。

  1. 修改 kafka-connect.yaml Deployment 配置,新增证书卷和挂载配置,修改后的完整配置如下:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ include "kafka.fullname" . }}-connect
  labels: {{- include "common.labels.standard" . | nindent 4 }}
    app.kubernetes.io/component: connector
spec:
  replicas: 1
  selector:
    matchLabels: {{- include "common.labels.matchLabels" . | nindent 6 }}
      app.kubernetes.io/component: connector
  template:
    metadata:
      labels: {{- include "common.labels.standard" . | nindent 8 }}
        app.kubernetes.io/component: connector
    spec:
      containers:
        - name: connect
          image: REDACTED.dkr.ecr.REDACTED.amazonaws.com/kafka-connect-elasticsearch
          imagePullPolicy: Always
          command:
            - /bin/bash
            - -ec
            - bin/connect-standalone.sh custom-config/connect-standalone-custom.properties custom-config/elasticsearch.properties
          ports:
            - name: connector
              containerPort: 8083
          volumeMounts:
            - name: configuration
              mountPath: /opt/bitnami/kafka/custom-config
            # 新增ES CA证书挂载
            - name: es-ca-cert
              mountPath: /etc/ssl/certs/elasticsearch-ca.crt
              subPath: elasticsearch-ca.crt
              readOnly: true
      imagePullSecrets:
        - name: regcred
      volumes:
        - name: configuration
          configMap:
            name: {{ include "kafka.fullname" . }}-connect
        # 新增ES CA证书卷,引用同步后的Secret
        - name: es-ca-cert
          secret:
            secretName: elasticsearch-coordinating-only-crt
            items:
              - key: ca.crt
                path: elasticsearch-ca.crt

完成修改后重新升级 Helm Release 即可生效。

方案二:将CA证书作为Helm参数传入(无需跨命名空间同步Secret)

如果不想维护Secret同步逻辑,可以将证书内容作为值传入Helm,自动生成当前命名空间下的证书Secret,操作步骤如下:

  1. 在 values.yaml 中新增配置项,用于接收CA证书内容:
elasticsearch:
  caCrt: ""
  1. 在templates目录下新增 Secret 模板 kafka-connect-es-ca.yaml:
apiVersion: v1
kind: Secret
metadata:
  name: {{ include "kafka.fullname" . }}-es-ca
  labels: {{- include "common.labels.standard" . | nindent 4 }}
    app.kubernetes.io/component: connector
type: Opaque
data:
  ca.crt: {{ .Values.elasticsearch.caCrt | b64enc | quote }}
  1. 修改 kafka-connect.yaml 的 volumes 配置,将Secret名称替换为新生成的Secret:
- name: es-ca-cert
  secret:
    secretName: {{ include "kafka.fullname" . }}-es-ca
    items:
      - key: ca.crt
        path: elasticsearch-ca.crt

volumeMounts配置和方案一完全一致。

  1. 部署/升级Helm Release时传入CA证书内容:
helm upgrade --install kafka ./your-kafka-chart-path \
  --set elasticsearch.caCrt="$(kubectl get secret -n elasticsearch elasticsearch-coordinating-only-crt -o jsonpath="{.data.ca\.crt}" | base64 -d)"

注意事项

两种方案都不需要修改已有的ConfigMap配置,证书挂载路径和你配置的elastic.https.ssl.truststore.location完全匹配,部署后连接器会自动读取证书完成SSL校验。

内容的提问来源于stack exchange,提问作者Brad Solomon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 11:45:03