Kubernete Service 是一個定義了一組Pod的策略的抽象,咱們也有時候叫作宏觀服務。這些被服務標記的Pod都是(通常)經過label Selector決定的node
對於Kubernete原生的應用,Kubernete提供了一個簡單的Endpoints API,這個Endpoints api的做用就是當一個服務中的pod發生變化時,Endpoints API隨之變化,對於哪些不是原生的程序,Kubernetes提供了一個基於虛擬IP的網橋的服務,這個服務會將請求轉發到對應的後臺podnginx
第一步:編寫部署nginx-svc的yml文件web
╭─root@node1 ~ ╰─➤ vim nginx-svc.yml apiVersion: extensions/v1beta1 kind: Deployment metadata: name: nginx1 spec: replicas: 2 template: metadata: labels: name: web # 標籤 service spec: containers: - name: nginx image: nginx ports: - containerPort: 80 # 暴露在pod的ip上的端口 --- apiVersion: v1 kind: Service metadata: name: my-svc spec: selector: name: web # 標籤 labels ports: - port: 80 # service暴露的端口 targetPort: 80 # pods的端口
第二步:運行yml文件vim
╭─root@node1 ~ ╰─➤ kubectl apply -f nginx-svc.yml
第三步:查看標籤api
╭─root@node1 ~ ╰─➤ kubectl get po -o wide --show-labels NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES LABELS nginx1-7f56c7b7f8-qxqbg 1/1 Running 0 2m33s 10.244.1.6 node2 <none> <none> name=web,pod-template-hash=7f56c7b7f8 nginx1-7f56c7b7f8-zjt9m 1/1 Running 0 2m33s 10.244.2.11 node3 <none> <none> name=web,pod-template-hash=7f56c7b7f8
查看namespaceapp
╭─root@node1 ~ ╰─➤ kubectl get namespace NAME STATUS AGE default Active 2d19h kube-node-lease Active 2d19h kube-public Active 2d19h kube-system Active 2d19h
編輯yml文件ide
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: nginx1 namespace: kube-system # 指定namespace spec: replicas: 2 template: metadata: labels: name: web spec: containers: - name: nginx image: nginx ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: my-svc namespace: kube-system # 指定namespace spec: selector: name: web ports: - port: 80
其中:spa
第一步:修改yml文件code
kind: Deployment metadata: name: nginx1 spec: replicas: 2 template: metadata: labels: name: web spec: containers: - name: nginx image: nginx ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: my-svc spec: type: NodePort # 選擇service端口暴露方式 selector: name: web ports: - port: 80 targetPort: 80 nodePort: 30007 # 端口選擇範圍 30000-32767
第二步:執行yml文件blog
╭─root@node1 ~ ╰─➤ kubectl apply -f nginx-svc.yml
第三步:查看svc
╭─root@node1 ~ ╰─➤ kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 2d19h my-svc NodePort 10.109.183.148 <none> 80:30007/TCP 9s
第四步:查看主機端口
╭─root@node1 ~ ╰─➤ ss -ntl |grep 30007 LISTEN 0 128 :::30007 :::*
service暴露端口的四種方式:
- clusterIP
- NodePort
- LoadBalance
- ExternalName