kubernetes&&基礎學習3
Service
Service的概念
kubernetes Service定義了這樣一種抽象:一個Pod的邏輯分組,一種可以訪問它們的策略,通常稱爲微服務。
這一組Pod能夠被Service訪問到,通常是通過Label Selector
通過Label標籤,監控一組Pod
Service能夠提供負載均衡的能力,但是在使用上有以下的限制:
- 只提供4層負載均衡能力,而沒有7層功能,但有時我們可能需要更多的匹配規則來轉發請求,這點上4層負載均衡是不支持的
Service的類型
Service在k8s中有以下四種類型:
- ClusterIp : 默認類型,自動分配一個僅Cluster內部可以訪問的虛擬IP
- NodePort : 在ClusterIP 的基礎上爲每臺機器上綁定一個端口,這樣就可以通過NodeIP:NodePort來訪問該服務
- LoadBalancer :在NodePort的基礎上,藉助cloud provider創建一個外部負載均衡器,並將請求轉發到NodeIP:NodePort
- ExternalName : 把集羣外部的服務引入到集羣內部來,在集羣內部直接使用,沒有任何類型代理被創建,這隻有kubernetes 1.7或更高版本的kube-dns才支持
VIP和Service代理
代理模式的分類
# 查看所有svc信息
kubectl get svc
ClusterIP
實現過程
創建Deployment
爲Deployment綁定svc
# 查詢全部svc信息
kubectl get svc
# 查詢ipvs信息
ipvsadm -Ln
# 通過指定文件的方式刪除對應的svc
kubectl delete -f svc.yaml
Headless Service
NodePort
LoadBalancer
需要花錢
ExternalName
引入外部服務集羣至服務內部,令內部服務可以使用外部負載集羣。如引入mysql集羣。
7層代理
部署Ingress-Nginx
# 下載Ingress的yaml文件
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/mandatory.yaml
# 使用yaml文件創建Ingress-nginx的Pod
kubectl apply -f mandatory.yaml
# 下載svc的yaml文件
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/provider/baremetal/service-nodeport.yaml
# 運行
kubectl apply -f service-nodeport.yaml
# 查看當前ingress規則
kubectl get ingress
Ingress HTTPS 代理訪問
Nginx 進行 BasicAuth
Nginx進行重寫