Điểm:1

Làm cách nào để tạo dịch vụ Kubernetes định tuyến lưu lượng truy cập đến các nhóm khác nhau dựa trên cổng?

lá cờ ng

Tôi muốn có một loại Dịch vụ thuộc loại LoadBalancer trỏ đến một nginx trên cổng 80 và trỏ đến một nhóm sshd riêng cho cổng 22. Tuy nhiên, tôi không thể định tuyến dựa trên cổng bằng một bộ chọn duy nhất.

Trường hợp sử dụng mà tôi sắp thực hiện tương tự như github.com chấp nhận lưu lượng truy cập vào github.com cho cổng 80 cũng như 22 cho lưu lượng ssh. Vì vậy, DNS sẽ trỏ đến một tập hợp các bộ cân bằng tải k8 trong trường hợp này mà tôi cho rằng sẽ định tuyến đến các nhóm thích hợp trên mỗi cổng.Vì vậy, nếu tôi đang đi sai hướng, hãy để tôi biết. Tôi mở cho các giải pháp khác.

Điều tôi muốn tránh làm là thiết lập một nhóm riêng biệt như HAProxy định tuyến trên mỗi cổng.

Tôi đã xem xét sử dụng Ingress, nhưng điều đó chỉ dành cho lưu lượng HTTP.

Một Ingress không hiển thị các cổng hoặc giao thức tùy ý. Việc hiển thị các dịch vụ khác ngoài HTTP và HTTPS với internet thường sử dụng dịch vụ loại Service.Type=NodePort hoặc Service.Type=LoadBalancer.

https://kubernetes.io/docs/concepts/services-networking/ingress/

