Istio к проблеме связи внешнего кластера - PullRequest
0 голосов
/ 26 марта 2019

В моей настройке мы отправляем все вызовы, исходящие из кластера, на внутренний балансировщик нагрузки в GCP. Мы делаем это путем создания выходного сервиса и добавления конечных точек в этот сервис вручную. Конечной точкой этой службы является IP-адрес внутреннего балансировщика нагрузки.

[sourabh.w@K9-MAC-035 r19-3] $ k get svc, ep -n egproxy-lle ИМЯ ТИП КЛАСТЕР-IP ВНЕШНИЙ-IP ПОРТ (S) ВОЗРАСТ service / egproxy ClusterIP 10.206.180.135 80 / TCP, 443 / TCP 4d

ИМЯ ПОДКЛЮЧАЕТ ВОЗРАСТ конечные точки / egproxy 10.207.132.8:30443,10.207.132.8:30080 4d [sourabh.w@K9-MAC-035 r19-3] $

Для всех микро-сервисов в моей настройке они должны запускать команду "openssl s_Client" при запуске. Эта команда не выполняется для меня.

openssl s_client -servername ae17-api.kohlsecommerce.com -connect ae17-api.kohlsecommerce.com:443 -debug -state

При этом я проверяю, что ae17-api.kohlsecommerce.com сопоставлен с IP-адресом службы egproxy (10.206.180.135) в /etc/hosts.

Вот o / p, когда я запускаю openssl внутри pod:


root @ product-26-655f4f55b6-g2bpq: / # openssl s_client -servername ae17-api.kohlsecommerce.com -connect ae17-api.kohlsecommerce.com:443 -state -debug CONNECTED (00000003) SSL_connect: до инициализации SSL записать в 0x556dc50b2860 [0x556dc50c3a20] (212 байт => 212 (0xD4)) 0000 - 16 03 01 00 cf 01 00 00-cb 03 03 43 59 24 26 31 ........... CY $ & 1 0010 - 4f 13 80 47 f2 09 25 f7-ec 74 40 57 7c d0 bc c6 O..G ..% .. t @ W | ... 0020 - 18 9b a7 a3 3c 38 80 d6-f4 99 62 00 00 38 c0 2c .... <8 .... b..8., 0030 - c0 30 00 9f cc a9 cc a8-cc aa c0 2b c0 2f 00 9e .0 ......... +. / .. 0040 - c0 24 c0 28 00 00 c0 23-c0 88 00 67 c0 0a c0 14. $. (. K. #. '. G .... 0050 - 00 39 c0 09 c0 00 00 33-00 9d 00 9c 00 3d 00 3c .9 ..... 3 ..... =. < 0060 - 00 35 00 2f 00 ff 01 00-66 6a 00 00 00 20 00 1e .5. / ..... j ... .. 0070 - 00 00 1b 61 65 31 37 2d-61 70 69 2e 6b 6f 68 6c ... ae17-api. 0080 - 73 65 63 6f 6d 6d 65 72-63 65 2e 63 6f 6d 00 0b ecommerce.com .. 0090 - 00 04 03 00 01 02 00 8a-00 0a 00 08 00 1d 00 17 ................ 00a0 - 00 19 00 18 00 00 00 66-00 16 00 00 00 17 00 00 ..... # .......... 00b0 - 00 0d 00 20 00 00 06 01-06 02 06 03 05 01 05 02 ... ............ 00c0 - 05 03 04 01 04 02 04 03-03 01 03 02 03 03 02 01 ................ 00d0 - 02 02 02 03 .... SSL_connect: клиент записи SSLv3 / TLS привет чтение из 0x556dc50b2860 [0x556dc50ba803] (5 байт => -1 (0xFFFFFFFFFFFFFFFF)) SSL_connect: ошибка в клиенте записи SSLv3 / TLS привет

запись: ERRNO = 104

сертификат сверстника недоступен

Не высланы сертификаты клиента CA.

SSL рукопожатие прочитало 0 байтов и записало 212 байтов

Подтверждение: OK

Новый, (НЕТ), Шифр ​​есть (НЕТ) Безопасное повторное согласование НЕ поддерживается Сжатие: НЕТ Расширение: НЕТ Нет ALPN договорная SSL-сессии: Протокол: TLSv1.2 Шифр: 0000 Идентификатор сессии: Session-ID-CTX: Отмычка: Личность PSK: нет Подсказка идентичности PSK: нет Имя пользователя SRP: Нет Время начала: 1553126020 Тайм-аут: 7200 (сек) Проверьте код возврата: 0 (нормально)

Расширенный главный секрет: нет

Я пытался создать различный набор сервисов и виртуальных сервисов, но ничего не получалось:

  1. С IP балансировщика нагрузки:
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  generation: 1
  name: egproxy-ext
  namespace: r19-3-mui-qa
spec:
  addresses:
  - 10.207.132.8/32
  endpoints:
  - address: 10.207.132.8
  hosts:
  - istio-ilb.lle-mcommerce.com
  location: MESH_INTERNAL
  ports:
  - name: http
    number: 30080
    protocol: HTTP
  - name: https
    number: 30443
    protocol: HTTPS
  resolution: STATIC
  1. с полным именем egproxy:
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: egproxy-headless-service-fqdn-ext
  namespace: r19-3-mui-qa
spec:
  addresses:
  - 10.206.117.116/32
  endpoints:
  - address: 10.207.132.8
  hosts:
  - egproxy.egproxy-lle.svc.cluster.local
  location: MESH_INTERNAL
  ports:
  - name: http
    number: 30080
    protocol: HTTP
  - name: https
    number: 30443
    protocol: HTTPS
  resolution: STATIC
  1. Правило назначения для балансировщика нагрузки:
  apiVersion: networking.istio.io/v1alpha3
  kind: DestinationRule
  metadata:
    name: egress-gateway
    namespace: default
  spec:
    host: istio-ilb.lle-mcommerce.com
    trafficPolicy:
      loadBalancer:
        simple: ROUND_ROBIN
      portLevelSettings:
      - port:
          number: 30443
        tls:
          mode: SIMPLE
  1. Правило назначения для службы egproxy

Хотите, чтобы связь работала от микросервисов до ILB через службу egproxy без головы.

Временные решения, такие как "выход-шлюз", также являются жизнеспособным вариантом, но для этого также возникают проблемы при создании правильной конфигурации для ее работы.

1 Ответ

1 голос
/ 28 марта 2019

В Istio для доступа к сервису вам необходимо настроить либо сервис Kubernetes, либо Istio ServiceEntry.Возможно, вам придется отключить взаимный TLS.См. Предварительный пример

...