2.4. 在云中安装 Dev Spaces
在云中部署并运行 Red Hat OpenShift Dev Spaces。
先决条件
- 要在其上部署 OpenShift Dev Spaces 的 OpenShift 集群。
-
DSC
: Red Hat OpenShift Dev Spaces 的命令行工具。请参阅: 第 1.2 节 “安装 dsc 管理工具”。
2.4.1. 在云中部署 OpenShift Dev Spaces
按照下面的说明,使用 dsc
工具在云中启动 OpenShift Dev Spaces 服务器。
2.4.2. 在 Microsoft Azure 上安装和设置 Dev Spaces
Microsoft Azure 是一个云计算服务,用于通过 Microsoft 管理的数据中心构建、测试、部署和管理应用程序和服务。
按照以下说明在 Microsoft Azure 上安装并启用 OpenShift Dev Spaces。
先决条件
-
Helm
:Kubernetes 的软件包管理器。请参阅: 安装 Helm。 -
Az
: Microsoft Azure CLI 命令行工具。请参阅: 如何安装 Microsoft Azure CLI。 -
kubelogin
:凭证插件。请参阅: 如何安装 kubelogin。
2.4.2.1. 为 OpenShift Dev Spaces 安装准备 Microsoft Azure
为 OpenShift Dev Spaces 安装准备 Microsoft Azure。
流程
登录到 Microsoft Azure:
az login
创建资源组(要列出位置,请使用
az account list-locations
命令):# Resource group name ECLIPSE_CHE_RESOURCE_GROUP=eclipse-che # Azure region AZURE_REGION=centralus az group create --name $ECLIPSE_CHE_RESOURCE_GROUP --location $AZURE_REGION
创建集群管理员组:
# Azure Active Directory group name AAD_GROUP_NAME=AKSAdmins az ad group create --display-name $AAD_GROUP_NAME --mail-nickname $AAD_GROUP_NAME
将当前用户添加到 cluster admins 组中:
az ad group member add --group $AAD_GROUP_NAME \ --member-id $(az ad signed-in-user show --query id --output tsv)
创建 Microsoft Entra 集成集群:
# Azure Kubernetes Service cluster name AKS_CLUSTER_NAME=eclipse-che az aks create \ --resource-group $ECLIPSE_CHE_RESOURCE_GROUP \ --name $AKS_CLUSTER_NAME \ --enable-aad \ --aad-admin-group-object-ids $(az ad group list --query "[?displayName=='$AAD_GROUP_NAME'].id" --output tsv) \ --generate-ssh-keys
获取用户凭证来访问集群:
az aks get-credentials \ --resource-group $ECLIPSE_CHE_RESOURCE_GROUP \ --name $AKS_CLUSTER_NAME \ --admin
将
kubelogin
设置为使用 Microsoft Azure CLI:kubelogin convert-kubeconfig -l azurecli
查看集群中的 pod:
oc get pods --all-namespaces
- 验证
此时会显示处于 running 状态的所有 pod。
2.4.2.2. 在 Microsoft Azure Kubernetes Service 上安装 NGINX Ingress Controller
使用以下说明在 Microsoft Azure Kubernetes Service 上安装 NGINX Ingress Controller。
流程
安装 NGINX Ingress Controller:
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx helm repo update helm install ingress-nginx ingress-nginx/ingress-nginx \ --wait \ --create-namespace \ --namespace ingress-nginx \ --set controller.service.annotations."service\.beta\.kubernetes\.io/azure-load-balancer-health-probe-request-path"=/healthz
等待外部 IP。请注意,在显示确切的外部 IP 地址前,会显示外部 IP 的 <
pending
> 状态。oc get services ingress-nginx-controller --namespace ingress-nginx NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE ingress-nginx-controller LoadBalancer 10.0.65.52 XX.XXX.XX.XXX 80:31104/TCP,443:32552/TCP 13m
其他资源
2.4.2.3. 在 Microsoft Azure Kubernetes Service 上安装 cert-manager
了解如何在 Microsoft Azure Kubernetes Service 上安装 cert-manager。
流程
安装 cert-manager :
helm repo add jetstack https://charts.jetstack.io helm repo update helm install cert-manager jetstack/cert-manager \ --wait \ --create-namespace \ --namespace cert-manager \ --set installCRDs=true
2.4.2.4. 在 Microsoft Azure 上配置 DNS
在 Microsoft Azure 上配置 DNS。开始之前,请确保您有一个注册的域。
先决条件
- 注册的域。
流程
定义域名。
export DOMAIN_NAME=azr.my-ide.cloud
创建 DNS 区:
az network dns zone create \ --resource-group $ECLIPSE_CHE_RESOURCE_GROUP \ --name $DOMAIN_NAME
创建 DNS 记录集:
az network dns record-set a add-record \ --resource-group $ECLIPSE_CHE_RESOURCE_GROUP \ --zone-name $DOMAIN_NAME \ --record-set-name "*" \ --ipv4-address $(oc get service -n ingress-nginx ingress-nginx-controller -o=jsonpath='{.status.loadBalancer.ingress[0].ip}')
如果您使用一个注册商,如 GoDaddy,则需要在注册商中添加以下两个 DNS 记录,并将其指向入口控制器的 IP 地址:X type: A
* name: @
和 *
+ .additional 资源
2.4.2.5. 在 Microsoft Azure 上为 devspaces 创建 Let 的加密证书
按照以下说明,在 Microsoft Azure 上为 OpenShift Dev Spaces 创建 Let 的 Encrypt 证书。
流程
创建服务主体:
CERT_MANAGER_SERVICE_PRINCIPAL_NAME=cert-manager-eclipse-che CERT_MANAGER_SERVICE_PRINCIPAL_APP_ID=$(az ad sp create-for-rbac --name $CERT_MANAGER_SERVICE_PRINCIPAL_NAME --query "appId" --output tsv)
授予对 DNS 区的访问权限:
az role assignment create \ --assignee $CERT_MANAGER_SERVICE_PRINCIPAL_APP_ID \ --scope $(az network dns zone show --name $DOMAIN_NAME --resource-group $ECLIPSE_CHE_RESOURCE_GROUP --query "id" --output tsv) \ --role "DNS Zone Contributor"
创建 openshift-devspaces 命名空间:
oc create namespace openshift-devspaces
创建服务帐户 Secret:
oc create secret generic azuredns-config \ --from-literal=clientSecret=$(az ad sp create-for-rbac --name $CERT_MANAGER_SERVICE_PRINCIPAL_NAME --query "password" --output tsv) \ --namespace openshift-devspaces
创建 Issuer,并将
MY_EMAIL_ADDRESS
替换为有效的地址:oc apply -f - << EOF apiVersion: cert-manager.io/v1 kind: Issuer metadata: name: devspaces-letsencrypt namespace: openshift-devspaces spec: acme: solvers: - dns01: azureDNS: clientID: $CERT_MANAGER_SERVICE_PRINCIPAL_APP_ID clientSecretSecretRef: name: azuredns-config key: clientSecret subscriptionID: $(az account show --query "id" --output tsv) tenantID: $(az account show --query "tenantId" --output tsv) resourceGroupName: $ECLIPSE_CHE_RESOURCE_GROUP hostedZoneName: $DOMAIN_NAME email:
MY_EMAIL_ADDRESS
privateKeySecretRef: name: letsencrypt server: https://acme-v02.api.letsencrypt.org/directory EOF创建证书:
oc apply -f - << EOF apiVersion: cert-manager.io/v1 kind: Certificate metadata: name: che-tls namespace: openshift-devspaces spec: secretName: che-tls issuerRef: name: devspaces-letsencrypt kind: Issuer commonName: '$DOMAIN_NAME' dnsNames: - '$DOMAIN_NAME' - '*.$DOMAIN_NAME' usages: - server auth - digital signature - key encipherment - key agreement - data encipherment EOF
如果您使用 registrar,如 GoDaddy,则需要在注册商中复制以下 DNS 记录:* type: TXT
* name: _acme-challenge
。
+ .additional 资源
2.4.2.6. 在 Microsoft Entra ID 中注册客户端应用程序
了解如何在 Microsoft Entra ID 中注册客户端应用程序
流程
创建应用程序:
# Eclipse Che Application display name ECLIPSE_CHE_APPLICATION_DISPLAY_NAME="Eclipse Che" az ad app create \ --display-name $ECLIPSE_CHE_APPLICATION_DISPLAY_NAME \ --enable-access-token-issuance \ --required-resource-accesses '[{"resourceAccess":[{"id":"34a47c2f-cd0d-47b4-a93c-2c41130c671c","type":"Scope"}],"resourceAppId":"6dae42f8-4368-4678-94ff-3960e28e3630"},{"resourceAccess":[{"id":"e1fe6dd8-ba31-4d61-89e7-88639da4683d","type":"Scope"}],"resourceAppId":"00000003-0000-0000-c000-000000000000"}]' \ --optional-claims '{"accessToken":[{"additionalProperties":[],"essential":false,"name":"groups","source":null}]}' \ --sign-in-audience AzureADMyOrg \ --web-redirect-uris https://$DOMAIN_NAME/oauth/callback
更新应用程序组成员资格声明:
az ad app update \ --id $(az ad app list --query "[?displayName=='$ECLIPSE_CHE_APPLICATION_DISPLAY_NAME'].id" --output tsv) \ --set groupMembershipClaims=SecurityGroup
2.4.2.7. 在 Microsoft Azure Kubernetes Service 上安装 OpenShift Dev Spaces
在 Microsoft Azure Kubernetes Service 上安装 OpenShift Dev Spaces。
流程
准备 CheCluster 补丁 YAML 文件:
cat > che-cluster-patch.yaml << EOF spec: networking: auth: identityProviderURL: "https://sts.windows.net/$(az account show --query "tenantId" --output tsv)/v2.0/" identityToken: access_token oAuthClientName: $(az ad app list --query "[?displayName=='$ECLIPSE_CHE_APPLICATION_DISPLAY_NAME'].appId" --output tsv) oAuthSecret: $(az ad app credential reset --id $ECLIPSE_CHE_APPLICATION_ID --query "password" --output tsv) oAuthScope: openid email profile 6dae42f8-4368-4678-94ff-3960e28e3630/user.read gateway: deployment: containers: - env: - name: OAUTH2_PROXY_INSECURE_OIDC_ALLOW_UNVERIFIED_EMAIL value: "true" name: oauth-proxy components: cheServer: extraProperties: CHE_OIDC_AUTH__SERVER__URL: "https://sts.windows.net/$(az account show --query "tenantId" --output tsv)/v2.0/" CHE_OIDC_EMAIL__CLAIM: unique_name EOF
部署 OpenShift Dev Spaces:
chectl server:deploy \ --platform=k8s \ --che-operator-cr-patch-yaml=che-cluster-patch.yaml \ --skip-oidc-provider-check \ --skip-cert-manager \ --domain=$DOMAIN_NAME
进入 OpenShift Dev Spaces 集群实例:
$ dsc dashboard:open