如何将防火墙自签名证书添加到k8s中使其被系统信任

K8s集群添加自签名根证书信任方案
以下为不同场景下的落地操作步骤:
1. 集群节点全局配置(所有节点上运行的Pod默认都信任该证书)
适合集群内所有工作负载都需要访问对应HTTPS资源的场景,操作需要在每个K8s节点(包含控制平面节点和工作节点)执行:
- 首先把运维提供的自签名根证书文件(一般为
.crt/.pem格式)上传到节点的/usr/local/share/ca-certificates/目录下:
cp your-custom-root-ca.crt /usr/local/share/ca-certificates/
- 执行证书更新命令让系统信任该证书:
- Debian/Ubuntu系系统:
update-ca-certificates - CentOS/RHEL系系统:
update-ca-trust extract
- Debian/Ubuntu系系统:
- 验证:在节点执行
curl https://目标公网HTTPS地址,无证书报错即配置生效
注意:如果后续集群新增节点,需要在新增节点上重复执行上述操作
2. 单个Pod/容器层面配置(仅指定工作负载信任该证书)
适合只有部分业务需要访问对应资源、不想全局修改节点配置的场景:
方案A:通过ConfigMap挂载证书到容器内证书目录
- 先将证书文件创建为ConfigMap:
kubectl create configmap custom-root-ca --from-file=root-ca.crt=./your-custom-root-ca.crt
- 在Deployment的Pod模板中挂载该ConfigMap到容器的证书信任目录,示例配置:
apiVersion: apps/v1 kind: Deployment metadata: name: your-app spec: replicas: 1 template: spec: containers: - name: your-app image: your-app-image:tag volumeMounts: # 不同基础镜像的证书路径不同,按需调整 # Debian/Ubuntu系镜像路径 - mountPath: /usr/local/share/ca-certificates/root-ca.crt name: ca-cert subPath: root-ca.crt # CentOS/RHEL/Alpine系镜像可以挂载到/etc/pki/ca-trust/source/anchors/ 或者直接覆盖/etc/ssl/certs/ca-certificates.crt command: ["/bin/sh", "-c"] args: ["update-ca-certificates && 你的原有启动命令"] volumes: - name: ca-cert configMap: name: custom-root-ca
方案B:将证书打包到业务镜像内
直接在你的业务镜像Dockerfile中添加证书信任逻辑,示例:
FROM your-base-image:tag # 复制证书到镜像内 COPY your-custom-root-ca.crt /usr/local/share/ca-certificates/ # 执行证书更新 RUN update-ca-certificates # 后续原有镜像构建逻辑
3. 特殊场景适配
- 如果使用的是Alpine基础镜像,需要先安装ca-certificates包再执行更新:
RUN apk add --no-cache ca-certificates && update-ca-certificates
- 如果业务代码使用独立的证书库(比如Java应用使用JKS证书库、Python requests指定了cert路径),需要单独将证书导入到对应语言的证书库中,以Java为例:
keytool -importcert -file your-custom-root-ca.crt -alias custom-ca -keystore $JAVA_HOME/lib/security/cacerts -storepass changeit -noprompt
内容的提问来源于stack exchange,提问作者lukisp
相关产品推荐
相关产品推荐

