как настроить вход для прямого трафика на бэкэнд https с помощью https - PullRequest
0 голосов
/ 31 января 2019

У меня есть бэкэнд, использующий https.Я хочу разделить нагрузку на этот бэкэнд на основе URL / пути.

Я решил использовать ingress для выполнения этой логики на основе URL / пути для перемещения трафика на разные бэкэнды (одни и те же бэкэнды)., просто дублируется на разные NodePorts)

мой вопрос заключается в том, как настроить вход для получения запросов https и пересылки этих запросов https на серверную часть https?

спасибо

edit: я добавил файл yaml:

spec:
  rules:
  - http:
      paths:
      - backend:
          serviceName: service
          servicePort: 9443
        path: /carbon
      - backend:
          serviceName: service2
          servicePort: 9443
        path: /oauth

, по какой-то причине я не могу изменить форму правила http на https

1 Ответ

0 голосов
/ 31 января 2019

Если вы хотите использовать механизмы балансировки нагрузки в k8s, вы должны вместо этого использовать services и запускать несколько экземпляров позади этой службы таким образом, чтобы k8s выполнял балансировку нагрузки.Если вы хотите использовать разные версии своего бэкэнда (например, prod и test), вы можете разделить их хорошо

, если ваша служба доступна только через https, вам нужно добавить следующую аннотацию к входному yaml: ( документация )

nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"

Чтобы обезопасить сам вход, взгляните на это: https://kubernetes.io/docs/concepts/services-networking/ingress/#tls

Но если вы хотите, чтобы вспомогательные службы расшифровали связь TLS, используйтевместо этого следующая аннотация: ( документация )

nginx.ingress.kubernetes.io/ssl-passthrough: "true"

Редактировать:

Входной YAML должен выглядеть следующим образом, если вы хотите достичь бэкэндачерез TLS:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-name
  namespace: namespace-name 
  annotations:
    nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
spec:
  rules:
  - http:
      paths:
      - backend:
          serviceName: service
          servicePort: 9443
        path: /carbon
      - backend:
          serviceName: service2
          servicePort: 9443
        path: /oauth

Входной YAML должен выглядеть следующим образом, если вы хотите получить доступ к бэкенду через TLS с расшифровкой TLS во входном контроллере:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-name
  namespace: namespace-name 
  annotations:
    nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
spec:
  tls:
  - hosts:
    - app.myorg.com
    secretName: tls-secret 
  rules:
  - http:
      paths:
      - backend:
          serviceName: service
          servicePort: 9443
        path: /carbon
      - backend:
          serviceName: service2
          servicePort: 9443
        path: /oauth

Важно отметить, чтоtls-secret - это имя SecretConfig с действительным сертификатом, выданным для хоста (app.myorg.com)


Ingress YAML должен выглядеть следующим образом, если вы хотите достичь бэкэнда через TLS с расшифровкой TLS в бэкэнде:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-name
  namespace: namespace-name 
  annotations:
    nginx.ingress.kubernetes.io/ssl-passthrough: "true"
spec:
  rules:
  - http:
      paths:
      - backend:
          serviceName: service
          servicePort: 9443
        path: /carbon
      - backend:
          serviceName: service2
          servicePort: 9443
        path: /oauth

Я никогда не тестировал последнюю версию, поэтому не знаю, работает ли она на самом деле, но я настоятельно рекомендую прочитать этот отрывок дляэтот вариант.

...