在Kubernetes中,Pod雖然擁有獨立的IP, 但Pod會被快速地建立和刪除,因此不能通過Pod直接對外提供服務。通過服務(Service)這個抽象,能夠解耦前端和後端的關聯,從而實現松耦合的微服務設計。本文介紹如何通過控制台和Kubectl方式建立、更新和刪除服務。
控制台操作指導
建立服務
更新服務
Kubectl操作指導
Service YAML樣本
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: "intranet"
labels:
app: nignx
name: my-nginx-svc
namespace: default
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: nginx
type: LoadBalancer
欄位 | 說明 |
---|---|
kind |
定義資來源物件為Service。 |
metadata |
定義Service的名稱、Label和命名空間等基本資料。 |
metadata.annotations |
Container ServiceACK支援豐富的負載平衡相關的註解(Annotations)。例如,在上面的YAML樣本中,service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type 指定Service的訪問方式為intranet (私網訪問)。更多註解,請參見通過負載平衡(Server Load Balancer)訪問服務。
|
spec.selector |
定義Service的選取器。Service會根據Selector和Pod Label的匹配關係,確定Service所要關聯暴露的後端Pod。 |
spec.ports.port |
定義Service暴露給ClusterIP的連接埠,叢集內部用戶端訪問Service的入口,即clusterIP:port 。
|
spec.ports.targetPort |
定義後端Pod的連接埠。從port 進來的流量,經由kube-proxy流入到後端Pod的targetPort 上,最後進入容器。
|
spec.type |
定義Service的被訪問方式。
|
建立Service
更新Service
- 方式1:執行以下命令,更新Service。
kubectl edit service my-nginx-svc
- 方式2:手動刪除舊的Service,修改YAML檔案後,重新建立Service。
kubectl apply -f my-nginx-svc.yaml
刪除Service
執行以下命令,刪除Service。
kubectl delete service my-nginx-svc