4.1.k8s.svc(Service)


#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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM