Docker 생태계: 네트워크 및 통신

Docker 생태계: 네트워크 및 통신

2022-06-01 last update

7 minutes reading Docker Conceptual Networking

소개


Docker 컨테이너 서비스를 위한 분산 시스템을 구축할 때 통신과 네트워크는 매우 중요해진다.서비스에 대한 체계 구조는 어느 정도 구성 요소 간의 통신에 의존하여 정확하게 운행할 수 있음을 부인할 수 없다.
이 가이드에서는 컨테이너에 사용되는 네트워크를 원하는 상태로 만드는 데 사용되는 다양한 네트워크 정책과 도구에 대해 설명합니다.어떤 경우에는 Docker 기본 솔루션을 사용할 수 있고 다른 경우에는 대체 항목을 사용해야 합니다.

네이티브 Docker 네트워크 구현


Docker 자체는 컨테이너에서 컨테이너로, 컨테이너에서 호스트로의 통신에 많은 필요한 네트워크 기반을 제공합니다.
Docker 프로세스 자체가 시작되면 호스트 시스템에 docker0 라는 새 가상 브리지 인터페이스가 구성됩니다.이 인터페이스를 사용하면 Docker가 실행할 컨테이너 사이에서 사용할 가상 서브넷을 할당할 수 있습니다.브리지는 용기 내 연결망과 호스트의 연결 사이의 주요 인터페이스가 될 것이다.
Docker가 컨테이너를 시작하면 새 가상 인터페이스가 생성되고 브리지의 서브넷 범위 내에 주소가 지정됩니다.IP 주소는 용기의 내부 네트워크에 연결되어 용기의 네트워크를 호스트 시스템docker0의 브리지에 제공하는 경로입니다.Docker 자동 구성iptables 규칙은 전송을 허용하고 docker0에서 유래한 외부 세계의 데이터에 NAT 위장을 설정합니다.

용기는 어떻게 소비자에게 서비스를 공개합니까?


같은 호스트의 다른 용기는 다른 구성 없이 이웃이 제공하는 서비스에 접근할 수 있습니다.호스트 시스템은 docker0 인터페이스에서 이 인터페이스로 보내는 요청 루트를 적당한 위치로 보내기만 하면 된다.
용기는 그 포트를 호스트에 노출시키고 호스트에서 외부 세계로부터 전송되는 데이터를 수신할 수 있다.노출된 포트는 호스트 시스템에 매핑될 수 있습니다. 방법은 특정한 포트를 선택하거나 Docker가 무작위, 높은, 사용하지 않는 포트를 선택할 수 있도록 하는 것입니다.Docker는 이러한 상황에서 데이터 패키지를 올바르게 라우팅할 수 있도록 모든 전달 규칙 및 iptables 구성을 담당합니다.

공개와 발표 포트 사이에는 어떤 차이가 있습니까?


용기 이미지를 만들거나 용기를 실행할 때 공개 포트나 발표 포트를 선택할 수 있습니다.둘 사이의 차이는 현저하지만 즉각 판별할 수 없을 것이다.
포트를 공개하는 것은 컨테이너가 포트를 사용하고 있다는 것을 Docker가 알아차린다는 의미일 뿐입니다.그런 다음 목적과 링크를 검색하는 데 사용할 수 있습니다.예를 들어 용기를 검사하면 노출 포트에 대한 정보를 제공합니다.컨테이너를 링크하면 새 컨테이너에 환경 변수가 설정되어 원래 컨테이너에 노출된 포트를 나타냅니다.
기본적으로 포트의 공개 여부와 상관없이 호스트 시스템과 호스트의 다른 용기에 접근할 수 있습니다.공개 포트는 포트 사용량만 기록하고 이 정보를 자동으로 매핑하고 링크하는 데 사용할 수 있습니다.
반대로 발표 포트는 호스트 인터페이스에 비추어 외부 세계에서 사용할 수 있도록 한다.컨테이너 포트는 호스트의 특정 포트에 매핑되거나 Docker는 사용하지 않는 높은 포트를 자동으로 무작위로 선택할 수 있습니다.

Docker 링크란 무엇입니까?


Docker는 컨테이너 간의 통신을 구성하는 데 사용되는 "Docker 링크"메커니즘을 제공합니다.새 용기가 기존 용기에 연결되면 환경 변수를 통해 기존 용기의 연결 정보를 얻을 수 있습니다.
이것은 두 용기 간에 통신을 구축하는 간단한 방법을 제공했다. 방법은 새 용기에 동료를 어떻게 방문하는지에 대한 명확한 정보를 제공하는 것이다.다른 용기에 노출된 포트에 따라 환경 변수를 설정합니다.IP 주소 및 기타 정보는 Docker가 직접 작성합니다.

Docker 네트워크 기능 확장 프로젝트


