Dịch vụ là lớp trừu tượng trên Pod. Nó định nghĩa một tập hợp logic các Pod. Nó cung cấp một địa chỉ IP và tên DNS duy nhất mà các pod có thể được truy cập. Nó được sử dụng để hiển thị các pod.
Có 3 loại Dịch vụ khác nhau trong Kubernetes:
Nhấp vàođâyđể biết thêm về Dịch vụ Kubernetes.
Trong bài viết này, chúng ta sẽ xem các bước để tạo Serice kiểu NodePort.
Tạo một tệp mới và thêm nội dung sau vào đó, thao tác này sẽ tạo một triển khai cho Nginx.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22537%22%3E%3C/svg%3E
Để tạo một triển khai, hãy thực hiện lệnh sau.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%2264%22%3E%3C/svg%3E
Điều này sẽ tạo ra một triển khai cho Nginx với 3 bản sao.
Bạn có thể nhận được thông tin chi tiết về triển khai, bộ bản sao và pod bằng cách sử dụng lệnh sau lệnh.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22240%22%3E%3C/svg%3E
Trong ảnh chụp màn hình ở trên, bạn có thể thấy 3 bản sao của Nginx đã được tạo.
Bây giờ, hãy tạo định nghĩa Dịch vụ bằng cách sử dụng lệnh sau nội dung.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22587%22%3E%3C/svg%3E
Định nghĩa dịch vụ ở trên sẽ tạo một Dịch vụ loại NodePort bằng cách sử dụng không gian tên mặc định và chuyển hướng các yêu cầu đến Pod khớp với nhãn nginx, tức là các pod mà chúng ta đã tạo bằng bước tạo triển khai trước đó.
Thực hiện lệnh sau để tạo Dịch vụ.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22125%22%3E%3C/svg%3E
Lấy thông tin chi tiết về dịch vụ và kiểm tra NodePort mà dịch vụ sẽ được có sẵn.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22376%22%3E%3C/svg%3E
Trong ảnh chụp màn hình ở trên, có thể thấy Dịch vụ khả dụng trên Cổng 30747. Điều này có thể khác đối với bạn vì cổng được chỉ định ngẫu nhiên từ phạm vi khả dụng.
Bây giờ, ứng dụng nginx có thể được truy cập thông qua dịch vụ này trên NodeIp:NodePort
Ở đây, đó là:106.210.138.189:30747
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22147%22%3E%3C/svg%3E
Dịch vụ Kubernetes là một khái niệm trừu tượng xác định một tập hợp logic các Pod và chính sách để truy cập chúng. Dịch vụ cho phép giao tiếp giữa các thành phần khác nhau bên trong và bên ngoài cụm Kubernetes của bạn, cung cấp giao diện ổn định cho các Pod có thể thay đổi theo thời gian.
Làm thế nào để tạo Dịch vụ trong Kubernetes?
Để tạo Dịch vụ, bạn có thể sử dụng tệp YAML để xác định cấu hình Dịch vụ. Sau khi xác định, hãy áp dụng cấu hình đó bằng
Các loại Dịch vụ khác nhau trong Kubernetes là gì?
Các loại chính là ClusterIP (mặc định, có thể truy cập trong cụm), NodePort (phơi bày Dịch vụ trên IP của mỗi Node tại một cổng tĩnh), LoadBalancer (tích hợp với bộ cân bằng tải dựa trên đám mây) và ExternalName (ánh xạ Dịch vụ thành tên DNS).
Làm cách nào để phơi bày Dịch vụ của tôi bên ngoài cụm Kubernetes?
Sử dụng Dịch vụ loại NodePort hoặc LoadBalancer. NodePort phơi bày Dịch vụ trên một cổng tĩnh trên IP của Node. LoadBalancer sử dụng bộ cân bằng tải của nhà cung cấp đám mây để hiển thị Dịch vụ.
Tôi có thể tạo Dịch vụ mà không cần tệp YAML không?
Có, bạn có thể sử dụng
Làm cách nào để xác định địa chỉ IP và cổng của Dịch vụ Kubernetes của tôi?
Sử dụng
Dịch vụ khám phá Pod trong Kubernetes như thế nào?
Dịch vụ sử dụng nhãn để chọn Pod. Khi bạn xác định một Dịch vụ, bạn chỉ định một bộ chọn khớp với nhãn của các Pod mà bạn muốn dịch vụ đó nhắm mục tiêu.
Dịch vụ Kubernetes có thể cân bằng tải lưu lượng tới các Pod không?
Có, Dịch vụ sẽ tự động cân bằng tải lưu lượng tới tất cả các Pod khớp với bộ chọn của Dịch vụ.
Làm cách nào để cập nhật Dịch vụ trong Kubernetes?
Cập nhật tệp cấu hình YAML của Dịch vụ, sau đó áp dụng các thay đổi bằng cách sử dụng
Điều gì sẽ xảy ra với Dịch vụ nếu các Pod mà nó nhắm mục tiêu bị xóa?
Dịch vụ vẫn tiếp tục tồn tại nhưng sẽ không chuyển tiếp lưu lượng cho đến khi các Pod mới khớp với bộ chọn của nó được tạo.
Làm cách nào để xóa Dịch vụ trong Kubernetes?
Sử dụng kubectl delete service [service-name] để xóa Dịch vụ. Điều này sẽ không ảnh hưởng đến các Pod, nhưng chúng sẽ không còn có thể truy cập được thông qua Dịch vụ đó nữa.
Một Dịch vụ trong Kubernetes có thể trải rộng trên nhiều không gian tên không?
Không, Dịch vụ là dành riêng cho không gian tên. Để giao tiếp qua các không gian tên, bạn cần sử dụng không gian tên như một phần của tên Dịch vụ DNS.
ort.
Có 3 loại Dịch vụ khác nhau trong Kubernetes:
- ClusterIP:
Nó hiển thị dịch vụ trong cụm Kubernetes. Dịch vụ nàychỉ có thể truy cập được từ bên trong cụm. Không thể truy cập từ bên ngoài cụm. - NodePort:
Nó sẽ phơi bày dịch vụ trên một cổng tĩnh trên nút được triển khai. Dịch vụ này có thể được truy cập từ bên ngoài cụm bằng cách sử dụng NodeIP:Nodeport. - Load Balancer:
Phơi bày Dịch vụ bên ngoài bằng cách sử dụng bộ cân bằng tải của nhà cung cấp đám mây, điều này tạo ra một IP công khai trên nhà cung cấp Đám mây - ExternalName:
Nó ánh xạ Dịch vụ tới nội dung của trường externalName bằng cách trả về một bản ghi CNAME
Nhấp vàođâyđể biết thêm về Dịch vụ Kubernetes.
Trong bài viết này, chúng ta sẽ xem các bước để tạo Serice kiểu NodePort.
Điều kiện tiên quyết
- Cụm Kubernetes có ít nhất 1 nút worker.
Nếu bạn muốn tìm hiểu cách tạo Cụm Kubernetes, hãy nhấp vào đây. Hướng dẫn này sẽ giúp bạn tạo cụm Kubernetes với 1 Master và 2 Node trên AWS Ubuntu EC2 Instances.
Những gì chúng ta sẽ làm
- Tạo aService
Tạo aService
Đầu tiên, chúng ta sẽ tạo một triển khai bằng cách sử dụng định nghĩa sau mà dịch vụ sẽ chuyển hướng tất cả các yêu cầu đến đó.Tạo một tệp mới và thêm nội dung sau vào đó, thao tác này sẽ tạo một triển khai cho Nginx.
Mã:
vim my-deployment.yml
Mã:
apiVersion: apps/v1
kind: Deployment
metadata: name: nginx
spec: strategy: type: Recreate selector: matchLabels: app: nginx replicas: 3 template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx ports: - containerPort: 80
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22537%22%3E%3C/svg%3E
Để tạo một triển khai, hãy thực hiện lệnh sau.
Mã:
kubectl create -f my-deployment.yml
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%2264%22%3E%3C/svg%3E
Điều này sẽ tạo ra một triển khai cho Nginx với 3 bản sao.
Bạn có thể nhận được thông tin chi tiết về triển khai, bộ bản sao và pod bằng cách sử dụng lệnh sau lệnh.
Mã:
kubectl get deployment | grep nginx
Mã:
kubectl get pod | grep nginx
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22240%22%3E%3C/svg%3E
Trong ảnh chụp màn hình ở trên, bạn có thể thấy 3 bản sao của Nginx đã được tạo.
Bây giờ, hãy tạo định nghĩa Dịch vụ bằng cách sử dụng lệnh sau nội dung.
Mã:
vim my-service.yml
Mã:
apiVersion: v1
kind: Service
metadata: name: nginx namespace: default labels: app: nginx
spec: externalTrafficPolicy: Local ports: - name: http port: 80 protocol: TCP targetPort: 80 selector:
app: nginx type: NodePort
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22587%22%3E%3C/svg%3E
Định nghĩa dịch vụ ở trên sẽ tạo một Dịch vụ loại NodePort bằng cách sử dụng không gian tên mặc định và chuyển hướng các yêu cầu đến Pod khớp với nhãn nginx, tức là các pod mà chúng ta đã tạo bằng bước tạo triển khai trước đó.
Thực hiện lệnh sau để tạo Dịch vụ.
Mã:
kubectl create -f my-service.yml
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22125%22%3E%3C/svg%3E
Lấy thông tin chi tiết về dịch vụ và kiểm tra NodePort mà dịch vụ sẽ được có sẵn.
Mã:
kubectl get service | grep nginx
Mã:
kubectl describe service nginx
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22376%22%3E%3C/svg%3E
Trong ảnh chụp màn hình ở trên, có thể thấy Dịch vụ khả dụng trên Cổng 30747. Điều này có thể khác đối với bạn vì cổng được chỉ định ngẫu nhiên từ phạm vi khả dụng.
Bây giờ, ứng dụng nginx có thể được truy cập thông qua dịch vụ này trên NodeIp:NodePort
Ở đây, đó là:106.210.138.189:30747
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22147%22%3E%3C/svg%3E
Câu hỏi thường gặp về việc tạo dịch vụ trong Kubernetes
Dịch vụ Kubernetes là gì và tại sao nó lại quan trọng?Dịch vụ Kubernetes là một khái niệm trừu tượng xác định một tập hợp logic các Pod và chính sách để truy cập chúng. Dịch vụ cho phép giao tiếp giữa các thành phần khác nhau bên trong và bên ngoài cụm Kubernetes của bạn, cung cấp giao diện ổn định cho các Pod có thể thay đổi theo thời gian.
Làm thế nào để tạo Dịch vụ trong Kubernetes?
Để tạo Dịch vụ, bạn có thể sử dụng tệp YAML để xác định cấu hình Dịch vụ. Sau khi xác định, hãy áp dụng cấu hình đó bằng
kubectl apply -f [filename.yaml]
. Lệnh này tạo một Dịch vụ dựa trên các thông số kỹ thuật trong tệp YAML của bạn.Các loại Dịch vụ khác nhau trong Kubernetes là gì?
Các loại chính là ClusterIP (mặc định, có thể truy cập trong cụm), NodePort (phơi bày Dịch vụ trên IP của mỗi Node tại một cổng tĩnh), LoadBalancer (tích hợp với bộ cân bằng tải dựa trên đám mây) và ExternalName (ánh xạ Dịch vụ thành tên DNS).
Làm cách nào để phơi bày Dịch vụ của tôi bên ngoài cụm Kubernetes?
Sử dụng Dịch vụ loại NodePort hoặc LoadBalancer. NodePort phơi bày Dịch vụ trên một cổng tĩnh trên IP của Node. LoadBalancer sử dụng bộ cân bằng tải của nhà cung cấp đám mây để hiển thị Dịch vụ.
Tôi có thể tạo Dịch vụ mà không cần tệp YAML không?
Có, bạn có thể sử dụng
kubectl expose
để tạo Dịch vụ từ dòng lệnh. Ví dụ: kubectl expose deployment [deployment-name] --type=LoadBalancer --name=[service-name]
.Làm cách nào để xác định địa chỉ IP và cổng của Dịch vụ Kubernetes của tôi?
Sử dụng
kubectl get services
để liệt kê tất cả các Dịch vụ. Thao tác này sẽ hiển thị cho bạn địa chỉ IP nội bộ và cổng được gán cho từng Dịch vụ.Dịch vụ khám phá Pod trong Kubernetes như thế nào?
Dịch vụ sử dụng nhãn để chọn Pod. Khi bạn xác định một Dịch vụ, bạn chỉ định một bộ chọn khớp với nhãn của các Pod mà bạn muốn dịch vụ đó nhắm mục tiêu.
Dịch vụ Kubernetes có thể cân bằng tải lưu lượng tới các Pod không?
Có, Dịch vụ sẽ tự động cân bằng tải lưu lượng tới tất cả các Pod khớp với bộ chọn của Dịch vụ.
Làm cách nào để cập nhật Dịch vụ trong Kubernetes?
Cập nhật tệp cấu hình YAML của Dịch vụ, sau đó áp dụng các thay đổi bằng cách sử dụng
kubectl apply -f [filename.yaml]
. Kubernetes sẽ cập nhật Dịch vụ theo các thông số kỹ thuật đã sửa đổi.Điều gì sẽ xảy ra với Dịch vụ nếu các Pod mà nó nhắm mục tiêu bị xóa?
Dịch vụ vẫn tiếp tục tồn tại nhưng sẽ không chuyển tiếp lưu lượng cho đến khi các Pod mới khớp với bộ chọn của nó được tạo.
Làm cách nào để xóa Dịch vụ trong Kubernetes?
Sử dụng kubectl delete service [service-name] để xóa Dịch vụ. Điều này sẽ không ảnh hưởng đến các Pod, nhưng chúng sẽ không còn có thể truy cập được thông qua Dịch vụ đó nữa.
Một Dịch vụ trong Kubernetes có thể trải rộng trên nhiều không gian tên không?
Không, Dịch vụ là dành riêng cho không gian tên. Để giao tiếp qua các không gian tên, bạn cần sử dụng không gian tên như một phần của tên Dịch vụ DNS.