본문 바로가기
서버구축 (WEB,DB)

Docker Swarm 노드 구성 및 Overlay 네트워크 방화벽 규칙

by 날으는물고기 2023. 11. 22.

Docker Swarm 노드 구성 및 Overlay 네트워크 방화벽 규칙

Docker Swarm Basics: A Step-by-Step Guide for Beginners by Nidhin B

Docker Swarm을 설정하고 연결하는 방법은 다음과 같습니다.

  1. Docker 설치
    Docker Swarm을 사용하려면 Docker가 먼저 설치되어 있어야 합니다. 각 노드(서버)에 Docker를 설치하십시오. Docker는 공식 웹 사이트에서 다운로드하고 설치할 수 있습니다.
  2. Manager 노드 설정
    Docker Swarm은 매니저 노드와 워커 노드로 구성됩니다. 먼저 매니저 노드를 설정해야 합니다. 다음 명령을 사용하여 매니저 노드를 초기화합니다:이 명령은 Swarm을 초기화하고 매니저 토큰을 생성합니다. 토큰은 워커 노드를 연결할 때 사용됩니다. 토큰은 매니저 노드의 출력에 표시됩니다.
    docker swarm init
  3. 워커 노드 연결
    다른 노드를 워커로 연결하려면 매니저 노드에서 생성된 토큰을 사용해야 합니다. 워커 노드에서 다음 명령을 실행하여 워커 노드로 연결합니다:여기서 <토큰>은 매니저 노드에서 생성된 토큰으로 대체되어야 합니다. <매니저 노드의 IP 주소>는 매니저 노드의 IP 주소로 대체되어야 합니다.
    docker swarm join --token <토큰> <매니저 노드의 IP 주소>:2377
  4. Swarm 상태 확인
    Swarm 노드를 연결한 후에는 다음 명령을 사용하여 Swarm의 상태를 확인할 수 있습니다:이 명령은 현재 연결된 매니저와 워커 노드의 목록을 표시합니다.
    docker node ls
  5. 서비스 및 스택 배포
    이제 Docker Swarm을 사용하여 서비스와 스택을 배포할 수 있습니다. 서비스 및 스택을 생성하고 관리하는 방법은 일반적인 Docker 명령과 유사하지만, Swarm을 활용한 분산 어플리케이션 관리에 좀 더 특화된 기능을 제공합니다.

이렇게 하면 Docker Swarm을 설정하고 노드를 연결할 수 있습니다. Docker Swarm을 사용하여 분산 어플리케이션을 관리하려면 스웜 서비스와 스택을 사용하는 방법을 학습하는 것이 중요합니다. Docker 공식 문서와 튜토리얼은 이러한 주제에 대한 자세한 정보를 제공합니다.

 

Docker Swarm을 구성하려면 방화벽(Firewall)을 설정하여 서버 간의 통신을 허용해야 합니다. Docker Swarm은 다음과 같은 포트 및 프로토콜을 사용하므로 방화벽 규칙을 적절히 구성해야 합니다.

  1. Swarm 관리 트래픽 (Manager 관리 포트)
    • 포트: 2377/TCP
    • 설명: Swarm 매니저 노드 간의 통신에 사용됩니다. 이 포트는 Docker Swarm 클러스터를 관리하고 제어하기 위해 필요합니다.
  2. 노드 간 통신
    • 포트: 7946/TCP 및 7946/UDP
    • 설명: Docker 노드 간 통신을 위한 포트입니다. 노드 간의 서비스 및 스택 업데이트 및 분산 환경에서 서비스 검색에 사용됩니다.
  3. Overlay 네트워크 트래픽
    • 포트: 4789/UDP
    • 설명: Swarm overlay 네트워크를 통한 컨테이너 간 통신에 사용됩니다.

방화벽 규칙을 설정하는 방법은 운영 체제 및 방화벽 관리 도구에 따라 다를 수 있지만 일반적으로 다음과 같이 명령어를 사용하여 방화벽 규칙을 추가할 수 있습니다.

 

Linux (예: iptables)를 사용하는 경우

# Swarm 관리 트래픽 허용
sudo iptables -A INPUT -p tcp --dport 2377 -j ACCEPT

