TheKoguryo's 기술 블로그

 Version 2023.11.20

7.1 Kubernetes 클러스터에 Verrazzano 설치하기

쿠버네티스 클러스터 준비

Verrazzano는 Kubernetes Operator 방식을 사용하여 쿠버네티스 클러스터에 설치하는 방식입니다. 즉 설치할 쿠버네티스 클러스터가 필요합니다. 여기서는 OKE 클러스터 기준으로 진행합니다.

Container Engine for Kubernetes (OKE) 클러스터 준비

Quick Create 모드로 OKE 클러스터를 기본 설정으로 생성합니다.

  • Verrazzano 상의 모든 컴포넌트와 예제 애플리케이션을 배포하기 위해 충분한 용량의 환경을 준비합니다.
    • Shape: VM.Standard2.4 이상 또는 VM.Standard.E2.4 이상
    • Number of nodes: 3개 이상
    • OKE 버전: 1.19
      • 1.20, 1.21에서는 FluentD 파서 이슈로 Kibana 동작을 위한 추가 작업이 필요합니다.

Verrazzano 설치

  1. Cloud Shell 또는 작업환경에서 kubectl로 생성한 OKE 클러스터에 접속합니다.
Verrazzano platform operator 설치
  1. Verrazzano platform operator 설치

    kubectl apply -f https://github.com/verrazzano/verrazzano/releases/download/v1.1.0/operator.yaml
    
  2. 설치 완료될때 까지 기다립니다.

    kubectl -n verrazzano-install rollout status deployment/verrazzano-platform-operator
    
  3. successfully rolled out가 뜨고 설치가 잘 됐는지 확인합니다.

    kubectl -n verrazzano-install get pods
    
Verrazzano 설치 - OCI DNS & Let’s Encrypt 사용

설치시 dev, prod, managed-cluster 프로파일 중에 고를 수 있습니다. 여기서는 dev 프로파일을 사용합니다. 자세한 사항은 설치 프로파일 페이지를 참고하세요. 기본 프로파일로 설치하면 Self-Signed 인증서와 무료 와일드 카드 도메인(nip.io, sslip.io)을 사용하게 됩니다. 원하는 도메인과 인증서를 사용하기 위해서 OCI DNS와 Let’s Encrypt를 사용하는 방법을 확인해 봅니다.

참고

OCI DNS Zone 생성

소유하고 있는 도메인을 OCI DNS에 Zone으로 등록합니다.

OCI API Secret 생성

대상 쿠버네티스 클러스터에 API Private 정보를 Secret 정보로 등록합니다. 여기서는 OCI CLI가 이미 설정된 경우는 가정해 Verrazzano helper script를 통해 secret을 만듭니다.

  1. helper script 다운로드

    • 홈이 아닌경우 실행시 Hang이 걸리는 것 같으니 홈에서 실행합니다.
    cd ~
    curl \
        -o ./create_oci_config_secret.sh \
        https://raw.githubusercontent.com/verrazzano/verrazzano/v1.1.0/platform-operator/scripts/install/create_oci_config_secret.sh
    
  2. KUBECONFIG 환경변수 설정 및 스크립트 실행

    chmod +x create_oci_config_secret.sh
    export KUBECONFIG=~/.kube/config
    
    ./create_oci_config_secret.sh
    
  3. 실행 예시 및 결과 확인

    [opc@bastion-host ~]$ chmod +x create_oci_config_secret.sh
    [opc@bastion-host ~]$ export KUBECONFIG=~/.kube/config
    [opc@bastion-host ~]$
    [opc@bastion-host ~]$ ./create_oci_config_secret.sh
    secret/oci created
    [opc@bastion-host ~]$ kubectl get secret oci -n verrazzano-install
    NAME   TYPE     DATA   AGE
    oci    Opaque   1      35s
    [opc@bastion-host ~]$ kubectl get secret oci -o jsonpath="{.data['oci\.yaml']}" -n verrazzano-install | base64 -d
    auth:
      region: ap-seoul-1
      tenancy: ocid1.tenancy.oc1..aaaaaaaa~~~
      user: ocid1.user.oc1..aaaaaaaa~~~
      key: |
        -----BEGIN PRIVATE KEY-----
        MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCbKoBbV+xIDgeA
        ...
        K2jAF6UJZ/+BBKkHRXHSxoI=
        -----END PRIVATE KEY-----
      fingerprint: 99:c9:87:~~~
    
