kubernetes service 补充

kubernetes service 补充

service类型

用户可以通过ServiceType来指定如何来发布服务,类型有以下几种:

ClusterIP:提供一个集群内部的虚拟IP以供Pod访问(service默认类型)。
在这里插入图片描述

NodePort:在每个Node上打开一个端口以供外部访问

LoadBalancer:通过外部的负载均衡器来访问

服务发现

环境变量: 当创建一个Pod的时候,kubelet会在该Pod中注入集群内所有Service的相关环境变量。需要注意的是,要想一个Pod中注入某个Service的环境变量,则必须Service要先比该Pod创建。这一点,几乎使得这种方式进行服务发现不可用。

DNS:可以通过cluster add-on的方式轻松的创建KubeDNS来对集群内的Service进行服务发现————这也是k8s官方强烈推荐的方式。为了让Pod中的容器可以使用kube-dns来解析域名,k8s会修改容器的/etc/resolv.conf配置。

kube-proxy iptables

kube-proxy监听service和endpoint的变化,将需要新增的规则添加到iptables中。

kube-proxy只是作为controller,而不是server,真正服务的是内核的netfilter,体现在用户态则是iptables。

kube-proxy的iptables方式也支持RoundRobin(默认模式)和SessionAffinity负载分发策略。

kubernetes只操作了filter和nat表。

Filter:在该表中,一个基本原则是只过滤数据包而不修改他们。filter table的优势是小而快,可以hook到input,output和forward。这意味着针对任何给定的数据包,只有可能有一个地方可以过滤它。

NAT:此表的主要作用是在PREROUTING和POSTROUNTING的钩子中,修改目标地址和原地址。与filter表稍有不同的是,该表中只有新连接的第一个包会被修改,修改的结果会自动apply到同一连接的后续包中。

kube-proxy对iptables的链进行了扩充,自定义了KUBE-SERVICES,KUBE-NODEPORTS,KUBE-POSTROUTING,KUBE-MARK-MASQ和KUBE-MARK-DROP五个链,并主要通过为KUBE-SERVICES chain增加rule来配制traffic routing 规则。

KUBE-MARK-DROP - [0:0] /*对于未能匹配到跳转规则的traffic set mark 0x8000,有此标记的数据包会在filter表drop掉*/
KUBE-MARK-MASQ - [0:0] /*对于符合条件的包 set mark 0x4000, 有此标记的数据包会在KUBE-POSTROUTING chain中统一做MASQUERADE*/
KUBE-NODEPORTS - [0:0] /*针对通过nodeport访问的package做的操作*/
KUBE-POSTROUTING - [0:0] /*操作跳转规则的主要chain*/
KUBE-SERVICES - [0:0] /*操作跳转规则的主要chain*/

原文:https://www.jianshu.com/p/535e15109477

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章