본문 바로가기

리눅스

[draft] 쿠버네티스 클러스터에서 Calico 네트워크 플러그인을 설치

728x90

쿠버네티스 클러스터에서 Calico 네트워크 플러그인을 설치

Calico는 네트워킹과 네트워크 보안을 제공하는 쿠버네티스의 가장 널리 사용되는 CNI(Container Network Interface) 플러그인 중 하나입니다.

1. Calico 설치 YAML 파일 다운로드 및 적용

Calico는 공식 YAML 파일을 사용하여 쉽게 설치할 수 있습니다.

Calico 네트워크 플러그인을 설치하는 데 필요한 모든 리소스를 클러스터에 생성합니다.

calico-node DaemonSet, calico-kube-controllers Deployment 및 다양한 ConfigMap과 CRD가 포함됩니다.

kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.28.1/manifests/tigera-operator.yaml
namespace/tigera-operator created
customresourcedefinition.apiextensions.k8s.io/bgpconfigurations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/bgpfilters.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/bgppeers.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/blockaffinities.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/caliconodestatuses.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/clusterinformations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/felixconfigurations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/globalnetworkpolicies.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/globalnetworksets.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/hostendpoints.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipamblocks.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipamconfigs.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipamhandles.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ippools.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipreservations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/kubecontrollersconfigurations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/networkpolicies.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/networksets.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/apiservers.operator.tigera.io created
customresourcedefinition.apiextensions.k8s.io/imagesets.operator.tigera.io created
customresourcedefinition.apiextensions.k8s.io/installations.operator.tigera.io created
customresourcedefinition.apiextensions.k8s.io/tigerastatuses.operator.tigera.io created
serviceaccount/tigera-operator created
clusterrole.rbac.authorization.k8s.io/tigera-operator created
clusterrolebinding.rbac.authorization.k8s.io/tigera-operator created
deployment.apps/tigera-operator created

 

kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.28.1/manifests/custom-resources.yaml
installation.operator.tigera.io/default created
apiserver.operator.tigera.io/default created

 

curl -L --remote-name https://raw.githubusercontent.com/projectcalico/calico/v3.28.1/manifests/custom-resources.yaml
sed -ie 's/192.168.0.0/172.24.0.0/g' custom-resources.yaml
kubectl apply -f custom-resources.yaml

 

2. 레이블 확인

파드에 어떤 레이블이 적용되어 있는지 확인합니다.

 

특정 네임스페이스의 모든 파드의 레이블을 확인

kubectl get pods -n <네임스페이스명> --show-labels
kubectl get pods -n kube-system --show-labels

특정 파드의 레이블을 자세히 확인

kubectl describe pod <파드명> -n <네임스페이스명>

특정 레이블을 기준으로 파드 필터링

kubectl get pods -n <네임스페이스명> -l <레이블키>=<레이블값>
kubectl get pods -n tigera-operator -l k8s-app=tigera-operator
kubectl get pods -n kube-system -l k8s-app=calico-kube-controllers
kubectl get pods -n kube-system -l k8s-app=calico-node

3. Calico 설치 확인

Calico가 제대로 설치되었는지 확인하고 모든 Pod가 실행 중인지 확인합니다.

 

모든 Calico 관련 Pod가 Running 상태인지 확인합니다.

kubectl get pods -n kube-system -l k8s-app=calico-kube-controllers
NAME                                       READY   STATUS              RESTARTS   AGE
calico-kube-controllers-77d59654f4-zqnvm   0/1     ContainerCreating   0          3m58s
kubectl get pods -n kube-system -l k8s-app=calico-node
NAME                READY   STATUS    RESTARTS   AGE
calico-node-6h4t8   1/1     Running   0          3m39s
calico-node-dp2bc   1/1     Running   0          3m40s
calico-node-mzxd5   1/1     Running   0          3m40s
calico-node-nzgk5   1/1     Running   0          3m40s

4. Calico 설정 확인

Calico의 기본 설정을 확인합니다.

kubectl get configmap calico-config -n kube-system -o yaml

5. Pod 네트워크 구성 확인

Calico가 설치되면 쿠버네티스 클러스터의 모든 Pod가 10.244.0.0/16 CIDR 범위를 사용하는 기본 Calico 네트워크로 연결됩니다. 이를 확인하려면 새로운 Pod를 생성하고 해당 Pod의 IP 주소를 확인할 수 있습니다.

Pod IP 열에서 IP 주소가 10.244.x.x 범위 내에 있는지 확인합니다.

 

테스트 파드 생성

kubectl run test-pod --image=busybox --restart=Never -- sleep 3600

파드 상태 확인

kubectl get pod test-pod -o wide

파드 내부에서 네트워크 테스트

kubectl exec -it test-pod -- sh
# DNS 확인 (Kubernetes의 DNS 서비스 테스트)
nslookup kubernetes.default.svc.cluster.local

# 인터넷 연결 확인 (외부 네트워크 접근 테스트)
ping google.com

# 다른 파드와의 연결 확인 (다른 파드의 IP로 핑 테스트)
ping <다른 파드의 IP>

또는

다른 파트로 접근하여 네트워크 연결 테스트

kubectl exec -it test-pod -- ping <다른 파드의 IP 주소>

테스트 파드 삭제

kubectl delete pod test-pod

6. Calico 관련 리소스 삭제

Calico 설치 시 사용한 YAML 파일을 기준으로 생성된 모든 리소스를 삭제해야 합니다.

