• k8s排查无法访问服务


    问题

    环境是4台机器,master、node1、node2、harbor,pod状态正常,但是无法访问CLUSTER-IP,每台虚拟机网路都是Nat模式,平时可以互相ping通能够访问外网,但是master中无法访问CLUSTER-IP,在对应的节点上访问服务可以显示正常信息

    CLUSTER-IP
    在这里插入图片描述
    pod状态
    在这里插入图片描述
    查看节点,发现之前是Ready,现在子节点有点不正常
    在这里插入图片描述
    查看svc情况,可以看到kube-proxy也起来了

    kubectl get svc
    netstat -anpt | grep :ip
    
    • 1
    • 2

    在这里插入图片描述
    访问
    在这里插入图片描述

    解决

    整合了一些自己尝试的网上解决的方法,在此记录下来

    一、修改k8s的配置文件,将网络模式类型修改为Nodeport(这是基础,改了不一定会好,但一定要改),

    编辑文件,找到spec.type,将类型修改为NodePort

    kubectl edit svc nginx-deployment
    
    • 1

    在这里插入图片描述
    再查看一下ipvs模式需要要添加ip_vs相关模块

    cat > /etc/sysconfig/modules/ipvs.modules <<EOF
     #!/bin/bash 
     modprobe -- ip_vs 
     modprobe -- ip_vs_rr 
     modprobe -- ip_vs_wrr 
     modprobe -- ip_vs_sh 
     modprobe -- nf_conntrack_ipv4 
    EOF
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述
    确认网络类型

    kubectl get svc
    
    • 1

    在这里插入图片描述

    二、设置hairpin-mode参数

    相关文档说明翻译:kubernetes
    如果网络没有为“发夹模式”流量生成正确配置,通常当 kube-proxy 以 iptables 模式运行,并且 Pod 与桥接网络连接时,就会发生这种情况。Kubelet 公开了一个 hairpin-mode 标志,如果 pod 试图访问它们自己的 ServicevIP,就可以让 Service 的端点重新负载到他们自己身上。hairpin-mode 标志必须设置为 hairpin-veth 或者 promiscuous-bridge。
    在这里插入图片描述

    github中有也一个相关的讨论有兴趣的可以看一下:kubelet 未使用 CNI 插件设置发夹
    多种结论基本都是指向修改hairpin-mode参数,应该由cni插件来根据这个值来做对应的操作,所以veth该文件内容设置 1(本人/sys/devices/virtual/net/docker0/brif/路径下没有文件所以无法设置)

    for intf in /sys/devices/virtual/net/docker0/brif/*; do echo 1> $intf/hairpin_mod; done
    
    • 1

    上面是通过cni设置hairpin-mode参数,这里再通过flannel设置参数(本人系统文件本来就是这个配置,所以无效)
    /etc/cni/net.d/10-flannel.conflist

    {
      "name": "cbr0",
      "plugins": [
        {
          "type": "flannel",
          "delegate": {
            "hairpinMode": true,
            "isDefaultGateway": true
          }
        },
        {
          "type": "portmap",
          "capabilities": {
            "portMappings": true
          }
        }
      ]
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    三、确认node子节点是否可用
    子节点上运行指令,查看是否有如下报错。 报错原因是因为kubernetes-admin命令没有同步过来,所以解决办法需要把对应文件同步过来就好,将主节点的配置 /etc/kubernetes/admin.conf 复制到本机,再重新声明环境变量
    在这里插入图片描述
    在子节点操作,复制配置文件

    scp root@主节点服务器地址:/etc/kubernetes/admin.conf /etc/kubernetes/
    
    • 1

    添加环境变量

    echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
    
    • 1

    申明环境变量

    source ~/.bash_profile
    
    • 1

    重新查看配置

    kubectl get svc
    
    • 1

    在这里插入图片描述
    稍等一会之后基本就好了,有点莫名其妙
    解决podip Destination Host Unreachable问题

  • 相关阅读:
    【技术积累】Mysql中的SQL语言【技术篇】【四】
    【数据结构】双向链表
    记:lora及lorawan的一些概念话
    华为OD机试 - 叠积木1 - 双指针(Java 2023 B卷 200分)
    《代码大全2》第16章 控制循环
    【VUE3】--创建vue-cli项目,setup+ref+reactive+vue2/vue3响应式原理【练习代码已上传至Gitee】
    js原型链
    MongoDB聚合查询重复值并做标记404处理
    java计算机毕业设计springboot+vue旅游记忆系统
    【开源】基于Vue.js的高校宿舍调配管理系统
  • 原文地址:https://blog.csdn.net/qq_42910468/article/details/126097523