{"id":30047638,"url":"https://github.com/tmax-cloud/install-cni","last_synced_at":"2026-02-07T08:31:30.090Z","repository":{"id":49266560,"uuid":"315229201","full_name":"tmax-cloud/install-cni","owner":"tmax-cloud","description":null,"archived":false,"fork":false,"pushed_at":"2021-06-21T08:49:51.000Z","size":203,"stargazers_count":0,"open_issues_count":1,"forks_count":2,"subscribers_count":5,"default_branch":"4.1","last_synced_at":"2025-08-07T09:57:24.812Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tmax-cloud.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-11-23T07:08:26.000Z","updated_at":"2021-06-21T08:49:55.000Z","dependencies_parsed_at":"2022-08-19T06:02:34.077Z","dependency_job_id":null,"html_url":"https://github.com/tmax-cloud/install-cni","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/tmax-cloud/install-cni","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tmax-cloud%2Finstall-cni","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tmax-cloud%2Finstall-cni/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tmax-cloud%2Finstall-cni/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tmax-cloud%2Finstall-cni/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tmax-cloud","download_url":"https://codeload.github.com/tmax-cloud/install-cni/tar.gz/refs/heads/4.1","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tmax-cloud%2Finstall-cni/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29190180,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-07T07:37:03.739Z","status":"ssl_error","status_checked_at":"2026-02-07T07:37:03.029Z","response_time":63,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-08-07T09:56:55.555Z","updated_at":"2026-02-07T08:31:30.085Z","avatar_url":"https://github.com/tmax-cloud.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"\n# CNI 설치 가이드\n* CNI 플러그인 중 하나인 Calico CNI를 사용하며, 3.13 이후 버전 사용 필요\n* Calicoctl도 함께 설치 진행 필요\n    * https://www.projectcalico.org/\n* [Calico 듀얼스택에 대한 설치 가이드](#step0.1 \"step0.1\")\n\n\n## 구성 요소 및 버전\n* calico/node ([calico/node:v3.13.4](https://hub.docker.com/layers/calico/node/v3.13.4/images/sha256-2656efc741e90750282ad89b9ec078588b98909e5cd0b8d1256f2059466e1717?context=explore))\n* calico/pod2daemon-flexvol ([calico/pod2daemon-flexvol:v3.13.4](https://hub.docker.com/layers/calico/pod2daemon-flexvol/v3.13.4/images/sha256-3a12c023e964104ebf8af330bc74fa25831e961c871f8024bd6917c1357a57a6?context=explore))\n* calico/cni ([calico/cni:v3.13.4](https://hub.docker.com/layers/calico/cni/v3.13.4/images/sha256-20a74b0c29e57b7e0a3bfd4474e98d3968f3f0edb1f307c9c789b8ed339971db?context=explore))\n* calico/kube-controllers ([calico/kube-controllers:v3.13.4](https://hub.docker.com/layers/calico/kube-controllers/v3.13.4/images/sha256-49404c910b50bdd93003315d1774c18f445589b1059b24eae2ebaa056c565e8c?context=explore))\n* calico/ctl ([calico/ctl:v3.15.0](https://registry.hub.docker.com/layers/calico/ctl/v3.15.0/images/sha256-09a08c8ef2ef637aadb3d2cc46965b8ba73e0e4cf863c836ad114cc3292822aa?context=explore))\n\n## 폐쇄망 구축 가이드\n설치를 진행하기 전 아래의 과정을 통해 필요한 이미지 및 yaml 파일을 준비한다.\n1. **폐쇄망에서 설치하는 경우** 사용하는 image repository에 CNI 설치 시 필요한 이미지를 push한다. \n\n    * 작업 디렉토리 생성 및 환경 설정\n    ```bash\n    $ mkdir -p ~/cni-install\n    $ export CNI_HOME=~/cni-install\n    $ export CNI_VERSION=v3.13.4\n    $ export CTL_VERSION=v3.15.0\n    $ export REGISTRY=172.22.8.106:5000\n    $ cd $CNI_HOME\n    ```\n\n    * 외부 네트워크 통신이 가능한 환경에서 필요한 이미지를 다운받는다.\n    ```bash\n    $ sudo docker pull calico/node:${CNI_VERSION}\n    $ sudo docker save calico/node:${CNI_VERSION} \u003e calico-node_${CNI_VERSION}.tar\n    $ sudo docker pull calico/pod2daemon-flexvol:${CNI_VERSION}\n    $ sudo docker save calico/pod2daemon-flexvol:${CNI_VERSION} \u003e calico-pod2daemon-flexvol_${CNI_VERSION}.tar\n    $ sudo docker pull calico/cni:${CNI_VERSION}\n    $ sudo docker save calico/cni:${CNI_VERSION} \u003e calico-cni_${CNI_VERSION}.tar\n    $ sudo docker pull calico/kube-controllers:${CNI_VERSION}\n    $ sudo docker save calico/kube-controllers:${CNI_VERSION} \u003e calico-kube-controllers_${CNI_VERSION}.tar\n    $ sudo docker pull calico/ctl:${CTL_VERSION}\n    $ sudo docker save calico/ctl:${CTL_VERSION} \u003e calico-ctl_${CTL_VERSION}.tar\n    ```\n\n    * calico yaml을 다운로드한다. (대역 설정을 위함)\n    ```bash\n    $ curl https://raw.githubusercontent.com/tmax-cloud/install-cni/4.1/manifest/calico_3.13.4.yaml \u003e calico.yaml\n    ```\n\n    * calicoctl yaml을 다운로드한다.\n    ```bash\n    $ curl https://raw.githubusercontent.com/tmax-cloud/install-cni/4.1/manifest/calicoctl_3.15.0.yaml \u003e calicoctl.yaml\n    ```\n\n\n2. 위의 과정에서 생성한 tar 파일들을 폐쇄망 환경으로 이동시킨 뒤 사용하려는 registry에 이미지를 push한다.\n    ```bash\n    $ sudo docker load \u003c calico-node_${CNI_VERSION}.tar\n    $ sudo docker load \u003c calico-pod2daemon-flexvol_${CNI_VERSION}.tar\n    $ sudo docker load \u003c calico-cni_${CNI_VERSION}.tar\n    $ sudo docker load \u003c calico-kube-controllers_${CNI_VERSION}.tar\n    $ sudo docker load \u003c calico-ctl_${CTL_VERSION}.tar\n    \n    $ sudo docker tag calico/node:${CNI_VERSION} ${REGISTRY}/calico/node:${CNI_VERSION}\n    $ sudo docker tag calico/pod2daemon-flexvol:${CNI_VERSION} ${REGISTRY}/calico/pod2daemon-flexvol:${CNI_VERSION}\n    $ sudo docker tag calico/cni:${CNI_VERSION} ${REGISTRY}/calico/cni:${CNI_VERSION}\n    $ sudo docker tag calico/kube-controllers:${CNI_VERSION} ${REGISTRY}/calico/kube-controllers:${CNI_VERSION}\n    $ sudo docker tag calico/ctl:${CTL_VERSION} ${REGISTRY}/calico/ctl:${CTL_VERSION}\n   \n    $ sudo docker push ${REGISTRY}/calico/node:${CNI_VERSION}\n    $ sudo docker push ${REGISTRY}/calico/pod2daemon-flexvol:${CNI_VERSION}\n    $ sudo docker push ${REGISTRY}/calico/cni:${CNI_VERSION}\n    $ sudo docker push ${REGISTRY}/calico/kube-controllers:${CNI_VERSION}\n    $ sudo docker push ${REGISTRY}/calico/ctl:${CTL_VERSION}\n    ```\n\n\n## 설치 가이드\n0. [calico.yaml 수정](#step0 \"step0\")   \n0.1. [Dualstack 설치시 calico.yaml 수정](#step0.1 \"step0.1\")\n1. [calico 설치](#step1 \"step1\")\n2. [calicoctl 설치](#step2 \"step2\")\n\n\n\u003ch2 id=\"step0\"\u003e Step0. calico yaml 수정 \u003c/h2\u003e\n\n* 목적 : `calico yaml에 이미지 registry, 버전 정보, pod 대역, IPIP모드 여부를 수정`\n* 생성 순서 : \n    * 아래의 command를 수정하여 사용하고자 하는 image 버전 정보를 수정한다. (기본 설정 버전은 v3.13.4)\n  ```bash\n            sed -i 's/v3.13.4/'${CNI_VERSION}'/g' calico.yaml\n  ```\n\n    * pod 대역과 IPIP 모드를 아래와 같이 수정한다. pod 대역은 kubernetes 설치할때 사용했던 kubeadm-config.yaml의 podSubnet 대역과 동일해야 한다. (다를 경우 문제 발생)\n  ```bash\n            - name: CALICO_IPV4POOL_IPIP\n            value: \"Never\"            \n            - name: CALICO_IPV4POOL_CIDR\n            value: \"10.0.0.0/16\" \n  ```\n    * Node의 NIC이 여러개일 경우, calico-node가 BGP peering을 맺을 node IP 대역을 해당 필드에 추가한다. (NIC이 한 개일 경우, 추가하지 않아도 됨) \n  ```bash\n            - name: IP_AUTODETECTION_METHOD\n              value: \"cidr=192.168.0.0/24\"\n  ```\n    * master 노드에만 calico-kube-controllers를 띄우기 위해서는 아래와 같은 스케쥴링 옵션을 추가한다. (calico_v.3.13.4_master.yaml 파일 참고)\n        * 주의) matchExpressions의 key(kubernetes.io/hostname)의 values에 master 노드의 이름으로 수정\n  ```bash\n        - key: node-role.kubernetes.io/master\n          effect: NoSchedule\n\n      affinity:\n        nodeAffinity:\n          preferredDuringSchedulingIgnoredDuringExecution:\n          - weight: 1\n            preference:\n              matchExpressions:\n              - key: kubernetes.io/hostname\n                operator: In\n                values:\n                  - kube4\n\n          requiredDuringSchedulingIgnoredDuringExecution:\n            nodeSelectorTerms:\n              - matchExpressions:\n                  - key: node-role.kubernetes.io/master\n                    operator: Exists\n  ```         \n \n* 비고 :\n    * `폐쇄망에서 설치를 진행하여 별도의 image registry를 사용하는 경우 registry 정보를 추가로 설정해준다.`\n  ```bash\n            sed -i 's/calico\\/cni/'${REGISTRY}'\\/calico\\/cni/g' calico.yaml\n            sed -i 's/calico\\/pod2daemon-flexvol/'${REGISTRY}'\\/calico\\/pod2daemon-flexvol/g' calico.yaml\n            sed -i 's/calico\\/node/'${REGISTRY}'\\/calico\\/node/g' calico.yaml\n            sed -i 's/calico\\/kube-controllers/'${REGISTRY}'\\/calico\\/kube-controllers/g' calico.yaml\n            sed -i 's/calico\\/ctl/'${REGISTRY}'\\/calico\\/ctl/g' calicoctl.yaml\n  ```\n\n\u003ch2 id=\"step0.1\"\u003e Step0.1. Dualstack 설치시의 calico.yaml 수정 \u003c/h2\u003e\n\n* 목적 : `DualStack 설치시 calico yaml에 이미지 registry, 버전 정보, pod 대역, IPIP모드 여부를 수정`\n* 생성 순서 : \n    * 아래의 command를 수정하여 사용하고자 하는 image 버전 정보를 수정한다. (기본 설정 버전은 v3.13.4) (듀얼스택 기능은 v3.13 이상에서 지원)\n  ```bash\n            sed -i 's/v3.13.4/'${CNI_VERSION}'/g' calico.yaml\n  ```\n    * ipam config에 ipv4, ipv6 주소 할당 설정을 아래와 같이 수정한다.\n  ```bash\n  cni_network_config: |-\n    {\n      \"name\": \"k8s-pod-network\",\n      \"cniVersion\": \"0.3.1\",\n      \"plugins\": [\n        {\n          \"type\": \"calico\",\n          \"log_level\": \"info\",\n          \"datastore_type\": \"kubernetes\",\n          \"nodename\": \"__KUBERNETES_NODE_NAME__\",\n          \"mtu\": __CNI_MTU__,\n          \"ipam\": {\n              \"type\": \"calico-ipam\",\n              \"assign_ipv4\": \"true\",\n              \"assign_ipv6\": \"true\"\n          },\n ```\n\n    * pod 대역과 IPIP 모드를 아래와 같이 수정한다. pod 대역은 kubernetes 설치할때 사용했던 kubeadm-config.yaml의 podSubnet 대역과 동일해야 한다. (다를 경우 문제 발생)\n  ```bash\n            - name: CALICO_IPV4POOL_IPIP\n            value: \"Never\"            \n            - name: CALICO_IPV4POOL_CIDR\n            value: \"10.0.0.0/16\" \n  ```   \n    * Felix의 IPv6 지원에 대한 플래그 활성화, pod IPv6 주소 대역을 수정, 노드 IPv6 주소 감지를 설정\n  ```bash\n            - name: FELIX_IPV6SUPPORT\n              value: \"true\"\n            - name: CALICO_IPV6POOL_CIDR\n              value: \"fd00:10:20::/72\"\n            - name: IP6\n              value: \"autodetect\"\n  ```\n\n    * master 노드에만 calico-kube-controllers를 띄우기 위해서는 아래와 같은 스케쥴링 옵션을 추가한다. (calico_v.3.13.4_master.yaml 파일 참고)\n        * 주의) matchExpressions의 key(kubernetes.io/hostname)의 values에 master 노드의 이름으로 수정\n  ```bash\n        - key: node-role.kubernetes.io/master\n          effect: NoSchedule\n\n      affinity:\n        nodeAffinity:\n          preferredDuringSchedulingIgnoredDuringExecution:\n          - weight: 1\n            preference:\n              matchExpressions:\n              - key: kubernetes.io/hostname\n                operator: In\n                values:\n                  - kube4\n\n          requiredDuringSchedulingIgnoredDuringExecution:\n            nodeSelectorTerms:\n              - matchExpressions:\n                  - key: node-role.kubernetes.io/master\n                    operator: Exists\n  ```         \n \n* 비고 :\n    * `폐쇄망에서 설치를 진행하여 별도의 image registry를 사용하는 경우 registry 정보를 추가로 설정해준다.`\n  ```bash\n            sed -i 's/calico\\/cni/'${REGISTRY}'\\/calico\\/cni/g' calico.yaml\n            sed -i 's/calico\\/pod2daemon-flexvol/'${REGISTRY}'\\/calico\\/pod2daemon-flexvol/g' calico.yaml\n            sed -i 's/calico\\/node/'${REGISTRY}'\\/calico\\/node/g' calico.yaml\n            sed -i 's/calico\\/kube-controllers/'${REGISTRY}'\\/calico\\/kube-controllers/g' calico.yaml\n            sed -i 's/calico\\/ctl/'${REGISTRY}'\\/calico\\/ctl/g' calicoctl.yaml\n  ```\n\n\u003ch2 id=\"step1\"\u003e Step 1. calico 설치 \u003c/h2\u003e\n\n* 목적 : `calico 설치`\n* 생성 순서: calico.yaml 설치  `ex) kubectl apply -f calico.yaml`\n* 비고 :\n    * calico-kube-controllers-xxxxxxxxxx-xxxxx (1개의 pod)\n    * calico-node-xxxxx (모든 노드에 pod)\n\n\n\u003ch2 id=\"step1\"\u003e Step 2. calicoctl 설치 \u003c/h2\u003e\n\n* 목적 : `calicoctl 설치`\n* 생성 순서: calicoctl.yaml 설치  `ex) kubectl apply -f calicoctl.yaml`\n* 비고 :\n    * kube-system 네임스페이스 사용\n    * calicoctl (1개의 pod)\n    * alias calicoctl=\"kubectl exec -i -n kube-system calicoctl /calicoctl -- \"\n\n\n## calico 장애 해결\n* 목적 : `calico에서 calico-node pod이 안뜸`\n* 해결 방법 : \n    * calicoctl get node 노드이름 -o yaml\n        * bgp:ipv4Address 확인 (노드에 인터페이스 여러개 존재하는 경우 변경 필요)\n    ```bash\n    calicoctl replace -f -\u003c\u003c EOF\n    apiVersion: projectcalico.org/v3\n    kind: Node\n    metadata:\n      name: c1-1\n    spec:\n      bgp:\n        ipv4Address: 172.22.8.106\n    EOF\n    ```\n\n## 삭제 가이드\n\n\n* 목적 : `calico 삭제`\n* 삭제 순서: calico.yaml 삭제 적용  `ex) kubectl delete -f calico.yaml`\n* 비고:\n    * iptables 룰 및 tunl0 인터페이스 등의 삭제를 위해 calico.yaml 삭제 후 노드 재부팅 필요\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftmax-cloud%2Finstall-cni","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftmax-cloud%2Finstall-cni","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftmax-cloud%2Finstall-cni/lists"}