Cuối cùng tôi đã tìm ra điều này. Để làm điều này, bạn yêu cầu GKE thiết lập bộ cân bằng tải bên ngoài cho bạn, sau đó bạn thay thế một cách có chọn lọc các phần của chồng. Tin tốt là trên đường đi, bạn cũng có thể thiết lập kiểm tra sức khỏe HTTP, mà GKE không thực hiện theo mặc định.
Đảm bảo bạn có IP tĩnh có sẵn từ Google Cloud Platform. Bạn có thể yêu cầu trong Bảng điều khiển.
Nhận dịch vụ của bạn và chạy với một cái gì đó như:
kubectl expose rc api-server --name=api-server --port=8080,8081 --create-external-load-balancer=true
(Tôi đang sử dụng cổng 8080 để kiểm tra sức khỏe HTTP và 8081 để phục vụ yêu cầu gRPC).
--create-external-load-balancer=true
cập nhật dịch vụ Kubernetes với quy tắc nhập, thiết lập nhóm đích, thiết lập cân bằng tải mạng và thêm quy tắc tường lửa. Chúng ta sẽ phải sửa # 1 và # 3.
Tìm ra nơi mọi thứ đang chạy.
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)
Gắn kiểm tra sức khỏe đến hồ bơi tiêu
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
Tạo một quy tắc chuyển tiếp mới để thay thế một tạo ra bởi GKE
gcloud compute forwarding-rules create api-server \
--region us-central1 --port-range 8080-8081 \
--address ${EXTERNAL_IP} --target-pool ${TARGET_POOL_NAME}
Xóa quy tắc chuyển tiếp GKE gốc
gcloud compute forwarding-rules delete $(gcloud compute forwarding-rules list | head -n 2 | tail -n 1 | cut -d " " -f 1)
Cập nhật Dịch vụ Kubernetes để cho phép xâm nhập từ IP mới:
kubectl patch services api-server -p "{\"status\":{\"loadBalancer\":{\"ingress\": [{\"ip\": \"${EXTERNAL_IP}\"} ]}}}"
Điều đó nên làm điều đó!
Hãy cẩn thận với việc dán sao chép, đầu và đuôi của tôi hoạt động vì tôi chỉ có một ứng dụng đang chạy, nhưng bạn có thể thấy mọi thứ theo một thứ tự khác.
Zach - Tôi rất vui khi bạn có thể tìm ra điều này. Khi bạn tạo một dịch vụ trong GKE, bạn sẽ có thể yêu cầu nó được gán cho một địa chỉ IP cụ thể. Vì vậy, nếu bạn tạo một IP tĩnh, bạn sẽ có thể có được gán cho dịch vụ của bạn. –
Cảm ơn bạn đã phản hồi @RobertBailey! Tôi thấy rằng như một cờ dòng lệnh để kubctl phơi bày. Tôi đặt ip công khai trong * _controller.json của mình ở đâu nếu tôi đang sử dụng 'kubectl create'? Tôi nghĩ rằng tôi vẫn cần tiếp cận để đính kèm kiểm tra sức khỏe http, vì vậy hãy khám phá cách thức thiết lập đã kết thúc thực sự mang tính thông tin. –
Tôi nghĩ rằng việc không dùng nữaPublicIPs là trường bạn muốn (https://github.com/kubernetes/kubernetes/blob/master/pkg/api/v1/types.go#L1534-L1539) nhưng có thể là trường externalIPs mới ở trên nó. Và điều này nằm trong tệp * _service.json của bạn chứ không phải cấu hình bộ điều khiển nhân bản. –