먼저 flannel 배포를 위한 네임스페이스를 생성합니다.
kubectl create ns kube-flannel
helm차트로 배포하는 가이드에는 다음과 같은 라벨을 추가하게 되어있습니다.
네임스페이스에 라벨을 붙여 파드 시큐리티 스텐다드를 강제할 수 있습니다. 3가지 권한이 있는데 cni이기 때문에 privileged을 부여합니다.
kubectl label --overwrite ns kube-flannel pod-security.kubernetes.io/enforce=privileged
https://kubernetes.io/ko/docs/concepts/security/pod-security-standards/
파드 시큐리티 스탠다드
파드 시큐리티 스탠다드에 정의된 여러 가지 정책 레벨에 대한 세부사항
kubernetes.io
이제 flannel 배포를 위한 helm 차트 추가 합니다.
helm repo add flannel https://flannel-io.github.io/flannel/
helm repo update
flannel에 pod 대역을 10.244.0.0/16으로 설정하고 인터페이스가 여러개 있을 경우 아래처럼 특정 인터페이스를 사용하여 통신하도록 지정할 수 있습니다.
cat << EOF > flannel-values.yaml
podCidr: "10.244.0.0/16"
flannel:
  args:
  - "--ip-masq"
  - "--kube-subnet-mgr"
  - "--iface=eth1"  
EOF
이 설정을 이용해서 kube-flannel 넴스페이스에 배포합니다.
helm install flannel --namespace kube-flannel flannel/flannel -f flannel-values.yaml
이제 확인해보면 새로운 설정 파일들과 바이너리들이 설치된 것을 확인할 수 있습니다.



인터페이스 정보에도 lo와 eth0이외에도 flannel과 관련된 인터페이스가 구성되었습니다.

마지막으로 샘플 애플리케이션을 설치해보겠습니다.
cat << EOF | kubectl apply -f -
apiVersion: apps/v1
kind: Deployment
metadata:
  name: webpod
spec:
  replicas: 2
  selector:
    matchLabels:
      app: webpod
  template:
    metadata:
      labels:
        app: webpod
    spec:
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
              - key: app
                operator: In
                values:
                - sample-app
            topologyKey: "kubernetes.io/hostname"
      containers:
      - name: webpod
        image: traefik/whoami
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: webpod
  labels:
    app: webpod
spec:
  selector:
    app: webpod
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
  type: ClusterIP
EOF
# k8s-ctr 노드에 curl-pod 파드 배포
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
  name: curl-pod
  labels:
    app: curl
spec:
  nodeName: flannel-worker
  containers:
    - name: curl
      image: alpine/curl
      command: ["sleep", "36000"]
EOF
잘 설치 되었는지 확인해보겠습니다.
kubectl get deploy,svc,ep webpod -owide

kubectl get endpointslices -l app=webpod

파드 대역도 설정한대로 10.244.0.0/16으로 생성된것을 확인할 수 있습니다.
'K8S > 🔥 network study🔥' 카테고리의 다른 글
| [cilium] hubble 사용해보기 (0) | 2025.07.22 | 
|---|---|
| [cilium] flannel에서 cilium으로 마이그레이션 해보기 (1) | 2025.07.18 | 
| [네떡스터디🔥kans] AWS - EKS와 AWS LoadBalancer Controller (1) | 2024.11.02 | 
| [네떡스터디🔥kans] AWS - EKS와 Amazon VPC CNI (0) | 2024.11.02 | 
| [네떡스터디🔥kans] AWS - EKS 시작하기 (0) | 2024.11.02 |