当前位置: 首页 > article >正文

k8s的ip地址分别都是从哪里来的

  1. 节点(Node)IP 地址

    • 物理网络分配:如果 Kubernetes 集群是部署在企业内部数据中心的物理服务器上,节点 IP 通常是由企业内部的网络管理员通过 DHCP(动态主机配置协议)或者静态分配的方式确定的。例如,在传统的企业网络中,网络管理员会为每台物理服务器分配一个符合企业内部 IP 网段(如 192.168.1.0/24)的 IP 地址,这个 IP 地址可以让节点与企业内部的其他网络设备(如路由器、防火墙等)进行通信。
    • 云服务商分配(VPC 环境):当 Kubernetes 集群部署在云环境(如 AWS、Azure、阿里云等)中时,节点 IP 是由云服务提供商的虚拟私有云(VPC)网络分配的。以 AWS 为例,在创建 EC2 实例(可以作为 Kubernetes 节点)时,会从 VPC 的子网(Subnet)中分配一个私有 IP 地址给节点。这些私有 IP 地址位于 VPC 的 IP 网段内,如 10.0.0.0/16 的某个子网(如 10.0.1.0/24)中,并且可以通过 VPC 的网络功能(如安全组、路由表等)与其他云资源进行通信。
  2. Pod IP 地址

    • 网络插件分配:在 Kubernetes 中,Pod IP 地址是由网络插件分配的。常见的网络插件有 Flannel、Calico 等。
    • Flannel 通过在集群中创建一个覆盖网络(Overlay Network)来为 Pod 分配 IP 地址。它使用了一种叫做 VXLAN(虚拟可扩展局域网)或者 UDP(用户数据报协议)封装等技术。例如,Flannel 可能会从一个预定义的 IP 网段(如 10.244.0.0/16)中为每个 Pod 分配一个 IP 地址。这个 IP 网段是在 Flannel 初始化配置时确定的,可以通过修改配置文件来改变这个网段。
    • Calico 则采用了基于 BGP(边界网关协议)的网络方案。它为 Pod 分配 IP 地址的方式类似于传统的网络路由,从一个 IP 池(IP Pool)中分配 IP。例如,Calico 的 IP 池可以定义为 192.168.2.0/24,然后根据 Pod 的创建请求,从这个池中为 Pod 分配一个 IP 地址,并且通过 BGP 协议将 Pod 的 IP 路由信息传播到集群中的其他节点。
  3. 服务(Service)IP 地址(Cluster - IP)

    • 由 Kubernetes API 服务器和网络插件共同确定:当创建一个服务时,Kubernetes API 服务器会根据集群的配置和网络插件的机制为服务分配一个内部的虚拟 IP 地址。这个 IP 地址通常是从一个预留的服务 IP 网段中选取的。例如,在许多 Kubernetes 集群中,服务 IP 网段可能是 10.96.0.0/12。
    • 网络插件在这个过程中也起到关键作用。它们负责管理和维护服务 IP 地址的路由,以确保集群内部的 Pod 能够通过服务 IP 地址访问对应的服务。例如,当一个服务后端有多个 Pod 副本时,网络插件会根据负载均衡策略,将通过服务 IP 地址的请求转发到合适的 Pod 上。