# 노드 간 통신 허용
sudo iptables -A INPUT -p tcp --dport 7946 -j ACCEPT
sudo iptables -A INPUT -p udp --dport 7946 -j ACCEPT

# Overlay 네트워크 트래픽 허용
sudo iptables -A INPUT -p udp --dport 4789 -j ACCEPT

# 규칙을 적용한 후에 규칙을 저장하십시오.
sudo service iptables save

Windows 방화벽을 사용하는 경우

Windows 방화벽을 구성하려면 Windows 방화벽 설정 창을 열고 "고급 설정"을 선택한 다음 "인바운드 규칙"을 추가하십시오. 포트 및 프로토콜에 대한 적절한 규칙을 추가하십시오.

 

방화벽 규칙을 설정한 후에 Docker Swarm 노드 간의 통신이 허용됩니다. 이제 Docker Swarm을 구성하고 노드를 연결할 수 있어야 합니다. 방화벽 설정을 완료하면 docker swarm initdocker swarm join 명령을 사용하여 Swarm을 설정하고 노드를 연결할 수 있습니다.

 

Docker Swarm overlay 네트워크 문제를 해결하기 위해 로그 및 트러블 슈팅 단계를 살펴보겠습니다. 이러한 단계를 따르면 네트워크 문제의 원인을 파악하고 해결할 수 있을 것입니다.

  1. 노드 상태 확인
    먼저 모든 Swarm 노드의 상태를 확인하십시오. 다음 명령을 사용하여 노드 목록을 볼 수 있습니다:모든 노드가 활성 상태인지 확인하십시오.
    docker node ls
  2. 네트워크 확인
    Swarm overlay 네트워크 상태를 확인하려면 다음 명령을 사용합니다:목록에 나타난 overlay 네트워크를 확인하고 문제가 있는 경우 삭제하고 다시 만들 수 있습니다.
    docker network ls
  3. 노드 로그 확인
    각 노드의 Docker 로그를 확인하여 문제를 식별할 수 있습니다. docker servicedocker network 명령을 사용하여 서비스 및 네트워크의 로그를 볼 수 있습니다.
    예를 들어, 특정 서비스의 로그를 볼 때:
    docker service logs <서비스 이름>
    네트워크의 로그를 볼 때:
    docker network inspect <네트워크 이름>
  4. 노드 간 연결성 확인
    노드 간 통신 문제를 확인하려면 다음을 수행합니다.
    • 방화벽 규칙을 확인하고 필요한 포트가 열려 있는지 확인하십시오.
    • 각 노드에서 다른 노드로의 통신을 테스트하십시오. 예를 들어, ping 또는 telnet을 사용하여 포트 접속을 시도하십시오.
  5. 서비스 및 스택 설정 확인
    서비스 및 스택 설정을 검토하고 오버레이 네트워크가 올바르게 구성되었는지 확인하십시오. 스택 및 서비스 정의 파일에서 오버레이 네트워크 설정을 확인합니다.
  6. Docker 로그 확인
    Docker 데몬 로그 위치를 확인하고 해당 로그 파일을 검토하십시오. 일반적으로 /var/log/docker.log 또는 /var/log/syslog에 로그가 저장됩니다.
  7. Docker Swarm 자체의 로그 확인
    Docker Swarm 자체의 로그를 확인하여 문제를 식별하려면 다음 명령을 사용합니다.
    docker service ps <서비스 이름>
    이 명령은 서비스의 각 작업에 대한 로그를 표시합니다.

네트워크 문제의 원인을 식별한 후, 문제를 해결하려면 해당 원인에 따라 조치를 취해야 합니다. 일반적으로 네트워크 구성, 방화벽 규칙 및 Docker 설정과 관련된 문제를 찾아서 수정해야 합니다.

 

Docker의 daemon.json 파일에서 Peers를 사용하여 IP 주소를 지정하는 경우, 해당 IP 주소는 현재 서버 또는 노드에 할당되지 않은 IP 주소일 필요는 없습니다. IP 주소는 서버의 ingress 네트워크 동료 노드로 지정할 수 있습니다.

 

