가상화 이전에 구축된 자사 인프라를 Docker와 Open vSWtich로 방법을 강구하면

청원


Docker를 사용하면 비상시에 자주 사용하는 인프라를 즉시 다시 시작할 수 있기를 바랍니다.
그리고 기존 인프라와의 운용을 고려해 L2의 접지를 희망한다.

도입 전제조건


Docker 및 OpenvSwitch 작업특히 ovs-docker 명령을 이동할 수 있습니다.

Docker+OpenvSwitch를 사용해야 하는 이유


소프트이더 VPN과 DHCP 등으로 대표되는 L2를 소통할 수 있는 서비스군을 한 번에 펼치기에 가장 적합하다.
Ipvlan, Macvlan도 좋지만, 특히 SoftEther VPN을 사용하는 경우
컨테이너 내에 L2의 방송 포트를 설정해야 하기 때문에 요구를 만족시키지 못한다.
또 앞으로 개발환경으로 개인이 활용하더라도 L2를 통해 소통하는 것이 바람직하다
네트워크 스크립트를 쓸 때 검증이 쉬워진다.
  • SoftEtherVPN
  • 로컬 브리지 필요
  • 사용하지 않을 때는 접속성이 매우 높아 좋은 맛이 없다
  • DHCP
  • DHCP 릴레이 에이전트를 통한 트렁킹도 가능
  • 가능한 한 Docker에 이런 구조가 설치되는 것을 피한다
  • 왜 조개 각본으로 펼쳐졌냐면요.


    OpenvSwitch용 Docker 플러그인의 이슈는 1년 전부터 그곳에 놓여 있었고, 유지보수가 제대로 되지 않아 동작이 의심스러워 docker-compose 사용을 포기했다.원래 이 플러그인을 사용해도 docker-compose의 문법상 L2 행위를 설명하는 내용을 찾을 수 없기 때문에 조개 스크립트로 펼치기로 했다.
    또 이번 디커는 오픈스택뉴트론을 활용하는 방법도 있지만, 공개 퍼포먼스가 필요 없어 기능 과잉으로 판단해 사용하지 않기로 했다.
    성과물과 최소한의 설명만 원하는 사람은 사용하세요Github:fono09/infra_portale.

    프로비저닝


    컨테이너는 기존 인프라로 봐도 L2에서 완전히 독립된 것처럼 보이는 호스트로 펼쳐졌다.
    OpenvSwtich 와 물리적 스위치의 연결은 L2 브리지로 이루어집니다.

    기본적 방법


    네트워크 주위

  • 기존 물리적 네트워크에 대한 출구를 위한 브로드캐스트 포트 준비
  • Open vSwtich를 통한 가상 브리지 제작
  • 가상 브리지와 브로드캐스트 포트를 연결하여 기존 네트워크와 L2 커뮤니케이션
  • 종합하여 서술하다.
    ip link set $IFACE promisc on
    
    ovs-vsctl add-br $VSWITCH_NAME
    ovs-vsctl add-port $VSWITCH_NAME $IFACE
    

    개별 서비스 정보

  • 수직 Docker 컨테이너
  • Docker의 표준 네트워크는 사용되지 않음
  • 물론, 파일이나 옵션으로 한 번 동작
  • 가상 브리지와 Open vSwtich 연결
  • 종합하여 서술하다.
    docker run -d --name $CT_NAME --net=none -v foo:bar alice/great-service
    ovs-docker add-port $VSWTICH_NAME $CT_IF0 $CT_NAME --ipaddress=$CT_ADDR --gateway=$CT_GATEWAY
    

    철회할 때 반대로만 해요.

  • Open vSwtich의 가상 브리지에서 Docker 컨테이너 분리
  • 용기 닫기
  • 가상 브리지의 취소
  • 종합하여 서술하다.
    ovs-docker del-port $VSWTICH_NAME $CT_IF0 $CT_NAME
    docker rm -f $CT_NAME
    ovs-vsctl del-br $VSWTICH_NAME
    

    막히기 쉬운 곳


    호스트 재부팅 내구성

  • OpenvSwitch
  • 별도의 데이터베이스를 통해 재부팅 가능
  • ovs-docker
  • 동작의 docker를 이름으로 뺀 후 PID로 추적하기 위해 재부팅 시 PID가 변경되고 가상 I/F가 고립되었을 때 CTID로 재추적하는 구조가 없음
  • docker
  • CTID는 고정식
  • 위에서 말한 바와 같이 ovs-docker가 다시 시작하지 않기 때문에 시스템d의 유닛 파일을 제작하여 등록했습니다.
    시스템이 끝날 때 잘 철회해야 한다.

    SoftEtherVPN


    L2 소통은 컨테이너를 통해 할 수 있어야 한다.완료할 수 없는 경우 연결된 클라이언트는
    SoftEther VPN의 SecureNAT에 매달려 있어 경로가 번거롭다.
    말하자면 기존 인프라와 L2 소통의 요구를 충족시킬 수 없다.이번에는 두 개의 가상 I/F를 이용했다.
    vim

    Samba

    id (username) 명령을 통해 사용자를 이용한 UID를 파악하여 설정에 유입시킨다.
    이것을 설정하지 않으면 사용자는 자신의 파일에 접근할 수 없습니다.

    DHCP


    컨테이너를 가동한 뒤 가상 I/F를 뒤로 두었기 때문에 네트워크 가동을 전혀 기다리지 않는다는 인상을 줘 조작 불량에 대한 고민을 키웠다.
    인터넷에도 접속이 안 되는 경우가 있다.
    이번에 사용한 이미지에 포함된 조개 스크립트chakphanu/docker-kea:master/src/starter.sh와 같이
    인터넷이 작동하는 동작을 기다리는 것이 중요하다고 생각하기 때문에 이미지를 만들 때 고려해야 한다.

    좋은 웹페이지 즐겨찾기