返回顶部
首页 > 资讯 > 精选 >Kubernetes Pod怎么获取IP地址
  • 110
分享到

Kubernetes Pod怎么获取IP地址

2023-06-15 16:06:31 110人浏览 薄情痞子
摘要

这篇文章主要为大家展示了“kubernetes Pod怎么获取IP地址”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Kubernetes Pod怎么获取IP地址”这篇文章吧。Kubernetes

这篇文章主要为大家展示了“kubernetes Pod怎么获取IP地址”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Kubernetes Pod怎么获取IP地址”这篇文章吧。

Kubernetes 网络模型的核心要求之一是每个 Pod 都拥有自己的 IP 地址并可以使用该 IP 地址进行通信。很多人刚开始使用 Kubernetes 时,还不清楚如何为每个 Pod 分配 IP 地址。他们了解各种组件如何独立工作,但不清楚这些组件如何组合在一起使用。例如,他们了解什么是 CNI 插件,但是不知道它们是如何被调用的。本文就介绍了各种网络组件在 Kubernetes 集群中是如何交互的,以及如何帮助每个 Pod 都获取 IP 地址。

在 Kubernetes 中有多种网络设置方法,以及 container runtime 的各种选项。这篇文章将使用 Flannel 作为 network provider,并使用 Containered 作为 container runtime。

背景概念

容器网络

同一主机上的容器

在同一主机上运行的容器通过 IP 地址相互通信的方法之一是使用 linux Bridge,即在 Kubernetes(和 Docker)世界中,创建 veth(虚拟以太网)设备。该 veth 设备的一端连接在容器网络命名空间,另一端连接到主机网络上的 Linux Bridge。同一主机上的所有容器都将这 veth pair 的一端连接到 Linux Bridge,它们可以通过 Bridge 使用 IP 地址相互通信。Linux Bridge 也被分配了一个 IP 地址,它充当从目的地到不同节点的 Pod 流出流量的网关。

Kubernetes Pod怎么获取IP地址

不同主机上的容器

在不同主机上运行的容器可以通过其 IP 地址相互通信的方式之一是使用数据包封装(packet encapsulation)。Flannel 通过 vxlan 使用该功能,vxlan 将原始数据包封装在 UDP 数据包中并将其发送到目的地。

在 Kubernetes 集群中,Flannel 会在每个节点上创建一个 vxlan 设备和一些路由表。每个发往不同主机上的容器的数据包都会通过 vxlan 设备,并封装在 UDP 数据包中。在目标位置,它会提取封装的数据包,然后将数据包路由到目的地 Pod。

Kubernetes Pod怎么获取IP地址

注意:这只是配置容器之间网络的方法之一。

CRI

CRI(容器运行时接口)是一个插件接口,允许 kubelet 使用不同的 container runtimes。各种 container runtimes 都实现了 CRI api,这使用户可以在 Kubernetes 安装中使用他们想要的 container runtimes。

CNI

CNI(容器网络接口)项目包含一个为 Linux 容器提供基于通用插件网络解决方案的规则。它由各种插件组成,这些插件在配置 Pod 网络时执行不同的功能。CNI 插件是遵循 CNI 规范的可执行文件。

为节点子网分配 Pod IP 地址

如果要求所有 Pod 具有 IP 地址,那么就要确保整个集群中的所有 Pod 的 IP 地址是唯一的。这可以通过为每个节点分配一个唯一的子网来实现,即从子网中为 Pod 分配节点 IP 地址。

节点 IPAM 控制器

nodeipam 传递给 kube-controller-manager 的 --controllers 命令行标志时,它将为每个节点分配来自集群 CIDR(集群网络的 IP 范围)的专用子网(podCIDR)。由于这些 podCIDR 是不相交的子网,因此它可以为每个 Pod 分配唯一的 IP 地址。

当 Kubernetes 节点首次在集群上注册时,会被分配一个 podCIDR。要更改分配给集群中节点的 podCIDR,需要先注销节点,然后使用应用于 Kubernetes 控制平面的任何配置更改来重新注册节点。podCIDR 可以使用以下命令列出节点的名称:

Kubernetes Pod怎么获取IP地址

Kubelet、Container Runtime 和 CNI 插件交互

当在节点上调度 Pod 时,一启动 Pod 就会发生很多事情。这里我们仅关注与 Pod 配置网络有关的动态。一旦在节点上调度了 Pod,将配置网络并启动应用程序容器。

Kubernetes Pod怎么获取IP地址

参考:容器式 cri 插件架构

Container Runtime 与 CNI 插件的交互

每个 network provider 都有一个 CNI 插件,container runtime 会调用该插件,在 Pod 启动时配置网络。使用容器化作为 container runtime,容器化 CRI 插件将调用 CNI 插件。每个 network provider 都在每个 Kubernetes 节点上安装了一个代理,以配置 Pod 网络。安装 network provider agent 后,它会随 CNI 一起配置或者在节点上创建,CRI 插件会使用它来确定要调用哪个 CNI 插件。

CNI 配置文件的位置是可配置的,默认值为 /etc/cni/net.d/<config-file>。集群管理员需要在每个节点上交付 CNI 插件。CNI 插件的位置也是可配置的,默认值为 /opt/cni/bin。

如果使用 containerd 作为 container runtime,则可以在 containerd config 部分下 [plugins."io.containerd.grpc.v1.cri".cni] 指定 CNI 配置和 CNI 插件的路径。

本文中我们将 Flannel 作为 network provider,这里简单介绍一下 Flannel 的设置。Flanneld 是 Flannel 守护程序,通常 install-cni 作为带有初始化容器的守护程序安装在 Kubernetes 集群上。install-cni 容器创建 CNI 配置文件在每个节点上 /etc/cni/net.d/10-flannel.conflist。Flanneld 创建一个 vxlan 设备,从 apiserver 获取网络元数据,并监控 Pod 上的更新。创建 Pod 时,它将在整个集群中为所有 Pod 分配路由,这些路由允许 Pod 通过 IP 地址相互连接。

Containerd CRI 插件和 CNI 插件之间的交互可以如下所示:

Kubernetes Pod怎么获取IP地址

如上所述,kubelet 调用 Containered CRI 插件创建容器,再调用 CNI 插件为容器配置网络。Network provider CNI 插件调用其他基本 CNI 插件来配置网络。CNI 插件之间的交互如下所述。

CNI 插件之间的交互

有多种 CNI 插件可帮助配置主机上容器之间的网络,本文主要讨论以下 3 个插件。

Flannel CNI 插件

当使用 Flannel 作为 network provider 时,Containered CRI 插件使用 CNI 配置文件,调用 Flannel CNI 插件/etc/cni/net.d/10-flannel.conflist。

Kubernetes Pod怎么获取IP地址

Fannel CNI 插件与 Flanneld 结合使用,当 Flanneld 启动时,它将从 apiserver 中获取 podCIDR 和其他与网络相关的详细信息,并将它们存储在文件中/run/flannel/subnet.env。

Kubernetes Pod怎么获取IP地址

Flannel CNI 插件使用 /run/flannel/subnet.env 的信息来配置和调用 Bridge CNI 插件。

Bridge CNI 插件

Flannel CNI 插件使用以下配置调用 Bridge CNI 插件:

Kubernetes Pod怎么获取IP地址

当 Bridge CNI 插件第一次调用时,它会创建一个 Linux Bridge "name": "cni0" 在配置文件中,然后为每个 Pod 创建 veth pair,其一端在容器的网络命名空间中,另一端连接到主机网络上的 Linux Bridge。使用 Bridge CNI 插件,主机上的所有容器都连接到主机网络上的 Linux Bridge。

配置完 veth pair 后,Bridge 插件将调用主机本地 IPAM CNI 插件。我们可以在 CNI config 中配置要使用的 IPAM 插件,CRI 插件用于调用 Flannel CNI插件。

主机本地 IPAM CNI 插件

Bridge CNI 插件使用以下配置调用主机本地 IPAM CNI 插件:

Kubernetes Pod怎么获取IP地址

主机本地 IPAM(IP 地址管理)插件从中返回容器的 IP 地址,subnet将分配的 IP 本地存储在主机下dataDir指定的目录中/var/lib/cni/networks/<network-name=cni0>/<ip>。/var/lib/cni/networks/<network-name=cni0>/<ip>文件包含 IP 分配到的容器 ID。

调用时,主机本地 IPAM 插件返回以下有效负载:

Kubernetes Pod怎么获取IP地址

以上是“Kubernetes Pod怎么获取IP地址”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!

--结束END--

本文标题: Kubernetes Pod怎么获取IP地址