Verrazzano 설치
  1. 설치 yaml 샘플 다운로드

    curl \
        -o ./install-oci.yaml \
        https://raw.githubusercontent.com/verrazzano/verrazzano/release-1.1/platform-operator/config/samples/install-oci.yaml
    
  2. install-oci.yaml 파일 업데이트

    • spec.environmentName: 설치된 환경에 대한 이름. myenv이고, zonename이 example.com인 경우 ingress 도메인이 myenv.example.com로 됨.
    • spec.components.dns.oci.ociConfigSecret: oci, 앞서 생성한 secret name
    • spec.components.dns.oci.dnsZoneCompartmentOCID: OCI DNS Zone으로 동록한 Zone이 있는 Compartment의 OCID
    • spec.components.dns.oci.dnsZoneOCID: OCI DNS Zone으로 동록한 Zone의 OCID
    • spec.components.dns.oci.dnsZoneName: OCI DNS Zone으로 동록한 Zone의 이름, 예) example.com
    apiVersion: install.verrazzano.io/v1alpha1
    kind: Verrazzano
    metadata:
      name: my-verrazzano
    spec:
      environmentName: myenv
      profile: dev
      components:
        certManager:
          certificate:
            acme:
              provider: letsEncrypt
              emailAddress: thekoguryo@gmail.com
              environment: staging         
        dns:
          oci:
            ociConfigSecret: oci
            dnsZoneCompartmentOCID: ocid1.compartment.oc1..aaaaaaaa~~~
            dnsZoneOCID: ocid1.dns-zone.oc1..7974~~~
            dnsZoneName: thekoguryo.ml
        ingress:
          type: LoadBalancer
    
  3. install-oci.yaml 배포

    kubectl apply -f install-oci.yaml
    
  4. 설치 완료 확인

    kubectl wait \
        --timeout=20m \
        --for=condition=InstallComplete verrazzano/my-verrazzano
    
  5. 로그 확인

    kubectl logs -n verrazzano-install \
        -f $(kubectl get pod \
        -n verrazzano-install \
        -l app=verrazzano-platform-operator \
        -o jsonpath="{.items[0].metadata.name}") | grep '"operation":"install"'
    
  6. 설치시 추가 확인

    • OCI Trial로 인한 자원 부족 문제인지도 확인합니다.
    kubectl get events --sort-by=.metadata.creationTimestamp -A
    

Verrazzano 설치 정보 확인

  1. Console 주소 확인

    kubectl get verrazzano my-verrazzano -o yaml
    
  2. 결과 예시

      status:
    ...
        instance:
          consoleUrl: https://verrazzano.myenv.thekoguryo.ml
          elasticUrl: https://elasticsearch.vmi.system.myenv.thekoguryo.ml
          grafanaUrl: https://grafana.vmi.system.myenv.thekoguryo.ml
          keyCloakUrl: https://keycloak.myenv.thekoguryo.ml
          kialiUrl: https://kiali.vmi.system.myenv.thekoguryo.ml
          kibanaUrl: https://kibana.vmi.system.myenv.thekoguryo.ml
          prometheusUrl: https://prometheus.vmi.system.myenv.thekoguryo.ml
          rancherUrl: https://rancher.myenv.thekoguryo.ml
        state: Ready
        version: 1.1.0
    
Verrazzano 유저 암호 변경
KeyCloak에서 암호 변경
  1. Verrazzano 관리자 유저(유저명: verrazzano)는 KeyCloak을 통해 관리되며 Single Sign-On(SSO)이 설정되어 있어, Verrazzano Console, Elasticsearch, Grafana, KeyCloak, Kiali, Kibana, Prometheus의 사용자를 KeyCloak을 통해 관리합니다.

  2. verrazzano 유저의 초기 난수 암호는 kubernetes에서 확인이 가능하나, KeyCloak에서 변경 할 수 있습니다.

  3. KeyCloack(예시, https://keycloak.myenv.thekoguryo.ml)에 접속하여 Administration Console로 이동합니다.

  4. KeyCloak Admin으로 로그인합니다.

    • KeyCloak admin user: keycloakadmin

    • KeyCloak admin password: 다음 명령으로 확인

      kubectl get secret \
          --namespace keycloak keycloak-http \
          -o jsonpath={.data.password} | base64 \
          --decode; echo
      
  5. 왼쪽 메뉴에서 Manage > Users 로 이동합니다.

  6. View all users를 클릭하여 verrazzano 유저를 찾아, ID를 클릭합니다.

  7. 암호 변경을 위해 Credentials 탭을 클릭합니다.

  8. TemporaryOFF로 하고, 새 암호를 입력하고, Reset Password를 클릭합니다.

    image-20211227145216154

  9. 팝업이 뜨면 다시한번 Reset Password를 클릭합니다.

Kubernetes Secret에 반영
  1. 새 암호를 base64로 인코딩합니다.

    예)

    echo -n 'MyNewPwd' | base64
    
  2. verrazzano가 설치된 kubernetes의 secret을 변경합니다.

    kubectl edit secret verrazzano -n verrazzano-system
    
콘솔 로그인
  1. Verrazzano Console에 로그인합니다.

    예) https://verrazzano.myenv.thekoguryo.ml

  2. System Telemetry 영역에 있는 툴은 SSO 구성이 되어 해당 링크로 verrazzano 유저로 접속할 수 있습니다.

    • Kibana: 로그 모니터링
    • Grafana: 메트릭 모니터링
    • Promethues: 메트릭 수집
    • Elasticsearch: 로그 수집
    • Kiali: istio 서비스 메쉬 모니터링

    image-20211228190921064

  3. KeyCloak: 유저 관리

    • Admin 유저(KeyCloak Admin) 접속은 앞서와 동일합니다.
    • 해당 링크를 클릭하면 KeyCloak 일반유저인 verrazzano 유저로 로그인 가능합니다.
  4. Rancher: Kubernetes 모니터링

    • 화면에 보이는 URL로 접속합니다.

    • User: admin

    • Password: 다음 명령으로 확인

      kubectl get secret \
          --namespace cattle-system rancher-admin-secret \
          -o jsonpath={.data.password} | base64 \
          --decode; echo
      


이 글은 개인으로서, 개인의 시간을 할애하여 작성된 글입니다. 글의 내용에 오류가 있을 수 있으며, 글 속의 의견은 개인적인 의견입니다.

Last updated on 28 Dec 2021