七、kubernetes資源清單之Service資源190714

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

  • ClusterIP類型:經過svc的IP訪問
# 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端端口
  • NodePort類型:經過訪問node的IP訪問
# 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模塊
相關文章
相關標籤/搜索