K8s集群内部Pod间HTTPS通信的TLS/SSL配置求助
K8s 集群内部Pod HTTPS通信配置方案(无Ingress/无cert-manager)
前置准备
你已生成的证书文件需包含3个核心文件:
- 服务端证书:
tls.crt(CN为*.svc.cluster.local) - 服务端私钥:
tls.key - 自签名根CA证书:
ca.crt(用于客户端校验服务端证书合法性)
步骤1:将证书存入K8s原生资源
存储服务端证书为Secret
执行命令创建TLS类型Secret,仅需在服务所在命名空间创建即可:
kubectl create secret tls internal-svc-tls --cert=./tls.crt --key=./tls.key
存储根CA为ConfigMap
在所有客户端Pod所在的命名空间创建ConfigMap存储根证书:
kubectl create configmap internal-svc-ca --from-file=./ca.crt
步骤2:配置服务端Pod启用HTTPS监听
修改服务端Deployment配置,挂载证书并让应用启用8443端口的HTTPS监听,配置片段示例:
apiVersion: apps/v1 kind: Deployment metadata: name: your-core-service spec: replicas: 1 selector: matchLabels: app: core-svc template: metadata: labels: app: core-svc spec: # 引用存储证书的Secret volumes: - name: tls-cert secret: secretName: internal-svc-tls containers: - name: core-svc image: your-service-image:latest ports: - containerPort: 8443 # 挂载证书到容器指定路径 volumeMounts: - name: tls-cert mountPath: /etc/tls readOnly: true # 应用启动参数指定证书路径,根据你的应用实际配置调整 args: - --tls-cert-path=/etc/tls/tls.crt - --tls-key-path=/etc/tls/tls.key - --listen-port=8443 --- # Service配置,暴露8443端口 apiVersion: v1 kind: Service metadata: name: core-svc spec: selector: app: core-svc ports: - port: 8443 targetPort: 8443
步骤3:配置客户端信任自签名CA(解决NSS报错核心)
NSS证书错误的根本原因是客户端系统可信证书库未收录你的自签名根CA,可选两种配置方式:
方式A:单Pod挂载CA证书(适合少量客户端)
修改客户端Deployment配置,挂载CA证书并更新系统可信库,配置片段示例:
apiVersion: apps/v1 kind: Deployment metadata: name: your-client-app spec: replicas: 1 selector: matchLabels: app: client-app template: metadata: labels: app: client-app spec: volumes: - name: ca-cert configMap: name: internal-svc-ca containers: - name: client-app image: your-client-image:latest volumeMounts: - name: ca-cert # Debian/Ubuntu系系统可信证书路径,CentOS系改为/etc/pki/ca-trust/source/anchors/ mountPath: /usr/local/share/ca-certificates/ca.crt subPath: ca.crt # 启动时更新可信证书库 command: ["/bin/sh", "-c"] args: - update-ca-certificates && 你的原有启动命令
方式B:基础镜像预装CA(适合大量客户端)
直接在客户端使用的基础镜像中加入CA证书,构建镜像的Dockerfile示例:
FROM 你原有业务基础镜像:版本 COPY ca.crt /usr/local/share/ca-certificates/ca.crt # Debian/Ubuntu系执行update-ca-certificates,CentOS系执行update-ca-trust extract RUN update-ca-certificates
所有使用该镜像的Pod会自动信任自签名证书,无需额外配置。
验证注意事项
访问服务时必须使用完整的服务域名,格式为<服务名>.<命名空间>.svc.cluster.local:8443,否则会出现证书域名不匹配错误:
# 示例:服务在default命名空间,服务名为core-svc curl https://core-svc.default.svc.cluster.local:8443
Docker Desktop内置K8s的DNS默认已配置svc.cluster.local后缀解析,无需额外修改CoreDNS配置。
内容的提问来源于stack exchange,提问作者krishna chaitanya jinka
相关产品推荐
相关产品推荐

