Как выставить внешний IP-адрес для примера приложения Istio - PullRequest
0 голосов
/ 30 апреля 2019

Я пытаюсь настроить пример приложения bookinfo для Istio и Kubernetes на небольшом кластере. Кластер состоит из двух машин: главного и рабочего, работающих на Ubuntu 18.04 на двух экземплярах Amazon AWS EC2. Каждому из экземпляров назначен внешний IP-адрес.

Что я не могу сделать, так это выяснить, как открыть сервис bookinfo для внешнего мира.

Я не совсем понимаю, нужно ли мне открывать входной шлюз Istio или каждый из сервисов bookinfo отдельно.

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

Я прошел через Google, но не могу найти правильное решение. Описание входного шлюза дает только внутренние (т. Е. 10.x.x.x) адреса.

Вывод команд get и description:

kubectl get svc istio-ingressgateway -n istio-system
NAME                   TYPE           CLUSTER-IP   EXTERNAL-IP   PORT(S)                                                                                                                                      AGE
istio-ingressgateway   LoadBalancer   10.96.39.4   <pending>     15020:31451/TCP,80:31380/TCP,443:31390/TCP,31400:31400/TCP,15029:31075/TCP,15030:32093/TCP,15031:31560/TCP,15032:30526/TCP,15443:31526/TCP   68m

kubectl describe  svc istio-ingressgateway  -n istio-system
Name:                     istio-ingressgateway
Namespace:                istio-system
Labels:                   app=istio-ingressgateway
                          chart=gateways
                          heritage=Tiller
                          istio=ingressgateway
                          release=istio
Annotations:              kubectl.kubernetes.io/last-applied-configuration:
                            {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"app":"istio-ingressgateway","chart":"gateways","heritage":"Til...
Selector:                 app=istio-ingressgateway,istio=ingressgateway,release=istio
Type:                     LoadBalancer
IP:                       10.96.39.4
Port:                     status-port  15020/TCP
TargetPort:               15020/TCP
NodePort:                 status-port  31451/TCP
Endpoints:                10.244.1.6:15020
Port:                     http2  80/TCP
TargetPort:               80/TCP
NodePort:                 http2  31380/TCP
Endpoints:                10.244.1.6:80
Port:                     https  443/TCP
TargetPort:               443/TCP
NodePort:                 https  31390/TCP
Endpoints:                10.244.1.6:443
Port:                     tcp  31400/TCP
TargetPort:               31400/TCP
NodePort:                 tcp  31400/TCP
Endpoints:                10.244.1.6:31400
Port:                     https-kiali  15029/TCP
TargetPort:               15029/TCP
NodePort:                 https-kiali  31075/TCP
Endpoints:                10.244.1.6:15029
Port:                     https-prometheus  15030/TCP
TargetPort:               15030/TCP
NodePort:                 https-prometheus  32093/TCP
Endpoints:                10.244.1.6:15030
Port:                     https-grafana  15031/TCP
TargetPort:               15031/TCP
NodePort:                 https-grafana  31560/TCP
Endpoints:                10.244.1.6:15031
Port:                     https-tracing  15032/TCP
TargetPort:               15032/TCP
NodePort:                 https-tracing  30526/TCP
Endpoints:                10.244.1.6:15032
Port:                     tls  15443/TCP
TargetPort:               15443/TCP
NodePort:                 tls  31526/TCP
Endpoints:                10.244.1.6:15443
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

Любая помощь приветствуется.

1 Ответ

1 голос
/ 28 мая 2019

Цитирование официальной документации Istio :

Если ваш кластер работает в среде, которая не поддерживает внешний балансировщик нагрузки (например, minikube), EXTERNAL-IPistio-ingressgateway скажет -pending-.Чтобы получить доступ к шлюзу, используйте NodePort службы или используйте переадресацию портов.

Ваш кластер, кажется, попадает в «Пользовательский (облачный)» способ настройки Kubernetes,который по умолчанию не поддерживает балансировщик нагрузки.

Решение для вас:

  • Вы должны разрешить входящий трафик для вашего экземпляра AWS EC2, обслуживающего рабочую роль
    (другими словами, вы должны открыть NodePort службы istio-ingressgateway на брандмауэре, см. ниже, как получить этот номер порта)
  • Получить NodePort istio-ingressgateway:

с помощью команды:

export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}')
  • Получите EXTERNAL_IP вашего рабочего узла

с командой:

export INGRESS_HOST=$(kubectl get nodes --selector='!node-role.kubernetes.io/master' -o jsonpath='{.items[*].status.addresses[?(@.type=="ExternalIP")].address}')

и выполните оставшуюся часть примера bookinfo без каких-либоменяется.

...