我正在运行本地部署,并尝试将HTTPS流量重定向到我的后端pods。我不希望SSL在入口级终止,这就是为什么我没有使用任何tls秘密。
我在容器中创建了一个自签名证书,Tomcat通过选择该证书并在8443上公开来启动。
这是我的入口规范
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ingress-name
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/ssl-passthrough: "true"
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
#nginx.ingress.kubernetes.io/service-upstream: "false"
kubernetes.io/ingress.class: {{ .Values.global.ingressClass }}
nginx.ingress.kubernetes.io/affinity: "cookie"
spec:
rules:
- http:
paths:
- path: /myserver
backend:
serviceName: myserver
servicePort: 8443我以不同的组合使用了上面的注释,但我仍然无法到达我的pod。
我的服务路线
# service information for myserver
service:
type: ClusterIP
port: 8443
targetPort: 8443
protocol: TCP我确实看到了一些关于这方面的建议注释的答案,但这似乎对我不起作用。提前感谢!
编辑:远程工作的唯一一件事是我将入口值重写为
nginx-ingress:
controller:
publishService:
enabled: true
service:
type: NodePort
nodePorts:
https: "40000"这确实启用了https,但它会从容器中提取kubernetes的假证书,而不是我的证书
编辑2:由于某些原因,ssl-passthrough无法工作。我强制执行它为
nginx-ingress:
controller:
extraArgs:
enable-ssl-passthrough: ""当我描述部署时,我可以在args中看到它,但是当我像https://kubernetes.github.io/ingress-nginx/kubectl-plugin/#backends中描述的那样检查kubectl ingress-nginx backends时,它显示"sslPassThrough:false“
发布于 2020-07-17 17:08:56
SSL Passthrough需要在启动时将特定的标志传递给nginx控制器,因为它在默认情况下是禁用的。
默认情况下,
SSL Passthrough是禁用的,并且需要使用
--enable-ssl-passthrough标志启动控制器。
由于ssl-passthrough在开放系统互连模型的第4层上工作,而不是在第7层(超文本传输协议)上工作,因此使用它将使您在入口对象上设置的所有其他注释无效。
因此在您部署级别上,您已经在args下指定了此标志
containers:
- name: controller
image: us.gcr.io/k8s-artifacts-prod/ingress-nginx/controller:v0.34.1@sha256:0e072dddd1f7f8fc8909a2ca6f65e76c5f0d2fcfb8be47935ae3457e8bbceb20
imagePullPolicy: IfNotPresent
lifecycle:
preStop:
exec:
command:
- /wait-shutdown
args:
- /nginx-ingress-controller
- --enable-ssl-passthrough发布于 2021-03-15 23:13:28
如果你想使用ssl-passthrough,你需要设置几个东西。
规格:规则:-主机: example.com <-此处example.com:...
其中提到了in documentation:
SSL Passthrough利用SNI服务器名称指示并从TLS协商中读取虚拟域,这需要兼容的客户端。连接被TLS侦听器接受后,它由控制器本身处理,并在后端和客户端之间来回传输。
如果没有与请求的主机名匹配的主机名,请求将在配置的直通代理端口(默认值: 442)上移交给NGINX,后者将请求代理到默认后端。
--enable-ssl-passthrough标志,@thomas已经在单独的答案中提到过。只需编辑nginx入口部署并将此行添加到args list:
nginx.ingress.kubernetes.io/ssl-passthrough:"true“nginx.ingress.kubernetes.io/后端协议:"HTTPS"
重要提示:In docs您可以阅读:
注意
由于SSL Passthrough在OSI模型(TCP)的第4层上工作,而不是在第7层(HTTP)上工作,因此使用SSL Passthrough会使Ingress对象上设置的所有其他批注无效。
这意味着从现在开始所有其他注释都是无用的。这适用于force-ssl-redirect、affinity等注释,也适用于您定义的路径(例如path: /myserver)。由于流量是端到端加密的,所以入口看到的都是一些胡言乱语,它所能做的就是根据dns名称(SNI)将这些数据传递给应用程序。
发布于 2020-07-18 00:42:49
看起来这是一个开放的问题https://github.com/kubernetes/ingress-nginx/issues/5686
因此,我不得不恢复使用我的证书作为默认证书,并将其挂载为tls sercets。
https://stackoverflow.com/questions/62941369
复制相似问题