Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dns Kubernetes中的服务仅仅是允许恒定接触点的反向代理吗?_Dns_Kubernetes_Reverse Proxy - Fatal编程技术网

Dns Kubernetes中的服务仅仅是允许恒定接触点的反向代理吗?

Dns Kubernetes中的服务仅仅是允许恒定接触点的反向代理吗?,dns,kubernetes,reverse-proxy,Dns,Kubernetes,Reverse Proxy,我正在研究Kubernetes服务(这是k8s组件的一种,很像Pods和ReplicateSet)。它们看起来像反向代理,但我知道k8s在内部使用DNS,所以它们可能是某种负载平衡DNS?这也意味着,由于Pod可以重新定位或存在于多个节点上,它不能简单地作为反向代理,因为它也需要可寻址,但在多台机器上共享一个IP。。。(显然,在不直接查看源代码的情况下,很难想象它们是如何构建的——目前还没有) K8s服务由什么组成?DNS+反向代理,还是其他什么?某种网络技巧?常规ClusterIP服务 确保t

我正在研究Kubernetes服务(这是k8s组件的一种,很像Pods和ReplicateSet)。它们看起来像反向代理,但我知道k8s在内部使用DNS,所以它们可能是某种负载平衡DNS?这也意味着,由于Pod可以重新定位或存在于多个节点上,它不能简单地作为反向代理,因为它也需要可寻址,但在多台机器上共享一个IP。。。(显然,在不直接查看源代码的情况下,很难想象它们是如何构建的——目前还没有)

K8s服务由什么组成?DNS+反向代理,还是其他什么?某种网络技巧?

常规
ClusterIP
服务 确保
type:ClusterIP
服务的网络连接是的责任,该组件通常在集群的每个节点上运行。kube代理通过拦截每个节点上POD的传出流量并过滤针对服务IP的流量来实现这一点。由于它连接到Kubernetes API,因此kube代理可以确定哪些Pod IP与每个服务IP关联,并相应地转发流量

从概念上讲,kube代理可能被认为类似于反向代理(因此得名),但通常使用IPtables规则(或者,从Kubernetes 1.9开始,可选IPV)。每个创建的服务将在每个节点上生成一组IPtables规则,该规则拦截针对服务IP的流量并将其转发到相应的Pod IP(服务IP纯粹是虚拟的,仅存在于这些IPtables规则中;在整个集群中,您将找不到持有该IP的实际网络接口)

负载平衡也通过IPtables规则(或ipv)实现。负载平衡始终发生在流量来源的源节点上

以下是文档部分的一个示例:

u@node$ iptables-save | grep hostnames
-A KUBE-SEP-57KPRZ3JQVENLNBR -s 10.244.3.6/32 -m comment --comment "default/hostnames:" -j MARK --set-xmark 0x00004000/0x00004000
-A KUBE-SEP-57KPRZ3JQVENLNBR -p tcp -m comment --comment "default/hostnames:" -m tcp -j DNAT --to-destination 10.244.3.6:9376
-A KUBE-SEP-WNBA2IHDGP2BOBGZ -s 10.244.1.7/32 -m comment --comment "default/hostnames:" -j MARK --set-xmark 0x00004000/0x00004000
-A KUBE-SEP-WNBA2IHDGP2BOBGZ -p tcp -m comment --comment "default/hostnames:" -m tcp -j DNAT --to-destination 10.244.1.7:9376
-A KUBE-SEP-X3P2623AGDH6CDF3 -s 10.244.2.3/32 -m comment --comment "default/hostnames:" -j MARK --set-xmark 0x00004000/0x00004000
-A KUBE-SEP-X3P2623AGDH6CDF3 -p tcp -m comment --comment "default/hostnames:" -m tcp -j DNAT --to-destination 10.244.2.3:9376
-A KUBE-SERVICES -d 10.0.1.175/32 -p tcp -m comment --comment "default/hostnames: cluster IP" -m tcp --dport 80 -j KUBE-SVC-NWV5X2332I4OT4T3
-A KUBE-SVC-NWV5X2332I4OT4T3 -m comment --comment "default/hostnames:" -m statistic --mode random --probability 0.33332999982 -j KUBE-SEP-WNBA2IHDGP2BOBGZ
-A KUBE-SVC-NWV5X2332I4OT4T3 -m comment --comment "default/hostnames:" -m statistic --mode random --probability 0.50000000000 -j KUBE-SEP-X3P2623AGDH6CDF3
-A KUBE-SVC-NWV5X2332I4OT4T3 -m comment --comment "default/hostnames:" -j KUBE-SEP-57KPRZ3JQVENLNBR
有关更多信息,请参阅手册中的部分

无头服务
除了常规的
ClusterIP
服务之外,还有(在创建服务时通过指定属性
ClusterIP:None
来声明)。他们不会使用kube代理;相反,它们的DNS主机名将直接解析为与服务关联的所有Pod IP。负载平衡是通过常规DNS循环来实现的。

对于集群内的服务和路由,主要是当您明确使用(部分使用iptables)或类似的东西(允许您插入)时除外。每个节点中的kube代理管理iptable规则。有关如何使用代理模式的详细信息

在DNS端,Kubernetes运行kube DNS(1.10或更高版本)或coredns(1.11或更高版本),基本上所有服务和POD都在DNS服务中注册,以便其他POD/容器找到它们。例如,一个服务的FQDN如下:
my service.my namespace.svc.cluster.local