AWS 上的 Kubernetes,带有 NGINX 入口控制器和 SSL 终止



在我的 Kubernetes 集群中配置 SSL 终止时遇到问题。试图找出发生这种情况的最佳地点。

我已经能够按照此处列出的说明使其工作,然后使用 service.beta.kubernetes.io/aws-load-balancer-ssl-cert 注释更新入口控制器服务以包含 SSL 证书详细信息:

kind: Service
apiVersion: v1
metadata:
  name: ingress-nginx
  namespace: ingress-nginx
  labels:
    app: ingress-nginx
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-proxy-protocol: '*'
    service.beta.kubernetes.io/aws-load-balancer-ssl-cert: arn:...
spec:
  type: LoadBalancer
  selector:
    app: ingress-nginx
  ports:
  - name: https
    port: 443
    targetPort: 80

然后,我有类似于以下内容的入口规则和服务设置:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: app1
  annotations:
    kubernetes.io/ingress.class: nginx
spec:
  rules:
  - host: app1.foo.bar
    http:
      paths:
      - backend:
          serviceName: app1
          servicePort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: app1
spec:
  type: LoadBalancer
  ports:
  - name: http
    port: 80
    targetPort: 80
  selector:
    app: app1
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: app1
spec:
  template:
    metadata:
      labels:
        app: app1
    spec:
      containers:
      - image: nginx
        name: nginx
        ports:
        - containerPort: 80

app1.foo.bar时,我可以看到:

  • HTTP 请求被重定向到 HTTPS
  • SSL 证书已正确应用

最初,我尝试将证书应用于我的个人应用服务。我可以看到证书正在应用于 AWS 中的 ELB,但未通过。所以我的问题是:

这是正确的配置还是有更好的解决方案?

谢谢:)

我建议终止使用 ELB 公开的 Nginx 入口控制器上的 SSL,并使用 kube-lego 进行自动 SSL 证书管理。

https://github.com/kubernetes/ingress-nginx &https://github.com/jetstack/kube-lego