当前位置 : 主页 > 手机开发 > harmonyos >

docker服务程序网络排查

来源:互联网 收集:自由互联 发布时间:2023-08-28
示例场景 当我们把系统的业务应用部署到容器中时候,由于主机的网络和容器网络相互影响。就会碰到一些异常问题. 主机的防火墙规则会影响到容器服务之间的相互调用 当容器服务之

示例场景

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

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

           

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容器 虽然网卡名称会变,但是容器所处的网段并不会随便发生变化

    

docker服务程序网络排查_白名单_02

         1.查询容器所在的网段

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

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

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

        

docker服务程序网络排查_docker_03

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

       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 --znotallow=trusted --add-source=173.245.48.0/20
          $ firewall-cmd --permanent --znotallow=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.后端发版操作

        

docker服务程序网络排查_白名单_04

       

docker服务程序网络排查_docker_05

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

        

docker服务程序网络排查_白名单_06

        

docker服务程序网络排查_docker_07

        

docker服务程序网络排查_docker_08

   

#!/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发版脚本

 

上一篇:docker单机网络类型
下一篇:没有了
网友评论