0
点赞
收藏
分享

微信扫一扫

kubernetes学习笔记-service资源



service:

工作模式3种:

userspace(1.1ver) --> iptables(1.10ver) --> ipvs(1.11ver);

要使用ipvs在安装初始化时指定,--feature-gates=SupportIPVSProxyMode=true


要经2级调度;

4层调度,无法拆https报文,k8s有引入集群外部流量的方式ingress,7层调度;


service到pod,中间有endpoints(也是k8s对象),由endpoints连至后端,可为service手动创建endpoints资源;


类型,kubectl explain svc.spec.type:

ClusterIP #如果定义为None,则为headless server

NodePort #以ClusterIP为基础,client --> NodeIP:NodePort --> ClusterIP:ServicePort --> PodIP:containerPort

LoadBalancer #在NodePort上的增强,适用于云环境主机及IaaS层的loadbalance

ExternalName #适用于k8s集群内的pod client访问互联网


资源记录:

SVC_NAME.NS_NAME.DOMAIN.LTD.

svc.cluster.local.

redis.default.svc.cluster.local.

service_name: cluster_ip #可解析


client pod(user space) --> service IP(kernel space) --> kube-proxy(user space)封装报文代理至kernel space --> service IP(kernel space)--> 由kube-proxy负责调度,kube-proxy是工作在用户空间的进程,要转发2次效率低;

kubernetes学习笔记6-service资源_k8s



client pod --> service IP中的iptables规则直接调度;

k8s 1.11ver默认用ipvs,如果没有则自动降级为iptables;

如果后端的pod资源发生改变,如service标签选择器适用的pod多了1个,多的信息会立即反应到master中api server上的etcd中,kube-proxy会监控到这些变化,并将其转为iptables规则,这个过程是实时的;

kubernetes学习笔记6-service资源_kubernet_service_02



kubectl explain svc

kubectl explain svc.spec

#

ports,service ip:port与后端容器的服务建立关联关系,port|targetPort,port为service的,targetPort为容器的,nodePort在使用NodePort类型时才用到;

selector关联到哪些pod资源上;

clusterIP,10.96.0.0/12,在此网段内可自定义,注意冲突,不建议自定义;若clusterIP定义为None或"",表示headless无头service,即service_name直接解析至后端pod,而不是server_name解析至clusterIP

type,默认ClusterIP|NodePort|LoadBalancer|ExternalName

sessionAffinity <string> #默认None



例:

vim redis-svc.yaml

apiVersion: v1

kind: Service

metadata:

name: redis

namespace: default

spec:
selector:

app: redis

role: logstore

clusterIP: 10.97.97.97

type: ClusterIP

ports:

- port: 6379

targetPort: 6379


kubectl apply -f redis-svc.yaml

kubectl get svc

kubectl describe svc redis #service到pod,中间有endpoints(也是k8s对象),由endpoints连至后端,可为service手动创建endpoints资源


kubectl get pods --show-labels


例:

vim myapp-svc.yaml

apiVersion: v1

kind: Service

metadata:

name: myapp #myapp-svc

namespace: default

spec:

selector:

app: myapp

release: canary

,无头service,statefulSet要用到

去掉

ports:

- port: 80

targetPort: 80

可以不指定,在宿主机上的端口会在30000-32797之间随机分配


kubectl apply -f myapp-svc.yaml

kubectl get svc

while true; do curl http://172.20.0.66:30080/hostname.html; sleep 1; done #要做2级转发,node port-->service port-->pod port


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

kubectl describe svc myapp

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


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

kubectl get svc -n kube-system

kubectl get svc





举报

相关推荐

0 条评论