티스토리 뷰

Cilium devices 파라미터 완벽 가이드: Tailscale 환경에서의 핵심

작성일: 2025-10-24
환경: Kubernetes 1.34, Cilium 1.18.2, Tailscale/Headscale, Oracle Cloud
난이도: 고급
핵심: devices 파라미터 하나가 모든 네트워크 통신을 좌우한다


들어가며

imprun.dev는 Kubernetes 기반 서버리스 Cloud Function 플랫폼입니다. Tailscale 메시 네트워크 위에 Cilium CNI를 구축하면서, Pod 간 통신은 되는데 외부 통신이 안 되는 기이한 문제에 직면했습니다.

우리가 겪은 문제:

  • ✅ Pod 간 통신 정상 (10.244.x.x)
  • 외부 인터넷 통신 불가 (DNS 조회 실패, apt update 실패)
  • devices=enp0s6 (물리 인터페이스)만 지정했을 때
  • devices=enp0s6,tailscale0 (둘 다 지정)으로 해결

핵심 발견:

  • Cilium의 devices 파라미터는 eBPF를 적용할 인터페이스를 지정
  • 외부 통신은 물리 인터페이스(enp0s6)를 통해 나감
  • 노드 간 Pod 통신은 Tailscale 인터페이스(tailscale0)를 통해 전달됨
  • 두 인터페이스 모두 지정해야 완전한 네트워크 동작

이 글은 imprun.dev 플랫폼 구축 경험을 바탕으로, Tailscale 환경에서 Cilium의 devices 파라미터가 실제로 무엇을 제어하는지 완벽히 분석합니다.


🎯 이 문서를 읽어야 하는 이유

"Cilium 설치했는데 Pod 간 통신은 되는데 외부 통신이 안 돼요"
"외부 통신은 되는데 노드 간 Pod 통신이 안 돼요"
"왜 devices=enp0s6 하나만 지정하면 안 되나요?"

이 문서는 Tailscale/Headscale 환경에서 Cilium의 devices 파라미터가 실제로 무엇을 제어하는지, 그리고 왜 두 개의 인터페이스가 모두 필요한지를 완벽히 설명합니다.


📋 목차

  1. 배경: 서로 다른 네트워크의 Kubernetes 클러스터
  2. devices 파라미터란 무엇인가
  3. 시나리오별 증상 분석
  4. 근본 원리: Cilium의 Interface Selection
  5. 최종 권장사항
  6. 트러블슈팅

1. 배경: 서로 다른 네트워크의 Kubernetes 클러스터

1.1 환경 구성

Oracle Cloud 계정 A              Oracle Cloud 계정 B
┌─────────────────────┐         ┌─────────────────────┐
│ Master Node         │         │ Worker Node         │
│ VCN: 10.0.0.239/24  │         │ VCN: 10.0.0.24/24   │
│ Tailscale: 100.64.0.1│◄───────►│ Tailscale: 100.64.0.2│
└─────────────────────┘         └─────────────────────┘
        ▲                               ▲
        │ enp0s6                        │ enp0s6
        │                               │
        ▼                               ▼
  Internet (NAT)                  Internet (NAT)

핵심 제약사항:

  • 서로 다른 Oracle 계정 → 10.0.0.x 대역으로 직접 통신 불가
  • Tailscale mesh network → 100.64.0.x 대역으로만 통신 가능
  • 외부 인터넷 접근 → Oracle VCN Gateway (enp0s6) 경유 필수

1.2 네트워크 인터페이스

각 노드는 두 개의 네트워크 인터페이스를 가집니다:

# enp0s6: Oracle VCN Physical NIC
2: enp0s6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000
    inet 10.0.0.239/24 brd 10.0.0.255 scope global
    # 역할: 외부 인터넷 통신 (Oracle VCN Gateway 경유)

# tailscale0: Tailscale VPN Interface
3: tailscale0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1280
    inet 100.64.0.1/32 scope global
    # 역할: 노드 간 통신 (WireGuard 터널)

2. devices 파라미터란 무엇인가

2.1 공식 정의

Cilium 공식 문서:

"The devices option specifies which network interfaces Cilium uses for NodePort and LoadBalancer services."

하지만 실제로는:

  1. 노드 IP 결정에 영향
  2. Masquerade (SNAT) 인터페이스 선택
  3. VXLAN 터널 엔드포인트 IP 결정

