Kubernetes ingress-nginx - 如果未配置 TLS,如何禁用 https 监听?

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"注释。然而,这没有效果。

Mat*_*att 6

我不知道可以轻松禁用 TLS的 ingress-nginx configmap值或入口注释

您可以从入口控制器服务定义中删除端口 443。

httpsspec.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 端口,但集群外的客户端将无法连接到它。


Ale*_*nis 2

您的问题不涉及重定向。

入口控制器正在监听 80 和 443 这两个端口。当您配置仅具有 80 端口的入口时,如果您到达 443 端口,您将被重定向到默认后端,这是预期的行为。

解决方案是添加另一个 nginx 控制器,该控制器仅侦听 80 端口。然后您可以使用 来配置您的入口kubernetes.io/ingress.class: myingress--ingress-class=myingress创建新的 nginx-controller 时,更改daemonset 的命令。然后它将仅处理用此类注释的入口。

如果您使用 helm 来部署它,只需覆盖该controller.ingressClass值即可。