4.1.k8s.svc(Service)

#Service

Service provides load balancing layer 4 Pod, Access -> Service -> Pod group

# 4 types

  • ClusterIP default, assign a VIP, internal access only
  • NodePort ClusterIP basis, in each node to bind a port of external access
  • LoadBalancer in NodePort based on the external load balancer forwarded to NodePort
  • ExternalName outside into the interior of the cluster service to the cluster, the cluster.

# Proxy mode

  • iptables proxy mode

  • ipvs proxy mode

    #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 address https://www.cnblogs.com/elvi/p/11755749.html
article git https://gitee.com/almi/k8s/tree/master/notes address

Guess you like

Origin www.cnblogs.com/elvi/p/11755749.html