2.2 설정 방법

# Helm values.yaml
devices: "enp0s6,tailscale0"  # 문자열로 묶기

# 또는 리스트 형식
devices:
  - enp0s6
  - tailscale0

# Helm CLI
--set devices="enp0s6,tailscale0"
--set devices="{enp0s6,tailscale0}"  # 중괄호 + 따옴표

3. 시나리오별 증상 분석

📊 비교표

devices 설정 Cilium Node IP Pod → Pod (노드 간) Pod → 외부 (인터넷) 증상
생략 (auto) ✅ 100.64.0.1 ✅ 정상 ✅ 정상 완벽 작동
enp0s6,tailscale0 ✅ 100.64.0.1 ✅ 정상 ✅ 정상 완벽 작동 (명시적)
enp0s6만 ❌ 10.0.0.239 ❌ 실패 ✅ 정상 노드 간 통신 불가
tailscale0만 ✅ 100.64.0.1 ✅ 정상 ❌ 실패 외부 통신 불가

3.1 시나리오 A: devices=enp0s6 (한 개만)

설정

devices: enp0s6  # ❌ 잘못된 설정

증상

# ❌ Cilium이 enp0s6 IP를 노드 IP로 오인
kubectl -n kube-system exec ds/cilium -- cilium node list
Name                     IPv4 Address   Endpoint CIDR
instance-master          10.0.0.239     10.244.0.0/24  ← 잘못됨!
instance-worker          10.0.0.24      10.244.1.0/24  ← 잘못됨!

# ❌ Pod 간 통신 실패
kubectl run test-master --image=busybox --restart=Never -- sleep 3600
kubectl run test-worker --image=busybox --restart=Never -- sleep 3600

kubectl exec test-master -- ping 10.244.1.x
# ping: bad address '10.244.1.x'
# 또는
# PING 10.244.1.10 (10.244.1.10): 56 data bytes
# (timeout... no response)

# ✅ 외부 통신은 정상
kubectl exec test-master -- ping -c 3 8.8.8.8
# 64 bytes from 8.8.8.8: seq=0 ttl=54 time=... ✅

원인 분석

Cilium의 동작:

1. devices=enp0s6 설정 확인
2. enp0s6 인터페이스만 스캔
3. enp0s6의 IP (10.0.0.239) 감지
4. 노드 IP를 10.0.0.239로 설정 (kubelet --node-ip 무시!)
5. VXLAN 터널 엔드포인트도 10.0.0.239 사용

패킷 흐름:

Master Node Pod → Worker Node Pod 통신 시도:

[Master - 10.0.0.239]
  Pod A (10.244.0.5)
    │ dst: 10.244.1.10
    ↓
  Cilium VXLAN 캡슐화
    │ Outer Header:
    │   src: 10.0.0.239
    │   dst: 10.0.0.24 (Worker enp0s6 IP)
    ↓
  enp0s6 인터페이스로 송신 시도
    ↓
  ❌ Oracle VCN 라우팅 실패
     "10.0.0.24는 다른 계정/VPC입니다"
    ↓
  DROP!

실제 에러 로그

# Cilium agent 로그
kubectl -n kube-system logs ds/cilium | grep -i error
# level=warning msg="Unable to reach node" node=instance-worker ip=10.0.0.24
# level=error msg="VXLAN tunnel endpoint unreachable" remote=10.0.0.24

# tcpdump로 패킷 확인
tcpdump -i enp0s6 host 10.0.0.24
# (패킷 나가지만 응답 없음)

3.2 시나리오 B: devices=tailscale0 (한 개만)

설정

devices: tailscale0  # ❌ 잘못된 설정

증상

# ✅ Cilium이 Tailscale IP를 노드 IP로 인식 (정상)
kubectl -n kube-system exec ds/cilium -- cilium node list
Name                     IPv4 Address   Endpoint CIDR
instance-master          100.64.0.1     10.244.0.0/24  ← 정상!
instance-worker          100.64.0.2     10.244.1.0/24  ← 정상!

# ✅ Pod 간 통신 정상
kubectl exec test-master -- ping 10.244.1.10
# 64 bytes from 10.244.1.10: seq=0 ttl=62 time=... ✅

# ❌ 외부 통신 실패
kubectl exec test-master -- ping -c 3 8.8.8.8
# PING 8.8.8.8 (8.8.8.8): 56 data bytes
# (timeout... no response)

