Kubernetes Service - Truy cập Service trong Kubernetes
Service trong Kubernetes là một tài nguyên để quản lý Pod và cung cấp các chính sách truy cập đến các Pod đó.
Hiểu một cách đơn giản, để có thể truy cập vào các Pod trên Kubernetes thì cần phải khai báo Service cho nó, các loại Service trong Kubernetes bao gồm:
- ClusterIP: Expose 1 port để giao tiếp với Pod trong cluster với internal IP. Loại này thường được sử dụng trong trường hợp Pod chỉ giao tiếp nội bộ với nhau trong cùng cluster (bên ngoài/end user sẽ không truy cập được). Đây là loại mặc định của Service.
- NodePort: Expose 1 static public port (mặc định trong khoảng 30000 - 32767) cho Pod trên mỗi Node IP, được hiểu là Kubernetes sẽ NAT port để cho phép người sử dụng có thể truy cập vào các Pod đang được deploy trên Node đó từ bên ngoài bằng địa chỉ: <NodeIP>:<NodePort>. Loại này thường được sử dụng trong trường hợp phục vụ test/thử nghiệm.
- LoadBalancer: Expose 1 public port cho Pod trên 1 địa chỉ IP, cho phép người sử dụng truy cập dịch vụ từ bên ngoài. Điểm khác biệt so với NodePort, đó là lưu lượng này sẽ được phân tải cho tất cả các Pod trên các Node theo cơ chế load balancer (cân bằng tải). Loại này thường được sử dụng khi cần cung cấp truy cập đến dịch vụ cho người dùng.
- ExternalName: Đây là loại service có cơ chế tách biệt một chút so với 3 loại service phía trên. Loại service này không sử dụng selectors mà thay vào đó lại sử dụng tên DNS. Nó ánh xạ một service với một tên DNS là nội dung của trường externalName (Ví dụ: app.test.com). Khi bạn muốn truy cập vào tên service đó, thay vì trả về cluster-ip của service này, nó sẽ trả về bản ghi CNAME với giá trị được đề cập trong externalName
Cùng tìm hiểu cách khai báo các Service trong Kubernetes theo ví dụ sau:
- Tạo Pod:
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
labels:
app: myapp
type: front-end
spec:
containers:
- name: nginx-container
image: nginx
- Khai báo Service ClusterIP:
apiVersion: v1
kind: Service
metadata:
name: front-end-service
spec:
type: ClusterIP
selector:
app: myapp
type: front-end
ports:
- targetPort: 80
port: 80
- Khai báo Service NodePort:
apiVersion: v1
kind: Service
metadata:
name: myapp-service
spec:
type: NodePort
selector:
app: myapp
type: front-end
ports:
- targetPort: 80
port: 80
nodePort: 32593
- Khai báo Service LoadBalancer:
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
type: LoadBalancer
ports:
- port: 80
targetPort: 9376
nodePort: 31000
selector:
app: myapp
- Khai báo Service ExternalName:
apiVersion: v1
kind: Service
metadata:
name: "google-service"
spec:
ports:
- port: 80
type: ExternalName
externalName: google.com
Tham khảo: https://kubernetes.io/docs/concepts/services-networking/service/
No Comments