User-Profile-Image
hankin
  • 5
  • centos7
  • docker
  • mysql
  • PostgreSQL
  • git/gitlab
  • ELK
  • python
    • python-Tornado
    • python-django
  • redis
  • nginx
  • kvm
  • proxmox
  • mongo
  • kubernetes
  • prometheus
  • GlusterFs
  • nfs
  • freeswitch
  • httpd
  • shell脚本
  • linux
  • fastdfs
  • nextcloud
  • openssl
  • openvpn
  • rabbitmq
  • sqlite
  • svn
  • java
  • ubuntu
  • vue2
  • wordpress
  • php
  • IOT物联网
  • 项目
  • 故障处理
  • 树莓派
  • 博客存档
  • 未分类
  • 杂项
  • #1742(无标题)
  • 新视野
  • 分类
    • 项目
    • 树莓派
    • 杂项
    • 未分类
    • 新视野
    • 故障处理
    • 博客存档
    • wordpress
    • vue2
    • ubuntu
    • svn
    • sqlite
    • shell脚本
    • redis
    • rabbitmq
    • python-django
    • python
    • proxmox
    • prometheus
    • PostgreSQL
    • php
    • openvpn
    • openssl
    • nginx
    • nfs
    • nextcloud
    • mysql
    • mongo
    • linux
    • kvm
    • kubernetes
    • java
    • IOT物联网
    • httpd
    • GlusterFs
    • git/gitlab
    • freeswitch
    • fastdfs
    • ELK
    • docker
    • centos7
  • 页面
    • #1742(无标题)
  • 友链
      请到[后台->主题设置->友情链接]中设置。
Help?

Please contact us on our email for need any support

Support
    首页   ›   博客存档   ›   正文
博客存档

docker_net.py

2022-10-28 23:33:23
1543  0 0

#
# -*- coding: utf-8 -*-
#获取路由器下可用ip,分配给各个容器,循环检查分配是否正常

import os
import time
from itertools import islice
import os.path

#网关
ip_gate = "192.168.124.1"
mask = ""

#可用ip列表
ip1 = ""
ip2 = ""
ip3 = ""
ip4 = ""

# docker容器列表
docker_list = ["in1","in2","in3","in4"]

#log
logfile = "/root/cron/docker_net_check.log"

def save_file(file,data,type):
    t = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
    f = open(file, type)
    f.write(str(t))
    f.write(data)
    f.close()

# init 初始化
def init_ip():
    if os.path.isfile("/root/cron/ping_ip.sh"):
        print("init_ip: find ping_ip.sh ok")
    else:
        f = open("/root/cron/ping_ip.sh", "a+")
        f.write("#!/bin/sh\n")
        f.write("for i in `seq 211 229`\n")
        f.write("do\n")
        f.write("ping -c 1 $1$i | grep -q 'ttl=' ||  echo \"$1$i\" &\n")
        f.write("done\n")
        f.close()
        print("init_ip: create ping_ip.sh ok")

    if os.path.isfile("/root/cron/pip_ip.txt"):
        os.remove("/root/cron/pip_ip.txt")
        print("init_ip: del ping_ip.log")

    ping_str = "/usr/bin/ping " + ip_gate +" -c 1 -W 1"
    ping_gateway = os.popen(ping_str)
    strr = ping_gateway.read().find("1 packets transmitted, 1 received")
    print("init_ip: ping test gate:" + str(strr))
    if int(strr) > 0:
        sh_str = "/usr/bin/sh /root/cron/ping_ip.sh " + str(ip_gate[:-1]) + " >> /root/cron/pip_ip.txt"
        os.popen(sh_str)
    else:
        while True:
            print("init_ip: gate err, please check ip_gate")
            # test bad
            time.sleep(1)

# 读取可用ip
def read_ip():
    global ip1
    global ip2
    global ip3
    global ip4
    if os.path.isfile("/root/cron/pip_ip.txt"):
        print("read_ip: find pip_ip.txt")
        for i in range(10):
            f = open("/root/cron/pip_ip.txt", "r")
            ip = f.readlines()
            f.close()
            if len(ip) < 4:
                print("read_ip: -for")
                time.sleep(1)
            else:
                continue

        #print(ip)
        print("read_ip : len(ip)" ,str(len(ip)))
        if len(ip) > 3:
            k = list(islice(ip, 4))
            ip1 = k[0][:-1]
            ip2 = k[1][:-1]
            ip3 = k[2][:-1]
            ip4 = k[3][:-1]
            print(ip1, ip2, ip3, ip4)
        else:
            print("read_ip : ip < 4 ")
            save_file("/root/cron/pip_py.log","  ip < 4 \n","a+")
    else:
        print("read_ip : no find ")
        save_file("/root/cron/pip_py.log", "no find ip.log", "a+")

    print("read_ip: ",ip1,ip2,ip3,ip3)

