У меня есть приложение в Kubernetes, которое подается через https. Так что теперь я хотел бы исключить один URL из этого правила и использовать HTTP для обслуживания по соображениям производительности. Я борюсь с этим целый день, и это кажется невозможным.

Это мой вход YAML:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    field.cattle.io/publicEndpoints: '[{"addresses":["172.31.1.11"],"port":443,"protocol":"HTTPS","serviceName":"myservice:myservice","ingressName":"myservice:myservice","hostname":"app.server.test.mycompany.com","path":"/","allNodes":true}]'
    kubernetes.io/ingress.class: nginx
  creationTimestamp: "2020-02-17T13:14:19Z"
  generation: 1
  labels:
    app-kubernetes-io/instance: mycompany
    app-kubernetes-io/managed-by: Tiller
    app-kubernetes-io/name: mycompany
    helm.sh/chart: mycompany-1.0.0
    io.cattle.field/appId: mycompany
  name: mycompany
  namespace: mycompany
  resourceVersion: "565608"
  selfLink: /apis/extensions/v1beta1/namespaces/mycompany/ingresses/mycompany
  uid: c6b93108-a28f-4de6-a62b-487708b3f5d1
spec:
  rules:
  - host: app.server.test.mycompany.com
    http:
      paths:
      - backend:
          serviceName: mycompany
          servicePort: 80
        path: /
  tls:
  - hosts:
    - app.server.test.mycompany.com
    secretName: mycompany-tls-secret
status:
  loadBalancer:
    ingress:
    - ip: 172.31.1.11
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    field.cattle.io/publicEndpoints: '[{"addresses":["172.31.1.1"],"port":80,"protocol":"HTTP","serviceName":"mycompany:mycompany","ingressName":"mycompany:mycompany-particular-service","hostname":"app.server.test.mycompany.com","path":"/account_name/particular_service/","allNodes":true}]'
    nginx.ingress.kubernetes.io/force-ssl-redirect: "false"
    nginx.ingress.kubernetes.io/use-regex: "true"
  creationTimestamp: "2020-02-17T13:14:19Z"
  generation: 1
  labels:
    app-kubernetes-io/instance: mycompany
    app-kubernetes-io/managed-by: Tiller
    app-kubernetes-io/name: mycompany
    helm.sh/chart: mycompany-1.0.0
    io.cattle.field/appId: mycompany
  name: mycompany-particular-service
  namespace: mycompany
  resourceVersion: "565609"
  selfLink: /apis/extensions/v1beta1/namespaces/mycompany/ingresses/mycompany-particular-service
  uid: 88127a02-e0d1-4b2f-b226-5e8d160c1654
spec:
  rules:
  - host: app.server.test.mycompany.com
    http:
      paths:
      - backend:
          serviceName: mycompany
          servicePort: 80
        path: /account_name/particular_service/
status:
  loadBalancer:
    ingress:
    - ip: 172.31.1.11

Итак, как вы можете видеть сверху, я хотел бы использовать сервер /particular_service/ по HTTP. Вход, однако, перенаправляет на HTTPS, так как TLS включен для этого хоста в первом входе.

Есть ли способ отключить TLS только для этого конкретного пути, когда один и тот же хост используется для конфигурации?

В кратком изложении хотелось бы иметь:

https://app.server.test.mycompany.com
but
http://app.server.test.mycompany.com/account_name/particular_service/
1
szaman 17 Фев 2020 в 16:51

2 ответа

Лучший ответ

Я протестировал 2 входа одного и того же домена, первый с включенным tls, а второй без tls, и это сработало.

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
  name: echo-https
spec:
  tls:
  - hosts:
    - myapp.mydomain.com
    secretName: https-myapp.mydomain.com
  rules:
  - host: myapp.mydomain.com
    http:
      paths:
      - backend:
          serviceName: echo-svc
          servicePort: 80
        path: /
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
  name: echo-http
spec:
  rules:
  - host: myapp.mydomain.com
    http:
      paths:
      - backend:
          serviceName: echo-svc
          servicePort: 80
        path: /insecure

По документам Nginx / а> :

По умолчанию контроллер перенаправляет клиентов HTTP на порт 443 HTTPS, используя ответ 308 Permanent Redirect, если для этого входа включен протокол TLS.

Это можно отключить глобально, используя ssl-redirect: "false" в карте конфигурации NGINX или для каждого входа с аннотацией nginx.ingress.kubernetes.io/ssl-redirect: "false" в конкретном ресурсе.

Пожалуйста, дайте мне, если это поможет.

1
KoopaKiller 17 Фев 2020 в 15:19

Также добавьте nginx.ingress.kubernetes.io/ssl-redirect ": "false". Это работало для меня ранее. Вы можете попробовать.

1
anmol agrawal 17 Фев 2020 в 15:05