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

【博客474】为什么k8s控制面pod使用的ip是node ip,而非pod cidr中的ip

为什么k8s控制面pod使用的ip是node ip,而不是pod cidr中的ip

Why do certain kube-system Pods such as kube-proxy have the same Pod IP as the node that they are on?

场景

执行 kubectl get pod -n kube-system -o wide 的时候,发现控制面的pod的ip是其所在的node ip,而不是从集群pod cidr中分配的ip

原因:控制面pod设置了hostnetwork = true

当使用kubeadm init来初始化集群的时候,kubeadm会自动生成部署的控制面的static pod yaml,而此时生成的控制面的pod的网络模式跟普通的pod并不一样,而是采用了hostnetwork的网络模式

example:例如控制面中的kube-proxy组件中设置路hostNetwork: true

apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
  labels:
    component: kube-proxy
    k8s-app: kube-proxy
    kubernetes.io/cluster-service: "true"
    name: kube-proxy
    tier: node
  name: kube-proxy
  namespace: kube-system
spec:
  selector:
    matchLabels:
      component: kube-proxy
      k8s-app: kube-proxy
      kubernetes.io/cluster-service: "true"
      name: kube-proxy
      tier: node
  template:
    metadata:
      annotations:
        scheduler.alpha.kubernetes.io/affinity: '{"nodeAffinity":{"requiredDuringSchedulingIgnoredDuringExecution":{"nodeSelectorTerms":[{"matchExpressions":[{"key":"beta.kubernetes.io/arch","operator":"In","values":["amd64"]}]}]}}}'
        scheduler.alpha.kubernetes.io/tolerations: '[{"key":"dedicated","value":"master","effect":"NoSchedule"}]'
      labels:
        component: kube-proxy
        k8s-app: kube-proxy
        kubernetes.io/cluster-service: "true"
        name: kube-proxy
        tier: node
    spec:
      hostNetwork: true
      containers:
      - name: kube-proxy
        image: gcr.io/google_containers/kube-proxy-amd64:v1.5.3
        imagePullPolicy: IfNotPresent
        command:
        - kube-proxy
        - --kubeconfig=/run/kubeconfig
        securityContext:
          privileged: true
        volumeMounts:
        - mountPath: /var/run/dbus
          name: dbus
        - mountPath: /run/kubeconfig
          name: kubeconfig
      volumes:
      - hostPath:
          path: /etc/kubernetes/kubelet.conf
        name: kubeconfig
      - hostPath:
          path: /var/run/dbus
        name: dbus

这么设计的理由

官方解析参考稳定:

https://kubernetes.io/docs/reference/setup-tools/kubeadm/implementation-details/

根本原因:

hostNetwork: true is set on all static Pods to allow control plane startup before a network is configured.
kubeadm deploys the control plane components with hostNetwork: true because they may have to interact the host network interfaces.

即:hostNetwork在所有控制面静态 Pod 上设置为 true,以允许在配置网络之前启动控制平面
kubeadm 使用 hostNetwork: true 部署控制平面组件,因为它们可能必须与主机网络接口交互。

不这么设计会怎么样

你无法通过拽自己的头发来让自己飞翔!

假设所有的pod都从pod cidr中来分配,那么pod cidr又是控制面来分配的,但是控制面启动时自己的pod ip不能依赖自己来分配。而且控制面在启动的时候,不同node上的控制面之间要互相交互,那么此时只能依赖node的网络来进行交互,因为这时候cni集群网络还未就绪。因此为了能够在集群网络未就绪时,控制面组件能够启动并进行交互,只能使用node的网络,因此设置了hostNetwork: true,这也就是为什么控制面pod的ip是node的ip。

相关文章:

  • 2022 华为 Java 高级面试题及答案
  • SpringCloud集成RocketMQ
  • 计算机java毕业设计选题汇总(2022)
  • Ruby on Rails 实践:课程导读
  • OpenGL基本架构知识
  • 神奇的卡尔曼滤波,行人追踪的福音
  • 第三章 教育法律法规
  • MATLAB | 全网唯一,使用MATLAB绘制好看的韦恩图(venn)
  • 2D Transpose算子GPU实现和优化
  • 软件复杂性的来源与应对
  • 11.9 表达式求值
  • 09-排序3 Insertion or Heap Sort(浙大数据结构)
  • java-python+vue社区防疫服务管理系统网站
  • sparksql insertinto 源码解析
  • 反射之获取Class
  • 11111111
  • css布局,左右固定中间自适应实现
  • CSS盒模型深入
  • jquery ajax学习笔记
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • tensorflow学习笔记3——MNIST应用篇
  • webgl (原生)基础入门指南【一】
  • 阿里云Kubernetes容器服务上体验Knative
  • 初探 Vue 生命周期和钩子函数
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 观察者模式实现非直接耦合
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 强力优化Rancher k8s中国区的使用体验
  • 驱动程序原理
  • 如何编写一个可升级的智能合约
  • 如何使用 JavaScript 解析 URL
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • linux 淘宝开源监控工具tsar
  • #13 yum、编译安装与sed命令的使用
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • (C++17) optional的使用
  • (k8s中)docker netty OOM问题记录
  • (Python) SOAP Web Service (HTTP POST)
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (源码版)2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码季节性时序预测SARIMA天气预测建模
  • (转)菜鸟学数据库(三)——存储过程
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网
  • .NET MVC第三章、三种传值方式
  • .NET 程序如何获取图片的宽高(框架自带多种方法的不同性能)
  • .NET 实现 NTFS 文件系统的硬链接 mklink /J(Junction)
  • .Net(C#)自定义WinForm控件之小结篇
  • .NET开发不可不知、不可不用的辅助类(三)(报表导出---终结版)
  • .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
  • .NET中的Event与Delegates,从Publisher到Subscriber的衔接!
  • /etc/sudoer文件配置简析
  • @selector(..)警告提示
  • [ 数据结构 - C++] AVL树原理及实现