Kubernetes基础(十二)-kube-prox/CNI/服务发现(DNS域名解析)区别

1 CNI

CNI(Container Network Interface)是一个规范,定义了如何创建和配置容器网络。CNI 插件用于实现这些规范,以便 Kubernetes 集群中的容器能够互相通信和访问外部网络。CNI 的作用如下:

  • 容器通信: CNI 插件负责创建和管理容器之间的网络连接。它确保在同一节点上的不同容器可以相互通信,无论这些容器属于同一个 Pod 还是不同的 Pod。
  • 跨节点通信: CNI 插件使得不同节点上的容器也可以互相通信。这是 Kubernetes 中跨节点 Pod 通信的基础,它通过网络层路由和隧道技术来实现。
  • IP 地址分配: CNI 插件管理 IP 地址的分配和回收。每个容器都需要一个唯一的 IP 地址,CNI 负责为容器分配合适的 IP 地址,并在容器停止时释放这些地址,以便重新使用。
  • 外部网络访问: CNI 插件还负责配置容器以访问外部网络,包括互联网或企业内部网络。

总的来说,Kubernetes 是有多个节点(Node)组成,不同的节点可能还处于不同的网段,集群网络网络的作用就是将运行在这些节点的 Pod 可以看成在同一个局域网,不同的 Pod 可以无障碍的相互通信。常见的 CNI 插件有例如 Calico, Flannel, Weave 等。

2 kube-proxy

kube-proxy 运行在每个节点上为 Kubernetes 服务提供网络代理功能。以下是 kube-proxy的主要作用:

  • 服务访问: 当你在 Kubernetes 中创建一个服务,它会有一个与之关联的虚拟 IP(称为 ClusterIP)。kube-proxy 负责监听这些服务的虚拟 IP,以及相关的端口,当有流量到达这些 IP/端口时,kube-proxy 会将其转发到与该服务关联的 Pod。
  • 负载均衡: 当一个服务有多个 Pod 副本时,kube-proxy 会自动地负载均衡进入服务的流量,确保每个 Pod 得到均衡的请求量。
  • 维护 Endpoints: Kubernetes 的 Endpoints 是实际运行的 Pod IP 列表,这些 Pod 背后的服务。当 Pod 进行伸缩、出现故障或部署更新时,kube-proxy 负责更新这些 Endpoints,确保流量只被转发到健康的、实际运行的 Pod。
  • NodePort 和 LoadBalancer: kube-proxy 还支持 Kubernetes 的 NodePort 和 LoadBalancer 服务类型,它们允许外部流量进入集群。对于 NodePort,kube-proxy 在所有节点上的指定端口上监听外部流量,并转发到服务的 Pod。对于 LoadBalancer,kube-proxy 与云提供商的负载均衡器协作,将外部流量引导到集群中。

总的来说 kube-proxy 更加侧重集群内(ClusterIP)外(NodePort,LoadBalancer)流量的转发及负载均衡。将集群内 Pod 的流量通过 IP 地址转发到一个集群内 IP 地址(ClusterIP方式)或集群节点上的一个特殊端口(NodePort方式),也可以是一个特定的集群外 IP 地址(LoadBalancer方式)。kube-proxy 最主流的实现方式为iptables或ipvs。

3 服务发现(DNS)

Kubernetes 中,DNS 它为服务发现和名称解析提供了核心功能。它使得 Pod 和服务能够通过名称而不是 IP 地址进行通信,从而提供了灵活性、动态性和解耦。以下是 Kubernetes 中 DNS 的主要作用:

  • 服务发现: 当 Pod 需要与其他服务通信时,它可以使用服务的 DNS 名称来进行连接,而不需要知道该服务背后的任何具体 IP 地址。当你创建 Kubernetes 中的 Service,一个与之关联的 DNS 名称会自动被创建,这样其他 Pod 就可以使用这个名称来访问该服务。
  • 抽象和解耦: 使用 DNS 名称允许应用程序在 Kubernetes 内部通过逻辑名称进行通信,而不是通过硬编码的 IP 地址。这提供了一种解耦方式,允许服务的 Pod 可以动态地更改、伸缩或迁移,而不影响到消费者。
  • 稳定的访问点: Kubernetes 服务的 DNS 名称提供了一个稳定的访问点,即使背后的 Pod 地址经常更改。
  • 自定义 DNS 记录: 在某些场景下,例如使用 StatefulSet,DNS 还可以为每个 Pod 提供特定的、可预测的 DNS 名称。

其实理解服务发现(DNS)的作用和我们访问网站时需要用DNS解析的原理一致,一个域名背后可能对应这多 IP 地址,这些 IP 地址可能随着时间及我们所处不同的地理位置发生变化。当拥有一个DNS域名解析时用户就不必关注域名之后的 IP 地址了。

Kubernetes 中,默认的 DNS 服务提供者是 CoreDNS (曾经是 Kube-DNS)。

相关推荐
周杰伦_Jay2 小时前
详细介绍:云原生技术细节(关键组成部分、优势和挑战、常用云原生工具)
java·云原生·容器·架构·kubernetes·jenkins·devops
元气满满的热码式2 小时前
K8S中Pod控制器之DaemonSet(DS)控制器
云原生·容器·kubernetes
昵称难产中2 小时前
浅谈云计算21 | Docker容器技术
docker·容器·云计算
夏子曦3 小时前
k8s 蓝绿发布、滚动发布、灰度发布
云原生·容器·kubernetes
颜淡慕潇7 小时前
【K8S系列】在 K8S 中使用 Values 文件定制不同环境下的应用配置
云原生·容器·kubernetes·环境配置
旦沐已成舟7 小时前
K8S-Pod的环境变量,重启策略,数据持久化,资源限制
java·docker·kubernetes
github_czy7 小时前
(k8s)k8s部署mysql与redis(无坑版)
redis·容器·kubernetes
超级阿飞7 小时前
利用Kubespray安装生产环境的k8s集群-实施篇
elasticsearch·容器·kubernetes
来恩100314 小时前
Kubernetes学习指南与资料分享
云原生·容器·kubernetes
encoding-console15 小时前
docker安装consul并启动的详细步骤
docker·容器·consul