Peers 설정은 Docker Swarm의 ingress 네트워크에 속한 노드 간의 통신을 위해 사용됩니다. 일반적으로 이러한 IP 주소는 클러스터 내 다른 노드의 IP 주소로 설정됩니다. 동료 노드의 IP 주소를 명시적으로 지정하면 클러스터 내의 특정 노드 간의 통신을 지정할 수 있으며, 이것은 특수한 상황에서 유용할 수 있습니다.

 

예를 들어, 다음과 같이 Peers 설정을 사용하여 노드 간의 IP 주소를 지정할 수 있습니다.

{
  "ingress": {
    "Driver": "overlay",
    "Subnet": "10.0.0.0/16",
    "IPRange": "10.0.0.0/24",
    "Gateway": "10.0.0.1",
    "Peers": [
      {
        "Name": "node-1",
        "IP": "192.168.2.17"
      },
      {
        "Name": "node-2",
        "IP": "192.168.2.18"
      }
    ]
  }
}

위의 설정에서 "IP" 값은 다른 노드의 IP 주소로 설정됩니다. 현재 노드에 할당된 IP 주소일 필요는 없으며, 동료 노드의 IP 주소로 지정되어야 합니다.

 

그러나 이러한 변경은 Docker Swarm의 내부 동작을 수정하는 것이므로 주의 깊게 접근하고, 변경 사항을 테스트하고, 백업 및 롤백 계획을 수립해야 합니다. Docker Swarm을 실제 운영환경에서 변경할 때는 항상 영향을 최소화하고 안전을 고려해야 합니다.

 

Docker Swarm에서 동료 노드에게 자신의 IP 주소를 다른 주소로 알려주고자 할 때, 이를 변경하려면 다음과 같은 단계를 따를 수 있습니다.

주의: Docker Swarm의 내부 동작을 변경하려는 것이므로 신중하게 접근하고 테스트 및 백업을 수행해야 합니다. 이러한 변경은 클러스터의 안정성에 영향을 미칠 수 있으므로 반드시 테스트 환경에서 먼저 시도하고, 백업 및 롤백 계획을 수립해야 합니다.

  1. Swarm 클러스터를 중지
    Docker Swarm 클러스터의 동작을 중지합니다.
  2. /var/lib/docker/swarm/control-plane-metadata.json 파일 수정
    클러스터의 각 매니저 노드에는 control-plane-metadata.json 파일이 있으며, 이 파일은 각 노드의 동료 노드와 관련된 정보를 포함하고 있습니다. 해당 파일을 수정하여 변경하려는 IP 주소를 새 주소로 설정합니다.파일을 열고 변경하려는 IP 주소를 찾아서 수정합니다.
    nano /var/lib/docker/swarm/control-plane-metadata.json
  3. /var/lib/docker/swarm/network/overlay_swarm-vip/ 디렉토리 삭제
    overlay_swarm-vip 디렉토리를 삭제하여 Swarm 네트워크 설정을 리셋합니다.
    rm -rf /var/lib/docker/swarm/network/overlay_swarm-vip/
  4. /var/lib/docker/swarm/nodes/ 디렉토리에서 노드 상태 파일 수정
    nodes 디렉토리에는 각 노드의 상태 정보가 저장되어 있습니다. 해당 파일을 수정하여 변경된 IP 주소로 갱신합니다.
  5. Docker 데몬 및 Swarm 재시작
    각 노드의 Docker 데몬을 다시 시작합니다.
    systemctl restart docker
  6. Swarm 클러스터 다시 시작
    변경 사항이 적용된 각 노드를 다시 Swarm 클러스터에 추가합니다.
    docker swarm leave --force
    docker swarm join --advertise-addr <새 IP 주소> ...
    또는 이미 Swarm 클러스터에 속한 노드인 경우:
    docker swarm init --advertise-addr <새 IP 주소>
  7. 테스트 및 확인
    변경 사항이 올바르게 적용되었는지 확인하기 위해 시스템을 테스트하고 클러스터 상태를 확인합니다.

반드시 이러한 변경을 신중하게 진행하고, 테스트 및 백업을 신중하게 수행해야 합니다. Docker Swarm을 실제 운영환경에서 변경할 때는 항상 영향을 최소화하고 안전을 고려해야 합니다.

 

