我正在使用nginx-ingress控制器在GKE上运行集群,而不是使用默认的gce入口控制器。
我正在使用cert-manager生成证书。如果我使用默认的gce控制器,则可以正常工作。
我已经使用以下配置部署了nginx-ingress控制器:
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 Cloud控制台中看到已为我配置了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
。
答案 0 :(得分:0)
如果您将整个入口Yaml放在帖子中会很有帮助,但是从第一个视图来看,如果您是通过Ingress创建TLS证书,那么我认为您会错过注释中的issuer,因为cert-manager会检查该注释来发布证书。检查以下内容:
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>
如果不是这种情况,那么您可以通过以下方法对证书进行故障排除:
kubectl get certs # To see the status of certificates
kubectl describe cert # If it is issued successfully
您还可以检查cert-manager控制器的日志,证书的颁发方式。
kubectl logs cert-manager-pod-name-21322 -n cert-manager
希望有帮助!