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)。

相关推荐
伪装成塔的小兵2 小时前
Windows使用docker部署fastgpt出现的一些问题
windows·docker·容器·oneapi·fastgpt
寂夜了无痕2 小时前
k8s容器运行时环境选型指南
云原生·kubernetes·k8s运行时环境选择
转身後 默落5 小时前
11.Docker 之分布式仓库 Harbor
分布式·docker·容器
菩提云6 小时前
Deepseek存算分离安全部署手册
人工智能·深度学习·安全·docker·容器
努力的小T16 小时前
使用 Docker 部署 Apache Spark 集群教程
linux·运维·服务器·docker·容器·spark·云计算
东风微鸣18 小时前
TTRSS 迁移实战
docker·云原生·kubernetes·可观察性
转身後 默落19 小时前
04.Docker 镜像命令
docker·容器·eureka
IT_张三19 小时前
Docker+Kubernetes_第一章_Docker入门
java·docker·kubernetes
企鹅侠客20 小时前
kube-proxy怎么修改ipvs规则?
云原生·kubernetes·kubelet
仇辉攻防21 小时前
【云安全】云原生- K8S 污点横移
web安全·网络安全·云原生·容器·kubernetes·k8s·安全威胁分析