본문 바로가기

Container/Kubernetes

[K8S] Troubleshoot Network

certified-kubernetes-administrator-with-practice-tests 304강

 

실습 1] CNI

root@controlplane ~ ➜  kubectl get pods
NAME                           READY   STATUS              RESTARTS   AGE
mysql                          0/1     ContainerCreating   0          39s
webapp-mysql-d89894b4b-l86gz   0/1     ContainerCreating   0          39s

root@controlplane ~ ➜  kubectl describe pod mysql 
Name:             mysql
Namespace:        triton
Priority:         0
Service Account:  default
Node:             controlplane/192.168.121.127
Start Time:       Wed, 12 Feb 2025 02:06:14 +0000
Labels:           name=mysql
Annotations:      <none>
Status:           Pending
IP:               
IPs:              <none>
...
Events:
  Type     Reason                  Age               From               Message
  ----     ------                  ----              ----               -------
  Normal   Scheduled               81s               default-scheduler  Successfully assigned triton/mysql to controlplane
  Warning  FailedCreatePodSandBox  81s               kubelet            Failed to create pod sandbox: rpc error: code = Unknown desc = failed to setup network for sandbox "44a62527ae3fa9632695a3218f443632bdabe13e7d9a15c9de4e1ed58d5e4579": plugin type="weave-net" name="weave" failed (add): unable to allocate IP address: Post "http://127.0.0.1:6784/ip/44a62527ae3fa9632695a3218f443632bdabe13e7d9a15c9de4e1ed58d5e4579": dial tcp 127.0.0.1:6784: connect: connection refused
  Normal   SandboxChanged          3s (x7 over 80s)  kubelet            Pod sandbox changed, it will be killed and re-created.
# Weave Net이 새로운 파드에 IP 주소를 할당하는 데 실패했음

root@controlplane ~ ➜  kubectl get pods -n kube-system
NAME                                   READY   STATUS    RESTARTS   AGE
coredns-6f6b679f8f-hcqwr               1/1     Running   0          9m48s
coredns-6f6b679f8f-qxf7r               1/1     Running   0          9m48s
etcd-controlplane                      1/1     Running   0          9m54s
kube-apiserver-controlplane            1/1     Running   0          9m55s
kube-controller-manager-controlplane   1/1     Running   0          9m54s
kube-proxy-wx249                       1/1     Running   0          9m48s
kube-scheduler-controlplane            1/1     Running   0          9m54s
# calico, flannel, weave-net, cilium 등의 이름을 가진 파드가 존재하지 않는다.

root@controlplane ~ ➜  ls /etc/cni/net.d/
10-weave.conflist $ weave가 깔려 있어야 함.

 

  • Weave 설치
root@controlplane /etc/cni/net.d ➜  kubectl apply -f https://reweave.azurewebsites.net/k8s/v1.29/net.yaml
serviceaccount/weave-net created
clusterrole.rbac.authorization.k8s.io/weave-net created
clusterrolebinding.rbac.authorization.k8s.io/weave-net created
role.rbac.authorization.k8s.io/weave-net created
rolebinding.rbac.authorization.k8s.io/weave-net created
daemonset.apps/weave-net created

# Weave 생성됨
root@controlplane /etc/cni/net.d ➜  kubectl get pods -n kube-system
NAME                                   READY   STATUS    RESTARTS   AGE
coredns-6f6b679f8f-hcqwr               1/1     Running   0          16m
coredns-6f6b679f8f-qxf7r               1/1     Running   0          16m
etcd-controlplane                      1/1     Running   0          17m
kube-apiserver-controlplane            1/1     Running   0          17m
kube-controller-manager-controlplane   1/1     Running   0          17m
kube-proxy-wx249                       1/1     Running   0          16m
kube-scheduler-controlplane            1/1     Running   0          17m
weave-net-89vln                        2/2     Running   0          19s

# Pod 제대로 Running
root@controlplane /etc/cni/net.d ➜  kubectl get pods
NAME                           READY   STATUS    RESTARTS   AGE
mysql                          1/1     Running   0          7m59s
webapp-mysql-d89894b4b-l86gz   1/1     Running   0          7m59s

 

