1,Service 介紹
(1)Kubernetes Service 從邏輯上代表了一組 Pod,具體是哪些 Pod 則是由 label 來挑選。
(2)Service 有自己 IP,而且這個 IP 是不變的。
- 客戶端只需要訪問 Service 的 IP,Kubernetes 則負責建立和維護 Service 與 Pod 的映射關系。
- 無論后端 Pod 如何變化,對客戶端不會有任何影響,因為 Service 沒有變
2,基本用法
(1)首先編輯一個配置文件 httpd.yml,內容如下:
多個資源文件可以都在一個 YAML 中定義,用“---”分割。這里我們將 Deployment 和 Service 都放在一個配置文件中:
- Deployment 部分:啟動了三個 pod,運行 httpd 鏡像,label 是 run:httpd,service 將會用這個 label 來挑選 pod。
- Service 部分:挑選那些 label 為 run:httpd 的 pod 作為 service 后端的,並且將 8080 端口映射到 pod 的 80 端口。
[root@k8s-master deploy]# cat deploy.yaml apiVersion: apps/v1 kind: Deployment metadata: name: httpd spec: selector: matchLabels: run: httpd replicas: 3 template: metadata: labels: run: httpd spec: containers: - name: httpd image: httpd ports: - containerPort: 80 --- apiVersion: v1 # v1是service的apiversion kind: Service # 當前資源的類型為 Service。 metadata: name: httpd-svc # Service 的名字為 httpd-svc。 spec: selector: # elector 指明挑選那些 label 為 run: httpd 的 Pod 作為 Service 的后端。 run: httpd ports: # 將 Service 的 8080 端口映射到 Pod 的 80 端口,使用 TCP 協議。 - protocol: TCP port: 8080 targetPort: 80
(2)、查看創建的pods,可以看到目前啟動了三個 pod,pod 分配了各自的 IP,這些 IP 只能被 kubernetes Cluster 中的容器和節點訪問
(3)、查看svc,查看到被分配的ip類型為ClusterIP,值為10.111.30.121
(4)、ping一下ip發現是不通的
(5)、clusetIp只能是默認在集群內部被curl,在集群外部是無法訪問的,集群外部訪問錯誤
3、創建集群外部訪問的service,NodePort類型
(1)、要啟用 NodePort,首先我們需要在 Service 配置中添加 type: NodePort。
(2)、查看創建好的nodeport類型的service
(3)、測試Cluster 外部可以通過 <NodeIP>:<NodePort> 訪問 Service,成功