2.4. 在云中安装 Dev Spaces


在云中部署并运行 Red Hat OpenShift Dev Spaces。

先决条件

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。

先决条件

2.4.2.1. 为 OpenShift Dev Spaces 安装准备 Microsoft Azure

为 OpenShift Dev Spaces 安装准备 Microsoft Azure。

流程

  1. 登录到 Microsoft Azure:

    az login
  2. 创建资源组(要列出位置,请使用 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
  3. 创建集群管理员组:

    # Azure Active Directory group name
    AAD_GROUP_NAME=AKSAdmins
    
    az ad group create --display-name $AAD_GROUP_NAME --mail-nickname $AAD_GROUP_NAME
  4. 将当前用户添加到 cluster admins 组中:

    az ad group member add --group $AAD_GROUP_NAME \
      --member-id $(az ad signed-in-user show --query id --output tsv)
  5. 创建 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
  6. 获取用户凭证来访问集群:

    az aks get-credentials \
      --resource-group $ECLIPSE_CHE_RESOURCE_GROUP \
      --name $AKS_CLUSTER_NAME \
      --admin
  7. kubelogin 设置为使用 Microsoft Azure CLI:

    kubelogin convert-kubeconfig -l azurecli
  8. 查看集群中的 pod:

    oc get pods --all-namespaces
  9. 验证

此时会显示处于 running 状态的所有 pod。

2.4.2.2. 在 Microsoft Azure Kubernetes Service 上安装 NGINX Ingress Controller

使用以下说明在 Microsoft Azure Kubernetes Service 上安装 NGINX Ingress Controller。

流程

  1. 安装 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
  2. 等待外部 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。

流程

  1. 安装 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。开始之前,请确保您有一个注册的域。

先决条件

  • 注册的域。

流程

  1. 定义域名。

    export DOMAIN_NAME=azr.my-ide.cloud
  2. 创建 DNS 区:

    az network dns zone create \
      --resource-group $ECLIPSE_CHE_RESOURCE_GROUP \
      --name $DOMAIN_NAME
  3. 创建 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 证书。

流程

  1. 创建服务主体:

    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)
  2. 授予对 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"
  3. 创建 openshift-devspaces 命名空间:

    oc create namespace openshift-devspaces
  4. 创建服务帐户 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
  5. 创建 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
  6. 创建证书:

    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 中注册客户端应用程序

流程

  1. 创建应用程序:

    # 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
  2. 更新应用程序组成员资格声明:

    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。

流程

  1. 准备 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
  2. 部署 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
  3. 进入 OpenShift Dev Spaces 集群实例:

    $ dsc dashboard:open
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.