패키지 매니저로 바이너리 설치하기
패키지 매니저를 사용하면 클러스터에 속하지 않은 호스트에도 Calico를 손쉽게 설치할 수 있어요. apt나 yum 같은 Linux 패키지 매니저로 Calico 바이너리를 받아 네트워크 정책을 담당하는 Felix를 띄우는 방법을 소개해요. 클러스터가 아닌 호스트에 정책만 적용하고 싶을 때 딱 맞는 설치 방식이에요.
출처: 문서
본문
큰 그림
패키지 매니저를 사용해 클러스터에 속하지 않은 호스트에 Calico를 설치해요.
가치
패키지로 제공되는 Calico 바이너리는 설치와 업그레이드가 쉬워요. 이 방식은 init 시스템을 자동으로 구성해 Felix가 계속 실행되도록 유지해 줘요.
시작하기 전에
- Calico 데이터스토어가 떠 있고 호스트에서 접근 가능한지 확인해요.
- 호스트가 최소 시스템 요구 사항을 충족하는지 확인해요.
- 시스템이 Ubuntu 계열이나 RedHat 계열이 아니라면 다른 설치 방법을 선택해야 해요.
- 네트워킹 기능과 함께 Calico를 설치하려면(클러스터 워크로드와 통신할 수 있도록) 컨테이너 설치 방식을 선택하는 게 좋아요.
- Kubernetes 데이터스토어라면
kubectl을 설치하고, etcd3 데이터스토어라면 calicoctl 설치 및 구성을 진행해요.
방법
이 가이드는 네트워크 정책을 담당하는 Calico 데몬인 Felix를 설치하는 방법을 다뤄요.
1단계: 바이너리 설치하기
PPA 사용 조건: Ubuntu 14.04 또는 16.04
sudo add-apt-repository ppa:project-calico/calico-3.33
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install calico-felix
RPM 사용 조건: RedHat 7 계열 배포판
cat > /etc/yum.repos.d/calico.repo <<EOF
[calico]
name=Calico Repository
baseurl=https://binaries.projectcalico.org/rpm/calico-3.33/
enabled=1
skip_if_unavailable=0
gpgcheck=1
gpgkey=https://binaries.projectcalico.org/rpm/calico-3.33/key
priority=97
EOF
yum install calico-felix
데이터베이스를 초기화하기 전까지 Felix는 "wait-for-ready" 상태라는 로그를 주기적으로 남겨요. 로그 파일의 기본 위치는 /var/log/calico/felix.log예요.
2단계: 데이터스토어 연결 구성하기
다음 지침과 샘플 파일을 사용해 호스트에서 Calico를 시작할 환경 변수를 정의해요. 더 많은 도움이 필요하면 Felix 구성 참조를 확인하세요.
Tab: Kubernetes 데이터스토어
Kubernetes 데이터스토어(기본값)라면 다음을 설정해요.
| 변수 | 구성 안내 |
|---|---|
| FELIX_DATASTORETYPE | kubernetes로 설정 |
| KUBECONFIG | Kubernetes API 서버에 접근하기 위한 kubeconfig 파일 경로 |
Tab: etcd 데이터스토어
etcdv3 데이터스토어라면 다음을 설정해요.
| 변수 | 구성 안내 |
|---|---|
| FELIX_DATASTORETYPE | etcdv3로 설정 |
| FELIX_ETCDENDPOINTS | 쉼표로 구분된 etcdv3 클러스터 URL 목록. 예: https://calico-datastore.example.com:2379 |
| FELIX_ETCDCAFILE | etcd의 서버 인증서를 검증할 CA 인증서 경로. TLS를 쓰고 공용 CA를 쓰지 않는다면 필수 |
| FELIX_ETCDCERTFILE FELIX_ETCDKEYFILE | 활성화한 경우, etcd 클러스터에 클라이언트 인증할 때 쓰는 인증서와 키 경로 |
Tab: 어느 데이터스토어든 공통
어느 데이터스토어든 공통으로 다음을 설정해요.
| 변수 | 구성 안내 |
|---|---|
| CALICO_NODENAME | 노드를 식별하는 값이에요. 값을 지정하지 않으면 컴퓨트 서버 호스트명이 Calico 노드 식별에 사용돼요. |
| CALICO_IP or CALICO_IP6 | 둘 다 지정하지 않으면 Calico는 이 노드의 다음 홉(next hop) IP 주소로 현재 구성된 값을 사용해요. 이 값은 Node 리소스를 통해 구성할 수 있어요. 다음 홉 주소가 구성되어 있지 않으면 Calico가 호스트 인터페이스를 조회해 IPv4 다음 홉 주소를 자동으로 정하고(Node 리소스에 이 값을 구성해요). CALICO_IP를 autodetect로 설정하면 노드가 시작될 때마다 IP 주소 자동 탐지를 강제할 수 있어요. 이 환경 변수로 IP 주소를 설정하면 Node 리소스에 현재 설정된 값을 다시 구성해요. |
| CALICO_AS | 지정하지 않으면 Calico는 노드 BGP 클라이언트의 AS Number로 현재 구성된 값을 사용해요. 이 값 역시 Node 리소스로 구성할 수 있어요. Node 리소스 값이 없다면 Calico는 전역 기본값에서 AS Number를 상속해요. 이 환경 변수로 값을 설정하면 Node 리소스에 현재 설정된 값을 다시 구성해요. |
| NO_DEFAULT_POOLS | 기본 풀이 없을 때 Calico가 기본 풀을 만들지 않도록 하려면 true로 설정해요. 풀은 워크로드 엔드포인트에 사용되며, 클러스터 외부 호스트에는 필요하지 않아요. |
| CALICO_NETWORKING_BACKEND | 사용할 네트워킹 백엔드예요. bird 모드에서는 Calico가 BIRD BGP 데몬으로 BGP 네트워킹을 제공하고, VXLAN 네트워킹도 사용할 수 있어요. vxlan 모드에서는 VXLAN 네트워킹만 제공되고 BIRD와 BGP는 비활성화돼요. 정책 전용으로 Calico를 운영하려면 none으로 설정해요. |
샘플 EnvironmentFile - /etc/calico/calico.env로 저장해요.
FELIX_DATASTORETYPE=etcdv3
FELIX_ETCDENDPOINTS=https://calico-datastore.example.com:2379
FELIX_ETCDCAFILE="/pki/ca.pem"
FELIX_ETCDCERTFILE="/pki/client-cert.pem"
FELIX_ETCDKEYFILE="/pki/client-key.pem"
포함된 init 시스템 유닛을 수정해 EnvironmentFile을 추가해요. 예를 들어 systemd라면 calico-felix 유닛의 [Service] 섹션에 다음 줄을 추가해요.
EnvironmentFile=/etc/calico/calico.env
3단계: 데이터스토어 초기화하기
Felix가 실행되는 각 호스트마다 node 리소스를 구성해야 해요. 이렇게 하면 첫 번째 node 리소스를 만든 후에 데이터베이스가 초기화돼요. Calico/BGP 연동이 포함되지 않은 배포라면 node 리소스 명세에 노드 이름만 있으면 돼요. 대부분의 배포에서 이 이름은 호스트명과 같아요.
calicoctl create -f - <<EOF
- apiVersion: projectcalico.org/v3
kind: Node
metadata:
name: <node name or hostname>
EOF
Felix 로그가 wait-for-ready 상태를 알리는 주기적 메시지에서 초기화 메시지의 연속적인 흐름으로 바뀌는 걸 확인할 수 있을 거예요.
더 알아보기 (Learn more)
설치 후 Felix 로그를 확인하면 데이터스토어 초기화가 잘 됐는지 바로 알 수 있어요. 환경 변수의 자세한 의미는 Felix 구성 참조에서 더 깊이 살펴볼 수 있어요.