1장. OLM 프레임워크를 사용하여 Developer Hub Operator 설치
OLM(Operator Lifecycle Manager) 프레임워크를 사용하여 GKE에 Developer Hub Operator 를 설치할 수 있습니다. 그런 다음 GKE에 Developer Hub 인스턴스를 배포할 수 있습니다.
OLM에 대한 자세한 내용은 OLM(Operator Lifecycle Manager) 설명서를 참조하십시오.
사전 요구 사항
-
registry.redhat.io에 가입했습니다. 자세한 내용은 Red Hat Container Registry Authentication 을 참조하십시오. - OLM(Operator Lifecycle Manager)이 설치되어 있습니다. 설치 및 문제 해결에 대한 자세한 내용은 How do I get Operator Lifecycle Manager를 참조하십시오.
-
kubectl을 설치했습니다. 자세한 내용은 kubetl 설치를 참조하십시오. - Google Cloud CLI를 설치했습니다. 자세한 내용은 gcloud CLI 설치를 참조하십시오.
- Google 계정에 로그인하여 GKE Autopilot 또는 GKE Standard 클러스터를 생성했습니다.
프로세스
다음 명령을 사용하여 GKE 클러스터에 연결합니다.
gcloud container clusters get-credentials <cluster-name> \1 --location=<cluster-location>2 이 명령은 GKE 클러스터를 가리키도록 Kubernetes 클라이언트를 구성합니다.
터미널에서 다음 명령을 실행하여 Operator가 설치된
rhdh-operator네임스페이스를 생성합니다.kubectl create namespace rhdh-operator다음 명령을 사용하여 풀 시크릿을 생성합니다.
kubectl -n rhdh-operator create secret docker-registry rhdh-pull-secret \ --docker-server=registry.redhat.io \ --docker-username=<user_name> \1 --docker-password=<password> \2 --docker-email=<email>3 생성된 풀 시크릿은 Red Hat Ecosystem에서 Developer Hub 이미지를 가져오는 데 사용됩니다.
Red Hat Ecosystem에서 Operator가 포함된
CatalogSource리소스를 생성합니다.CatalogSource리소스의 예cat <<EOF | kubectl -n rhdh-operator apply -f - apiVersion: operators.coreos.com/v1alpha1 kind: CatalogSource metadata: name: redhat-catalog spec: sourceType: grpc image: registry.redhat.io/redhat/redhat-operator-index:v4.17 secrets: - "rhdh-pull-secret" displayName: Red Hat Operators EOF다음과 같이
OperatorGroup리소스를 생성합니다.OperatorGroup리소스의 예cat <<EOF | kubectl apply -n rhdh-operator -f - apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: rhdh-operator-group EOF다음 코드를 사용하여
서브스크립션리소스를 생성합니다.서브스크립션리소스의 예cat <<EOF | kubectl apply -n rhdh-operator -f - apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: rhdh namespace: rhdh-operator spec: channel: fast installPlanApproval: Automatic name: rhdh source: redhat-catalog sourceNamespace: rhdh-operator startingCSV: rhdh-operator.v1.4.3 EOF다음 명령을 실행하여 생성된 Operator가 실행 중인지 확인합니다.
kubectl -n rhdh-operator get pods -wOperator Pod에
ImagePullBackOff상태가 표시되면 Operator 배포 매니페스트 내에서 이미지를 직접 가져올 수 있는 권한이 필요할 수 있습니다.작은 정보deployment.spec.template.spec.imagePullSecrets목록에 필요한 시크릿 이름을 추가하고kubectl get deployment -n rhdh-operator명령을 사용하여 배포 이름을 확인할 수 있습니다. 예를 들면 다음과 같습니다.kubectl -n rhdh-operator patch deployment \ rhdh.fast --patch '{"spec":{"template":{"spec":{"imagePullSecrets":[{"name":"rhdh-pull-secret"}]}}}}' \ --type=merge다음 단계를 사용하여 GKE에서 Developer Hub 리소스가 올바르게 시작될 수 있도록 Operator의 기본 구성을 업데이트합니다.
다음 명령을 사용하여
rhdh-operator네임스페이스에서backstage-default-configConfigMap을 편집합니다.kubectl -n rhdh-operator edit configmap backstage-default-config다음 예와 같이
db-statefulset.yaml문자열을 찾고fsGroup을spec.template.spec.securityContext에 추가합니다.db-statefulset.yamlfragmentdb-statefulset.yaml: | apiVersion: apps/v1 kind: StatefulSet --- TRUNCATED --- spec: --- TRUNCATED --- restartPolicy: Always securityContext: # You can assign any random value as fsGroup fsGroup: 2000 serviceAccount: default serviceAccountName: default --- TRUNCATED ---다음 예와 같이
deployment.yaml문자열을 찾고fsGroup을 사양에 추가합니다.deployment.yamlfragmentdeployment.yaml: | apiVersion: apps/v1 kind: Deployment --- TRUNCATED --- spec: securityContext: # You can assign any random value as fsGroup fsGroup: 3000 automountServiceAccountToken: false --- TRUNCATED ---service.yaml문자열을 찾고 다음과 같이유형을NodePort로 변경합니다.service.yaml조각service.yaml: | apiVersion: v1 kind: Service spec: # NodePort is required for the ALB to route to the Service type: NodePort --- TRUNCATED ---저장 및 종료합니다.
변경 사항이 Operator Pod에 자동으로 적용될 때까지 기다립니다.
1.1. Operator를 사용하여 GKE에 Developer Hub 인스턴스 배포 링크 복사링크가 클립보드에 복사되었습니다!
Operator를 사용하여 GKE에 Developer Hub 인스턴스를 배포할 수 있습니다.
사전 요구 사항
- 클러스터 관리자가 Red Hat Developer Hub Operator를 설치했습니다.
-
registry.redhat.io에 가입했습니다. 자세한 내용은 Red Hat Container Registry Authentication 을 참조하십시오. -
kubectl을 설치했습니다. 자세한 내용은 kubetl 설치를 참조하십시오. - 개발자 허브 인스턴스의 도메인 이름을 구성했습니다.
- VM(가상 머신)에 연결되지 않은 정적 외부 프리미엄 IPv4 글로벌 IP 주소를 예약했습니다. 자세한 내용은 새 고정 외부 IP 주소예약을 참조하십시오.
도메인 이름에 대한 DNS 레코드가 예약된 IP 주소를 가리키도록 구성되었습니다.
참고IP 주소와 같은 값이 있는
A레코드를 만들어야 합니다. 이 프로세스는 전파하는 데 최대 1시간이 걸릴 수 있습니다.
프로세스
다음 템플릿을 사용하여
app-config.yamlDeveloper Hub 구성 파일이 포함된app-config.yaml구성 맵을 생성합니다.app-config.yaml조각apiVersion: v1 kind: ConfigMap metadata: name: my-rhdh-app-config data: "app-config.yaml": | app: title: Red Hat Developer Hub baseUrl: https://<rhdh_domain_name> backend: auth: externalAccess: - type: legacy options: subject: legacy-default-config secret: "${BACKEND_SECRET}" baseUrl: https://<rhdh_domain_name> cors: origin: https://<rhdh_domain_name>다음 예와 같이 <
my_product_secrets> 시크릿을 생성하고Base64 인코딩문자열 값을 사용하여BACKEND_SECRET이라는 키를 추가합니다.apiVersion: v1 kind: Secret metadata: name: <my_product_secrets>1 stringData: # TODO: See https://backstage.io/docs/auth/service-to-service-auth/#setup BACKEND_SECRET: "xxx"- 1
- <
my_product_secrets>는 선호하는 Developer Hub 시크릿 이름입니다. 여기서 <my_product_secrets>는 개발자 허브 내에서 시크릿 구성의 식별자를 지정합니다.
중요각 Developer Hub 인스턴스에 대해 고유한
BACKEND_SECRET값을 사용해야 합니다.다음 명령을 사용하여 키를 생성할 수 있습니다.
node-p'require("crypto").randomBytes(24).toString("base64")'Red Hat Ecosystem Catalog에서 PostgreSQL 이미지를 가져올 수 있도록 Developer Hub 인스턴스가 배포되는 네임스페이스 내의 기본 서비스 계정에 이미지 가져오기 보안을 추가합니다.
kubectl patch serviceaccount default \ -p '{"imagePullSecrets": [{"name": "rhdh-pull-secret"}]}' \ -n <your_namespace>다음 템플릿을 사용하여
BackstageCR(사용자 정의 리소스) 파일을 생성합니다.사용자 정의 리소스 조각
apiVersion: rhdh.redhat.com/v1alpha3 kind: Backstage metadata: # This is the name of your Developer Hub instance name: my-rhdh spec: application: imagePullSecrets: - "rhdh-pull-secret" route: enabled: false appConfig: configMaps: - name: my-rhdh-app-config extraEnvs: secrets: - name: <my_product_secrets>1 - 1
- <
my_product_secrets>는 선호하는 Developer Hub 시크릿 이름입니다. 여기서 <my_product_secrets>는 개발자 허브 내에서 시크릿 구성의 식별자를 지정합니다.
다음 예와 같이 Ingress에 연결해야 하는
ManagedCertificate오브젝트를 생성하여 Google 관리 인증서를 설정합니다.apiVersion: networking.gke.io/v1 kind: ManagedCertificate metadata: name: <rhdh_certificate_name> spec: domains: - <rhdh_domain_name>Google 관리 인증서 설정에 대한 자세한 내용은 Google 관리 인증서 설정을 참조하십시오.
FrontendConfig오브젝트를 생성하여 HTTPS로 리디렉션하는 정책을 설정합니다. 이 정책을 Ingress에 연결해야 합니다.FrontendConfig오브젝트의 예apiVersion: networking.gke.io/v1beta1 kind: FrontendConfig metadata: name: <ingress_security_config> spec: sslPolicy: gke-ingress-ssl-policy-https redirectToHttps: enabled: trueHTTPS로 리디렉션할 정책을 설정하는 방법에 대한 자세한 내용은 HTTP를 HTTPS 리디렉션 으로 참조하십시오.
필요에 따라 이름을 사용자 지정하여 다음 템플릿을 사용하여 수신 리소스를 생성합니다.
수신 리소스 구성의 예
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: # TODO: this the name of your Developer Hub Ingress name: my-rhdh annotations: # If the class annotation is not specified it defaults to "gce". kubernetes.io/ingress.class: "gce" kubernetes.io/ingress.global-static-ip-name: <ADDRESS_NAME> networking.gke.io/managed-certificates: <rhdh_certificate_name> networking.gke.io/v1beta1.FrontendConfig: <ingress_security_config> spec: ingressClassName: gce rules: # TODO: Set your application domain name. - host: <rhdh_domain_name> http: paths: - path: / pathType: Prefix backend: service: # TODO: my-rhdh is the name of your `Backstage` custom resource. # Adjust if you changed it! name: backstage-my-rhdh port: name: http-backend
검증
-
ManagedCertificate가 프로비저닝될 때까지 기다립니다. 이 프로세스는 몇 시간이 걸릴 수 있습니다. -
Access RHDH with
https://<rhdh_domain_name>
추가 정보
TLS와 함께 Ingress를 사용하여 GKE를 설정하는 방법에 대한 자세한 내용은 Secure GKE Ingress 를 참조하십시오.