Cách chọn địa chỉ IP bên ngoài của bộ cân bằng tải Kubernetes trong Google Kubernetes Engine


16

Tôi đang triển khai một ứng dụng web bằng Google Kubernetes Engine và tôi muốn làm cho nó có thể truy cập được thông qua bộ cân bằng tải trên một địa chỉ IP tĩnh hiện có mà tôi kiểm soát như một phần của cùng một dự án trong Google Cloud Platform, vì tên miền tôi muốn sử dụng đã trỏ đến IP này.

Tệp yaml tôi đã sử dụng cho nhóm là:

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

Tôi có thể thiết lập bộ cân bằng tải bằng cách sử dụng:

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

Điều này cung cấp một IP bên ngoài mà ứng dụng có thể truy cập được, nhưng tôi không thể tìm thấy bất kỳ cách nào để định cấu hình nó để sử dụng IP tôi muốn. Các tài liệu dịch vụ đề cập đến một khung cảnh spec.clusterIP, nhưng điều này dường như không liên quan đến IP bên ngoài. Tương tự, khi bộ cân bằng tải được thiết lập, trường status.loadBalancer.ingress.ip của dịch vụ được đặt thành địa chỉ IP bên ngoài của nó, nhưng đây dường như không phải là cài đặt có thể định cấu hình.

Để thay thế, tôi đã thử tạo thủ công quy tắc chuyển tiếp trong bảng điều khiển Google Compute Engine để điều hướng lưu lượng truy cập từ địa chỉ IP tĩnh của tôi đến nhóm mục tiêu do Kubernetes thiết lập, nhưng khi tôi cố gắng kết nối thì kết nối bị từ chối.

Có cách nào để làm những gì tôi muốn - để hiển thị nhóm Kubernetes (hoặc bộ điều khiển sao chép) trên công cụ Google Kubernetes trên địa chỉ IP tĩnh đã chọn không?

Câu trả lời:


9

TL; DR Google Container Engine chạy Kubernetes v1.1loadBalancerIP chỉ hỗ trợ đánh dấu IP được gán tự động là tĩnh trước.

Kubernetes v1.1 hỗ trợ cácIP ngoài :

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

Cho đến nay không có tài liệu nhất quán thực sự tốt về cách sử dụng nó trên GCE. Điều chắc chắn là IP này trước tiên phải là một trong những IP tĩnh được phân bổ trước của bạn .

Các cross-khu vực cân bằng tải tài liệu chủ yếu là đối với Compute Engine và không Kubernetes / container Engine, nhưng nó vẫn còn hữu ích đặc biệt là phần "Cấu hình tải dịch vụ cân bằng".

Nếu bạn chỉ tạo Kubernetes LoadBalancer trên GCE, nó sẽ tạo một mạng Compute Engine> Network> Cân bằng tải mạng> Quy tắc chuyển tiếp trỏ đến nhóm mục tiêu được tạo từ các máy của bạn trên cụm của bạn (thông thường chỉ những máy chạy Pods phù hợp với bộ chọn dịch vụ) . Có vẻ như xóa một không gian tên không làm sạch các quy tắc được tạo.


Cập nhật

Nó thực sự được hỗ trợ (mặc dù theo tài liệu):

  1. Kiểm tra xem bạn đang chạy Kubernetes 1.1 trở lên (trong GKE chỉnh sửa cụm của bạn và kiểm tra "Phiên bản nút")
  2. Trong Kết nối mạng> Địa chỉ IP bên ngoài, bạn sẽ có một số Ephemeral được đánh dấu là trỏ đến thể hiện VM của cụm của bạn (nếu không hoặc không chắc chắn, hãy triển khai một lần mà không có loadBalancerIP, đợi cho đến khi bạn có IP bên ngoài được phân bổ khi bạn chạy kubectl get svcvà tìm IP đó trong danh sách trên trang đó). Đánh dấu một trong số chúng là tĩnh , giả sử nó là Địa chỉ bên ngoài10.10.10.10 .
  3. Chỉnh sửa LoadBalancer của bạn để có loadBalancerIP=10.10.10.10như trên (thích ứng với IP được Google cung cấp cho bạn).

Bây giờ nếu bạn xóa LoadBalancer hoặc thậm chí không gian tên của mình, nó sẽ giữ địa chỉ IP đó khi triển khai lại trên cụm đó. Nếu bạn cần thay đổi cụm, một số thao tác thủ công nên có thể:

  1. Trong phần Cân bằng tải mạng của mạng Phần mềm, các nhóm mục tiêu nhóm của Google , nhấp vào nút Tạo ra nhóm mục tiêu Nhóm nút:
    • Tên: cluster-pool(hoặc bất kỳ tên nào khác)
    • Vùng: Chọn vùng của một trong các cụm của bạn
    • Kiểm tra sức khỏe: Tùy chọn, nếu bạn muốn
    • Chọn các nhóm đối tượng hiện có: Cụm Kubernetes của bạn
  2. Trong phần Cân bằng tải mạng của mạng Phần, các quy tắc Chuyển tiếp của tab Tab , nhấp vào Tạo ra quy tắc chuyển tiếp Nút nút:
    • Tên: http-cross-region-gfr(hoặc bất kỳ tên nào khác)
    • Vùng: Chọn vùng của một trong các cụm của bạn
    • IP bên ngoài: Chọn loadbalancer-ip-crossregionbạn vừa đặt trước
    • Nhóm mục tiêu: Chọn cluster-poolbạn vừa tạo

Là những vẫn còn có liên quan?
Ben

8

Tin tốt. Điều này sẽ được sửa trong Kubernetes v1.1. Bạn có thể đặt service.spec.loadBalancerIPtrường thành IP mà bạn biết bạn sở hữu.


Trước:

Đây là một tính năng rơi qua các vết nứt. Nó được cho là hoạt động (và thậm chí có thể đã hoạt động tại một số điểm), nhưng không được thử nghiệm tốt và bị hỏng trên đường đi và sau đó loại vô tình được thiết kế (tạm thời).

Nó nằm trong danh sách ngắn của tôi về những thứ cần khắc phục sau 1.0.

https://github.com/GoogleCloudPl Platform/kubernetes/issues/10323


Đây có lẽ nên là một bình luận, không phải là một câu trả lời.
Phường - Tái lập Monica

5
@Ward: "Không thể" từ nhà phát triển một câu trả lời, IMHO và nó đã được chấp nhận như vậy.
Sven
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.