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 모음

  1. 서비스 라벨 규칙 표준화 → Selector 오류 방지
  2. CNI 선택 시 성능/보안 고려 → Calico(CNI+NetworkPolicy), Cilium(eBPF)
  3. Ingress는 TLS 필수 → cert-manager로 자동 발급
  4. MetalLB IP Pool은 DHCP 범위와 겹치지 않게
  5. NetworkPolicy는 점진적 적용
  6. 모든 네트워크 구성은 IaC(GitOps)로 관리
  7. 테스트용 PortForward 적극 활용