apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-resource-staging
namespace: staging-space
annotations:
kubernetes.io/ingress.class: nginx #You may deploy any number of ingress controllers within a cluster. When you create an ingress, you should annotate each ingress with the appropriate ingress.class to indicate which ingress controller should be used if more than one exists within your cluster.
#If you do not define a class, your cloud provider may use a default ingress controller.
#nginx.ingress.kubernetes.io/ssl-passthrough: "true"
##Following 2 lines are important, otherwise the SSL is terminated at the ingress level and the
## traffic sent to the service is plain http and then tomcat complains that the host and port combination
## needs https connection (in the tomcat server we have enabled the HTTPS internally)
## We want to forward the HTTPS traffic to the pods
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
spec:
#tls:
# - hosts:
# - yourhost.com
rules:
- host: yourhost.com
http:
paths:
- pathType: Prefix
path: /
backend:
service:
name: my-app-service
port:
#number: 8080
number: 8443
2条答案
按热度按时间bnlyeluc1#
终于我找到了答案:
我必须添加以下两行:
所以入口是这样的(我也添加了一些评论来描述,也显示哪些选项我尝试过,但没有工作,这样你就不会浪费你的时间):
czfnxgou2#
请参阅文档https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/#ssl-passthrough
默认情况下,SSL通过处于禁用状态,并且需要使用--enable-ssl-passthrough标志启动控制器。
所以,如果你想使用注解www.example.com,你需要用--enable-ssl-passthrough标志来启动你的Nginx入口控制器nginx.ingress.kubernetes.io/ssl-passthrough
此外,由于SSL通过在OSI模型的第4层(TCP)上工作,而不是在第7层(HTTP)上工作,因此使用SSL通过会使在入口对象上设置的所有其他注解无效。
编辑:
如果您将入口注解nginx.ingress.kubernetes.io/ssl-passthrough与--enable-ssl-passthrough=true标记一起用于入口控制器,则SSL终止发生在Tomcat服务器Pod上。因此,客户机浏览器接收到的SSL服务器证书就是Tomcat SSL服务器证书。在这种情况下,您的客户端浏览器必须信任Tomcat SSL服务器证书。此SSL通过发生在第4层TCP,因此NGINX入口控制器不会解密来自客户端浏览器的SSL流量,它只是将其传递到Tomcat服务器Pod。
如果您只使用注解nginx.ingress.kubernetes.io/backend-protocol:“HTTPS”,则第一个SSL终止发生在您的入口控制器上。您的客户端浏览器收到的SSL服务器证书是您的Nginx入口控制器SSL服务器证书,您的客户端浏览器必须信任它。然后,从Nginx入口控制器到Tomcat Pod的通信使用另一个SSL加密。在这种情况下,您的Nginx入口控制器将必须信任Tomcat SSL服务器证书,并且您有双重SSL加密和解密。
如果您使用注解nginx.ingress.kubernetes.io/force-ssl-redirect:“true”,则所有的http请求都将使用308重定向http代码重定向到https。您调用的是http://还是https://?
以下是代码和文档链接
https://github.com/kubernetes/ingress-nginx/blob/master/rootfs/etc/nginx/lua/lua_ingress.lua
https://github.com/openresty/lua-nginx-module
http://nginx.org/en/docs/http/ngx_http_proxy_module.html
检查当您在入口资源中进行更改时,/etc/nginx/nginx.conf在nginx控制器pod中是如何更改的