首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Kubernetes Ingress-Nginx mTLS配置安全加密

Kubernetes Ingress-Nginx mTLS配置安全加密

作者头像
用户11081884
发布2026-07-20 18:58:11
发布2026-07-20 18:58:11
300
举报

在云原生环境中Kubernetes已成为容器编排的事实标准,Ingress-Nginx作为最流行的入口控制器之一,承担着将外部流量路由到集群内部服务的重要职责。随着网络安全威胁日益增多,仅使用单向TLS已不能满足高安全要求的场景。mTLS(Mutual TLS,双向TLS)通过双向认证机制,为服务间通信提供了更高级别的安全保障。本文介绍如何在Kubernetes集群中为Ingress-Nginx配置mTLS,包括使用场景分析、详细配置步骤和实际代码示例。

mTLS概述与使用场景

什么是mTLS?

mTLSTLS/SSL协议的扩展,它不仅要求服务器向客户端证明其身份(标准TLS),还要求客户端向服务器证明其身份。这种双向认证机制通过交换和验证数字证书来确保通信双方都是可信的。

使用场景

1、微服务间安全通信:在服务网格或微服务架构中,确保只有授权的服务可以相互通信。

2、API安全防护:保护敏感API接口,防止未经授权的访问。

3、金融和医疗行业:满足高安全合规要求的行业应用。

4、零信任架构:实现“永不信任,始终验证”的安全原则。

环境准备

在开始配置前,请确保满足以下条件:

  • 运行中的Kubernetes集群(v1.19+)
  • 已安装Ingress-Nginx控制器
  • kubectl命令行工具已配置
  • 拥有域名并解析到Ingress-Nginx服务

证书生成与管理

mTLS需要三组证书:CA根证书、服务器证书和客户端证书。以下是生成这些证书的命令:

代码语言:javascript
复制
# 创建CA证书
openssl req -x509 -newkey rsa:4096 -sha256 -days 3650 -nodes \
  -keyout ca.key -out ca.crt -subj "/CN=My mTLS CA/O=My Organization"

# 生成服务器证书
openssl req -newkey rsa:4096 -nodes -keyout server.key \
  -out server.csr -subj "/CN=secure-server.example.com/O=Server Organization"
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial \
  -out server.crt -days 365 -sha256 \
  -extfile <(printf "subjectAltName=DNS:secure-server.example.com")

# 生成客户端证书
openssl req -newkey rsa:4096 -nodes -keyout client.key \
  -out client.csr -subj "/CN=client-user/O=Client Organization"
openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial \
  -out client.crt -days 365 -sha256

部署示例应用

1. 创建mTLS后端服务

首先,我们需要部署一个支持mTLS的后端服务:

代码语言:javascript
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mtls-backend
  labels:
    app: mtls-backend
spec:
  replicas: 2
  selector:
    matchLabels:
      app: mtls-backend
  template:
    metadata:
      labels:
        app: mtls-backend
    spec:
      containers:
      - name: nginx
        image: nginx:1.23
        ports:
        - containerPort: 443
        volumeMounts:
        - name: certs
          mountPath: /etc/nginx/certs
          readOnly: true
      volumes:
      - name: certs
        secret:
          secretName: mtls-certs

2. 创建Service

代码语言:javascript
复制
apiVersion: v1
kind: Service
metadata:
  name: mtls-backend
spec:
  selector:
    app: mtls-backend
  ports:
    - protocol: TCP
      port: 443
      targetPort: 443

配置Ingress-Nginx支持mTLS

1. 启用SSL Passthrough

mTLS需要Ingress-Nginx启用SSL Passthrough功能,这样客户端证书可以直接传递给后端服务:

代码语言:javascript
复制
# 如果是Helm安装,添加以下配置
controller:
  extraArgs:
    enable-ssl-passthrough: "true"

2. 创建mTLS Ingress资源

代码语言:javascript
复制
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: mtls-ingress
  annotations:
    nginx.ingress.kubernetes.io/ssl-passthrough: "true"
    nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
spec:
  ingressClassName: nginx
  tls:
  - hosts:
    - secure.example.com
    secretName: mtls-certs
  rules:
  - host: secure.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: mtls-backend
            port:
              number: 443

验证配置

使用curl命令验证mTLS配置是否生效:

代码语言:javascript
复制
# 不带客户端证书访问(应失败)
curl -v https://secure.example.com 

# 带客户端证书访问(应成功)
curl -v --cert client.crt --key client.key --cacert ca.crt https://secure.example.com 

高级配置选项

1. 证书轮换策略

为提高安全性,建议定期轮换证书:

代码语言:javascript
复制
# 重新生成证书
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key \
  -out server-new.crt -days 90 -sha256

# 更新Kubernetes Secret
kubectl create secret tls mtls-certs --cert=server-new.crt --key=server.key \
  --dry-run=client -o yaml | kubectl apply -f -

2. 证书吊销列表(CRL)

对于更严格的安全控制,可以配置证书吊销:

代码语言:javascript
复制
# 创建CRL
openssl ca -gencrl -keyfile ca.key -cert ca.crt -out crl.pem

# 更新Nginx配置使用CRL
ssl_crl /etc/nginx/certs/crl.pem;

在实际生产环境中,建议:

  • 使用证书管理工具(如cert-manager)自动化证书生命周期管理
  • 定期轮换证书和密钥
  • 监控TLS握手失败等安全事件
  • 根据业务需求调整安全策略和加密套件

本文介绍了如何在Kubernetes环境中为Ingress-Nginx配置mTLS,实现了服务间通信的双向认证。mTLS虽然增加了配置复杂性,但为关键业务系统提供了更高级别的安全保障。随着零信任架构的普及,mTLS将成为云原生安全的重要组成部分。掌握这项技术将帮助构建更安全、更可靠的Kubernetes应用。

“无他,惟手熟尔”!有需要的用起来!

如果你觉得这篇文章有用,欢迎点赞、转发、收藏、留言、推荐❤!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-11-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Nicholas与Pypi 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • mTLS概述与使用场景
    • 什么是mTLS?
    • 使用场景
  • 环境准备
  • 证书生成与管理
  • 部署示例应用
    • 1. 创建mTLS后端服务
    • 2. 创建Service
  • 配置Ingress-Nginx支持mTLS
    • 1. 启用SSL Passthrough
    • 2. 创建mTLS Ingress资源
  • 验证配置
  • 高级配置选项
    • 1. 证书轮换策略
    • 2. 证书吊销列表(CRL)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档