什么是Kubernetes出口调用流



我是kubernetes的新手。试图理解当我试图从kubernetes pod内部访问google.com时会发生什么
请求是否会直接到达google.com(当然不是(,或者在调用离开pod之前,先在/etc/hosts.allow文件中进行一些dns查找?出口呼叫的流程或行程是什么
PS:我已经运行了默认的coredns pod。

我认为这个问题可以分为两个不同的主题:

  • DNS分辨率
  • 尝试联系外部来源时的Pod网络

回答这两个问题可能会很长时间,但我会尝试给你一个基线,并添加更多更深入的文档。


集群内外发生的DNS分辨率:

正如您已经说过的,您正在使用CoreDNS。它将在您的设置中负责您的DNS分辨率。在查找本地未包含的域(例如/etc/hosts(时,Pods将对其进行查询。在他们收到回复后,他们将联系外部来源(稍后会详细介绍(。

旁注!

DNS分辨率(本地、查询(将取决于您使用的工具。curl将对其进行检查,但是例如nslookup将直接查询DNS服务器。

您的CoreDNS很可能在集群中的一个Services下可用:

  • $ kubectl get service --all-namespaces
NAMESPACE     NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)                  AGE
default       kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP                  79m
kube-system   kube-dns     ClusterIP   10.96.0.10   <none>        53/UDP,53/TCP,9153/TCP   79m

我想你可以在官方文件中找到很多有用的信息:

  • Kubernetes.io:文档:概念:服务网络:Dns pod服务

您也可以按照本指南获得更多动手体验:

  • Kubernetes.io:文档:任务:管理集群:DNS调试解决方案

尝试联系外部来源时的Pod网络:

每个Kubernetes解决方案在处理网络的具体方式上可能有所不同。有关更多详细信息,请访问解决方案的文档。其主要前提是CCD_;直接";与外部资源进行通信。下面你可以找到更多关于其背后原因的信息:

NAT传出

网络地址转换(NAT(是在数据包通过执行NAT的设备时,将数据包中的IP地址映射到不同的IP地址的过程。根据使用情况,NAT可以应用于源或目标IP地址,也可以应用于这两个地址。

在Kubernetes egress的上下文中,NAT用于允许pod连接到集群外的服务,如果pod的IP地址在集群外不可路由(例如,如果pod网络是覆盖层(。

例如,如果覆盖网络中的pod试图连接到集群之外的IP地址,则托管pod的节点在转发数据包之前使用SNAT(源网络地址转换(将数据包的不可路由源IP地址映射到节点的IP地址。然后,节点将来自相反方向的响应数据包映射回原始pod IP地址,因此数据包在两个方向上端到端地流动,pod或外部服务都不知道映射正在发生。

--Docs.projectcalico.org:关于:关于Kubernetes出口

简而言之,假设没有其他因素(如云提供商使用的其他NAT(,您的Pod将尝试使用Node IP联系外部来源(通过使用Source NAT(。

您可以通过以下方式找到关于数据包寿命的更深入的解释(某些方面是GKE特定的(:

  • Youtube.com:包的生命[I]-Michael Rubin,谷歌-大约在17:55分钟

其他资源

  • Coredns.io:Plugins:Log-您可以修改CoreDNSConfigMap($ kubectl edit configmap -n kube-system coredns(以启用到stdout($ kubectl logs ...(的日志记录,以查看更深入的查询解决方案。

  • Speakerdeck.com:Tockin:Kubernetes和网络为什么这么难:幻灯片57-更多关于Kubernete网络的信息。

相关内容

  • 没有找到相关文章

最新更新