Ssl 带有gke tcp负载平衡器和TLS证书的nginx入口

Ssl 带有gke tcp负载平衡器和TLS证书的nginx入口,ssl,nginx,kubernetes,Ssl,Nginx,Kubernetes,我使用nginx入口控制器在GKE上运行集群,而不是使用默认的gce入口控制器 我正在使用证书管理器生成证书。如果我使用默认的gce控制器,这可以正常工作 我已使用以下配置部署了nginx入口控制器: containers: - args: - /nginx-ingress-controller - --default-backend-service=kube-system/nginx-ingress-default-backend - --publish-servi

我使用nginx入口控制器在GKE上运行集群,而不是使用默认的gce入口控制器

我正在使用证书管理器生成证书。如果我使用默认的gce控制器,这可以正常工作

我已使用以下配置部署了nginx入口控制器:

containers:
  - args:
    - /nginx-ingress-controller
    - --default-backend-service=kube-system/nginx-ingress-default-backend
    - --publish-service=kube-system/nginx-ingress-controller
    - --election-id=ingress-controller-leader
    - --ingress-class=nginx
    - --configmap=kube-system/nginx-ingress-controller
    - --sort-backends=true
此服务使用默认服务
type=LoadBalancer
,我可以在Google云控制台中看到,我已经配置了TCP第4层负载均衡器

我的前端服务和入口具有以下注释:

annotations:
  ingress.kubernetes.io/allow-http: "true"
  kubernetes.io/ingress.class: nginx
  ingress.kubernetes.io/ssl-redirect: "true"
  kubernetes.io/tls-acme: "true"
HTTP可以正常工作,但当我尝试使用HTTPS时,会出现SSL协议错误:

* Rebuilt URL to: https://hostname/
*   Trying xx.xxx.xx.xxx...
* TCP_NODELAY set
* Connected to guestbook.lbrlabs.com (xx.xxx.xx.xxx) port 443 (#0)
* Unknown SSL protocol error in connection to hostname:-9847
* Closing connection 0
curl: (35) Unknown SSL protocol error in connection to hostname:-9847
我可以看到日志中的二进制数据:

10.36.0.1 - [10.36.0.1] - - [04/Aug/2018:23:37:23 +0000] "\x16\x03\x01\x00\xC8\x01\x00\x00\xC4\x03\x03[f8\xB4J\xFD\xB6\x1C9\x93\xA9\xF6$\x82\x1B~h" 400 174 "-" "-" 0 0.051 [] - - - -

我在这里缺少什么配置选项?我尝试使用代理协议,但没有成功(正如我所预料的那样)。我正在使用nginx ingress controller的
0.14.0

如果您将整个ingress yaml放到post中,这将非常有用,但是从第一个角度看,如果您通过ingress创建TLS证书,那么我认为您在注释中遗漏了颁发者,因为证书管理器会检查此注释以颁发证书。检查以下内容:

kind: Ingress
metadata:
  annotations:
    certmanager.k8s.io/issuer: letsencrypt-prod
    ...
spec:
  rules:
  - host: example.com
    http:
      paths:
      - backend:
          serviceName: backend-service
          servicePort: http
        path: /
  tls:
  - hosts:
    - example.com
    secretName: example-com-tls
您也可以描述您的入口以查看事件:

kubectl describe ingress <ingress-name>
您还可以检查cert manager控制器的日志,了解证书是如何颁发的

kubectl logs cert-manager-pod-name-21322 -n cert-manager
希望有帮助

kubectl logs cert-manager-pod-name-21322 -n cert-manager