# ❌ DNS도 실패
kubectl exec test-master -- nslookup google.com
# ;; connection timed out; no servers could be reached

# ❌ CoreDNS 재시작 반복
kubectl get pods -n kube-system -l k8s-app=kube-dns
NAME                       READY   STATUS    RESTARTS   AGE
coredns-xxx                0/1     Running   5          2m  ← 계속 재시작!
coredns-yyy                1/1     Running   0          2m

원인 분석

Cilium의 동작:

1. devices=tailscale0 설정 확인
2. tailscale0 인터페이스만 스캔
3. Masquerade도 tailscale0 사용
4. 외부 트래픽 SNAT: 100.64.0.1
5. Tailscale은 Peer-to-Peer VPN
   → 8.8.8.8은 Peer가 아님
   → 라우팅 경로 없음 → DROP

패킷 흐름:

Pod → 8.8.8.8 (Google DNS) 통신 시도:

[Master Node]
  Pod A (10.244.0.5)
    │ dst: 8.8.8.8
    ↓
  Cilium eBPF Masquerade
    │ SNAT: 100.64.0.1 (tailscale0 IP)
    ↓
  tailscale0 인터페이스로 송신
    ↓
  Tailscale 라우팅 테이블 확인:
    Peer 목록: [100.64.0.1, 100.64.0.2]
    8.8.8.8: ??? (Peer 아님)
    ↓
  ❌ DROP! (No route to host)

실제 에러 로그

# CoreDNS 로그
kubectl logs -n kube-system coredns-xxx
# [ERROR] plugin/errors: 2 google.com. A: read udp 10.244.0.x:xxxxx->8.8.8.8:53: i/o timeout

# Cilium BPF NAT 테이블 확인
kubectl -n kube-system exec ds/cilium -- cilium bpf nat list | grep 8.8.8.8
# UDP OUT 10.244.0.x:53 -> 8.8.8.8:53 XLATE_SRC 100.64.0.1:53
# (SNAT은 되지만 응답이 안 옴)

# Tailscale 상태 확인
tailscale status
# 100.64.0.1   master    ...
# 100.64.0.2   worker    ...
# (8.8.8.8은 목록에 없음)

3.3 시나리오 C: devices=enp0s6,tailscale0 (둘 다) ✅

설정

devices: "enp0s6,tailscale0"  # ✅ 올바른 설정
# 또는 생략 (auto-detect)

증상

# ✅ Cilium이 두 인터페이스 모두 감지
kubectl -n kube-system exec ds/cilium -- cilium status --verbose | grep Masq
Masquerading: BPF [enp0s6, tailscale0]  10.244.0.0/24  [IPv4: Enabled]

# ✅ 노드 IP (Tailscale)
kubectl -n kube-system exec ds/cilium -- cilium node list
Name                     IPv4 Address   Endpoint CIDR
instance-master          100.64.0.1     10.244.0.0/24  ✅
instance-worker          100.64.0.2     10.244.1.0/24  ✅

# ✅ Pod 간 통신 정상
kubectl exec test-master -- ping -c 3 10.244.1.10
# 64 bytes from 10.244.1.10: seq=0 ttl=62 time=2.1 ms ✅

# ✅ 외부 통신 정상
kubectl exec test-master -- ping -c 3 8.8.8.8
# 64 bytes from 8.8.8.8: seq=0 ttl=54 time=1.8 ms ✅

# ✅ DNS 정상
kubectl exec test-master -- nslookup google.com
# Server:    10.96.0.10
# Address:   10.96.0.10:53
# Name:      google.com
# Address:   142.250.x.x ✅

# ✅ HTTPS 통신 정상
kubectl exec test-master -- wget -qO- https://api.ipify.org
# 168.107.2.60  ← Oracle Cloud Public IP ✅

원인 분석

Cilium의 동작:

1. devices=[enp0s6, tailscale0] 설정 확인
2. 두 인터페이스 모두 스캔
3. 노드 IP: kubelet --node-ip (100.64.0.1) 우선
4. Masquerade: 트래픽 목적지에 따라 자동 선택
   - Pod CIDR (10.244.x.x) → Node IP 경로 → tailscale0
   - 외부 (8.8.8.8) → Default gateway 경로 → enp0s6

패킷 흐름

Pod → Pod (노드 간 통신)

