zoukankan      html  css  js  c++  java
  • k8s西游记

    前言

    最近在另一个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主机上

    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,这里使用最简单的命令行形式,如下:

    root@001:~# DATASTORE_TYPE=kubernetes KUBECONFIG=~/.kube/config calicoctl [命令]
    

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

    设置命令别名

    root@001:~# alias k8s-calicoctl='DATASTORE_TYPE=kubernetes KUBECONFIG=~/.kube/config calicoctl'
    

    3. 变更IP池

    3.1 查看目前支持的IP池

    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池

    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池
    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池到文件
    root@001:~# k8s-calicoctl get ippool -o yaml > /root/k8s-calico-pools.yaml
    
    编辑k8s-calico-pools.yaml
    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,上面注释位置。

    应用变更:
    root@001:~# k8s-calicoctl apply -f pool.yaml
    
    再次查看IP池:
    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. 重启所有容器组

    kubectl -n [命名空间] delete pods --all;
    

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

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

    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网络,那么请执行下面的命令吧:

    root@001:~# k8s-calicoctl delete pool default-ipv4-ippool
    

    最后

    如果有什么疑问和见解,欢迎评论区交流。
    如果你觉得本篇文章对您有帮助的话,感谢您的【推荐】。
    如果你对k8s感兴趣的话可以【关注我】,我会定期的在博客分享我的心得。
    未经允许,禁止转载

    参考链接

    https://docs.projectcalico.org/v3.8/getting-started/calicoctl/install
    https://docs.projectcalico.org/v3.8/getting-started/calicoctl/configure/kdd
    https://docs.projectcalico.org/v3.8/networking/changing-ip-pools

  • 相关阅读:
    noexcept(c++11)
    右值引用和std::move函数(c++11)
    mint-ui 取值
    apicloud 注意事项
    倒计时
    获取第n天日期
    防止split没有切割的变量报错
    return
    时间戳转为日期
    echarts 中 请求后台改变数据
  • 原文地址:https://www.cnblogs.com/justmine/p/11399752.html
Copyright © 2011-2022 走看看