前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >k8s西游记 - 变更网络插件IP池

k8s西游记 - 变更网络插件IP池

作者头像
justmine
发布2019-08-30 11:55:54
9140
发布2019-08-30 11:55:54
举报
文章被收录于专栏:容器化容器化

前言

最近在另一个k8s集群中,搭建了kong网关,在配置OIDC插件时,希望使用Memcahe代替Cookie来存储会话信息,于是把部署在同一局域网Memcahe的内网IP,比如:192.168.10.145配置给了kong,发现kong居然不能访问这个IP,于是进入容器组,执行命令:ping 192.168.10.145,不通,what are you 弄啥呢?

这可怎么肿么玩呢? 突然想到,在给Kubernetes配置网络插件Calico时,初始化集群时,使用了官方推荐C类IP池,即:192.168.0.0/16,而内网IP刚好符合C类IP池,可能就导致此类IP始终不会被转发到主机网络,带着这样子的猜想,于是决定修改网络插件的IP池。

如何修改Calico网络插件IP池?

1. 安装calicoctl

calicoctl允许您从命令行创建、读取、更新和删除Calico对象。有三种方式可以安装此工具,参考链接:https://docs.projectcalico.org/v3.8/getting-started/calicoctl/install

以二进制文件安装到k8s master主机上
代码语言:javascript
复制
root@001:~# cd /usr/local/bin;
root@001:~# curl -O -L  https://github.com/projectcalico/calicoctl/releases/download/v3.8.2/calicoctl;
root@001:~# chmod +x calicoctl;

备注:其他安装方式,请大家下去自行研究。

2. 配置calicoctl

配置calicoctl连接到kubernetes API,这里使用最简单的命令行形式,如下:

代码语言:javascript
复制
root@001:~# DATASTORE_TYPE=kubernetes KUBECONFIG=~/.kube/config calicoctl [命令]

备注:其他连接配置,请参考链接:https://docs.projectcalico.org/v3.8/getting-started/calicoctl/configure/kdd,大家下去自行研究吧。

设置命令别名
代码语言:javascript
复制
root@001:~# alias k8s-calicoctl='DATASTORE_TYPE=kubernetes KUBECONFIG=~/.kube/config calicoctl'

3. 变更IP池

3.1 查看目前支持的IP池
代码语言:javascript
复制
root@001:~# k8s-calicoctl get ippool -o wide;
NAME               CIDR            NAT   IPIPMODE  VXLANMODE  DISABLED  SELECTOR   
default-ipv4-pool  192.168.0.0/16  true  Always    Never      false     all()

备注:看到CIDR字段值,明白了吧,这里就不赘述了。

3.2 添加新的IP池
代码语言:javascript
复制
root@001:~# k8s-calicoctl create -f -<<EOF
apiVersion: projectcalico.org/v3
kind: IPPool
metadata:
  name: b-ipv4-pool
spec:
  cidr: 172.16.0.0/16
  ipipMode: Always
  natOutgoing: true
EOF;

备注:根据ipv4的指派范围,一般分为A类、B类、C类,局域网一般使用C类IP池,为了避免和k8s冲突,决定选择B类IP池,即:172.16.0.0/16,关于IP池详细划分,请大家下去自行查阅资料。

再次查看支持的IP池
代码语言:javascript
复制
root@001:~# k8s-calicoctl get ippool -o wide;
NAME               CIDR            NAT   IPIPMODE  VXLANMODE  DISABLED  SELECTOR   
default-ipv4-pool  192.168.0.0/16  true  Always    Never      false     all()
b-ipv4-pool        172.16.0.0/16   true  Always    Never      false     all()

备注:看到CIDR字段值,明白了吧,这里就不赘述了。

3.3 禁用旧的IP池
备份IP池到文件
代码语言:javascript
复制
root@001:~# k8s-calicoctl get ippool -o yaml > /root/k8s-calico-pools.yaml
编辑k8s-calico-pools.yaml
代码语言:javascript
复制
root@001:~# vi /root/k8s-calico-pools.yaml
apiVersion: projectcalico.org/v3
items:
- apiVersion: projectcalico.org/v3
  kind: IPPool
  metadata:
    name: default-ipv4-ippool
  spec:
    blockSize: 26
    cidr: 192.168.0.0/16
    ipipMode: Always
    natOutgoing: true
    disabled: true # 添加的脚本
    nodeSelector: all()
- apiVersion: projectcalico.org/v3
  kind: IPPool
  metadata:
    name: network-b-pool
  spec:
    blockSize: 26
    cidr: 172.16.0.0/16
    ipipMode: Always
    natOutgoing: true
    nodeSelector: all()
    vxlanMode: Never
kind: IPPoolList
metadata:
  resourceVersion: "44524549"

添加disabled: truedefault-ipv4-ippool,上面注释位置。

应用变更:
代码语言:javascript
复制
root@001:~# k8s-calicoctl apply -f pool.yaml
再次查看IP池:
代码语言:javascript
复制
root@001:~# k8s-calicoctl get ippool -o wide;
NAME               CIDR            NAT   IPIPMODE  VXLANMODE  DISABLED  SELECTOR   
default-ipv4-pool  192.168.0.0/16  true  Always    Never      true      all()
b-ipv4-pool        172.16.0.0/16   true  Always    Never      false     all()

4. 重启所有容器组

代码语言:javascript
复制
kubectl -n [命名空间] delete pods --all;

备注:请大家下去自己完善遍历删除吧。

这一步会使用新的IP池重新分配容器组IP,如下:

代码语言:javascript
复制
root@001:~# kubectl -n kong get pods -o wide
NAME                        READY   STATUS    RESTARTS   AGE     IP
kong-kong-574957fdf7-x8ppk  1/1     Running   0          2d1h    172.16.252.126
kong-postgresql-0           1/1     Running   0          4d23h   172.16.252.100
kong-kong-controller-74fd6  2/2     Running   2          2d2h    172.16.252.124
konga-8cc9565d5-bbm9p       1/1     Running   0          4d22h   172.16.252.103

5. 删除旧IP池

如果所有的Pod IP都已正常分配,但是发现满足旧IP池的IP地址还是无法ping通,也就是无法逃逸出k8s网络,那么请执行下面的命令吧:

代码语言:javascript
复制
root@001:~# k8s-calicoctl delete pool default-ipv4-ippool

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-08-29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 如何修改Calico网络插件IP池?
    • 1. 安装calicoctl
      • 以二进制文件安装到k8s master主机上
    • 2. 配置calicoctl
      • 设置命令别名
    • 3. 变更IP池
      • 3.1 查看目前支持的IP池
      • 3.2 添加新的IP池
      • 3.3 禁用旧的IP池
    • 4. 重启所有容器组
      • 5. 删除旧IP池
      相关产品与服务
      容器服务
      腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档