[Master Node - 100.64.0.1]
  Pod A (10.244.0.5)
    │ dst: 10.244.1.10 (Worker Pod)
    ↓
  Cilium VXLAN 캡슐화
    │ Outer Header:
    │   src: 100.64.0.1 (Master Tailscale IP)
    │   dst: 100.64.0.2 (Worker Tailscale IP)
    ↓
  커널 라우팅 테이블 확인:
    ip route | grep 100.64.0.2
    → 100.64.0.0/10 dev tailscale0
    ↓
  tailscale0 인터페이스로 송신
    ↓ WireGuard 암호화 터널
  [Worker Node - 100.64.0.2]
    tailscale0 수신
    ↓ VXLAN 디캡슐화
  Pod B (10.244.1.10) ✅

Pod → 외부 (인터넷)

[Master Node]
  Pod A (10.244.0.5)
    │ dst: 8.8.8.8
    ↓
  Cilium eBPF Masquerade
    │ 인터페이스 선택 로직:
    │ - 8.8.8.8은 Pod CIDR 아님
    │ - Default route 확인: dev enp0s6
    │ - enp0s6 IP 사용
    │
    │ SNAT: 10.0.0.239 (enp0s6 IP)
    ↓
  enp0s6 인터페이스로 송신
    ↓
  Oracle VCN Gateway
    │ NAT: 10.0.0.239 → 168.107.2.60 (Public IP)
    ↓
  Internet ✅

BPF NAT 테이블 확인

kubectl -n kube-system exec ds/cilium -- cilium bpf nat list | head -20

# Pod → 외부 트래픽
ICMP OUT 10.244.0.62:7 -> 8.8.8.8:0 XLATE_SRC 10.0.0.239:7
                                               ^^^^^^^^^^^ enp0s6 IP!

# 응답 패킷
ICMP IN 8.8.8.8:0 -> 10.0.0.239:7 XLATE_DST 10.244.0.62:7

# Pod → Pod 트래픽 (VXLAN)
TCP OUT 100.64.0.1:51074 -> 100.64.0.2:4240 XLATE_SRC 100.64.0.1:51074
        ^^^^^^^^^             ^^^^^^^^^^^ Tailscale IPs!

4. 근본 원리: Cilium의 Interface Selection

4.1 devices 파라미터의 실제 역할

devices: "interface1,interface2,..."

# Cilium이 이 정보로 결정하는 것:
1. 노드 IP 감지 우선순위
2. Masquerade (SNAT) 인터페이스 pool
3. NodePort/LoadBalancer 바인딩 인터페이스
4. Direct routing device (Native mode)

4.2 Masquerade Interface Selection Logic

Cilium 내부 로직 (의사 코드):

def select_masquerade_interface(packet):
    dst_ip = packet.destination

    # 1. Pod CIDR 범위 체크
    if dst_ip in all_pod_cidr_ranges:
        # Pod 간 통신: Node IP를 찾아서 해당 인터페이스 사용
        target_node_ip = lookup_node_ip_for_pod(dst_ip)
        return find_interface_for_ip(target_node_ip)
        # 예: 100.64.0.2 → tailscale0

    # 2. Service CIDR 체크
    elif dst_ip in service_cidr:
        # eBPF load balancing, SNAT 필요 없음
        return None

    # 3. 외부 트래픽
    else:
        # Default gateway 경로의 인터페이스 사용
        default_route = get_default_route()  # ip route | grep default
        return default_route.interface
        # 예: enp0s6

4.3 Node IP Detection Priority

1. devices 파라미터에 명시된 인터페이스들 스캔
2. 각 인터페이스의 IP 주소 수집
3. kubelet --node-ip와 매칭되는 IP 찾기
4. 매칭되는 인터페이스를 주 인터페이스로 선택
5. 해당 인터페이스를 VXLAN 터널 엔드포인트로 사용

예시:

# kubelet 설정
KUBELET_EXTRA_ARGS=--node-ip=100.64.0.1

# devices 설정에 따른 동작:

# Case 1: devices=enp0s6
# - enp0s6 IP: 10.0.0.239
# - 100.64.0.1과 매칭 안 됨
# - enp0s6 IP를 강제로 노드 IP로 사용 (잘못됨!) ❌

# Case 2: devices=tailscale0
# - tailscale0 IP: 100.64.0.1
# - 100.64.0.1과 매칭됨
# - tailscale0를 노드 IP로 사용 (정상) ✅
# - 하지만 Masquerade도 tailscale0만 사용 (외부 통신 실패) ❌

# Case 3: devices=enp0s6,tailscale0
# - tailscale0 IP: 100.64.0.1 ← 매칭!
# - 노드 IP: 100.64.0.1 사용 (정상) ✅
# - Masquerade: 두 인터페이스 모두 사용 가능
#   → 트래픽에 따라 자동 선택 ✅

4.4 Auto-Detection 메커니즘

devices를 생략하면:

# Cilium이 자동으로:
1. 모든 네트워크 인터페이스 스캔
   - loopback 제외
   - down 상태 제외

2. 각 인터페이스 특성 분석
   - IP 주소
   - Default route 여부
   - MTU

3. 노드 IP 매칭
   - kubelet --node-ip와 매칭되는 인터페이스 찾기

4. 결과
   - 찾은 인터페이스들을 devices로 설정
   - 예: devices=[enp0s6, tailscale0]

실제 감지 결과 확인:

kubectl -n kube-system exec ds/cilium -- cilium status --verbose | grep -A 2 Masq

# devices 생략 시 출력:
Masquerading: BPF [enp0s6, tailscale0]
              ^^^  ^^^^^^^^^^^^^^^^^^^^
              자동 감지된 인터페이스들!

5. 최종 권장사항

5.1 옵션 비교

방식 장점 단점 추천도
명시적 지정
devices: "enp0s6,tailscale0"
• 명확한 의도
• 예측 가능
• 문서화 용이
• 환경 변경 시 수정 필요 ⭐⭐⭐⭐⭐
생략 (auto)
# devices 없음
• 유연성 높음
• 환경 변화 대응
• 예측 어려움
• 디버깅 복잡
⭐⭐⭐⭐
와일드카드
devices: "enp+,tailscale+"
• 인터페이스 이름 변화 대응 • 의도하지 않은 인터페이스 포함 가능 ⭐⭐⭐

5.2 권장 설정 (Tailscale 환경)

# Helm values.yaml
devices: "enp0s6,tailscale0"

# 또는 Helm CLI
helm install cilium cilium/cilium \
  --version 1.18.2 \
  --namespace kube-system \
  --set devices="enp0s6,tailscale0" \
  --set routingMode=tunnel \
  --set tunnelProtocol=vxlan \
  --set kubeProxyReplacement=true \
  --set bpf.masquerade=true \
  --set enableIPv4Masquerade=true \
  --set autoDirectNodeRoutes=false

필수 조건:

# 1. kubelet이 Tailscale IP로 node-ip 설정되어 있어야 함
cat /etc/sysconfig/kubelet  # 또는 /etc/default/kubelet
# KUBELET_EXTRA_ARGS=--node-ip=100.64.0.1

# 2. Tailscale이 정상 작동 중
tailscale status

# 3. Default route가 enp0s6를 통하도록 설정
ip route | grep default
# default via 10.0.0.1 dev enp0s6

5.3 검증 방법

# 1. Cilium 노드 IP 확인
kubectl -n kube-system exec ds/cilium -- cilium node list
# IPv4 Address가 100.64.0.x여야 함 ✅

# 2. Masquerade 인터페이스 확인
kubectl -n kube-system exec ds/cilium -- cilium status --verbose | grep Masq
# Masquerading: BPF [enp0s6, tailscale0] ✅

# 3. Pod 간 통신 테스트
kubectl run test-a --image=busybox --restart=Never -- sleep 3600
kubectl run test-b --image=busybox --restart=Never -- sleep 3600
kubectl exec test-a -- ping -c 3 $(kubectl get pod test-b -o jsonpath='{.status.podIP}')
# 64 bytes from ... ✅

# 4. 외부 통신 테스트
kubectl exec test-a -- ping -c 3 8.8.8.8
# 64 bytes from 8.8.8.8 ✅

# 5. 실제 Public IP 확인
kubectl exec test-a -- wget -qO- https://api.ipify.org
# 168.107.x.x (Oracle Cloud Public IP) ✅

6. 트러블슈팅

6.1 Pod 간 통신 안 됨

증상:

kubectl exec test-pod-a -- ping 10.244.1.x
# timeout 또는 network unreachable

