Shi*_*r G 7 nginx kubernetes google-kubernetes-engine nginx-ingress
我正在使用 kubernetes ingress-nginx,这是我的 Ingress 规范。http://example.com按预期工作正常。但是当我去https://example.com 时它仍然有效,但指向带有假入口控制器证书的默认后端。如何禁用此行为?我想在这个特定的入口上完全禁用对 https 的监听,因为没有配置 TLS。
kind: Ingress
apiVersion: extensions/v1beta1
metadata:
name: http-ingress
annotations:
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- host: example.com
http:
paths:
- backend:
serviceName: my-deployment
servicePort: 80
Run Code Online (Sandbox Code Playgroud)
我试过这个nginx.ingress.kubernetes.io/ssl-redirect: "false"注释。然而,这没有效果。
我不知道可以轻松禁用 TLS的 ingress-nginx configmap值或入口注释。
您可以从入口控制器服务定义中删除端口 443。
https从spec.ports数组中删除条目
apiVersion: v1
kind: Service
metadata:
name: mingress-nginx-ingress-controller
spec:
ports:
- name: https
nodePort: NNNNN
port: 443
protocol: TCP
targetPort: https
Run Code Online (Sandbox Code Playgroud)
nginx 仍将侦听 TLS 端口,但集群外的客户端将无法连接到它。
您的问题不涉及重定向。
入口控制器正在监听 80 和 443 这两个端口。当您配置仅具有 80 端口的入口时,如果您到达 443 端口,您将被重定向到默认后端,这是预期的行为。
解决方案是添加另一个 nginx 控制器,该控制器仅侦听 80 端口。然后您可以使用 来配置您的入口kubernetes.io/ingress.class: myingress。--ingress-class=myingress创建新的 nginx-controller 时,更改daemonset 的命令。然后它将仅处理用此类注释的入口。
如果您使用 helm 来部署它,只需覆盖该controller.ingressClass值即可。