실습2 ] kube-proxy

 

kube-proxy는 서비스(Service)의 네트워크 프록시 역할로 클러스터 내에서 서비스 디스커버리와 로드 밸런싱을 제공하며, 클러스터의 네트워크 트래픽이 효율적으로 관리되도록 돕는다.

kube-proxy는 Deployment 또는 DeploySet으로 배포된다.

 ConfigMap은 설정 데이터를 저장하는 리소스이므로, kube-proxy의 실행 방식과 직접적인 관련은 없지만, 설정 관리에 사용한다.

root@controlplane ~ ➜  kubectl get pods -n kube-system
NAME                                   READY   STATUS             RESTARTS      AGE
coredns-6f6b679f8f-682q8               1/1     Running            0             8m46s
coredns-6f6b679f8f-tdwlr               1/1     Running            0             8m46s
etcd-controlplane                      1/1     Running            0             8m53s
kube-apiserver-controlplane            1/1     Running            0             8m53s
kube-controller-manager-controlplane   1/1     Running            0             8m53s
kube-proxy-t6m2l                       0/1     CrashLoopBackOff   4 (65s ago)   2m43s
kube-scheduler-controlplane            1/1     Running            0             8m53s
weave-net-fbzlb                        2/2     Running            0             27s

root@controlplane ~ ➜  kubectl logs kube-proxy-t6m2l -n kube-system
E0212 04:27:31.556699       1 run.go:74] "command failed" err="failed complete: open /var/lib/kube-proxy/configuration.conf: no such file or directory"

root@controlplane /etc/cni/net.d ➜  ls /var/lib/kube-proxy/configuration.conf
ls: cannot access '/var/lib/kube-proxy/configuration.conf': No such file or directory

root@controlplane ~ ✖ kubectl describe ds kube-proxy -n kube-system | grep -i
 config
      --config=/var/lib/kube-proxy/configuration.conf
    Type:      ConfigMap (a volume populated by a ConfigMap)

root@controlplane ~ ➜  kubectl describe cm kube-proxy -n kube-system | grep -
i config
  kubeconfig: /var/lib/kube-proxy/kubeconfig.conf

#  ds와 cm 둘이 configuration path 다르게 설정되어 있는 것 확인 가능

kubeconfig: /var/lib/kube-proxy/configuration.conf

 

    • config 설정 변경
kubectl describe cm kube-proxy -n kube-system
Name:         kube-proxy
Namespace:    kube-system
Labels:       app=kube-proxy
Annotations:  kubeadm.kubernetes.io/component-config.hash: sha256:906b8697200819e8263843f43965bb3614545800b82206dcee8ef93a08bc4f4b

Data
====
config.conf:  # 이 이름으로 사용해야 한다.

root@controlplane ~ ➜  kubectl describe ds kube-proxy -n kube-system | grep config
      --config=/var/lib/kube-proxy/config.conf # 이렇게 경로 변경해주기
      
root@controlplane ~ ➜  kubectl get pods -n kube-system
NAME                                   READY   STATUS    RESTARTS   AGE
coredns-6f6b679f8f-fkqc6               1/1     Running   0          21m
coredns-6f6b679f8f-vnl4b               1/1     Running   0          21m
etcd-controlplane                      1/1     Running   0          22m
kube-apiserver-controlplane            1/1     Running   0          22m
kube-controller-manager-controlplane   1/1     Running   0          22m
kube-proxy-qwppj                       1/1     Running   0          16s # 정상 작동 확인
kube-scheduler-controlplane            1/1     Running   0          22m
weave-net-hm9ww                        2/2     Running   0          3m18s
반응형

'Container > Kubernetes' 카테고리의 다른 글

[K8S] Kubectl - jsonpath  (0) 2025.02.10
[K8S] Network & CNI  (0) 2025.02.06
[K8S] Deploy a Kubernetes Cluster using Kubeadm  (0) 2025.02.06
[K8S] Network Policy  (0) 2025.02.04
[K8S] Security Context  (0) 2025.02.03