K8S service詳解


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,成功


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM