1、Service簡介
- Service爲Pod提供固定服務端點
- Service的本質是一條iptables或者ipvs的轉發規則
- userspace:1.1-
- iptables:1.1+
- ipvs:1.11+
2、Service類型
- ExternalName
- ClusterIP:使用集羣網絡提供服務
- NodePort:直接使用節點網絡提供服務
- LoadBalancer:例如k8s構建在阿里雲上,能夠直接使用阿里雲提供的SLB服務
3、使用清單建立service
# cat redis-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: redis-svc
namespace: default
spec:
selector: #支持等值選擇器
app: redis
role: logstor
clusterIP: 10.99.99.99 #客戶不指定,會自動分配
type: ClusterIP
ports:
- port: 6379 #Service端端口
targetPort: 6379 #Pod端端口
# cat myapp-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: myapp-svc
namespace: default
spec:
selector: #支持等值選擇器
app: myapp
release: canary
clusterIP: 10.99.99.100
type: NodePort
ports:
- port: 80 #Service端端口
targetPort: 80 #Pod端端口
nodePort: 10080 #節點端端口,端口範圍:30000-32767
4、資源記錄
- SVC_NAME.NS_NAME.DOMAIN.LTD. :資源記錄格式
- svc.cluster.local. :默認域名後綴
- redis-svc.default.svc.cluster.local. :以上redis-svc的資源記錄endpoint
5、回話粘性
# kubectl patch svc myapp-svc -p '{"spec":{"sessionAffinity":"ClientIP"}}' #來自同一個IP的客戶端調度到同一個pod,默認none
6、無頭Service(Headless)
- 正常的service:service_name --> cluster_ip
- 無頭的service:service_name --> pod_ip
# cat myapp-svc-headless.yaml
apiVersion: v1
kind: Service
metadata:
name: myapp-svc-headless
namespace: default
spec:
selector:
app: myapp
release: canary
clusterIP: "None"
ports:
- port: 80
targetPort: 80
# dig -t A myapp-svc-headless.default.svc.cluster.local. @10.244.0.2 #10.244.0.2爲coreDNS的地址,能夠解析到myAPP的pod的因此ip
7、開啓kubernetes支持ipvs
# vim /etc/sysconfig/kubelet
KUBE_PROXY_MODE=ipvs
開機裝載ip_vs ip_vs_rr ip_vs_wrr ip_vs_sh nf_conntrack_ipv4模塊