티스토리 뷰
Cilium devices 파라미터 완벽 가이드: Tailscale 환경에서의 핵심
pak2251 2025. 10. 26. 19:47Cilium 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 파라미터가 실제로 무엇을 제어하는지, 그리고 왜 두 개의 인터페이스가 모두 필요한지를 완벽히 설명합니다.
📋 목차
- 배경: 서로 다른 네트워크의 Kubernetes 클러스터
- devices 파라미터란 무엇인가
- 시나리오별 증상 분석
- 근본 원리: Cilium의 Interface Selection
- 최종 권장사항
- 트러블슈팅
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
devicesoption specifies which network interfaces Cilium uses for NodePort and LoadBalancer services."
하지만 실제로는:
- 노드 IP 결정에 영향
- Masquerade (SNAT) 인터페이스 선택
- 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 환경에도 적용할 수 있습니다. 인터페이스 이름만 환경에 맞게 변경하세요.
'실제 경험과 인사이트를 AI와 함께 정리한 글' 카테고리의 다른 글
| Sequential Thinking MCP: AI의 구조화된 사고 프로세스 (0) | 2025.10.27 |
|---|---|
| Serena MCP: AI 코딩 어시스턴트를 위한 시맨틱 코드 분석 도구 (0) | 2025.10.26 |
| Kubernetes Pod Security Standards: nginx-unprivileged로 보안 강화하기 (0) | 2025.10.26 |
| Oracle Cloud + Tailscale + Kubernetes 완벽 가이드(6) (0) | 2025.10.26 |
| Oracle Cloud + Tailscale + Kubernetes 완벽 가이드(5) (0) | 2025.10.26 |
- Total
- Today
- Yesterday
- Kubernetes
- authentication
- workflow
- SHACL
- LLM
- AI agent
- api gateway
- Go
- ai 개발 도구
- AI
- authorization
- LangChain
- AI Development
- Rag
- Claude
- react
- 개발 도구
- Ontology
- backend
- frontend
- Tailwind CSS
- security
- PYTHON
- architecture
- claude code
- knowledge graph
- troubleshooting
- Next.js
- Developer Tools
- Tax Analysis
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