mozello avatar
lá cờ cn
Xin chào Matt, bạn có thể vui lòng sửa cụm từ của mình 'Tuy nhiên, tôi không thể định tuyến dựa trên cổng với một bộ chọn duy nhất' không? 'w/' là gì?
mozello avatar
lá cờ cn
Bạn có biết rằng Kubernetes Ingress có thể hiển thị các cổng TCP như được mô tả [tại đây](https://kubernetes.github.io/ingress-nginx/user-guide/exposed-tcp-udp-services/) không? Bạn đã thiết lập cụm k8s của mình như thế nào (nhà cung cấp dịch vụ đám mây hoặc tại chỗ)? Bạn đang sử dụng phiên bản k8s nào?
lá cờ ng
@IvanM. Tôi hiện đang chạy cục bộ này bằng cách sử dụng loại trên kubernetes v1.23.3. Để LoadBalancer hoạt động, tôi đang sử dụng metallb. Tuy nhiên, hãy để tôi kiểm tra liên kết đó. Tôi thấy rằng bộ điều khiển nginx mở rộng bộ điều khiển xâm nhập mặc định của kubernetes.
Điểm:1
lá cờ cn

Điều tôi muốn tránh làm là thiết lập một nhóm riêng biệt như HAProxy định tuyến trên mỗi cổng.

Bạn không cần thiết lập Pod riêng biệt như vậy.

Kubernetes Ingress theo mặc định không hỗ trợ các dịch vụ TCP hoặc UDP. Nhưng ví dụ, ingress-nginx bộ điều khiển cung cấp cơ chế hỗ trợ TCP hoặc UDP trên các cổng khác nhau. Bạn có thể hiển thị các cổng TCP hoặc UDP bằng cách sửa đổi Bản đồ cấu hình.

Vì lý do này, bộ điều khiển Ingress này sử dụng các cờ '--tcp-services-configmap' và '--udp-services-configmap' để trỏ đến một bản đồ cấu hình hiện có trong đó khóa là cổng bên ngoài để sử dụng và giá trị cho biết dịch vụ để hiển thị bằng cách sử dụng định dạng:

<không gian tên/tên dịch vụ>:<cổng dịch vụ>:[PROXY]:[PROXY]

Kiểm tra thông tin bổ sung đây.

ConfigMap như vậy đã có sẵn trước triển khai Bộ điều khiển xâm nhập.

Vì vậy, hãy cố gắng:

1. Tạo một Bản đồ cấu hình với cấu hình dịch vụ TCP sau.

$ mèo xâm nhập-nginx-tcp.yml
phiên bản api: v1
loại: Bản đồ cấu hình
metadata:
  tên: xâm nhập-nginx-tcp
  không gian tên: mặc định  
dữ liệu:
  "22": không gian tên đích/dịch vụ đích:22

2. Trỏ bộ điều khiển Ingress tới ConfigMap này bằng cách sử dụng --tcp-services-configmap cờ trong cấu hình như thế này:

$ kubectl nhận triển khai ingress-nginx-controller -o yaml
apiVersion: ứng dụng/v1
loại: Triển khai
metadata:
  tên: bộ điều khiển xâm nhập-nginx
  không gian tên: mặc định
thông số kỹ thuật:
...
  mẫu:
...
    thông số kỹ thuật:
      hộp đựng:
      - lập luận:
        - /nginx-ingress-bộ điều khiển
        - --tcp-services-configmap=$(POD_NAMESPACE)/ingress-nginx-tcp
...

3. Hiển thị cổng 22 trong Dịch vụ được xác định cho Sự xâm nhập như thế này:

$ kubectl get svc ingress-nginx-controller -o yaml 
phiên bản api: v1
loại: Dịch vụ
metadata:
  tên: bộ điều khiển xâm nhập-nginx
  không gian tên: mặc định
thông số kỹ thuật:
  cổng:
  - tên: tcp-22
    nútPort: 30957
    cổng: 22
    giao thức: TCP
    cổng mục tiêu: 22
...
  loại: LoadBalancer
...

Bạn có thể xác định bất kỳ số lượng cổng nào có thể được hiển thị bằng phương pháp này.

Có một lựa chọn khác cho những người đang sử dụng một biểu đồ điều khiển ingress-nginx. Hầu hết các cấu hình đã được thực hiện và bạn chỉ cần chỉ định các cổng của mình trong tcp phần như thế này:
tcp: 
  2222: "mặc định/ví dụ-tcp-svc:22"

ở đâu 2222 là cổng tiếp xúc và 22 là cổng dịch vụ.

Điểm:0
lá cờ ng

Cảm ơn @Ivan M. đã chỉ cho tôi đi đúng hướng, tôi chỉ muốn thêm một ví dụ mã về giải pháp tại đây:

Trước hết, điều khó hiểu là tài liệu kubernetes dẫn tôi đi sai đường khi nghĩ rằng bạn không thể sử dụng đường vào cho lưu lượng truy cập không phải http. Điều mà bạn phải biết là bạn có thể sử dụng một bộ điều khiển xâm nhập khác. Với bộ điều khiển xâm nhập nginx, bạn có thể ủy quyền lưu lượng truy cập tcp hoặc thậm chí udp tùy ý.

Rào cản thứ hai là có hai kho lưu trữ riêng biệt cho quá trình xâm nhập nginx. Những người đang có:

Tôi đã kết thúc việc sử dụng bộ điều khiển kubernetes/ingress-nginx.

nginx-values.yaml

bộ điều khiển:
  dịch vụ:
    enableHttp: đúng

tcp:
  "22": "không gian tên khác/tên dịch vụ:22"

Sau đó, chúng tôi có cài đặt helm

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
cập nhật repo helm
helm -n nginx -f nginx-values.yaml cài đặt ingress-nginx ingress-nginx/ingress-nginx

Sau đó, tôi cài đặt Ingress vào k8s. chú ý xâm nhậpClassName

ingress.yaml

apiVersion: mạng.k8s.io/v1
loại: Xâm nhập
metadata:
  tên: my-ingress
  không gian tên: nginx
thông số kỹ thuật:
  ingressClassName: nginx
  phụ trợ mặc định:
    dịch vụ:
      tên: dịch vụ http của tôi
      Hải cảng:
        số: 80

Và sau đó bạn kubectl cậu bé hư đó

áp dụng kubectl -f ingress.yaml

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.