本文链接: https://lsjlt.com/news/280843.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Kubernetes Pod怎么获取IP地址
    这篇文章主要为大家展示了“Kubernetes Pod怎么获取IP地址”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Kubernetes Pod怎么获取IP地址”这篇文章吧。Kubernetes...
    99+
    2023-06-15
  • linux中Kubernetes Pod怎么获取IP地址
    这篇文章主要为大家展示了“linux中Kubernetes Pod怎么获取IP地址”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“linux中Kubernetes Pod怎么获取IP地址”这篇文章...
    99+
    2023-06-15
  • 怎么自动获取IP地址
    这篇文章主要讲解了“怎么自动获取IP地址”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么自动获取IP地址”吧!自动获取IP地址是动态IP,是通过DHCP来获取IP地址,每次上网这个IP都不...
    99+
    2023-06-03
  • android 获取IP地址
    https://blog.csdn.net/Alexlee1986/article/details/96120439 android获取ip地址方法 1、wifi下获取本地局域网IP地址 2、移动网络获取网络IP地址 3、获...
    99+
    2023-08-18
    android tcp/ip java
  • 通过与Kubernetes Pod互动如何获取用户IP
    学习知识要善于思考,思考,再思考!今天编程网小编就给大家带来《通过与Kubernetes Pod互动如何获取用户IP》,以下内容主要包含等知识点,如果你正在学习或准备学习Golang,就都不要错过本...
    99+
    2024-04-04
  • 怎么利用php获取ip地址
    这篇文章主要介绍了怎么利用php获取ip地址,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。众所周知一般在计算机查询本机ip地址时,使用的是dos命令 win + r 调出do...
    99+
    2023-06-14
  • 用python获取MAC地址和IP地址
    # ifconfig eth0 eth0      Link encap:Ethernet  HWaddr 50:E5:49:3A:EA:90             inet addr:172.28.10.71  Bcast:172.28...
    99+
    2023-01-31
    地址 python MAC
  • Python中怎么获取主机ip地址
    今天就跟大家聊聊有关Python中怎么获取主机ip地址,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。import socket import ...
    99+
    2024-04-02
  • 怎么设置自动获取ip地址
    这篇文章主要介绍了怎么设置自动获取ip地址,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。在运行计算机时,我们总能看到IP地址的自动获取,很多人都在想这到底是什么,怎么设置呢?...
    99+
    2023-06-20
  • 怎么重新获取新的IP地址
    这篇文章给大家分享的是有关怎么重新获取新的IP地址的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。网络,打开网络共享中心更改网络适配器、本地连接、属性更改本地连接、TCP/IP配置、属性重新自动获取新的IP地址,点...
    99+
    2023-06-15
  • 怎么获取服务器的IP地址
    这篇文章主要介绍了怎么获取服务器的IP地址的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么获取服务器的IP地址文章都会有所收获,下面我们一起来看看吧。第一步:获取服务器IP地址要获取服务器IP地址,可以使用命...
    99+
    2023-07-06
  • Java怎么根据ip地址获取归属地
    Java中可以使用第三方库来根据IP地址获取归属地,其中比较常用的库是GeoIP2和ip2region。 使用GeoIP2库: ...
    99+
    2024-03-08
    java
  • 怎么用Python获取计算机名/ip地址/mac地址
    这篇文章主要介绍“怎么用Python获取计算机名/ip地址/mac地址”,在日常操作中,相信很多人在怎么用Python获取计算机名/ip地址/mac地址问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用Py...
    99+
    2023-06-08
  • java如何获取ip地址
    java获取IP地址的方法: private static String getIpAddr(HttpServletRequest request) { String ip = request.getHeader("...
    99+
    2016-06-05
    java基础 java
  • shell如何获取IP地址
    这篇文章主要介绍了shell如何获取IP地址,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。获取IP地址:代码如下:ifconfig ...
    99+
    2024-04-02
  • python获取网卡IP地址
      #!/usr/bin/env python # -*- coding: utf-8 -*-  import socket import fcntl import struct  def get_ip_address(ifname):  ...
    99+
    2023-01-31
    网卡 地址 python
  • python 获取本机IP地址
    方法一: 通常使用socket.gethostbyname()方法即可获取本机IP地址,但有时候获取不到(比如没有正确设置主机名称),示例代码如下: import socket # 获取本机计算机名称 hostname = s...
    99+
    2023-01-31
    本机 地址 python
  • Android获取mac地址、OA地址和外网IP地址
    获取Mac地址: public static String GetMAC(Context context) { String Mac = ""; if (Build.VERSION.SDK_INT >= Build.VERSIO...
    99+
    2023-09-06
    android java
  • 怎么在Linux中获取公网IP地址
    这篇文章给大家介绍怎么在Linux中获取公网IP地址,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。如何在LINUX服务器下查看公网IP地址,可以使用下面的方法: curl http://members.3322.org...
    99+
    2023-06-12
  • ubuntu怎么设置自动获取ip地址
    这篇文章主要介绍“ubuntu怎么设置自动获取ip地址”,在日常操作中,相信很多人在ubuntu怎么设置自动获取ip地址问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”ubuntu怎么设置自动获取ip地址”的疑...
    99+
    2023-07-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作