k8s入門之Service(六)

景少發表於2022-04-21

將一組pod公開為網路服務,通過service代理,可以實現負載均衡

一、ClusterIP

此方式只能在叢集內訪問

1.使用命令暴露已存在的pod

(1)繼續使用前面章節的案例,檢視名稱為nginx的deploy下的pod

kubectl get pod -n dev -owide

進入每個pod容器,更改index.html內容

kubectl exec nginx-6799fc88d8-2rf2c -it /bin/bash -n dev
cd /usr/share/nginx/html/
rm -rf index.html
touche index.html
echo 1111 >> index.html
kubectl exec nginx-6799fc88d8-rnhmd -it /bin/bash -n dev
cd /usr/share/nginx/html/
rm -rf index.html
touche index.html
echo 2222 >> index.htm

(2)使用curl命令訪問pod的ip,檢視更改後的結果

(3)通過ClusterIP的方式暴露pod,預設就是ClusterIP

kubectl expose deploy nginx  --name=svc-nginx --port=8000 --target-port=80 --type=ClusterIP -n dev

(4)檢視暴露後的service

 kubectl get svc -n dev

可以看到分配了一個ClusterIP

(5)訪問ClusterIp,檢視結果

service把請求負載均衡的分發給後面代理的pod進行處理,可以看到輸出結果不一樣

(6) 在容器內部通過域名的方式訪問:服務名.名稱空間.svc:port

進入某個pod容器

kubectl exec nginx-6799fc88d8-2rf2c -n dev -it /bin/bash

在容器內部執行curl命令訪問服務的域名

2.刪除服務

 kubectl delete svc svc-nginx -n dev

3.通過yaml建立服務

編寫svc-nginx.yaml檔案

apiVersion: v1
kind: Service
metadata:
  labels:
    app: svc-nginx
  name: svc-nginx
  namespace: dev
spec:
  selector:
    #選擇指定標籤的Deployment
    app: nginx
  type: ClusterIP
  ports:
  - port: 8000
    protocol: TCP
    targetPort: 80

建立nginx服務

kubectl apply -f svc-nginx.yaml

二、NodePort

此方式不僅能在叢集內訪問,也可以在叢集外部訪問,NodePort範圍在 30000-32767 之間

1.使用命令暴露已存在的pod

(1)繼續使用前面章節的案例,檢視名稱為nginx的deploy下的pod

kubectl get pod -n dev -owide

進入每個pod容器,更改index.html內容

kubectl exec nginx-6799fc88d8-2rf2c -it /bin/bash -n dev
cd /usr/share/nginx/html/
rm -rf index.html
touche index.html
echo 1111 >> index.html
kubectl exec nginx-6799fc88d8-rnhmd -it /bin/bash -n dev
cd /usr/share/nginx/html/
rm -rf index.html
touche index.html
echo 2222 >> index.htm

(2)使用curl訪問pod的ip檢視更改後的結果

(3)通過NodePort的方式暴露pod,不指定--name引數,service的名稱預設為deploy的名稱

kubectl expose deploy nginx --port=8000 --target-port=80 --type=NodePort -n dev

(4)檢視暴露後的service

 kubectl get svc -n dev

(5)在叢集內訪問ClusterIp,檢視結果

service把請求負載均衡的分發給後面代理的pod進行處理

(6)在叢集外訪問

2.刪除服務

kubectl delete svc nginx -n dev

3.通過yaml建立服務

apiVersion: v1
kind: Service
metadata:
  labels:
    app: svc-nginx
  name: svc-nginx
  namespace: dev
spec:
  selector:
    #選擇指定標籤的Deployment
    app: nginx
  #注意指定type為NodePort
  type: NodePort
  ports:
  - port: 8000
    protocol: TCP
    targetPort: 80
    #指定暴露的埠號,不設定就預設隨機一個
    #nodePort: 31234

建立成功之後,可以使用上面介紹的方法來檢視測試服務

相關文章