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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 12:15:07