7、kubernetes资源清单之Service资源190714

一、Service简介

  • Service为Pod提供固定服务端点
  • Service的本质是一条iptables或者ipvs的转发规则
  • userspace:1.1-
  • iptables:1.1+
  • ipvs:1.11+

二、Service类型

  • ExternalName
  • ClusterIP:使用集群网络提供服务
  • NodePort:直接使用节点网络提供服务
  • LoadBalancer:例如k8s构建在阿里云上,可以直接使用阿里云提供的SLB服务

三、使用清单创建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

四、资源记录

  • SVC_NAME.NS_NAME.DOMAIN.LTD. :资源记录格式
  • svc.cluster.local. :默认域名后缀
  • redis-svc.default.svc.cluster.local. :以上redis-svc的资源记录endpoint

五、回话粘性

# kubectl patch svc myapp-svc -p '{"spec":{"sessionAffinity":"ClientIP"}}'  #来自同一个IP的客户端调度到同一个pod,默认none

六、无头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

七、开启kubernetes支持ipvs

# vim /etc/sysconfig/kubelet
KUBE_PROXY_MODE=ipvs

开机装载ip_vs ip_vs_rr ip_vs_wrr ip_vs_sh nf_conntrack_ipv4模块
posted @ 2019-07-14 21:30  生生不息.连绵不绝  阅读(444)  评论(0编辑  收藏  举报