Jak wybrać zewnętrzny adres IP modułu równoważenia obciążenia Kubernetes w Google Kubernetes Engine

16

Wdrażam aplikację internetową przy użyciu Google Kubernetes Engine i chcę ją udostępnić za pośrednictwem modułu równoważenia obciążenia na istniejącym statycznym adresie IP, który kontroluję w ramach tego samego projektu w Google Cloud Platform, ponieważ nazwa domeny, której chcę użyć już wskazuje na ten adres IP.

Plik yaml, którego użyłem dla zasobnika, to:

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
  labels:
    app: my-app
spec:
  containers:
  - name: my-container
    image: gcr.io/my-project/my-app:latest

Mogę skonfigurować moduł równoważenia obciążenia za pomocą:

apiVersion: v1
kind: Service
metadata:
  name: my-load-balancer
spec:
  ports:
  - port: 80
    targetPort: 80
  selector:
    app: my-app
  type: LoadBalancer

Zapewnia to zewnętrzny adres IP, na którym aplikacja jest dostępna, ale nie mogę znaleźć sposobu, aby skonfigurować go tak, aby korzystał z adresu IP, który chcę. Dokumentacja usług wymienia ustawienie spec.clusterIP, ale wydaje się, że nie dotyczy to zewnętrznego adresu IP. Podobnie po skonfigurowaniu modułu równoważenia obciążenia pole status.loadBalancer.ingress.ip usługi jest ustawiane na zewnętrzny adres IP, ale nie wydaje się, aby było to ustawienie konfigurowalne.

Alternatywnie próbowałem ręcznie utworzyć regułę przekazywania w konsoli Google Compute Engine, aby skierować ruch z mojego statycznego adresu IP do puli docelowej skonfigurowanej przez Kubernetes, ale kiedy próbuję się połączyć, połączenie jest odrzucane.

Czy jest jakiś sposób, aby zrobić to, co chcę - ujawnić moduł Kubernetes (lub kontroler replikacji) w silniku Google Kubernetes na wybranym statycznym adresie IP?

Ben
źródło

Odpowiedzi:

9

TL; DR Google Container Engine z uruchomionym Kubernetes v1.1 obsługuje loadBalancerIPpo prostu zaznacz najpierw automatycznie przypisany adres IP jako statyczny .

Kubernetes v1.1 obsługuje zewnętrzne IP :

apiVersion: v1
kind: Service
spec:
  type: LoadBalancer
  loadBalancerIP: 10.10.10.10
  ...

Jak dotąd nie ma naprawdę dobrej, spójnej dokumentacji na temat używania jej w GCE. Pewne jest, że ten adres IP musi być najpierw jednym ze wstępnie przydzielonych statycznych adresów IP.

Cross-Region równoważenia obciążenia dokumentacja jest głównie dla Compute Engine i nie Kubernetes / pojemnik Engine, ale nadal przydatny zwłaszcza część „Konfigurowanie równoważenia obciążenia usługi”.

Jeśli po prostu utworzysz Kubernetes LoadBalancer w GCE, utworzy on sieciowy silnik obliczeniowy> Sieć> Równoważenie obciążenia sieciowego> Reguła przekazywania wskazująca na pulę docelową utworzoną z twoich komputerów w klastrze (zwykle tylko te, które działają na Podsach pasujących do selektora usług) . Wygląda na to, że usunięcie przestrzeni nazw nie porządnie usuwa utworzonych reguł.


Aktualizacja

W rzeczywistości jest teraz obsługiwany (mimo że jest udokumentowany):

  1. Sprawdź, czy korzystasz z Kubernetes 1.1 lub nowszego (w GKE edytuj klaster i zaznacz „Wersja węzła”)
  2. W obszarze Sieć> Zewnętrzne adresy IP powinieneś już oznaczyć efemeryczne wskazujące na wystąpienie maszyny wirtualnej klastra (jeśli nie lub nie loadBalancerIPjesteś pewien, wdróż je bez , poczekaj, aż przydzielony zostanie zewnętrzny adres IP podczas uruchamiania kubectl get svc, i wyszukaj ten adres IP w polu lista na tej stronie). Zaznacz jedną z nich jako statyczne , powiedzmy, że zewnętrzny adres jest 10.10.10.10.
  3. Edytuj swój LoadBalancer tak, aby miał loadBalancerIP=10.10.10.10jak wyżej (dostosuj do adresu IP podanego przez Google).

Teraz, jeśli usuniesz LoadBalancer, a nawet przestrzeń nazw, powinien zachować ten adres IP podczas ponownej instalacji w tym klastrze. Jeśli musisz zmienić klaster, powinno być możliwe ręczne skrzypienie:

  1. W sekcji „Równoważenie obciążenia sieciowego” na karcie „Pule docelowe” kliknij przycisk „Utwórz pulę docelową”:
    • Nazwa: cluster-pool(lub jakakolwiek inna nazwa)
    • Region: wybierz region jednego ze swoich klastrów
    • Kontrola zdrowia: Opcjonalnie, jeśli chcesz
    • Wybierz istniejące grupy instancji: Twój klaster Kubernetes
  2. W sekcji „Równoważenie obciążenia sieciowego” na karcie „Reguły przekazywania” kliknij przycisk „Utwórz regułę przekazywania”:
    • Nazwa: http-cross-region-gfr(lub jakakolwiek inna nazwa)
    • Region: wybierz region jednego ze swoich klastrów
    • Zewnętrzny adres IP: wybierz loadbalancer-ip-crossregionwłaśnie zarezerwowany
    • Pula docelowa: Wybierz cluster-poolwłaśnie utworzony
Wernight
źródło
Czy te są nadal aktualne?
Ben,
8

Dobre wieści. Zostanie to naprawione w Kubernetes v1.1. Możesz ustawićservice.spec.loadBalancerIP polu adres IP, który znasz.


Poprzedni:

Jest to funkcja, która spadła przez pęknięcia. Miał działać (a może nawet w pewnym momencie zadziałał), ale nie został dobrze przetestowany i został zepsuty po drodze, a następnie jakby przypadkowo zaprojektowany (tymczasowo).

Jest na mojej krótkiej liście rzeczy do naprawy po 1.0.

https://github.com/GoogleCloudPlatform/kubernetes/issues/10323

Tim Hockin
źródło
To prawdopodobnie powinien być komentarz, a nie odpowiedź.
Totem - Przywróć Monikę
5
@Ward: „To niemożliwe” z dev jest odpowiedzią, IMHO, i to zostało przyjęte jako takie.
Sven