# 防火墙添加
def firewalld(ip1, ip2, ip3, ip4):
    str1 = "/usr/bin/firewall-cmd --add-forward-port=port=8201:proto=tcp:toport=8080:toaddr=" + str(ip1)
    str2 = "/usr/bin/firewall-cmd --add-forward-port=port=8202:proto=tcp:toport=8080:toaddr=" + str(ip2)
    str3 = "/usr/bin/firewall-cmd --add-forward-port=port=8203:proto=tcp:toport=8080:toaddr=" + str(ip3)
    str4 = "/usr/bin/firewall-cmd --add-forward-port=port=8204:proto=tcp:toport=8080:toaddr=" + str(ip4)
    os.popen("/usr/bin/firewall-cmd --reload")
    os.popen(str1)
    os.popen(str2)
    os.popen(str3)
    os.popen(str4)
    os.popen("/usr/bin/firewall-cmd --list-all")
    print("firewalld :ok")

#重启所有容器
def restart_docker():
    for docker_name in docker_list:
        sh_str = "/usr/bin/docker restart " + docker_name
        r = os.popen(sh_str)
        r = r.read()
    print("restart_docker: ", r)

#使用pipework给容器分配ip
def pipework_ip(docker_name,ip,ip_gate):
    sh_str = "/usr/bin/docker restart " + docker_name
    r = os.popen(sh_str)
    r = r.read()
    print("restart_docker: ", r)

    str1 = "/usr/local/bin/pipework br0 " + docker_name + " " + str(ip) + "/24" + "@" + str(ip_gate)
    os.popen(str1)
    print("pipework_ip: ",docker_name)

#检查ip分配情况,分配失败的容器重新分配
def check():
        sh_str1 = "/usr/bin/docker exec  -i " + "in1" + " sh -c 'ip addr' |grep 'inet 192'"
        sh_str2 = "/usr/bin/docker exec  -i " + "in2" + " sh -c 'ip addr' |grep 'inet 192'"
        sh_str3 = "/usr/bin/docker exec  -i " + "in3" + " sh -c 'ip addr' |grep 'inet 192'"
        sh_str4 = "/usr/bin/docker exec  -i " + "in4" + " sh -c 'ip addr' |grep 'inet 192'"
        r1 = os.popen(sh_str1)
        r1 = r1.read()
        r2 = os.popen(sh_str2)
        r2 = r2.read()
        r3 = os.popen(sh_str3)
        r3 = r3.read()
        r4 = os.popen(sh_str4)
        r4 = r4.read()
        #print("check_net: r.read():",r)

        if "inet 192" in r1:
            print("check: " +"in1" + " net is ok")
        else:
            print("check: " + "in1" + " net is err")
            save_file(logfile, "in1 bad", "a+")
            pipework_ip("in1", ip1, ip_gate)
        if "inet 192" in r2:
            print("check: " +"in2" + " net is ok")
        else:
            print("check: " + "in2" + " net is err")
            save_file(logfile, "in2 bad", "a+")
            pipework_ip("in2", ip2, ip_gate)
        if "inet 192" in r3:
            print("check: " +"in3" + " net is ok")
        else:
            print("check: " + "in3" + " net is err")
            save_file(logfile, "in3 bad", "a+")
            pipework_ip("in3", ip3, ip_gate)
        if "inet 192" in r4:
            print("check: " +"in4" + " net is ok")
        else:
            print("check: " + "in4" + " net is err")
            save_file(logfile, "in4 bad", "a+")
            pipework_ip("in4", ip4, ip_gate)
        time.sleep(1)

#运行
def start():
    init_ip()
    read_ip()
    restart_docker()
    firewalld(ip1, ip2, ip3, ip4)
    while True:
        print("start: check")
        check()
        time.sleep(10)

start()

评论 (0)

点击这里取消回复。

欢迎您 游客  

Copyright © 2025 网站备案号 : 蜀ICP备2022017747号
smarty_hankin 主题. Designed by hankin
主页
页面
  • #1742(无标题)
博主
tang.show
tang.show 管理员
linux、centos、docker 、k8s、mysql等技术相关的总结文档
210 文章 2 评论 194509 浏览
测试
测试