13

Tôi có hai dịch vụ, S1 trong cụm K1 và S2 trong cụm K2. Họ có các yêu cầu phần cứng khác nhau. Dịch vụ S1 cần nói chuyện với S2.Cách gọi một dịch vụ được nhóm Kubernetes tiếp xúc từ cụm Kubernetes khác trong cùng một dự án

Tôi không muốn hiển thị IP công khai cho S2 do lý do bảo mật. Sử dụng NodePorts trên các trường hợp tính toán của cụm K2 với cân bằng tải mạng sẽ linh hoạt vì tôi sẽ phải thêm/xóa các cá thể tính toán của K2 trong nhóm đích mỗi khi một nút được thêm vào/gỡ bỏ trong K2.

Có điều gì đó giống như "bộ chọn dịch vụ" để tự động cập nhật hồ bơi đích không? Nếu không, có cách tiếp cận nào khác tốt hơn cho trường hợp sử dụng này không?

+0

Xem câu trả lời của tôi tại đây: https://stackoverflow.com/questions/35812076/access-http-service-running-in-gke-from-google-dataflow/44844390#44844390 –

Trả lời

11

tôi có thể nghĩ đến một vài cách để truy cập các dịch vụ trên nhiều cụm kết nối với cùng một mạng riêng GCP:

  1. đường Bastion vào k2 cho tất cả các dịch vụ k2 của:

    Tìm SERVICE_CLUSTER_IP_RANGE cho cụm k2. Trên GKE, nó sẽ là lĩnh vực servicesIpv4Cidr trong đầu ra của cụm mô tả:

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

    Thêm một quy tắc định tuyến tiên tiến để lấy giao thông dành cho rằng phạm vi và tuyến đường nó vào một nút trong k2:

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

    Điều này sẽ gây ra k2-node-0 cho các yêu cầu proxy từ mạng riêng cho bất kỳ dịch vụ nào của k2. Điều này có nhược điểm rõ ràng là cho việc làm thêm k2-node-0, nhưng nó rất đơn giản.

  2. Cài đặt kube-kube-proxy trên tất cả các nút trong k1.

    Hãy nhìn vào hiện đang chạy Kube-proxy trên bất kỳ nút trong k2:

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

    Sao chép k2 của kubeconfig để mỗi nút trong k1 (nói /var/lib/kube-proxy/kubeconfig-v2) và bắt đầu một Kube-proxy thứ hai trên mỗi nút :

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

    Hiện tại, mỗi nút trong k1 xử lý proxy đến k2 cục bộ. Một chút khó khăn hơn để thiết lập, nhưng có tính chất mở rộng quy mô tốt hơn.

Như bạn thấy, không phải giải pháp nào cũng thanh lịch. Các cuộc thảo luận đang diễn ra về cách thiết lập kiểu này hoạt động tốt như thế nào trong Kubernetes. Bạn có thể xem tài liệu đề xuất Cluster Federation (cụ thể là phần Cross Cluster Service Discovery) và tham gia thảo luận bằng cách mở các vấn đề/gửi PR.

+0

CIDR được đảm bảo là duy nhất trên tất cả cụm trong một dự án? –

+0

Nếu bạn đang sử dụng GKE, có (duy nhất trên tất cả các cụm trong mạng). Nếu bạn đang tự triển khai các cụm kubernetes của riêng mình, điều đó tùy thuộc vào bạn để tránh va chạm. –

1

GKE bây giờ hỗ trợ cân bằng tải nội bộ:https://cloud.google.com/kubernetes-engine/docs/how-to/internal-load-balancing

Nó trường hợp sử dụng chính là để có một cân bằng tải mà không phải tiếp xúc với internet công cộng do đó, một dịch vụ chạy trên GKE có thể đạt được từ khác GCE máy ảo hoặc khác Các cụm GKE trong cùng một mạng.

Các vấn đề liên quan