AWS上的Kubernetes具有NGINX入口控制器和SSL终端

时间:2017-10-17 16:08:09

标签: amazon-web-services nginx kubernetes devops

在我的Kubernetes群集中配置SSL终止时遇到问题。试图找出最佳位置。

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

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但未被传递。所以我的问题是:

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

谢谢:)

1 个答案:

答案 0 :(得分:-1)

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

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