Назад | Перейти на главную страницу

Istio Multicluster между Microk8s (на экземпляре GCE) и кластером GKE

Я пытаюсь настроить Istio 1.7 MultiCluster между Microk8s 1.18 / Stable, который установлен на экземпляре Ubuntu 18.04 в Google Compute Engine, и кластером GKE. С частью GKE все нормально. Но у меня вопрос по поводу istio-ingressgateway на microk8s.

Когда я проверяю службы в пространстве имен «istio-system» моего одноузлового кластера Microk8s, я вижу, что «istio-ingressgateway» застрял в состоянии «ожидания».

NAME                                TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)                                                      AGE
service/grafana                     ClusterIP      10.152.183.215   <none>        3000/TCP                                                     10m
service/istio-egressgateway         ClusterIP      10.152.183.180   <none>        80/TCP,443/TCP,15443/TCP                                     10m
service/istio-ingressgateway        LoadBalancer   10.152.183.233   <pending>     15021:32648/TCP,80:30384/TCP,443:31362/TCP,15443:30810/TCP   10m
service/istiocoredns                ClusterIP      10.152.183.70    <none>        53/UDP,53/TCP                                                10m
service/istiod                      ClusterIP      10.152.183.20    <none>        15010/TCP,15012/TCP,443/TCP,15014/TCP,853/TCP                10m
service/jaeger-agent                ClusterIP      None             <none>        5775/UDP,6831/UDP,6832/UDP                                   10m
service/jaeger-collector            ClusterIP      10.152.183.50    <none>        14267/TCP,14268/TCP,14250/TCP                                10m
service/jaeger-collector-headless   ClusterIP      None             <none>        14250/TCP                                                    10m
service/jaeger-query                ClusterIP      10.152.183.142   <none>        16686/TCP                                                    10m
service/kiali                       ClusterIP      10.152.183.135   <none>        20001/TCP                                                    10m
service/prometheus                  ClusterIP      10.152.183.23    <none>        9090/TCP                                                     10m
service/tracing                     ClusterIP      10.152.183.73    <none>        80/TCP                                                       10m
service/zipkin                      ClusterIP      10.152.183.163   <none>        9411/TCP                                                     10m

Хорошо, я знаю, что microk8s не знает, что он установлен на виртуальной машине, которая работает внутри GCP, и поэтому не может создать балансировщик сетевой нагрузки в GCP, как это легко сделать для службы типа LoadBalancer в GKE. Итак, я создал LB вручную (сделал его похожим на LB, который создает GKE) и попытался подключить его к существующей службе istio-ingressgateway.

Я побежал:

kubectl edit svc -n istio-system istio-ingressgateway

И попытался поместить IP этого LB таким же образом и синтаксисом, как и для istio-ingressgateway в GKE:

...
  selector:
    app: istio-ingressgateway
    istio: ingressgateway
    release: istio
  sessionAffinity: None
  type: LoadBalancer
status:
  loadBalancer:
    ingress:
    - ip: 11.22.33.44

Не работает:

  selector:
    app: istio-ingressgateway
    istio: ingressgateway
  sessionAffinity: None
  type: LoadBalancer
status:
  loadBalancer: {}

Итак, мои вопросы:

  1. Есть ли возможность сообщить Microk8s, что он работает на виртуальной машине, расположенной в GCP, и дать ему возможность создавать TCP LB в «Сетевые службы> Балансировка нагрузки»? Может быть, какую-то аннотацию можно добавить в yaml сервиса типа LoadBalancer?
  2. Я нашел информацию о том, что если облачная инфраструктура не поддерживает автоматическое создание LB, мы можем использовать IP-адрес хоста и NodePort шлюза istio-ingressgateway.

Если установлено значение EXTERNAL-IP, в вашей среде есть внешний балансировщик нагрузки, который можно использовать в качестве входного шлюза. Если значение EXTERNAL-IP равно (или постоянно), ваша среда не предоставляет внешний балансировщик нагрузки для входного шлюза. В этом случае вы можете получить доступ к шлюзу, используя порт узла службы.

Но это было написано не для настройки MultiCluster. А для MultiCluster предлагают использовать L4 LB:

IP-адрес службы istio-ingressgateway в каждом кластере должен быть доступен из любого другого кластера, в идеале с использованием балансировщиков сетевой нагрузки (NLB) L4. Не все облачные провайдеры поддерживают NLB, а некоторым требуются специальные аннотации для их использования, поэтому, пожалуйста, обратитесь к документации вашего облачного провайдера, чтобы включить NLB для балансировщиков нагрузки типов сервисных объектов. При развертывании на платформах без поддержки NLB может потребоваться изменить проверки работоспособности для балансировщика нагрузки, чтобы зарегистрировать входной шлюз.

есть ли способ использовать NodePort для настройки Istio MultiCluster между Microk8s (виртуальная машина в GCE) и кластером GKE?

Большое спасибо!

Павел