OpenShift 4 클러스터에 Calico 설치
셀프 관리형 OpenShift 4 클러스터에 오퍼레이터 기반 설치 흐름으로 Calico Open Source를 설치하는 방법을 안내해요. OpenShift 설치 프로그램 진행 중에 Calico 매니페스트를 함께 배치하는 방식이에요.
출처: 문서
본문
큰 그림
OpenShift 4 클러스터에 Calico를 설치해요.
가치
Calico 설치를 위해 OpenShift 문서의 해당 단계를 보완해요.
방법
시작하기 전에
-
환경이 Calico 시스템 요구 사항을 충족하는지 확인해요.
-
RedHat 계정이 있는지 확인해요. OpenShift 클러스터를 프로비저닝하는 데 필요한 pull secret을 받으려면 RedHat 계정이 필요해요. OpenShift 설치 프로그램은 일부 AWS 리전만 지원한다는 점도 참고하세요.
-
AWS에 설치한다면 다음을 준비했는지 확인해요:
- OpenShift 4에 적합한 AWS 계정 구성
- AWS 자격 증명 설정
- 로컬 SSH 프라이빗 키 생성 후 ssh-agent에 추가
OpenShift 설치 프로그램용 구성 파일 만들기
먼저 설치용 스테이징 디렉터리를 만들어요. 이 디렉터리에는 OpenShift 설치 프로그램이 만드는 구성 파일과 클러스터 상태 파일이 담겨요:
mkdir openshift-tigera-install && cd openshift-tigera-install
이제 OpenShift 설치 프로그램을 실행해 기본 구성 파일을 만들어요:
openshift-install create install-config
SECONDARY: 설치 프로그램과 플랫폼에 필요한 구성 변경에 대한 자세한 내용은 OpenShift 설치 프로그램 문서를 참고하세요.
설치 프로그램이 끝나면 스테이징 디렉터리에 install-config.yaml 구성 파일이 담겨 있어요.
구성 파일을 Calico를 사용하도록 업데이트하기
OpenShift 네트워킹을 Calico로 바꾸고, AWS 인스턴스 유형을 시스템 요구 사항에 맞게 업데이트해요:
sed -i 's/\(OpenShiftSDN\|OVNKubernetes\)/Calico/' install-config.yaml
설치 매니페스트 생성하기
이제 구성 파일을 사용해 Kubernetes 매니페스트를 생성해요:
openshift-install create manifests
SECONDARY: AWS上的 OpenShift v4.16 이상에서는 OpenShift cluster-api 매니페스트를 편집해 BGP, typha, IP-in-IP 캡슐화 트래픽을 허용하도록 AWS 보안 그룹을 구성해야 해요.
cluster-api/02_infra-cluster.yaml파일에서spec.network.cni.cniIngressRules를 편집해 다음 규칙을 추가해요:cniIngressRules: (...) - description: BGP (calico) fromPort: 179 protocol: tcp toPort: 179 - description: IP-in-IP (calico) fromPort: -1 protocol: "4" toPort: -1 - description: Typha (calico) fromPort: 5473 protocol: tcp toPort: 5473
OpenShift용 Calico 매니페스트를 내려받아 생성된 매니페스트 디렉터리에 추가해요:
mkdir calico
wget -qO- https://github.com/projectcalico/calico/releases/download/v3.33.0/ocp.tgz | \
tar xvz --strip-components=1 -C calico
cp calico/* manifests/
데이터 플레인 선택 및 구성
OpenShift용 Calico 매니페스트는 eBPF 데이터 플레인을 구성하고 설치할 준비가 되어 있어요. 아래 eBPF (권장) 탭의 단계가 과정을 안내해요. 다른 데이터 플레인을 구성하는 단계가 필요하면 다른 탭을 선택해도 돼요.
Tab: eBPF (권장)
eBPF 데이터 플레인를 구성하려면:
-
manifests/01-configmap-kubernetes-services-endpoint.yaml파일에서KUBERNETES_SERVICE_HOST속성을 설정해요. 다음 명령은manifests/cluster-infrastructure-02-config.yml파일에서apiServerURL을 추출해 설정해요.API_SERVER_URL=$(cat manifests/cluster-infrastructure-02-config.yml | sed -n 's/.*apiServerInternalURI: https:\/\/\(api-int\.[^:]*\).*/\1/p') && \ sed -i "s|^\([^:]*KUBERNETES_SERVICE_HOST: \).*\$|\1\"$API_SERVER_URL\"|" manifests/01-configmap-kubernetes-services-endpoint.yaml -
apiserver DNS를 확인할 수 있도록
manifests/02-tigera-operator.yaml파일에 다음spec.template.spec.dnsConfig.nameservers블록을 포함해요. AWS 클러스터의 DNS 서버 주소는 169.254.169.253이에요.spec: template: spec: (...) dnsConfig: nameservers: - 169.254.169.253 # AWS DNS server
Tab: Iptables
iptables로 Calico를 설치하려면:
-
manifests/03-cr-installation.yaml파일에서linuxDataplane을Iptables로 설정해요. -
manifests/cluster-network-operator.yaml과manifests/01-configmap-kubernetes-services-endpoint.yaml파일을 제거해요.
다음 명령으로 실행할 수 있어요:
sed -i 's/^\(\s*linuxDataplane:\s*\)BPF/\1Iptables/' manifests/03-cr-installation.yaml && \
rm -f manifests/cluster-network-operator.yaml && \
rm -f manifests/01-configmap-kubernetes-services-endpoint.yaml
(선택) 추가 구성 제공하기
설치 시점에 Calico에 추가 구성을 제공하고 싶을 수 있어요. 예를 들어 BGP 구성이나 피어가 그렇죠. 원하는 Calico 리소스를 담은 Kubernetes ConfigMap을 사용해 설치의 일부로 구성을 설정할 수 있어요. 추가 구성이 필요 없다면 이 절은 건너뛰어도 돼요.
설치 중 Calico 리소스를 포함하려면 manifests/02-configmap-calico-resources.yaml을 편집해 자신만의 구성을 추가해요.
SECONDARY: Calico 리소스가 담긴 디렉터리가 있다면 다음 명령으로 파일을 만들 수 있어요:
oc create configmap -n tigera-operator calico-resources \ --from-file=<resource-directory> --dry-run -o yaml \ manifests/02-configmap-calico-resources.yaml최신 버전의 oc에서는 실제로 사용하지 않더라도 kubeconfig가 구성되어 있거나
--server='127.0.0.1:443'을 추가해야 해요.
SECONDARY:
calico-resourcesconfigmap을 제공했는데 tigera-operator 파드가Init:CrashLoopBackOff상태로 뜨지 않는다면,oc logs -n tigera-operator -l k8s-app=tigera-operator -c create-initial-resources로 init 컨테이너의 출력을 확인해요.
클러스터 만들기
다음 명령으로 클러스터 생성을 시작하고 완료될 때까지 기다려요.
openshift-install create cluster
위 명령이 끝나면 다음 명령으로 컴포넌트를 사용할 수 있는지 확인해 Calico가 설치됐는지 검증할 수 있어요.
oc get tigerastatus
SECONDARY: 더 많은 정보를 얻으려면 위 명령에
-o yaml을 추가하세요.
(선택) OLM(Operator Lifecycle Manager)과 통합하기
OpenShift Container Platform에서 Operator Lifecycle Manager는 클러스터 관리자가 클러스터의 오퍼레이터 수명 주기를 관리하도록 돕는 도구예요. Calico 오퍼레이터를 OLM으로 관리하면 관리자는 한 곳에서 오퍼레이터를 관리할 수 있어요.
실행 중인 Calico 오퍼레이터를 OLM에 등록하려면 먼저 오퍼레이터용 OperatorGroup을 만들어야 해요:
oc apply -f - <<EOF
apiVersion: operators.coreos.com/v1
kind: OperatorGroup
metadata:
name: tigera-operator
namespace: tigera-operator
spec:
targetNamespaces:
- tigera-operator
EOF
다음으로 오퍼레이터에 대한 Subscription을 만들어요. 오퍼레이터 패키지를 구독하면 Calico 오퍼레이터가 OLM의 관리를 받게 돼요.
oc apply -f - <<EOF
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
name: tigera-operator
namespace: tigera-operator
spec:
channel: release-v1.44
installPlanApproval: Manual
name: tigera-operator
source: certified-operators
sourceNamespace: openshift-marketplace
startingCSV: tigera-operator.v1.44.0
EOF
마지막으로 OpenShift 콘솔에 로그인해 Installed Operators 섹션으로 이동해 오퍼레이터의 Install Plan을 승인해요.
SECONDARY: 이로 인해 오퍼레이터 배포와 그 리소스 전체(파드, deployment 등)가 다시 만들어질 수 있어요.
OpenShift 콘솔은 오퍼레이터 설치를 편집하거나 오퍼레이터 상태를 보는 등의 작업을 할 수 있는 인터페이스를 제공해요.
다음 단계
권장 - 네트워킹
- 캡슐화 없이 노드 간 풀 메시(full-mesh) 피어링을 사용하는 기본 BGP 네트워킹을 쓴다면, BGP 피어링 구성으로 파드 간 트래픽을 흐르게 해보세요.
- 네트워킹 옵션이 확실하지 않거나 캡슐화(오버레이 네트워킹)를 적용하고 싶다면 가장 좋은 네트워킹 옵션 정하기를 참고하세요.
권장 - 보안
- Calico 컴포넌트 통신 보호하기
- 호스트에 Calico를 설치해 호스트 보호하기
- Calico 네트워크 정책으로 파드 보호하기
- Istio 서비스 메시와 함께 Calico를 사용한다면 여기서 시작하세요: 애플리케이션 계층 정책 활성화
더 알아보기 (Learn more)
OpenShift 설치 프로그램 흐름 안에서 Calico를 선택하려면 install-config.yaml을 수정하고 데이터 플레인 탭(eBPF 또는 Iptables)을 골라 매니페스트를 조정해요. AWS에서는 BGP·IP-in-IP·typha 포트를 여는 보안 그룹 규칙도 잊지 마세요.