본문으로 바로가기 본문 바로가기
WIKI 기술 지식 베이스

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 데이터 플레인를 구성하려면:

  1. 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
    
  2. 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를 설치하려면:

  1. manifests/03-cr-installation.yaml 파일에서 linuxDataplane을 Iptables로 설정해요.

  2. 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-resources configmap을 제공했는데 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 피어링 구성으로 파드 간 트래픽을 흐르게 해보세요.
  • 네트워킹 옵션이 확실하지 않거나 캡슐화(오버레이 네트워킹)를 적용하고 싶다면 가장 좋은 네트워킹 옵션 정하기를 참고하세요.

권장 - 보안

더 알아보기 (Learn more)

OpenShift 설치 프로그램 흐름 안에서 Calico를 선택하려면 install-config.yaml을 수정하고 데이터 플레인 탭(eBPF 또는 Iptables)을 골라 매니페스트를 조정해요. AWS에서는 BGP·IP-in-IP·typha 포트를 여는 보안 그룹 규칙도 잊지 마세요.