Я пытаюсь настроить 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: {}
Итак, мои вопросы:
Если установлено значение EXTERNAL-IP, в вашей среде есть внешний балансировщик нагрузки, который можно использовать в качестве входного шлюза. Если значение EXTERNAL-IP равно (или постоянно), ваша среда не предоставляет внешний балансировщик нагрузки для входного шлюза. В этом случае вы можете получить доступ к шлюзу, используя порт узла службы.
Но это было написано не для настройки MultiCluster. А для MultiCluster предлагают использовать L4 LB:
IP-адрес службы istio-ingressgateway в каждом кластере должен быть доступен из любого другого кластера, в идеале с использованием балансировщиков сетевой нагрузки (NLB) L4. Не все облачные провайдеры поддерживают NLB, а некоторым требуются специальные аннотации для их использования, поэтому, пожалуйста, обратитесь к документации вашего облачного провайдера, чтобы включить NLB для балансировщиков нагрузки типов сервисных объектов. При развертывании на платформах без поддержки NLB может потребоваться изменить проверки работоспособности для балансировщика нагрузки, чтобы зарегистрировать входной шлюз.
есть ли способ использовать NodePort для настройки Istio MultiCluster между Microk8s (виртуальная машина в GCE) и кластером GKE?
Большое спасибо!
Павел