前面把Pod看的差不多了今天開始弄service,service在K8S集群中就像黑暗街道上的指路燈,告訴你Pod的方向(因為Pod是有生命周期的,所以Pod的IP是不固定的只能通過service幫你轉發(fā)信息)。service也有很多類型如:ExternalName, ClusterIP, NodePort,LoadBalancer。
service類型:
- ClusterIP:service默認類型梧兼,作為node內部使用的service。
- NodePort:可以把Node內部的Pod服務映射到Node節(jié)點上智听,從而實現(xiàn)外部可以訪問內部服務羽杰。
- LoadBalancer: 使用一個ClusterIP & NodePort,但是會向云計算提供者申請映射到service本身的負載均衡到推。
- ExternalName:通過kube-dns讓內部服務可以訪問外部資源考赛。
ClusterIP資源清單編寫:
例子:
apiVersion: v1
kind: service
metadata:
name: www-clusterip
namespace: default
spce:
selector:
app: nginx
version: v2.2
clusterIP: 10.99.99.99
type: clusterIP
ports:
- port: 80
targetPort: 80
#clusterIP可以不用設置讓系統(tǒng)自動分配也建議這樣。
#ports字段中的port:service使用的端口號莉测。targetPort:Pod端口號颜骤。
啟動service:
kubectl apply -f nginx-clusterip.yaml
注:還有一個比較特殊的ClusterIP是clusterIP字段的值為“None”時service是沒有IP的,但你解析service主機名時又會發(fā)現(xiàn)他能解析出他管理的Pod IP捣卤。
NodePort資源清單編寫:
例子:
apiVersion: v1
kind: service
metadata:
name: nginx-nodeport
namespace: default
spce:
selector:
app: nginx
version: v3.2
type: NodePort
sessionAffinity: ClientIP
ports:
port: 80
targetPort: 80
nodePort: 30080
#nodePort:把service內部的Pod 80端口映射到節(jié)點上的30080端口上忍抽。
#sessionAffinity:訪問者第一次訪問那個Pod以后就一直訪問這個Pod。