K8s
K8s 카테고리의 모든 포스트 - 한국어
8개의 포스트
Enterprise에서의 K8S
enterprise 환경에서의 K8S 구성에 대해서
k8s etcd란
k8s etcd에 대해서
k8s 안전하게 shutdown하기
k8s 셧다운 하는 방법에 대해서
k8s 인스톨 할때 체크 목록
k8s 인스톨 할 때 체크 목록과 순서
k8s 학습 로드맵
k8s 학습 로드맵
KubeSpary로 K8S를 쉽게 설치
KubeSpary를 사용하여 K8S를 쉽게 설치하는 방법을 공유합니다.
k8s 기본 네트워킹 cli
Kubernetes 운영자를 위한 리눅스 네트워크 명령어 정리
📌 목적: K8s 환경에서 네트워크 문제를 진단, 분석, 설정 변경을 위해 알아야 하는 필수 명령어와 활용 예시 정리
📅 마지막 업데이트: 2025-08-12
1. 필수 명령어
1.1 ip addr
(or ip a
)
네트워크 인터페이스(IP) 확인 및 설정
자주 쓰는 옵션
ip addr show
: 전체 인터페이스 IP 표시ip addr show eth0
: 특정 인터페이스만 표시ip addr add 192.168.0.10/24 dev eth0
: IP 추가ip addr del 192.168.0.10/24 dev eth0
: IP 삭제
사용 예시
기본네트워킹 다루기
📌 Kubernetes 네트워킹 실전 매뉴얼
목표: Kubernetes 네트워킹 개념을 중요도/빈도순으로 정리하고, 명령어 + 장애 사례 + 해결 방법 + 실전 예제를 함께 제공
1. Service 타입 & 동작원리
📖 개념
- Pod는 재시작 시 IP가 변경됨 → 고정 IP 대신 Service로 접근
- Service 종류:
- ClusterIP: 클러스터 내부 전용
- NodePort: 각 노드의 특정 포트를 외부에 개방
- LoadBalancer: 외부 LB IP를 할당
- Headless Service: DNS로 개별 Pod IP 반환
🔧 필수 명령어
kubectl get svc -A -o wide
kubectl describe svc my-service
kubectl get endpoints my-service -o wide
💡 실전 예제
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 8080
type: ClusterIP
⚠️ 자주 겪는 문제 & 해결
- 문제: Service는 있는데 Pod 연결 안 됨
원인: Selector 라벨 불일치
해결:kubectl get pod --show-labels
로 라벨 확인 후 Service 수정
2. Pod-to-Pod 통신 (CNI)
📖 개념
- CNI 플러그인(Calico, Flannel 등)이 Pod 간 네트워크를 연결
- Pod CIDR은 노드별로 분리
🔧 필수 명령어
kubectl get pods -o wide
kubectl exec -it pod-a -- ping <pod-b-ip>
kubectl exec -it pod-a -- curl http://<pod-b-ip>:<port>
💡 실전 예제
- Calico 설치
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
⚠️ 문제 & 해결
- 문제: 다른 노드 Pod 간 ping 불가
해결: CNI 포트(예: 4789/UDP, 179/TCP) 방화벽 허용
3. DNS & CoreDNS
📖 개념
- 내부 DNS 서버로 CoreDNS 사용
svc-name.namespace.svc.cluster.local
형식
🔧 필수 명령어
kubectl exec -it pod-a -- nslookup my-service
kubectl exec -it pod-a -- dig my-service +short
💡 실전 예제
- ExternalName 서비스
apiVersion: v1
kind: Service
metadata:
name: external-service
spec:
type: ExternalName
externalName: example.com
⚠️ 문제 & 해결
- 문제: 특정 네임스페이스에서만 DNS 실패
해결: FQDN(my-service.namespace
)로 호출
4. Ingress & Ingress Controller
📖 개념
- HTTP/HTTPS 트래픽 라우팅
- Ingress Controller(NGINX, Traefik)가 실제 처리
🔧 필수 명령어
kubectl get ingress -A
kubectl describe ingress my-ingress
kubectl logs -n ingress-nginx <controller-pod>
💡 실전 예제
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
spec:
rules:
- host: myapp.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-service
port:
number: 80
5. MetalLB / LoadBalancer
📖 개념
- 온프레미스 환경에서 LoadBalancer 타입 구현
- L2/L3 모드
🔧 필수 명령어
kubectl get ipaddresspool -n metallb-system
kubectl get l2advertisement -n metallb-system
💡 실전 예제
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: first-pool
namespace: metallb-system
spec:
addresses:
- 192.168.0.240-192.168.0.250
6. NetworkPolicy
📖 개념
- Pod 간 트래픽 제어
🔧 필수 명령어
kubectl get netpol -A
kubectl describe netpol my-policy
💡 실전 예제
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-nginx
spec:
podSelector:
matchLabels:
app: nginx
ingress:
- from:
- podSelector:
matchLabels:
app: allowed-app
ports:
- protocol: TCP
port: 80
7. Node-to-Pod & 외부 통신
📖 개념
- ExternalTrafficPolicy=Local → 클라이언트 IP 유지
- ExternalTrafficPolicy=Cluster → 로드밸런싱
💡 실전 팁
kubectl edit svc my-service
# spec.externalTrafficPolicy: Local
8. Port Forwarding
kubectl port-forward svc/my-service 8080:80
9. kube-proxy & iptables/IPVS
📖 개념
- Service IP → Pod IP 변환 처리
- iptables vs ipvs 모드
💡 상태 확인
kubectl get configmap kube-proxy -n kube-system -o yaml
10. 네트워크 트러블슈팅 명령어 모음
kubectl get pod -o wide
kubectl get svc -o wide
kubectl exec -it <pod> -- traceroute <ip>
kubectl exec -it <pod> -- tcpdump -i eth0 port 80
📌 Best Practice 모음
- 서비스 라벨 규칙 표준화 → Selector 오류 방지
- CNI 선택 시 성능/보안 고려 → Calico(CNI+NetworkPolicy), Cilium(eBPF)
- Ingress는 TLS 필수 → cert-manager로 자동 발급
- MetalLB IP Pool은 DHCP 범위와 겹치지 않게
- NetworkPolicy는 점진적 적용
- 모든 네트워크 구성은 IaC(GitOps)로 관리
- 테스트용 PortForward 적극 활용