В моей настройке мы отправляем все вызовы, исходящие из кластера, на внутренний балансировщик нагрузки в 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 (нормально)
Расширенный главный секрет: нет
Я пытался создать различный набор сервисов и виртуальных сервисов, но ничего не получалось:
- С 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
- с полным именем 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
- Правило назначения для балансировщика нагрузки:
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
- Правило назначения для службы egproxy
Хотите, чтобы связь работала от микросервисов до ILB через службу egproxy без головы.
Временные решения, такие как "выход-шлюз", также являются жизнеспособным вариантом, но для этого также возникают проблемы при создании правильной конфигурации для ее работы.