13

Mam dwie usługi, S1 w klastrze K1 i S2 w klastrze K2. Mają różne wymagania sprzętowe. Usługa S1 musi porozmawiać z S2.Jak wywołać usługę narażoną przez klaster Kubernetes z innego klastra Kubernetes w tym samym projekcie

Nie chcę ujawniać publicznego adresu IP dla S2 ze względów bezpieczeństwa. Używanie NodePorts w klastrze K2 w instancjach obliczeniowych z równoważeniem obciążenia sieciowego wymaga elastyczności, ponieważ musiałbym dodawać/usuwać instancje obliczeniowe K2 w puli docelowej za każdym razem, gdy węzeł jest dodawany/usuwany w K2.

Czy jest coś w rodzaju "selektora usług" do automatycznego aktualizowania puli docelowej? Jeśli nie, czy istnieje jakieś inne lepsze podejście do tego przypadku?

+0

Zobacz moją odpowiedź tutaj: https://stackoverflow.com/questions/35812076/access-http-service-running-in-gke-from-google-dataflow/44844390#44844390 –

Odpowiedz

11

mogę myśleć kilka sposobów dostępu do usług w wielu klastrach podłączonych do tej samej GCP sieci prywatnej:

  1. trasie Bastion w k2 dla wszystkich usług K2:

    znaleźć SERVICE_CLUSTER_IP_RANGE dla k2 k2. Na GKE, będzie to pole servicesIpv4Cidr na wyjściu klastra opisać:

    $ gcloud beta container clusters describe k2 
    ... 
    servicesIpv4Cidr: 10.143.240.0/20 
    ... 
    

    Dodaj zaawansowany reguły routingu do podjęcia ruch przeznaczony dla tego zakresu i poprowadzić go do węzła w K2:

    $ gcloud compute routes create --destination-range 10.143.240.0/20 --next-hop-instance k2-node-0 
    

    To spowoduje, że k2-node-0 będzie wysyłał żądania proxy z sieci prywatnej dla każdej usługi k2. Ma to oczywistą wadę, dając k2-node-0 dodatkowej pracy, ale jest to proste.

  2. Zainstaluj kube-proxy k2 we wszystkich węzłach w k1.

    Spójrz na aktualnie działającej Kube-proxy na każdym węźle K2:

    $ ps aux | grep kube-proxy 
    ... /usr/local/bin/kube-proxy --master=https://k2-master-ip --kubeconfig=/var/lib/kube-proxy/kubeconfig --v=2 
    
    plik

    Kopiuj K2 kubeconfig do każdego węzła w k1 (słownie /var/lib/kube-proxy/kubeconfig-v2) i rozpocząć drugi Kube-proxy na każdym węźle :

    $ /usr/local/bin/kube-proxy --master=https://k2-master-ip --kubeconfig=/var/lib/kube-proxy/kubeconfig-k2 --healthz-port=10247 
    

    Teraz każdy węzeł w k1 obsługuje lokalnie proxying do k2. Trochę trudniejsze w konfiguracji, ale ma lepsze właściwości skalowania.

Jak widać, żadne rozwiązanie nie jest tak eleganckie. Trwają dyskusje na temat tego, jak ten typ instalacji powinien idealnie działać w Kubernetes. Możesz zapoznać się z dokumentem propozycji Cluster Federation (w szczególności z sekcją Cross Cluster Service Discovery) i dołączyć do dyskusji, otwierając numery/wysyłając listy PR.

+0

Czy CIDR gwarancją wyjątkowy we wszystkich klastry w projekcie? –

+0

Jeśli używasz GKE, tak (unikatowe we wszystkich klastrach w sieci). Jeśli ręcznie wdrażasz własne klastry kubernetes, to od Ciebie zależy unikanie kolizji. –

Powiązane problemy