Не добавляйте http: // к IP-адресу конечной точки - PullRequest
0 голосов
/ 15 января 2020

У меня есть Kubernetes Ingress, указывающий на безголовую службу, указывающий, наконец, на объект Endpoints, который маршрутизирует на внешний IP-адрес. Ниже приведена конфигурация для конечной точки

apiVersion: v1
kind: Endpoints
metadata:
  name: my-chart
subsets:
  - addresses:
      - ip: **.**.**.**
    ports:
      - port: 443

. Однако сбой восходящего соединения происходит с помощью «сброса соединения по одноранговому узлу», и при просмотре журналов я вижу следующую ошибку в Kubernetes nginx -ingress -controller:

2020/01/15 14:39:50 [error] 24546#24546: *240425068 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: *****, server: dev.somehost.com, request: "GET / HTTP/1.1", upstream: "http://**.**.**.**:443/", host: "dev.somehost.com"

Моя теория заключается в том, что комбинация http: // и порта 443 вызывает это (проверено с помощью команд cURL). Как мне 1) указать другой протокол для объекта конечной точки или 2) просто запретить добавление http: //

Дополнительные примечания: 1) SSL включен на целевом IP, и если я его сверну Я могу установить безопасное соединение 2) Сквозное прохождение SSL здесь не работает. Входящие и исходящие запросы будут использовать два разных SSL-соединения с двумя разными сертификатами. 3) Я хочу, чтобы Ingress host был SNI (и похоже, что по умолчанию это так)

Редактировать: Версия контроллера Ingress: 0.21.0-rancher3

1 Ответ

1 голос
/ 16 января 2020

Мы смогли решить эту проблему, добавив следующее к метаданным нашего Ingress

  annotations:
    nginx.ingress.kubernetes.io/backend-protocol: HTTPS
    nginx.ingress.kubernetes.io/configuration-snippet: |-
      proxy_ssl_server_name on;
      proxy_ssl_name $host;

Первая команда включает HTTPS для внутреннего протокола, а вторая команда включает SNI

...