Google Kubernetes Engine에 Red Hat Developer Hub 설치
Operator 또는 Helm 차트를 사용하여 GKE(Google Kubernetes Engine)에서 Red Hat Developer Hub를 실행합니다.
초록
머리말
다음 방법 중 하나를 사용하여 GKE(Google Kubernetes Engine)에 Red Hat Developer Hub를 설치할 수 있습니다.
- Red Hat Developer Hub Operator
- Red Hat Developer Hub Helm 차트
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> \ --location=<cluster-location>
gcloud container clusters get-credentials <cluster-name> \
1 --location=<cluster-location>
2 Copy to Clipboard Copied! 이 명령은 GKE 클러스터를 가리키도록 Kubernetes 클라이언트를 구성합니다.
터미널에서 다음 명령을 실행하여 Operator가 설치된
rhdh-operator
네임스페이스를 생성합니다.kubectl create namespace rhdh-operator
kubectl create namespace rhdh-operator
Copy to Clipboard Copied! 다음 명령을 사용하여 풀 시크릿을 생성합니다.
kubectl -n rhdh-operator create secret docker-registry rhdh-pull-secret \ --docker-server=registry.redhat.io \ --docker-username=<user_name> \ --docker-password=<password> \ --docker-email=<email>
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 Copy to Clipboard Copied! 생성된 풀 시크릿은 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.18 secrets: - "rhdh-pull-secret" displayName: Red Hat Operators EOF
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.18 secrets: - "rhdh-pull-secret" displayName: Red Hat Operators EOF
Copy to Clipboard Copied! 다음과 같이
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/v1 kind: OperatorGroup metadata: name: rhdh-operator-group EOF
Copy to Clipboard Copied! 다음 코드를 사용하여
서브스크립션
리소스를 생성합니다.서브스크립션
리소스의 예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.5.3 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.5.3 EOF
Copy to Clipboard Copied! 다음 명령을 실행하여 생성된 Operator가 실행 중인지 확인합니다.
kubectl -n rhdh-operator get pods -w
kubectl -n rhdh-operator get pods -w
Copy to Clipboard Copied! Operator 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
kubectl -n rhdh-operator patch deployment \ rhdh.fast --patch '{"spec":{"template":{"spec":{"imagePullSecrets":[{"name":"rhdh-pull-secret"}]}}}}' \ --type=merge
Copy to Clipboard Copied!
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.yaml
Developer 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>
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>
Copy to Clipboard Copied! 다음 예와 같이 <
my_product_secrets
> 시크릿을 생성하고Base64 인코딩
문자열 값을 사용하여BACKEND_SECRET
이라는 키를 추가합니다.apiVersion: v1 kind: Secret metadata: name: <my_product_secrets> stringData: # TODO: See https://backstage.io/docs/auth/service-to-service-auth/#setup BACKEND_SECRET: "xxx"
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"
Copy to Clipboard Copied! - 1
- <
my_product_secrets
>는 선호하는 Developer Hub 시크릿 이름입니다. 여기서 <my_product_secrets
>는 개발자 허브 내에서 시크릿 구성의 식별자를 지정합니다.
중요각 Developer Hub 인스턴스에 대해 고유한
BACKEND_SECRET
값을 사용해야 합니다.다음 명령을 사용하여 키를 생성할 수 있습니다.
node-p'require("crypto").randomBytes(24).toString("base64")'
node-p'require("crypto").randomBytes(24).toString("base64")'
Copy to Clipboard Copied! Red Hat Ecosystem Catalog에서 PostgreSQL 이미지를 가져올 수 있도록 Developer Hub 인스턴스가 배포되는 네임스페이스 내의 기본 서비스 계정에 이미지 가져오기 보안을 추가합니다.
kubectl patch serviceaccount default \ -p '{"imagePullSecrets": [{"name": "rhdh-pull-secret"}]}' \ -n <your_namespace>
kubectl patch serviceaccount default \ -p '{"imagePullSecrets": [{"name": "rhdh-pull-secret"}]}' \ -n <your_namespace>
Copy to Clipboard Copied! 다음 템플릿을 사용하여
Backstage
CR(사용자 정의 리소스) 파일을 생성합니다.사용자 정의 리소스 조각
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>
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 Copy to Clipboard Copied! - 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>
apiVersion: networking.gke.io/v1 kind: ManagedCertificate metadata: name: <rhdh_certificate_name> spec: domains: - <rhdh_domain_name>
Copy to Clipboard Copied! 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: true
apiVersion: networking.gke.io/v1beta1 kind: FrontendConfig metadata: name: <ingress_security_config> spec: sslPolicy: gke-ingress-ssl-policy-https redirectToHttps: enabled: true
Copy to Clipboard Copied! HTTPS로 리디렉션할 정책을 설정하는 방법에 대한 자세한 내용은 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
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
Copy to Clipboard Copied!
검증
-
ManagedCertificate
가 프로비저닝될 때까지 기다립니다. 이 프로세스는 몇 시간이 걸릴 수 있습니다. -
https://<rhdh_domain_name
>을 사용하여 RHDH에 액세스
추가 정보
TLS와 함께 Ingress를 사용하여 GKE를 설정하는 방법에 대한 자세한 내용은 Secure GKE Ingress 를 참조하십시오.
2장. Helm 차트를 사용하여 GKE에 개발자 허브 설치
GKE(Google Kubernetes Engine)에 Developer Hub Helm 차트를 설치할 때 GKE 에코시스템 내에서 강력한 개발자 플랫폼을 제공하는 Developer Hub 인스턴스의 배포를 오케스트레이션합니다.
사전 요구 사항
-
registry.redhat.io
에 가입했습니다. 자세한 내용은 Red Hat Container Registry Authentication 을 참조하십시오. -
kubectl
을 설치했습니다. 자세한 내용은 kubetl 설치를 참조하십시오. - Google Cloud CLI를 설치했습니다. 자세한 내용은 gcloud CLI 설치를 참조하십시오.
- Google 계정에 로그인하여 GKE Autopilot 또는 GKE Standard 클러스터를 생성했습니다.
- 개발자 허브 인스턴스의 도메인 이름을 구성했습니다.
- VM에 연결되지 않은 정적 외부 프리미엄 IPv4 글로벌 IP 주소를 예약했습니다. 자세한 내용은 새 고정 외부 IP 주소예약을 참조하십시오.
도메인 이름에 대한 DNS 레코드가 예약된 IP 주소를 가리키도록 구성되었습니다.
참고IP 주소와 같은 값이 있는
A
레코드를 만들어야 합니다. 이 프로세스는 전파하는 데 최대 1시간이 걸릴 수 있습니다.- Helm 3 또는 최신 버전을 설치했습니다. 자세한 내용은 Helm 설치를 참조하십시오.
프로세스
터미널로 이동하여 다음 명령을 실행하여 개발자 허브 차트가 포함된 Helm 차트 리포지터리를 로컬 Helm 레지스트리에 추가합니다.
helm repo add openshift-helm-charts https://charts.openshift.io/
helm repo add openshift-helm-charts https://charts.openshift.io/
Copy to Clipboard Copied! 다음 명령을 사용하여 풀 시크릿을 생성합니다.
kubectl -n <your-namespace> create secret docker-registry rhdh-pull-secret \ --docker-server=registry.redhat.io \ --docker-username=<user_name> \ --docker-password=<password> \ --docker-email=<email>
kubectl -n <your-namespace> create secret docker-registry rhdh-pull-secret \
1 --docker-server=registry.redhat.io \ --docker-username=<user_name> \
2 --docker-password=<password> \
3 --docker-email=<email>
4 Copy to Clipboard Copied! 생성된 풀 시크릿은 Red Hat Ecosystem에서 Developer Hub 이미지를 가져오는 데 사용됩니다.
수신에 연결해야 하는
ManagedCertificate
오브젝트를 생성하여 Google 관리 인증서를 설정합니다.ManagedCertificate
오브젝트를 Ingress에 연결하는 예apiVersion: networking.gke.io/v1 kind: ManagedCertificate metadata: name: <rhdh_certificate_name> spec: domains: - <rhdh_domain_name>
apiVersion: networking.gke.io/v1 kind: ManagedCertificate metadata: name: <rhdh_certificate_name> spec: domains: - <rhdh_domain_name>
Copy to Clipboard Copied! Google 관리 인증서 설정에 대한 자세한 내용은 Google 관리 인증서 설정을 참조하십시오.
FrontendConfig
오브젝트를 생성하여 HTTPS로 리디렉션하는 정책을 설정합니다. 이 정책을 Ingress에 연결해야 합니다.FrontendConfig
오브젝트를 Ingress에 연결하는 예apiVersion: networking.gke.io/v1beta1 kind: FrontendConfig metadata: name: <ingress_security_config> spec: sslPolicy: gke-ingress-ssl-policy-https redirectToHttps: enabled: true
apiVersion: networking.gke.io/v1beta1 kind: FrontendConfig metadata: name: <ingress_security_config> spec: sslPolicy: gke-ingress-ssl-policy-https redirectToHttps: enabled: true
Copy to Clipboard Copied! HTTPS로 리디렉션할 정책을 설정하는 방법에 대한 자세한 내용은 HTTP를 HTTPS 리디렉션 으로 참조하십시오.
다음 템플릿을 사용하여
values.yaml
이라는 파일을 생성합니다.values.yaml
파일 예global: host: <rhdh_domain_name> route: enabled: false upstream: service: type: NodePort ingress: enabled: true annotations: 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> className: gce backstage: image: pullSecrets: - rhdh-pull-secret podSecurityContext: fsGroup: 2000 postgresql: image: pullSecrets: - rhdh-pull-secret primary: podSecurityContext: enabled: true fsGroup: 3000 volumePermissions: enabled: true
global: host: <rhdh_domain_name> route: enabled: false upstream: service: type: NodePort ingress: enabled: true annotations: 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> className: gce backstage: image: pullSecrets: - rhdh-pull-secret podSecurityContext: fsGroup: 2000 postgresql: image: pullSecrets: - rhdh-pull-secret primary: podSecurityContext: enabled: true fsGroup: 3000 volumePermissions: enabled: true
Copy to Clipboard Copied! 터미널에서 다음 명령을 실행하여 최신 버전의 Helm 차트 및
values.yaml
파일을 사용하여 개발자 허브를 배포합니다.helm -n <your_namespace> install -f values.yaml <your_deploy_name> \ openshift-helm-charts/redhat-developer-hub \ --version 1.5.3
helm -n <your_namespace> install -f values.yaml <your_deploy_name> \ openshift-helm-charts/redhat-developer-hub \ --version 1.5.3
Copy to Clipboard Copied! 최신 Helm 차트 버전의 경우 이 Helm 차트 리포지터리를 참조하십시오.
검증
배포가 완료되었는지 확인합니다.
kubectl get deploy <you_deploy_name>-developer-hub -n <your_namespace>
kubectl get deploy <you_deploy_name>-developer-hub -n <your_namespace>
Copy to Clipboard Copied! 서비스와 Ingress가 생성되었는지 확인합니다.
kubectl get service -n <your_namespace> kubectl get ingress -n <your_namespace>
kubectl get service -n <your_namespace> kubectl get ingress -n <your_namespace>
Copy to Clipboard Copied! 참고ManagedCertificate
가 프로비저닝될 때까지 기다립니다. 이 프로세스는 몇 시간이 걸릴 수 있습니다.-
https://<rhdh_domain_name
>을 사용하여 RHDH에 액세스 배포를 업그레이드하려면 다음 명령을 사용하십시오.
helm -n <your_namespace> upgrade -f values.yaml <your_deploy_name> openshift-helm-charts/redhat-developer-hub --version <UPGRADE_CHART_VERSION>
helm -n <your_namespace> upgrade -f values.yaml <your_deploy_name> openshift-helm-charts/redhat-developer-hub --version <UPGRADE_CHART_VERSION>
Copy to Clipboard Copied! 배포를 삭제하려면 다음 명령을 사용하십시오.
helm -n <your_namespace> delete <your_deploy_name>
helm -n <your_namespace> delete <your_deploy_name>
Copy to Clipboard Copied!