• docker服务程序网络排查


    示例场景

               当我们把系统的业务应用部署到容器中时候,由于主机的网络和容器网络相互影响。就会碰到一些异常问题.

               主机的防火墙规则会影响到容器服务之间的相互调用

               

               当容器服务之间是出现网络调用问题的时候首先停掉防火墙 重启服务看是否能正常运行。如果停掉防火墙服务正常则证明是防火墙问题

       问题场景

            docker Nginx 反向代理宿主机服务 connect() failed (113: No route to host) while connecting to upstream

        解决方案

            设置主机上的防火墙白名单

            1.按网卡名称单个添加白名单

    set_firewall_cmd () {
        string='|%-3s|%-18s|%-10s|%-10s|%-10s|%-16s|%-16s|%-16s|';                                               
        br="`echo $string|grep -Eo '[0-9]+'|awk '{s=s+$1}END{s=s+NR;for(i=0;i<=s;i++){printf "-"};print""}';`";  
        for i in `ip a|awk -F ':' '/^[0-9]/{print $2}'|sort`; do
            DEVICE_DESC=$i;                                                 
            DEVICE=${DEVICE_DESC%@*}; 
            STATUS=`ip a|grep ":.$DEVICE:"|awk '{print /LOWER_UP/?"UP":"DOWN"}'`;                                       
            TYPE=`  ethtool $DEVICE |grep 'Supported ports' |sed 's/]//g' |awk -F '[' '{print $2}'|sed 's/ //g'`;       
            SPEED=` ethtool $DEVICE |awk '/Speed/{print $NF}'`;                                                         
            IPADDR=`ifconfig $DEVICE |grep -Eo '([0-9]+.){3}[0-9]{1,3}'|awk 'NR==1'`;                                 
            MASK=`  ifconfig $DEVICE |grep -Eo '([0-9]+.){3}[0-9]{1,3}'|awk '/^255/'`;                                
            BCAST=` ifconfig $DEVICE |grep -Eo '([0-9]+.){3}[0-9]{1,3}'|awk 'NR>1&&!/^255/'`;                         
            [ "x"$STATUS == "x" ] && STATUS='-';                                                                   
            [ "x"$TYPE   == "x" ] && TYPE='-';                                                                     
            [ "x"$SPEED  == "x" ] && SPEED='-';                                                                    
            [ "x"$IPADDR == "x" ] && IPADDR='-';                                                                   
            [ "x"$BCAST  == "x" ] && BCAST='-';                                                                    
            [ "x"$MASK   == "x" ] && MASK='-'; 
            if [[ $ip_addr = $IPADDR ]]; then
                echo "public" $DEVICE; echo $br;
            else  
                echo "trusted" $DEVICE; echo $br;          
                firewall-cmd --zone=trusted --add-interface=$DEVICE
            fi 
        done;
    }
    
    remove_firewall_cmd () {
        a=`firewall-cmd --zone=trusted --list-interfaces`
        OLD_IFS="$IFS" 
        IFS=" " 
        arr=($a) 
        IFS="$OLD_IFS" 
        for s in ${arr[@]} 
        do 
            echo "remove-interface:$s" 
            firewall-cmd --zone=trusted --remove-interface=$s
        done
       
    }
    remove_firewall_cmd
    set_firewall_cmd
    firewall-cmd --zone=public --list-all
    firewall-cmd --zone=trusted --list-all
    添加docker创建的虚拟网卡

            按照虚拟网卡添加的话,每次重启容器的时候就需要重新执行一次添加白名单指令。比较麻烦

          2.按虚拟网段添加白名单

            每次重启docker容器 虽然网卡名称会变,但是容器所处的网段并不会随便发生变化

        

             1.查询容器所在的网段

             2.在宿主机上执行添加白名单

               firewall-cmd --zone=trusted --add-source=10.42.0.0/16

               firewall-cmd --zone=trusted --add-source=10.42.0.0/24

            

            用网段的方式添加了白名单,即使容器服务重启。容器之间的网络调用也能继续正常进行。无需重新执行添加白名单命令

           3.firewall-cmd设置白名单示例

             1.使mysql服务的3306端口只允许192.168.1.1/24网段的服务器能访问

               #添加规则
                   firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.1.1/24" port protocol="tcp" port="3306" accept"
               #reload使生效
                   firewall-cmd --reload

            2.IP 列表逐一加入 trusted 区域,使用命令如下:
              $ firewall-cmd --permanent --zone=trusted --add-source=173.245.48.0/20
              $ firewall-cmd --permanent --zone=trusted --add-source=131.0.72.0/22
              使 trusted 区域设置生效,使用命令如下:
              $ firewall-cmd --reload

      前后台微服务调用异常      

           当对后台的服务进行打包发版后,前台服务pod由于应用缓存问题导致调用后端pod接口出现异常。需要手动重启前端Pod,操作比较麻烦

           /usr/local/sbin/kubectl --kubeconfig /home/aa/kubectl/k8s-cluster/80-cluster/kube_config.yml replace -f /home/aa/kubectl/k8s-cluster/80-cluster/main.yml --force
            deployment.apps "main" deleted
            deployment.apps/main replaced

           1.后端发版操作

            

           

          2.后端微服务发版后没有更新注册中心,导致注册中心的数据还是缓存的发版前的服务数据。前端调用后端服务接口就会出现异常

            

            

               

    #!/bin/bash
    
    /usr/local/sbin/kubectl --kubeconfig /home/jenkins/kubectl/k8s-cluster/80-cluster/kube_config.yml replace -f /home/jenkins/kubectl/k8s-cluster/80-cluster/register.yml --force
    
    /usr/local/sbin/kubectl --kubeconfig /home/jenkins/kubectl/k8s-cluster/80-cluster/kube_config.yml replace -f /home/jenkins/kubectl/k8s-cluster/80-cluster/gateway.yml --force
    
    
    /usr/local/sbin/kubectl --kubeconfig /home/jenkins/kubectl/k8s-cluster/80-cluster/kube_config.yml replace -f /home/jenkins/kubectl/k8s-cluster/80-cluster/sdc-tele-web.yml --force
    
    /usr/local/sbin/kubectl --kubeconfig /home/jenkins/kubectl/k8s-cluster/80-cluster/kube_config.yml replace -f /home/jenkins/kubectl/k8s-cluster/80-cluster/main.yml --force
    
    
    sleep 15
    
    /usr/local/sbin/kubectl --kubeconfig /home/jenkins/kubectl/k8s-cluster/80-cluster/kube_config.yml replace -f /home/jenkins/kubectl/k8s-cluster/80-cluster/webapp.yml --force
    docker发版脚本
  • 相关阅读:
    mouse_event模拟鼠标滚轮
    润乾报表配置技术路线
    建筑 物件 开心背单词 读句子,单词,字母,看图例, 翻译,看动画
    文字过渡动画,曲线过渡动画,,使用这个插件assign shape keys
    运动锻炼 开心背单词 读句子,单词,字母,看图例, 翻译,看动画,学英语,轻松背单词,简单背单词
    blender293 内置插件 精度绘画控件,PDT学习003,pdt tangents 切线
    日常用品 背单词 读句子 看图片 读单词 读字母 翻译, 看动画 学英语
    blender293 内置插件 精度绘画控件,PDT学习 precision drawing tools
    乔布斯 背单词 02 读句子 单词 字母 翻译,看动画 学英语 名言 我菜顾我在,我菜故我在,blender加python
    狐狸 和 乌鸦 英语 朗读句子 背单词
  • 原文地址:https://www.cnblogs.com/yxh168/p/15032218.html
Copyright © 2020-2023  润新知