k8s之service

 K8s三种网络: node network

pod network

cluster network --> virtual ip --> service 规则

service:  kube-proxy监控api-server,api-server数据发生改变,相应的kube-proxy就会改变service规则,

service有三种工作模式:userspace, 1.1版本之前

                                     iptables, 1.10之前

                                     ipvs 1.11版本之后

kubectl delete svc redis

扫描二维码关注公众号,回复: 6951291 查看本文章

                    service  service

kubectl explain service

kubectl explain service.spec

service类型:

ExternalName, 集群外的服务引用到集群内 外部服务名称

ClusterIP, 仅用于集群内通信

NodePort, 用于与集群外通信

LoadBalancer,部署到虚拟机,虚拟机工作在环境中,云环境支持负载均衡,lbaas, 类似nodeport负载均衡

清单文件创建service

ClusterIP, 仅用于集群内通信  访问时service先指向clusterip,在指向pod ip

kubectl explain service.spec.ports

vim redis-svc.yaml

apiVersion: v1

kind: Service

metadata:

  name: redis  service名称

  namespace: default

spec:

  selector:  选取的pod标签 关联到pod

    app: redis 

    role: logstor

  clusterIP: 10.97.97.97 设定clusterip

  type: ClusterIP 选取clusterip类型的service

  ports:

  - port: 6379  service端口 引用的service端口与后端pod建立关系

    targetPort: 6379  指定的pod的端口

kubectl apply -f redis-svc.yaml 创建service

kubectl get svc 查询service

kubectl describe svc redis   service-redis的详细信息

Endpoints:         10.244.1.66:6379  后端地址,即关联的pod地址

资源记录:SVC_NAMe.NS_NAME.DOMAIN.LTD.

          服务名  名称空间    集群域名后缀

       集群域名默认后缀  svc.cluster.local.

      比如:刚创建的service 名为redis,  那么域名为:

           redis.default.svc.cluster.local.

       直接访问域名就可以访问服务了,并解析pod地址了

nodeport默认分配端口 30000-32797

创建nodeport服务

引用前面deploy控制器myapp-deploy创建的pod

cp redis-svc.yaml myapp-svc.yaml

vim myapp-svc.yaml

apiVersion: v1

kind: Service

metadata:  service属性

  name: myapp

  namespace: default

spec:

  selector:

    app: myapp 关联pod

    release: canary

  clusterIP: 10.99.99.99 指定clusterip

  type: NodePort  指定service类型

  ports:

  - port: 80  service端口

   targetPort: 80 关联的pod端口

   nodePort: 30080  外部访问node的端口

  

kubectl create -f myapp-svc.yaml  创建service

kubectl get svc

80:30080/TCP

service端口80  映射  node端口30080

测试

在外面访问任一节点 比如192.168.81.10:30080

while true; do curl http://192.168.81.30:30080/;sleep 1;done

ExternalName

集群内的pod访问集群外的资源,

kubectl explain svc.spec.externalName

sessionAffinity

kubectl explain svc.spec

 sessionAffinity <string>  保持会话IP 同一个IP请求始终发往同一个后端pod

kubectl patch svc myapp -p '{"spec":{"sessionAffinity":"ClientIP"}}'

kubectl describe svc myapp 查看是否加上sessionAffinity

kubectl patch svc myapp -p '{"spec":{"sessionAffinity":"None"}}' 改回None,就不会始终发往一个pod

headless  无头service 无头服务 service直接指向pod IP

cp myapp-svc.yaml myapp-headless.yaml

vim myapp-headless.yaml

apiVersion: v1

kind: Service

metadata:

  name: myapp-svc

  namespace: default

spec:

  selector:

    app: myapp

    release: canary

  clusterIP: None

  ports:

  - port: 80

targetPort: 80

 kubectl apply -f myapp-headless.yaml

kubectl get svc

安装dig命令 yum install bind-utils -y

查询coreDns

kubectl get svc -n kube-system

解析service

    dig -t A myapp-svc.default.svc.cluster.local. @10.96.0.10

                    服务域名             @指定coredns

解析的结果为后端podip

        

对于前面service类型为clusterip

dig -t A myapp.default.svc.cluster.local. @10.96.0.10

解析结果为CLUSTER-IP

猜你喜欢

转载自www.cnblogs.com/leiwenbin627/p/11300746.html