Sự khác biệt giữa cảng Container và cảng mục tiêu ở Kubernetes?
Làm thế nào là container portkhác nhau từ targetportstrong một container trong Kubernetes? Chúng có được sử dụng thay thế cho nhau không, nếu vậy tại sao?
Tôi đã xem qua đoạn mã dưới đây, nơi containerPortđược sử dụng để biểu thị porttrên một nhóm trong Kubernetes.
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgres-deployment
labels:
app: demo-voting-app
spec:
replicas: 1
selector:
matchLabels:
name: postgres-pod
app: demo-voting-app
template:
metadata:
name: postgres-pod
labels:
name: postgres-pod
app: demo-voting-app
spec:
containers:
- name: postgres
image: postgres:9.4
ports:
- containerPort: 5432
Trong đoạn mã trên, họ đã đưa ra 5432 cho containerPorttham số (ở dòng cuối cùng). Vì vậy, làm thế nào là điều này containerPortkhác với targetport?
Theo như tôi biết, thuật ngữ portnói chung đề cập đến porttrên service(Kubernetes). Sửa cho tôi nếu tôi không chính xác.
Trả lời
Tóm lại: targetPort và containerPortvề cơ bản đề cập đến cùng một cổng (vì vậy nếu cả hai được sử dụng, chúng được mong đợi có cùng giá trị) nhưng chúng được sử dụng trong hai ngữ cảnh khác nhau và có mục đích hoàn toàn khác nhau.
Chúng không thể được sử dụng thay thế cho nhau vì cả hai đều là một phần của đặc điểm kỹ thuật của hai tài nguyên / đối tượng kubernetes riêng biệt: Servicevà Podtương ứng. Mặc dù mục đích của containerPortcó thể được coi là thông tin thuần túy, nhưng targetPortđược yêu cầu bởi mục đích thể hiện Servicemột tập hợp Pods.
Điều quan trọng là phải hiểu rằng bằng cách khai báo containerPortvới giá trị cụ thể trong Pod/ Deploymentđặc tả của bạn, bạn không thể thực hiện việc Podđể lộ cổng cụ thể này, ví dụ: nếu bạn khai báo trong containerPorttrường rằng nginx của bạn Podhiển thị cổng 8080thay vì mặc định 80, bạn vẫn cần phải định cấu hình máy chủ nginx trong vùng chứa của mình để nghe trên cổng này.
Khai báo containerPorttrong Podđặc tả là tùy chọn. Ngay cả khi không có nó, bạn Servicesẽ biết nơi hướng dẫn yêu cầu dựa trên thông tin mà nó đã khai báo trong nó targetPort.
Nên nhớ rằng không bắt buộc phải khai báo targetPorttrong Serviceđịnh nghĩa. Nếu bạn bỏ qua nó, nó sẽ mặc định là giá trị mà bạn đã khai báo port(là cổng của Servicechính nó).
ContainerPort in pod spec
Danh sách các cổng để lộ ra khỏi container. Việc hiển thị một cổng ở đây cung cấp cho hệ thống thông tin bổ sung về các kết nối mạng mà vùng chứa sử dụng, nhưng chủ yếu là thông tin. Không chỉ định cổng ở đây KHÔNG ngăn cổng đó bị lộ
targetPort trong thông số dịch vụ
Số hoặc tên của cổng để truy cập trên các nhóm được dịch vụ nhắm mục tiêu. Số phải nằm trong khoảng từ 1 đến 65535. Tên phải là IANA_SVC_NAME. Nếu đây là một chuỗi, nó sẽ được tìm kiếm dưới dạng một cổng được đặt tên trong các cổng vùng chứa của Pod đích. Nếu điều này không được chỉ định, giá trị của trường 'cổng' sẽ được sử dụng (bản đồ nhận dạng).
Do đó targetPorttrong dịch vụ cần phải khớp với containerPortthông số kỹ thuật trong nhóm vì đó là cách dịch vụ biết cảng container nào là đích để chuyển tiếp lưu lượng truy cập đến.