Kubernetes ingress-nginx-如果未配置TLS,如何禁用在https上的侦听?

时间:2019-05-25 07:11:44

标签: nginx kubernetes google-kubernetes-engine nginx-ingress

我正在使用kubernetes ingress-nginx,这是我的Ingress规范。 http://example.com可以正常工作。但是当我转到https://example.com时,它仍然有效,但是指向带有Fake Ingress Controller证书的default-backend。如何禁用此行为?由于未配置TLS,因此我想完全禁用此特定入口上的https监听。

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

我已经尝试过此nginx.ingress.kubernetes.io/ssl-redirect: "false"注释。但这没有效果。

2 个答案:

答案 0 :(得分:3)

我不知道可以轻松禁用TLS的ingress-nginx configmap值或ingress annotation

您可以从入口控制器服务定义中删除端口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

nginx仍将在TLS端口上侦听,但是群集之外的任何客户端都无法连接到它。

答案 1 :(得分:2)

重定向不涉及您的问题。

ingress-controller正在监听80和443这两个端口。当您配置仅具有80端口的入口时,如果到达443端口,则会重定向到默认后端,这是预期的行为。

一个解决方案是添加另一个只能在80端口监听的Nginx控制器。然后,您可以使用kubernetes.io/ingress.class: myingress配置入口。 创建新的nginx控制器时,请更改守护程序的命令--ingress-class=myingress。然后,它将仅处理用此类注释的入口。

如果使用头盔来部署它,只需覆盖controller.ingressClass值。