W końcu to rozgryzłem. Aby to zrobić, poprosimy GKE, aby skonfigurował dla ciebie zewnętrzny moduł równoważenia obciążenia, a następnie wybiórczo zastępuje części stosu. Dobrą wiadomością jest to, że po drodze możesz także skonfigurować sprawdzanie kondycji HTTP, które GKE nie robi domyślnie.
Upewnij się, że masz statyczne IP dostępne z Google Cloud Platform. Możesz zamówić w Konsoli.
Pobierz na życzenie i działa z czymś takim:
kubectl expose rc api-server --name=api-server --port=8080,8081 --create-external-load-balancer=true
(używam portu 8080 dla HTTP kontroli zdrowotnej oraz 8081 do obsługi żądań gRPC).
--create-external-load-balancer=true
aktualizuje usługi Kubomenetes za pomocą reguły ingresu, ustawia pulę docelową, ustawia moduł równoważenia obciążenia sieciowego i dodaje regułę zapory. Będziemy musieli naprawić # 1 i # 3.
Dowiedz się, gdzie wszystko już działa.
export TARGET_POOL_NAME=$(gcloud compute target-pools list | head -n 2 | tail -n 1 | cut -d " " -f 1)
export EXTERNAL_IP=$(gcloud compute addresses list | head -n 2 | tail -n 1 | cut -d " " -f 3)
zamocować lekarskie do puli docelowej
gcloud compute http-health-checks create api-server-http-basic-check --port 8080 --request-path "/_health"
gcloud compute target-pools add-health-checks ${TARGET_POOL_NAME} --http-health-check api-server-http-basic-check
Utwórz nową regułę przekierowania, aby zastąpić jeden wygenerowany przez GKE
gcloud compute forwarding-rules create api-server \
--region us-central1 --port-range 8080-8081 \
--address ${EXTERNAL_IP} --target-pool ${TARGET_POOL_NAME}
Usuń oryginalny regułę przekazywania GKE
gcloud compute forwarding-rules delete $(gcloud compute forwarding-rules list | head -n 2 | tail -n 1 | cut -d " " -f 1)
Zaktualizuj usługę Kubernetes, aby umożliwić wjazd z nowego adresu IP:
kubectl patch services api-server -p "{\"status\":{\"loadBalancer\":{\"ingress\": [{\"ip\": \"${EXTERNAL_IP}\"} ]}}}"
To powinno wystarczyć!
Uważaj przy kopiowaniu, moje głowy i ogony działają dla mnie, ponieważ mam tylko jedną uruchomioną aplikację, ale możesz zobaczyć rzeczy w innej kolejności.
Zach - Cieszę się, że udało ci się to rozgryźć. Gdy tworzysz usługę w GKE, powinieneś być w stanie zażądać jej przypisania do określonego adresu IP. Więc jeśli utworzysz statyczny adres IP, powinieneś mieć możliwość przypisania go do twojej usługi. –
Dzięki za odpowiedź @RobertBailey! Widzę to jako flagę wiersza poleceń do eksponowania kubctl. Gdzie mogę umieścić public-ip w moim * _controller.json, jeśli używam 'kubectl create'? Myślę, że nadal muszę sięgnąć, aby dołączyć kontrolę stanu http, więc zbadanie, w jaki sposób został skonfigurowany, okazało się bardzo pouczające. –
Myślę, że przestarzałePublicIPs to pole, które chcesz (https://github.com/kubernetes/kubernetes/blob/master/pkg/api/v1/types.go#L1534-L1539), ale może to być nowe pole externalIPs powyżej to. I to dzieje się w pliku * _service.json, a nie w konfiguracji kontrolera replikacji. –