kubectl delete -f https://docs.projectcalico.org/manifests/calico.yaml
poddisruptionbudget.policy "calico-kube-controllers" deleted
serviceaccount "calico-kube-controllers" deleted
serviceaccount "calico-node" deleted
configmap "calico-config" deleted
customresourcedefinition.apiextensions.k8s.io "bgpconfigurations.crd.projectcalico.org" deleted
customresourcedefinition.apiextensions.k8s.io "bgppeers.crd.projectcalico.org" deleted
customresourcedefinition.apiextensions.k8s.io "blockaffinities.crd.projectcalico.org" deleted
customresourcedefinition.apiextensions.k8s.io "caliconodestatuses.crd.projectcalico.org" deleted
customresourcedefinition.apiextensions.k8s.io "clusterinformations.crd.projectcalico.org" deleted
customresourcedefinition.apiextensions.k8s.io "felixconfigurations.crd.projectcalico.org" deleted
customresourcedefinition.apiextensions.k8s.io "globalnetworkpolicies.crd.projectcalico.org" deleted
customresourcedefinition.apiextensions.k8s.io "globalnetworksets.crd.projectcalico.org" deleted
customresourcedefinition.apiextensions.k8s.io "hostendpoints.crd.projectcalico.org" deleted
customresourcedefinition.apiextensions.k8s.io "ipamblocks.crd.projectcalico.org" deleted
customresourcedefinition.apiextensions.k8s.io "ipamconfigs.crd.projectcalico.org" deleted
customresourcedefinition.apiextensions.k8s.io "ipamhandles.crd.projectcalico.org" deleted
customresourcedefinition.apiextensions.k8s.io "ippools.crd.projectcalico.org" deleted
customresourcedefinition.apiextensions.k8s.io "ipreservations.crd.projectcalico.org" deleted
customresourcedefinition.apiextensions.k8s.io "kubecontrollersconfigurations.crd.projectcalico.org" deleted
customresourcedefinition.apiextensions.k8s.io "networkpolicies.crd.projectcalico.org" deleted
customresourcedefinition.apiextensions.k8s.io "networksets.crd.projectcalico.org" deleted
clusterrole.rbac.authorization.k8s.io "calico-kube-controllers" deleted
clusterrole.rbac.authorization.k8s.io "calico-node" deleted
clusterrolebinding.rbac.authorization.k8s.io "calico-kube-controllers" deleted
clusterrolebinding.rbac.authorization.k8s.io "calico-node" deleted
daemonset.apps "calico-node" deleted
deployment.apps "calico-kube-controllers" deleted

Calico 파드 삭제

kubectl get pods -n kube-system -o wide

Pod 강제 삭제

kubectl delete pod <calico-kube-pod-name> -n kube-system --force --grace-period=0
kubectl delete pod calico-kube-controllers-5b9b456c66-z58w5 -n kube-system --force --grace-period=0

7. CalicoCTL 설치

curl -O -L https://github.com/projectcalico/calicoctl/releases/download/v3.20.6/calicoctl-linux-amd64
chmod +x calicoctl-linux-amd64
sudo mv calicoctl-linux-amd64 /usr/local/bin/calicoctl

calicoctl node 정보 확인

calicoctl node status
Calico process is running.

IPv4 BGP status
+---------------+-------------------+-------+----------+-------------+
| PEER ADDRESS  |     PEER TYPE     | STATE |  SINCE   |    INFO     |
+---------------+-------------------+-------+----------+-------------+
| 192.168.0.142 | node-to-node mesh | up    | 05:03:30 | Established |
| 192.168.0.112 | node-to-node mesh | up    | 05:03:30 | Established |
| 192.168.0.121 | node-to-node mesh | up    | 05:03:30 | Established |
+---------------+-------------------+-------+----------+-------------+

IPv6 BGP status
No IPv6 peers found.
calicoctl get ippool -o wide --allow-version-mismatch
calicoctl get workloadEndpoint --allow-version-mismatch

IPAM 정보 확인

calicoctl ipam show --allow-version-mismatch
+----------+---------------+-----------+------------+--------------+
| GROUPING |     CIDR      | IPS TOTAL | IPS IN USE |   IPS FREE   |
+----------+---------------+-----------+------------+--------------+
| IP Pool  | 10.244.0.0/16 |     65536 | 4 (0%)     | 65532 (100%) |
+----------+---------------+-----------+------------+--------------+

POD CIDR 정보

calicoctl ipam show --show-blocks --allow-version-mismatch
+----------+-------------------+-----------+------------+--------------+
| GROUPING |       CIDR        | IPS TOTAL | IPS IN USE |   IPS FREE   |
+----------+-------------------+-----------+------------+--------------+
| IP Pool  | 10.244.0.0/16     |     65536 | 4 (0%)     | 65532 (100%) |
| Block    | 10.244.100.192/26 |        64 | 1 (2%)     | 63 (98%)     |
| Block    | 10.244.126.0/26   |        64 | 1 (2%)     | 63 (98%)     |
| Block    | 10.244.194.64/26  |        64 | 1 (2%)     | 63 (98%)     |
| Block    | 10.244.235.128/26 |        64 | 1 (2%)     | 63 (98%)     |
+----------+-------------------+-----------+------------+--------------+

 

8. 노드 재시작

모든 노드를 재시작하여 남아있는 Calico의 네트워크 설정을 정리할 수 있습니다.

sudo reboot

9. 클러스터 상태 확인

Calico 삭제 후 클러스터의 상태를 확인하세요

 

모든 노드와 시스템 네임스페이스의 Pod들이 정상적인 상태인지 확인합니다.

kubectl get nodes
kubectl get pods -n kube-system
kubectl get pods -n kube-system -o wide

 

이 과정을 통해 Kubernetes 클러스터에서 Calico 네트워크 플러그인이 완전히 제거됩니다.

 

참고URL

- github : calico GitHub releases

- github : calicoctl GitHub releases

 

kubectl apply -f custom-resources.yaml
 
728x90