jquery网站后台,公司装修费用会计分录,外贸网站的建设,可信赖的做网站一、基础概述 1.当通过deployment等controller动态创建和销毁pod使得每个pod都有自己的ip地址#xff0c;当controller用新的pod替代发生故障的pod时#xff0c;新的pod会分配到新的ip地址#xff0c;那么客户端如何稳定的找到并访问pod提供的服务。 2.创建service service从…一、基础概述 1.当通过deployment等controller动态创建和销毁pod使得每个pod都有自己的ip地址当controller用新的pod替代发生故障的pod时新的pod会分配到新的ip地址那么客户端如何稳定的找到并访问pod提供的服务。 2.创建service service从逻辑上代表一组pod是由label挑选出来service拥有自己的ip这个ip地址不变客户端只需要访问service的ipkubernetes负责建立和维护service和pod之间的映射关系。 上述两个图表示创建一个deployment并启动了三个pod运行httpd镜像其中标签为label(run:httpd),service会用这个label来挑选pod。 其中三个pod都分配到各自的ip,这些ip地址只能被kubernetes cluster中的容器和节点访问。 上述示例创建了一个service,其中service的名字为httpd-svc,其selector指明挑选那些label为run:httpd的pod作为service的后端并将service的8080端口映射到pod的80端口 如上图所示可得http-svc分配到一个cluster-ip,可以通过该ip访问后端的httpd pod。 通过kubectl describe可以查看httpd-svc与pod的对应关系 上图中罗列了三个pod的ip和端口 3.cluster ip的底层实现 cluster ip是一个虚拟ip,是由kubernetes节点上的iptables规则管理 iptables中大概的规则是如果cluster内部的pod要访问httpd-svc则允许其他源地址访问httpd-svc,跳转到相应的规则上。iptables将访问service的流量转发到后端pod并使用轮询的负载均衡策略 注cluster的每一个节点都配置了相同的iptables规则这样可以确保整个cluster都能够通过service的cluster ip访问service。 4.dns访问service: 因为kubeadm在部署时会默认安装kube-dns组件每当有新的的service被创建kube-dns会添加该service的dns记录其cluster中的pod可以通过service_name.namespace_name访问service。 例如可以用httpd-svc.default来访问Service httpd-svc其中default可以省略可以直接使用httpd-svc来访问。 dns服务器是kube-dns.kube-system.svc.cluster.local这个实际上就是kube-dns组件其本身部署在kube-system namespace中的一个service。 如果需要访问其他namespace中的service,就必须带上namespace,kubectl get namespace可以查看已有的namespace。 5.外网如何访问service: kubernetes提供了多种类型的service,默认为cluster ip clusterIP:service通过cluster内部的ip对外提供服务只有cluster内的节点和pod可以访问 nodeport:service通过cluster节点的静态端口对外提供服务cluster外部可以通过nodeip:nodeport 访问service。 loadbalancer:cloud provider负责将load balancer的流量导入service。 上述示例为nodeport模式下的service,其中8080是clusterip监听的端口32312为节点上监听的端口每个节点都会监听此端口并将请求转发给service。 测试示例通过三个节点ip32312端口都可以访问httpd-svc,其访问的原理和clusterIP一样也是借助iptables。 配置文件中的三个port: nodeport是节点上监听的端口 port是clusterIP上监听的端口 targetport是pod上监听的端口 其中node和clusterIp在各自端口上接收的请求都会通过iptables转发到pod的targetPort