• 解决公网下,k8s calico master节点无法访问node节点创建的pod


    目的:解决pod部署成功后,只能在node节点访问,而master节点无法访问

    原因:集群搭建时,没有配置公网进行kubectl操作,从而导致系统默认node节点,使用内网IP加入k8s集群!如下:

    解决方案:围绕公网IP进行搭建即可,其实就是在传统的搭建步骤下,给master节点和node节点添加下公网网卡就可以了


    1、机器IP清单

    • 我的两台服务器的都是云服务器
    • 我的master节点IP为111.230开头的
    • 我只有一个node节点,IP为192.168.9.96(该IP与calico网段冲突)

    2、重置master节点的kubeadm

    kubeadm reset

    3、在master节点上创建公网的虚拟网卡

    • 看一下你的公网IP是否在机器中存在
    ip a | grep 你的公网IP
    • 如果没有就执行下面这段代码新增一个和公网IP一样的虚拟网卡IP 
    1. cat > /etc/sysconfig/network-scripts/ifcfg-eth0:1 <<EOF
    2. BOOTPROTO=static
    3. DEVICE=eth0:1
    4. IPADDR=111.230.19.178 #这里是你的公网IP
    5. PREFIX=32
    6. TYPE=Ethernet
    7. USERCTL=no
    8. ONBOOT=yes
    9. EOF
    • 重置网络
    systemctl restart network 

    重置失败就直接去重启电脑就可以了 

    4、初始化master主节点

    • 注意pod的网络范围为172.17.0.0/16,因为我有一台机器是192.168开头的
    1. kubeadm init \
    2. --apiserver-advertise-address=111.230.19.178 \
    3. --control-plane-endpoint=cluster-endpoint \
    4. --image-repository registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images \
    5. --kubernetes-version v1.20.9 \
    6. --service-cidr=10.96.0.0/16 \
    7. --pod-network-cidr=172.17.0.0/16

    初始化成功后的日志:

    Your Kubernetes control-plane has initialized successfully!

    To start using your cluster, you need to run the following as a regular user:

      mkdir -p $HOME/.kube
      sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
      sudo chown $(id -u):$(id -g) $HOME/.kube/config

    Alternatively, if you are the root user, you can run:

      export KUBECONFIG=/etc/kubernetes/admin.conf

    You should now deploy a pod network to the cluster.
    Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
      https://kubernetes.io/docs/concepts/cluster-administration/addons/

    You can now join any number of control-plane nodes by copying certificate authorities
    and service account keys on each node and then running the following as root:

      kubeadm join cluster-endpoint:6443 --token wxt6jz.xf9g3va8xpggfoc9 \
        --discovery-token-ca-cert-hash sha256:2326cb4e54fe2fd92d112e01d1caf3e58735665e480f3d5aa364d47e52088b7c \
        --control-plane

    Then you can join any number of worker nodes by running the following on each as root:

    kubeadm join cluster-endpoint:6443 --token wxt6jz.xf9g3va8xpggfoc9 \
        --discovery-token-ca-cert-hash sha256:2326cb4e54fe2fd92d112e01d1caf3e58735665e480f3d5aa364d47e52088b7c

     

    5、修改calico.yaml中的网段

    搜索:192.168

    取消注释,并修改网段:

    • 与步骤3中的pod-network-cidr保持一致

    6、kubectl应用calico

    7、重置node节点

    kubeadm reset

    8、在node节点上创建公网的虚拟网卡

    • 看一下你的公网IP是否在机器中存在
    ip a | grep 你的公网IP
    • 如果没有就执行下面这段代码新增一个和公网IP一样的虚拟网卡IP 
    1. cat > /etc/sysconfig/network-scripts/ifcfg-eth0:1 <<EOF
    2. BOOTPROTO=static
    3. DEVICE=eth0:1
    4. IPADDR=139.159.228.xx #这里是你的公网IP
    5. PREFIX=32
    6. TYPE=Ethernet
    7. USERCTL=no
    8. ONBOOT=yes
    9. EOF
    • 重置网络
    systemctl restart network 

    重置失败就直接去重启电脑就可以了 

    9、去node节点重新加入到k8s集群

    • 这里一点要把行前的空格去掉!

    kubeadm join cluster-endpoint:6443 --token wxt6jz.xf9g3va8xpggfoc9 \
    --discovery-token-ca-cert-hash sha256:2326cb4e54fe2fd92d112e01d1caf3e58735665e480f3d5aa364d47e52088b7c

    使用docker ps查看正在运行的容器:

    发现node节点的calico正常运行了:

    10、在主节点检查pod信息

    在master节点执行:

    kubectl get pod -A -owide

    • node节点上的pod已经全部变为外网IP了,master节点也能正常访问node节点上的pod

    11、验证

    验证master节点是否能正常访问node节点

    直接在步骤10中,找一个node上的pod访问即可,如(上面如标框框的一个):

    kubectl logs calico-node-rs4hj -n kube-system

  • 相关阅读:
    消除笔哪个P图软件有?这几种软件都有消除笔功能
    卡尔曼滤波算法的五大核心公式含义
    Vue07/Vue dynamic动态组件
    C++基础语法
    Linux c++开发-04-让Hello World更像一个工程
    cdh3.6.2集成kylin3.0.2及简单使用
    【Leetcode】149.直线上最多的点数(Hard)
    Redis教程
    第23个520情人节,女程序猿送男朋友什么?
    女性气虚胃寒怎么办 六招可祛寒补气
  • 原文地址:https://blog.csdn.net/weixin_42675423/article/details/134435472