Docker Swarm에서 워커 노드가 다른 도커 매니저 노드에 수동으로 조인(join)하고자 할 때, 워커 노드의 자신의 IP 주소를 수동으로 지정하는 방법은 다음과 같습니다.

  1. Docker Swarm을 초기화한 매니저 노드에서 토큰 확인
    먼저 Docker Swarm을 초기화한 매니저 노드에서 워커 노드를 조인할 때 사용할 토큰을 확인합니다. 이 토큰은 워커 노드가 매니저 노드에 조인할 때 필요합니다. 토큰을 확인하려면 다음 명령을 실행합니다.
    docker swarm join-token worker
    이 명령은 워커 노드를 조인할 때 필요한 명령어를 출력합니다.
  2. 원하는 워커 노드에서 조인 명령어 실행
    다른 워커 노드에서 조인 명령어를 수동으로 실행하고 자신의 IP 주소를 지정합니다. 아래의 예제 명령어에서 <매니저 주소><토큰>을 실제 매니저 노드의 주소와 토큰 값으로 대체해야 합니다. 또한 <워커 IP>에는 워커 노드의 자체 IP 주소를 지정해야 합니다.
    docker swarm join --token <토큰> <매니저 주소>:2377 --advertise-addr <워커 IP>
    이 명령어에서 --advertise-addr 플래그를 사용하여 워커 노드의 IP 주소를 수동으로 지정합니다.
  3. 조인 결과 확인
    조인 명령어를 실행한 후, 매니저 노드에서 docker node ls 명령을 사용하여 워커 노드가 성공적으로 조인되었는지 확인할 수 있습니다.

이렇게 하면 워커 노드가 매니저 노드에 조인하면서 자신의 IP 주소를 수동으로 지정할 수 있습니다. 이 방법을 사용하면 특정 워커 노드의 IP 주소를 원하는대로 설정할 수 있으며, 동적으로 할당되는 IP 주소 대신 원하는 IP 주소를 사용할 수 있습니다.

 

Docker Swarm에 노드를 조인(join)할 때 사용하는 docker swarm join 명령의 옵션에 대해 자세히 설명하겠습니다.

  1. --advertise-addr string
    • 설명: 이 옵션은 워커 노드가 사용하여 자신을 식별하는 데 사용하는 IP 주소를 지정합니다. 즉, 다른 노드가 워커 노드를 인식할 때 사용하는 주소입니다. 이 주소는 내부 또는 외부 IP 주소일 수 있습니다.
    • 예시: --advertise-addr 192.168.1.100
  2. --availability string
    • 설명: 노드의 가용성 상태를 설정합니다. 가능한 값은 "active" (활성), "pause" (일시 중단), "drain" (배포 중단)입니다.
    • 예시: --availability active
  3. --data-path-addr string
    • 설명: 이 옵션은 데이터 패스 트래픽을 처리하는 데 사용할 주소 또는 인터페이스를 지정합니다. Docker Swarm의 데이터 패스 트래픽은 컨테이너 간 통신과 관련이 있습니다.
    • 예시: --data-path-addr 192.168.1.101
  4. --listen-addr node-addr
    • 설명: 노드가 Docker Swarm의 제어 트래픽을 수신하는 데 사용하는 주소를 설정합니다. 이 옵션을 특별히 지정하지 않으면 기본값인 0.0.0.0:2377을 사용합니다.
    • 예시: --listen-addr 192.168.1.102:2377
  5. --token string
    • 설명: 이 옵션은 Swarm에 조인할 때 필요한 토큰을 지정합니다. docker swarm join-token 명령으로 토큰을 생성하고, 워커 노드가 매니저 노드에 조인할 때 이 토큰을 사용하여 인증합니다.
    • 예시: --token SWMTKN-1-3abcd4efg5hijklm6nopqrst7uvwxyz8

이러한 옵션을 사용하여 워커 노드가 Docker Swarm 클러스터에 조인할 때 노드의 속성과 동작을 구체적으로 설정할 수 있습니다. 각 옵션은 클러스터의 가용성, 네트워크 설정 및 트래픽 라우팅과 관련된 다양한 측면을 조정하는 데 사용됩니다.

728x90

댓글