상술한 네트워크 모델은 네트워크 건설에 좋은 출발점을 제공했다.같은 호스트의 용기 간의 통신은 상당히 직접적이다. 포트가 정확하게 비치고 연결 정보가 다른 측에 제공되기만 하면 호스트 간의 통신은 일반적인 공공 네트워크를 통해 진행할 수 있다.
그러나 많은 응용 프로그램들이 보안이나 기능 목적으로 특정한 네트워크 환경을 필요로 한다.Docker의 기본 네트워크 기능은 이러한 장면에서 일정한 제한을 받습니다.따라서 Docker 네트워크 생태계를 확장하기 위해 많은 프로젝트를 만들었습니다.

추상적인 베이스 토폴로지로 덮어쓰기 네트워크 만들기


몇 가지 프로젝트가 주목하는 기능 개선 중 하나는 덮어쓰기 네트워크를 구축하는 것이다.덮어쓰기 네트워크는 기존 네트워크 연결 위에 구축된 가상 네트워크입니다.
덮어쓰기 네트워크를 구축하면 호스트 간에 더욱 예측 가능하고 통일된 네트워크 환경을 만들 수 있습니다.이것은 용기 간의 네트워크 연결을 간소화할 수 있으며, 그것이 어디에서 운행하든지 간에.단일 가상 네트워크는 여러 호스트를 뛰어넘거나 통합 네트워크의 각 호스트에 대해 특정 서브넷을 지정할 수 있습니다.
네트워크를 덮어쓰는 또 다른 용도는 구조 계산 집단을 구축하는 것이다.구조 계산에서 여러 호스트가 추상적으로 만들어져 더욱 강력한 실체로 관리된다.구조 계산층의 실현은 최종 사용자가 집단을 하나의 전체로 관리하고 단독 호스트가 아닌 전체로 관리할 수 있도록 한다.네트워크는 집단에서 중요한 역할을 하고 있다.

고급 네트워크 구성


다른 프로젝트는 Docker의 네트워크 기능을 확장하기 위해 더 많은 유연성을 제공합니다.
Docker의 기본 네트워크 구성은 기능적이지만 매우 간단합니다.이러한 제한은 호스트 간 네트워킹을 처리할 때 가장 충분하게 나타나지만 단일 호스트 내의 더 많은 맞춤형 네트워킹 수요를 방해할 수 있다.
추가 파이핑 기능을 통해 추가 기능을 제공합니다.이 항목들은 기존의 설정을 제공하지 않지만, 각 부분을 수동으로 연결하고 복잡한 네트워크 장면을 만들 수 있습니다.일부 호스트 간에 간단하게 전용 네트워크를 구축하는 것부터 브리지, VLAN, 사용자 정의 서브넷과 게이트웨이를 설정하는 것까지 광범위한 능력을 얻을 수 있습니다.
개발할 때 Docker를 고려하지 않았지만 Docker 환경에서 필요한 기능을 제공하는 데 사용되는 도구와 프로젝트도 많다.특히 일반적으로 성숙한 전용 네트워크와 터널 기술을 사용하여 호스트 간과 용기 간의 안전 통신을 제공한다.

Docker 네트워크 개선을 위한 일반적인 항목은 무엇입니까?


여러 가지 다른 항목이 Docker 호스트에 덮어쓰기 네트워크를 제공하는 데 집중됩니다.흔히 볼 수 있는 것은 다음과 같다.
  • flannel: CoreOS팀에서 개발한 이 프로젝트의 최초 개발 목적은 모든 호스트 시스템에 자신의 공유 네트워크 서브넷을 제공하는 것이다.이것은 Google의 kubernetes 편성 도구가 정상적으로 작동하는 데 필요한 조건이지만 다른 상황에서도 유용하다.
  • weave:weave는 호스트마다 연결된 가상 네트워크를 만듭니다.이렇게 하면 각 컨테이너가 하나의 네트워크 스위치에 삽입되는 모양새를 제공하기 때문에 애플리케이션 라우팅이 간소화됩니다.
  • 고급 네트워크의 경우 다음 프로젝트는 추가 파이프라인을 제공하여 이 공백을 메우기 위한 것이다.
  • 파이프 프로젝트: Docker 본체 네트워크가 더욱 선진화되기 전에 이 프로젝트는 임의의 고급 네트워크 설정을 쉽게 설정할 수 있는 편리한 방법이다.
  • Docker에 기능을 추가하기 위해 추가된 기존 소프트웨어의 예는 다음과 같습니다.
  • tinc:tinc는 터널과 암호화로 이루어진 경량급 VPN 소프트웨어입니다.Tinc는 모든 응용 프로그램에 투명한 전용 네트워크를 제공하는 강력한 솔루션입니다.
  • 결론


    용기화 구성 요소를 통해 내부와 외부 서비스를 제공하는 것은 매우 강력한 모델이지만 인터넷은 우선순위가 된다.Docker는 가상 인터페이스, 서브넷iptables 및 NAT 테이블을 통해 관리되는 구성을 네이티브 방식으로 일부 기능을 제공하지만 다른 항목을 만들어 고급 구성을 제공합니다.
    next guide에서 우리는 스케줄러와 편성 도구가 어떻게 이를 바탕으로 집단 용기 관리 기능을 제공할 수 있는지 토론할 것이다.