k8s服务的ip地址怎么去定义和修改,这个ip从哪里来的

  • 服务 IP 地址的来源

    • 在 Kubernetes 中,服务 IP(Cluster - IP)是由集群内部的网络插件和 Kubernetes 控制平面共同分配的。它来自于一个预定义的服务 IP 网段。这个网段通常是在集群初始化阶段确定的,并且是专门用于服务发现和内部通信的虚拟 IP 地址。
    • 例如,在很多 Kubernetes 集群中,默认的服务 IP 网段是10.96.0.0/12。当创建一个服务时,Kubernetes 会从这个网段中选择一个未使用的 IP 地址分配给该服务。这些 IP 地址只在集群内部有效,用于在集群内部的 Pods 之间进行通信,使得 Pods 可以通过服务 IP 访问相应的后端服务,而不需要知道后端具体的 Pod IP 地址。
  • 定义服务 IP 地址(不推荐手动定义)

    • 通过服务配置文件(YAML)间接定义:虽然一般情况下不建议手动定义服务 IP,但可以通过服务的 YAML 配置文件来影响服务 IP 的分配。在创建服务的 YAML 文件中,可以指定服务的类型(如 ClusterIP、NodePort、LoadBalancer)。
    • 例如,对于一个简单的 ClusterIP 服务,YAML 配置可能如下:
     

    收起

    yaml

    apiVersion: v1
    kind: Service
    metadata:
      name: my - service
    spec:
      selector:
        app: my - app
      ports:
      - protocol: TCP
        port: 80
        targetPort: 8080
    
     
    • 当应用这个配置文件(使用kubectl apply -f service.yaml)时,Kubernetes 会根据集群的服务 IP 网段和当前可用的 IP 地址,从网段中分配一个 Cluster - IP 给这个服务。这个 IP 地址会在服务的生命周期内保持不变,除非服务被删除或重新创建。
  • 修改服务 IP 地址(复杂且有风险)

    • 重新创建服务:最直接的方式是删除现有的服务并重新创建它。但是,这种方法会导致服务的短暂中断,并且依赖于服务的客户端需要能够重新连接到新的服务 IP。例如,如果有其他 Pods 依赖于这个服务,它们需要能够在服务重新创建后更新其内部的连接配置。
    • 使用网络插件特定的方法(因插件而异)
      • Calico:如果使用 Calico 网络插件,可以通过修改 Calico 的 IP 池(IP Pool)配置来间接影响服务 IP 的分配。不过,这是一个复杂的操作,需要谨慎处理。首先要编辑 Calico 的 IP 池配置文件(通常涉及calicoctl工具),改变 IP 池的 CIDR(无类别域间路由)范围。例如,修改cidr字段来调整服务 IP 的可用范围。但这样的操作可能会影响整个集群的网络配置,需要充分测试。
      • Flannel:Flannel 本身没有直接修改服务 IP 的简单方法。通常需要重新配置 Flannel 的整个网络设置,包括修改其默认的服务 IP 网段相关的配置文件。这可能涉及到修改kube - flannel.yml等文件中的相关参数,重新部署 Flannel 后,新的服务 IP 分配可能会在新的网段基础上进行,但同样可能会引起网络中断和复杂的配置问题。

http://www.kler.cn/a/472589.html

相关文章:

  • 【CSS】设置滚动条样式
  • 基于高斯混合模型的数据分析及其延伸应用(具体代码分析)
  • 数据库中锁与ETL的故障排除和性能优化
  • HarmonyOS Next系列之华为账号一键登录功能实现(十四)
  • vue-codemirror定位光标位置并在光标处插入信息
  • 使用 Conda创建新的环境遇到的问题
  • 【Uniapp-Vue3】v-model双向绑定的实现原理
  • 第30天:Web开发-PHP应用组件框架前端模版渲染三方插件富文本编辑器CVE审计
  • K-Means 聚类算法:用生活场景讲解机器学习的“分组”方法
  • INT301 Bio Computation
  • 基于 Python 的 PDF 动画翻页效果的阅读器实现
  • Android NDK开发入门2之适应idm环境
  • .NET AI 开发人员库 --AI Dev Gallery
  • Linux pget 下载命令详解
  • filebeat、kafka
  • 基于Android的疫苗预约系统
  • 腾讯云AI代码助手编程挑战赛-古诗词学习
  • WordPress静态缓存插件WP Super Cache与 WP Fastest Cache
  • Spring Boot集成RocketMQ
  • C++实现银行排队系统
  • 单片机-定时器中断
  • C++ 复习总结记录五
  • (k8s)kubectl不断重启问题解决!
  • 代码随想录算法训练营第二十七天-贪心算法-455. 分发饼干
  • 技术速递|通过 .NET Aspire 使用本地 AI 模型
  • 【大模型+本地自建知识图谱/GraphRAG/neo4j/ollama+Qwen千问(或llama3)】 python实战(中)