將一組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
建立成功之後,可以使用上面介紹的方法來檢視測試服務