专栏首页伪架构师(译)Calico 3.5:根据节点标签分配 IP 地址

(译)Calico 3.5:根据节点标签分配 IP 地址

关于 IP 地址的分配

Calico 能够进行配置,为不同拓扑指定 IP 地址池。例如可能希望某些机架、地区、或者区域能够从同一个 IP 池中获取地址。这对于降低路由数量或者配合防火墙策略的要求会很有帮助。

cni 插件配置参考中的 IP 地址管理章节中包含了三种分配 IP 地址的方式。Kubernetes 注解方式只能用于 Namespace 或者 Pod 一级。剩下的只有两个办法,CNI 配置或者是基于节点选择器的 IP 池,相对于 CNI 配置的方式来说,节点选择器方案省去了修改本地文件的麻烦。

在更高层次上,基于节点选择器的 IP 地址分配方法就是给节点设置标签,然后用节点选择器选择对应的 IP 地址池进行分配。后面的内容中将给出一个详细的例子,用这种方式来设置一种机架亲和方式的 IP 地址分配方案。

如果 Calico 无法根据上述顺序来决定一个 IP 地址池,或者在选定的地址池中找不到可用的 IP 地址,那么这一工作负载就不会分到 IP 地址,无法启动。为了防止这种情况的发生,我们建议所有节点至少有一个合适的地址池。

先决条件

这一功能需要 Calico 在 ETCD 模式下工作。

示例:Kubernetes

本例中,我们会创建一个集群,其中包含四个节点,分布在两个机架上,每个机架各两台。示意如下:

       -------------------
      |    router       |
      -------------------
      |                 |
---------------   ---------------
| rack-0      |   | rack-1      |
---------------   ---------------
| kube-node-0 |   | kube-node-2 |
- - - - - - - -   - - - - - - - -
| kube-node-1 |   | kube-node-3 |
- - - - - - - -   - - - - - - - -

Pod IP 地址范围为 192.168.0.0/16,我们进行如下设计:保留 192.168.0.0/24rack-0, 192.168.1.0/24rack-1

要设置一个没有缺省地址池的的 Calico,首先运行 calicoctl get ippool -o wide,会看到已经创建了一个 192.168.0.0/16 的地址池:

NAME                  CIDR             NAT    IPIPMODE   DISABLED   SELECTOR
default-ipv4-ippool   192.168.0.0/16   true   Always     false      all()
  1. 删除缺省地址池 default-ipv4-ippool 地址池已经存在,并占据了整个 /16 块,因此必须删除:calicoctl delete ippools default-ipv4-ippool
  2. 给 Node 打标签。 要给特定节点分配地址池,节点必须用标签进行标识: kubectl label nodes kube-node-0 rack=0 kubectl label nodes kube-node-1 rack=0 kubectl label nodes kube-node-2 rack=1 kubectl label nodes kube-node-3 rack=1
  3. 为每个机架创建地址池 calicoctl create -f -<<EOF apiVersion: projectcalico.org/v3 kind: IPPool metadata: name: rack-0-ippool spec: cidr: 192.168.0.0/24 ipipMode: Always natOutgoing: true nodeSelector: rack == "0" EOF calicoctl create -f -<<EOF apiVersion: projectcalico.org/v3 kind: IPPool metadata: name: rack-1-ippool spec: cidr: 192.168.1.0/24 ipipMode: Always natOutgoing: true nodeSelector: rack == "1" EOF 现在就创建了两个地址池,使用 calicoctl get ippool -o wide 进行查看: NAME CIDR NAT IPIPMODE DISABLED SELECTOR rack-1-ippool 192.168.0.0/24 true Always false rack == "0" rack-2-ippool 192.168.1.0/24 true Always false rack == "1"
  4. 检查地址池的工作状态 创建一个 Nginx 的 Deployment,其中包含五个副本,保证分配到每一个节点上。 kubectl run nginx --image nginx --replicas 5 检查新的 Pod 是否已经根据所在机架获得了应有的 IP 地址。 NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-5c7588df-prx4z 1/1 Running 0 6m3s 192.168.0.64 kube-node-0 <none> <none> nginx-5c7588df-s7qw6 1/1 Running 0 6m7s 192.168.0.129 kube-node-1 <none> <none> nginx-5c7588df-w7r7g 1/1 Running 0 6m3s 192.168.1.65 kube-node-2 <none> <none> nginx-5c7588df-62lnf 1/1 Running 0 6m3s 192.168.1.1 kube-node-3 <none> <none> nginx-5c7588df-pnsvv 1/1 Running 0 6m3s 192.168.1.64 kube-node-2 <none> <none> 可以看到,IP 地址的是根据节点(所在的机架)来选择了对应的地址池进行分配的。

本文分享自微信公众号 - 伪架构师(fake-architect)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-02-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Kubernetes 网络疑难杂症排查分享

    到目前为止,本人见到的最有诚意的 K8s 网络问题分享,而且还有小图片呢!迫不及待的申请了转载授权。

    崔秀龙
  • Knative入门系列6:Knative的使用

    Knative 是一个基于 Kubernetes 的,用于构建、部署和管理现代 serverless 应用的平台。Getting Started with Kn...

    崔秀龙
  • (译)kube-proxy 模式对比:iptables 还是 IPVS?

    kube-proxy 是 Kubernetes 中的关键组件。他的角色就是在服务(ClusterIP 和 NodePort)和其后端 Pod 之间进行负载均衡。...

    崔秀龙
  • [C#]UDP通讯

    原文链接:http://blog.csdn.net/humanking7/article/details/51024884

    祥知道
  • [Go] 轻量服务器框架tcp的粘包问题 封包与拆包

    tcp传输的数据是以流的形式传输的,因此就没有办法判断到哪里结束算是自己的一个消息,这样就会出现粘包问题,多个包粘在一起了

    陶士涵
  • 初学者|一起来学习pyltp

    本文简绍了pyltp的使用方法,它提供了一系列中文自然语言处理工具,用户可以使用这些工具对于中文文本进行分词、词性标注、句法分析等等工作。

    AiTechYun
  • 什么是防火墙?防火墙基础知识讲解

    防火墙也被称为防护墙,它是一种位于内部网络与外部网络之间的网络安全系统,可以将内部网络和外部网络隔离。通常,防火墙可以保护内部/私有局域网免受外部攻击,并防止重...

    于小勇
  • 表单填写进度提示效果

    Fort.js 是一款用于时尚、现代的表单填写进度提示效果的 JavaScript 库,你需要做的就是添加表单,剩下的任务就交给 Fort.js 算法了,使用非...

    用户3055976
  • 数字孪生赋能工业发展:可视化“智”造航天新里程

    2020 年 6 月 23 日 9 时 43 分,随着北斗三号最后一颗组网卫星成功在西昌卫星发射中心发射,至此,我国北斗卫星导航系统已全面建成。从 2000 年...

    HT for Web
  • iOS美团同款"ZSource"二进制调试实现

    前段时间我们项目也实现了组件的二进制化,在之前的技术周会中我们有提到跟美团同款ZSource的二进制调试能力,我们也在自己的Cocoapods-imy-bin插...

    iOS_林夕

扫码关注云+社区

领取腾讯云代金券