使用NGINX入口的基于证书的相互认证

时间:2020-01-09 10:34:18  来源:igfitidea点击:

说明

在本指南中,我们将学习如何使用Kubernetes上的NGINX Ingress控制器配置双向双向身份验证。

取得证书

相互认证的第一步是保护端点(在本例中为NGINX Ingress控制器)的安全。我们将需要来自可信机构的证书和密钥。

创建一个NGINX入口资源

NGINX入口控制器是使用YAML文件创建的。证书和密钥都将

apiVersion: v1
kind: Ingress
metadata:
  name: myapp-ingress
spec:
  rules:
  - host: app.theitroad.com
    http:
      paths:
      - backend:
          serviceName: myapp
          servicePort: 80
        path: /
  tls:
  - hosts:
    - app.theitroad.com
    secretName: my-certs

tls:此密钥提供用于在NGINX入口控制器中启用HTTPS的配置密钥。

hosts:用于定义许多主机名,将启用TLS。通配符是不支持的,因此添加到证书的每个主机名也必须在此处设置。

secretName:创建用于存储证书和密钥的秘密资源的名称。

使用kubectl apply命令创建新的入口资源。

kubectl apply -f nginx-ingress.yml

启用基于证书的相互认证

通过向入口控制器添加注释来启用相互认证。批注将NGINX配置设置为验证客户的证书。

更新现有的NGINX Ingress YAML文件,添加注释。

apiVersion: v1
kind: Ingress
metadata:
  name: myapp-ingress
  annotations:
    nginx.ingress.kubernetes.io/auth-tls-verify-client: "on"
    nginx.ingress.kubernetes.io/auth-tls-secret: "default/my-certs"
spec:
  rules:
  - host: app.theitroad.com
    http:
      paths:
      - backend:
          serviceName: myapp
          servicePort: 80
        path: /
  tls:
  - hosts:
    - app.theitroad.com
    secretName: my-certs

验证客户端:指示NGINX验证客户端提供的证书,确保该证书来自受信任的机构。