원인: Cilium Node IP가 잘못 설정됨

해결:

# 1. Cilium Node IP 확인
kubectl -n kube-system exec ds/cilium -- cilium node list

# 2. 10.0.0.x로 표시되면 devices 설정 문제
# devices=enp0s6만 지정했거나, kubelet --node-ip 미설정

# 3. 해결책
# Option A: devices에 tailscale0 추가
helm upgrade cilium cilium/cilium \
  --reuse-values \
  --set devices="enp0s6,tailscale0"

# Option B: devices 생략
helm upgrade cilium cilium/cilium \
  --reuse-values \
  --set devices=null

# 4. Cilium pod 재시작
kubectl -n kube-system delete pod -l k8s-app=cilium

6.2 외부 통신 안 됨

증상:

kubectl exec test-pod -- ping 8.8.8.8
# timeout

원인: Masquerade가 tailscale0만 사용

해결:

# 1. Masquerade 인터페이스 확인
kubectl -n kube-system exec ds/cilium -- cilium status | grep Masq

# 2. [tailscale0]만 표시되면 devices 설정 문제

# 3. 해결책: devices에 enp0s6 추가
helm upgrade cilium cilium/cilium \
  --reuse-values \
  --set devices="enp0s6,tailscale0"

# 4. BPF NAT 테이블 확인
kubectl -n kube-system exec ds/cilium -- cilium bpf nat list | grep 8.8.8.8
# XLATE_SRC가 10.0.0.x (enp0s6 IP)여야 함 ✅

6.3 CoreDNS 재시작 반복

증상:

kubectl get pods -n kube-system -l k8s-app=kube-dns
NAME                       READY   STATUS    RESTARTS
coredns-xxx                0/1     Running   5  ← 계속 재시작

원인: CoreDNS가 외부 DNS (8.8.8.8) 접근 불가

해결:

# 외부 통신 문제 해결 (위 6.2 참고)

# CoreDNS 로그 확인
kubectl logs -n kube-system coredns-xxx
# [ERROR] ... read udp ... 8.8.8.8:53: i/o timeout

# 해결 후 재시작
kubectl rollout restart deployment/coredns -n kube-system

6.4 devices 설정이 적용 안 됨

증상:

# devices 변경했는데 이전 설정 그대로
kubectl -n kube-system exec ds/cilium -- cilium status | grep Masq
# Masquerading: BPF [old_interface]

해결:

# 1. ConfigMap 확인
kubectl -n kube-system get cm cilium-config -o yaml | grep device

# 2. ConfigMap에 반영되었는데도 안 바뀌면
# Cilium pod를 완전히 재시작
kubectl -n kube-system delete pod -l k8s-app=cilium

# 3. 또는 Helm으로 완전 재설치
helm uninstall cilium -n kube-system
helm install cilium cilium/cilium -f values.yaml

7. 요약

7.1 핵심 원칙

┌─────────────────────────────────────────────────────────┐
│  Tailscale 환경에서는 두 인터페이스가 모두 필요합니다!   │
│                                                         │
│  devices: "enp0s6,tailscale0"                           │
│            ^^^^^^  ^^^^^^^^^^                           │
│            외부      노드 간                              │
│            통신      통신                                │
└─────────────────────────────────────────────────────────┘

7.2 트래픽별 인터페이스 매핑

트래픽 유형 사용 인터페이스 SNAT IP 이유
Pod → Pod (같은 노드) cilium_host - 로컬 라우팅
Pod → Pod (다른 노드) tailscale0 - VXLAN over Tailscale
Pod → Service eBPF - Load balancing
Pod → 외부 enp0s6 10.0.0.x Oracle VCN Gateway

7.3 잘못된 설정과 결과

# ❌ 잘못된 설정 1
devices: enp0s6
결과: Pod 간 통신 불가 (노드 IP가 10.0.0.x로 설정됨)

# ❌ 잘못된 설정 2
devices: tailscale0
결과: 외부 통신 불가 (SNAT IP가 100.64.0.x)

# ✅ 올바른 설정
devices: "enp0s6,tailscale0"
결과: 모든 통신 정상!

8. 참고 자료

관련 문서

공식 문서


💡 Tip: 이 문서를 다른 Tailscale + Kubernetes 환경에도 적용할 수 있습니다. 인터페이스 이름만 환경에 맞게 변경하세요.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/02   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
글 보관함