#Service
Service為Pod提供4層負載均衡, 訪問 -> Service -> Pod組
#4種類型
- ClusterIP 默認,分配一個VIP,只能內部訪問
- NodePort ClusterIP基礎上,在每個節點綁定一個對外訪問端口
- LoadBalancer 在NodePort基礎上,外部負載均衡器轉發到NodePort
- ExternalName 集群外部的服務引入到集群內部來,集群內部使用
#代理模式
-
iptables 代理模式
-
ipvs 代理模式
#ips輪詢模式 rr 輪詢調度 lc 最小連接數 dh 目標哈希 sh 源哈希 sed 最短期望延遲 nq 不排隊調度
#svc-demo.yaml
#Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-deploy
namespace: default
spec:
replicas: 3
selector:
matchLabels:
app: myapp
release: s1
template:
metadata:
labels:
app: myapp
release: s1
env: test
spec:
containers:
- name: myapp
image: alivv/nginx:node
imagePullPolicy: IfNotPresent
ports:
- name: http
containerPort: 80
---
#ClusterIP
apiVersion: v1
kind: Service
metadata:
name: svc-ip
namespace: default
spec:
type: ClusterIP
selector:
app: myapp
release: s1
ports:
- name: http
port: 80
targetPort: 80
---
#Headless Service
apiVersion: v1
kind: Service
metadata:
name: svc-headless
namespace: default
spec:
selector:
app: myapp
clusterIP: "None"
ports:
- port: 80
targetPort: 80
---
#NodePort
apiVersion: v1
kind: Service
metadata:
name: svc-port
namespace: default
spec:
type: NodePort
selector:
app: myapp
release: s1
ports:
- name: http
port: 80
targetPort: 80
---
#ExternalName
kind: Service
apiVersion: v1
metadata:
name: svc-cname
namespace: default
spec:
type: ExternalName
externalName: hub.elven.vip
#創建
kubectl apply -f svc-demo.yaml
#查看
kubectl get pod
kubectl get deployment
kubectl get svc
##ClusterIP
#curl訪問svc-ip查看輪詢效果
svc_ip=$(kubectl get svc |awk '/svc-ip/{print $3}')
for((i=1;i<10;i++));do curl $svc_ip ;done
##Headless Service #無頭service
#不分配Cluster IP ,service name直接解析為Pod ip
#查看kube-dns ip 默認是10.96.0.10
kubectl get svc -A |grep kube-dns
#指定dns解析svc
dig -t A @10.96.0.10 svc-headless.default.svc.cluster.local
##NodePort
#訪問node-ip:port
##ExternalName
#DNS層CNAME別名方式綁定外部地址,訪問Service實際訪問外部地址
#指定dns解析svc-cname,查看到cname記錄
dig -t A @10.96.0.10 svc-cname.default.svc.cluster.local
#刪除
kubectl delete -f svc-demo.yaml
Blog地址 https://www.cnblogs.com/elvi/p/11755749.html
本文git地址 https://gitee.com/almi/k8s/tree/master/notes