Flannel은 Kubernetes용으로 설계된 레이어 3 네트워크 패브릭을 구성하는 간단하고 쉬운 방법입니다.
Flannel은 각 호스트에서 flanneld
라는 작은 단일 바이너리 에이전트를 실행하고 미리 구성된 더 큰 주소 공간에서 각 호스트에 서브넷 임대를 할당하는 일을 담당합니다. Flannel은 Kubernetes API 또는 etcd를 직접 사용하여 네트워크 구성, 할당된 서브넷 및 보조 데이터(예: 호스트의 공용 IP)를 저장합니다. 패킷은 VXLAN 및 다양한 클라우드 통합을 포함한 여러 백엔드 메커니즘 중 하나를 사용하여 전달됩니다.
Kubernetes와 같은 플랫폼은 각 컨테이너(포드)가 클러스터 내부에 고유하고 라우팅 가능한 IP를 가지고 있다고 가정합니다. 이 모델의 장점은 단일 호스트 IP 공유로 인한 포트 매핑 복잡성을 제거한다는 것입니다.
Flannel은 클러스터의 여러 노드 간에 레이어 3 IPv4 네트워크를 제공하는 역할을 담당합니다. 플란넬은 컨테이너가 호스트에 네트워크로 연결되는 방식을 제어하지 않고 호스트 간에 트래픽이 전송되는 방식만 제어합니다. 그러나 flannel은 Kubernetes용 CNI 플러그인과 Docker 통합에 대한 지침을 제공합니다.
플란넬은 네트워킹에 중점을 두고 있습니다. 네트워크 정책의 경우 Calico와 같은 다른 프로젝트를 사용할 수 있습니다.
Kubernetes를 사용하여 플란넬을 배포하는 가장 쉬운 방법은 기본적으로 플란넬을 사용하여 클러스터를 네트워크화하는 여러 배포 도구 및 배포판 중 하나를 사용하는 것입니다. 예를 들어 K3s는 오픈 소스 K3s 설치 프로그램을 사용하여 생성한 Kubernetes 클러스터에 플란넬을 설정하여 설정 프로세스를 진행합니다.
필수는 아니지만 flannel은 Kubernetes API를 백업 저장소로 사용하여 flannel
위한 개별 etcd
클러스터를 배포할 필요가 없도록 하는 것이 좋습니다. 이 flannel
모드를 kube 서브넷 관리자 라고 합니다.
플란넬은 기존 Kubernetes 클러스터에 추가할 수 있지만 포드 네트워크를 사용하는 포드가 시작되기 전에 flannel
추가하는 것이 가장 간단합니다.
Kubernetes v1.17+의 경우
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
사용자 정의 podCIDR
( 10.244.0.0/16
아님)을 사용하는 경우 먼저 위 매니페스트를 다운로드하고 네트워크를 사용자의 매니페스트와 일치하도록 수정해야 합니다.
# Needs manual creation of namespace to avoid helm error
kubectl create ns kube-flannel
kubectl label --overwrite ns kube-flannel pod-security.kubernetes.io/enforce=privileged
helm repo add flannel https://flannel-io.github.io/flannel/
helm install flannel --set podCidr= " 10.244.0.0/16 " --namespace kube-flannel flannel/flannel
자세한 내용은 Kubernetes를 참조하세요.
방화벽이 구성된 경우 구성된 백엔드에서 사용되는 올바른 포트를 활성화해야 합니다.
Flannel은 기본적으로 portmap
CNI 네트워크 플러그인으로 사용합니다. Flannel을 배포할 때 CNI 네트워크 플러그인이 /opt/cni/bin
에 설치되어 있는지 확인하고 다음 명령을 사용하여 최신 바이너리를 다운로드할 수 있습니다.
ARCH= $( uname -m )
case $ARCH in
armv7 * ) ARCH= " arm " ;;
aarch64) ARCH= " arm64 " ;;
x86_64) ARCH= " amd64 " ;;
esac
mkdir -p /opt/cni/bin
curl -O -L https://github.com/containernetworking/plugins/releases/download/v1.6.0/cni-plugins-linux- $ARCH -v1.6.0.tgz
tar -C /opt/cni/bin -xzf cni-plugins-linux- $ARCH -v1.6.0.tgz
Flannel을 시작하려면 br_netfilter 모듈이 필요하며 버전 1.30부터 kubeadm은 모듈이 설치되어 있는지 확인하지 않으며 모듈이 누락된 경우 Flannel이 올바르게 시작되지 않습니다.
플란넬은 쿠버네티스 외부에서도 널리 사용됩니다. Kubernetes 외부에 배포되면 etcd가 항상 데이터 저장소로 사용됩니다. 플란넬을 Docker와 통합하는 자세한 내용은 실행을 참조하세요.
플란넬 유지 관리자 커뮤니티는 격주 목요일 오전 8시 30분(PST)에 회의를 개최합니다. 이 회의는 필요한 경우 Flannel과 관련된 문제, 풀 요청 공개 및 기타 주제를 논의하는 데 사용됩니다.
회의 안건 및 팀 링크는 여기에서 찾을 수 있습니다: Flannel Community Meeting Agenda
패치 제출 및 기여 워크플로에 대한 자세한 내용은 CONTRIBUTING을 참조하세요.
문제 보고에 대한 자세한 내용은 버그 보고를 참조하세요.
플란넬은 Apache 2.0 라이센스를 따릅니다. 자세한 내용은 LICENSE 파일을 참조하세요.