将登录应用程序部署到 OKE

从 GitHub 下载代码,自定义代码并部署代码。

示例代码位于 GitHub。

  1. 转至 GitHub 。
  2. 克隆或下载系统信息库。
  3. 按照自述文件中的说明进行操作。

按照以下步骤将应用程序部署到 OKE :

  1. 分叉并克隆 GitHub 系统信息库。
  2. 创建 Dockerfile 并构建映像。
  3. 将 Docker 映像推送到 OCI 注册表。
  4. 设置环境变量。
  5. 在您的身份域中注册应用程序。
  6. 将 Docker 映像部署到 OKE 集群。
  7. 使用工作示例应用程序测试自定义登录体验。

分叉和克隆 GitHub 系统信息库

分派 GitHub 资料档案库以在开发计算机上创建资料档案库的副本。

然后,使用以下命令克隆开发计算机上的派生资料档案库。

git clone https://github.com:USERNAME/YOUR-FORKED-REPO

创建 Dockerfile

在克隆的系统信息库中创建新的文件名 Dockerfile。

定制登录应用程序是 Node JS 应用程序。Dockerfile 看起来与任何 Node JS 应用程序类似。
使用以下样例 Dockerfile 作为起点。
FROM node:alpine

# Create app directory WORKDIR /usr/src/app # Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied where available (npm@5+)
COPY package*.json ./
RUN npm install
# If you are building your code for production
# RUN npm install --only=production
# Bundle app source
COPY . .

EXPOSE 3000# "npm start" is how this would normally be startedCMD [ "npm", "start" ]
您可以使用组织中允许的 Linux 发行版,而不是 alpine。

构建 Docker 映像

使用以下命令从 Dockerfile 构建 Docker 映像并提供映像名称。

docker build -t $IMAGE_NAME $PATH_TO_DOCKERFILE

使用以下命令列出用于验证 Docker 映像的映像。

docker images

将 Docker 映像推送到 OCI 注册表

要将 Docker 映像推送到 OCI 注册表,请执行以下步骤:

  1. 登录到 OCI 控制台。
  2. 打开概要信息菜单,然后单击用户设置以查看详细信息。
  3. 在 Auth 标记页上,单击生成标记以创建新标记。

    注意:

    复制验证令牌并将其保存到安全位置以稍后检索它。您以后在控制台中看不到验证令牌。
  4. 关闭生成令牌对话框。
  5. 运行命令 docker login <region-key>.ocir.io 以登录到 OCI 注册表 (OCIR)。例如,对于阿什本区域,运行 docker login iad.ocir.io。

    如果用户位于默认域 <tenancy-namespace>/<username> 中,则以此格式输入具有验证令牌的用户名。

    对于非默认 IAM 域用户,请使用 <tenancy-namespace>/<domain_name>/<username> 格式。

    出现密码提示时,输入用户的 Oracle Cloud Infrastructure 验证令牌。

  6. 将上一步中创建的 docker 映像标记并推送到 OCIR。

    您可以在 OCI 容器注册表中创建新资料档案库,也可以使用现有资料档案库。标记的格式应为 <region-key>.ocir.io/<tenancy-namespace>/<repo-name>:<version>。

    docker tag idcslogin:latest iad.ocir.io/mytenancy/myrepo/idcslogin:latest docker push iad.ocir.io/mytenancy/myrepo/idcslogin:latest

    部署云池时,Kubernetes 清单文件将使用此映像。

  7. 或者,您可以按照以下详细说明将 Docker 映像推送到 OCI 注册表。
Docker 映像已提取到 OCI 注册表并可供部署。

设置环境变量

  • 必需:IDCS_CLIENT_ID 、IDCS_CLIENT_ID 和 IDCS_SECRET
  • 可选:IDCS_SELFREGPROFILES 用于将自注册配置文件传递到登录应用程序,DEBUG_LOGIN=true 用于在 NodeJS 中启用调试日志记录
  • 生产:NODE_ENV= 生产变量

使用 Kubernetes 密钥来存储这些值并将其传递到清单文件中。

注册应用程序

在 IDCS 或身份域中注册客户端身份证明应用程序,以便定制登录应用程序可以调用 Oracle Identity Cloud Service 验证 REST API 并允许用户登录。

  1. 在 Oracle Identity Cloud Service 控制台中,展开导航抽屉,然后单击应用程序。
  2. 在应用程序页中,单击添加。
  3. 在 Add Application(添加应用程序)对话框中,单击 Trusted Application(可信应用程序)或 Confidential Application(保密应用程序)。
  4. 在详细信息窗格中,输入以下值:
    • 名称:我的登录应用程序
    • 说明:我的登录应用程序
  5. 单击下一步。
  6. 在客户端窗格中,选择立即将此应用程序配置为客户端,然后选择客户端身份证明作为允许的授权类型。
  7. 在客户端窗格中,向下滚动,然后在授予对 Identity Cloud Service 管理 API 的客户端访问之后单击添加。
  8. 在添加应用程序角色对话框中,选择列表中的登录、验证电子邮件、重置密码、忘记密码和自行注册,然后单击添加。
  9. 单击客户端窗格和以下窗格中的下一步,直到到达最后一个窗格。
  10. 单击完成。
  11. 在添加的应用程序对话框中,记下客户端 ID 和客户端密钥值,然后单击关闭。
  12. 要激活应用程序,请单击激活。
  13. 在激活应用程序?对话框中,单击激活应用程序。
    此时将显示一条成功消息。

创建 OKE 集群

  1. 如果您还没有 OKE 群集,请按照说明创建 OKE 群集。
  2. 确保您可以使用 kubectl 访问新集群。按照快速启动部分中的步骤访问集群。

将应用程序部署到 OKE 集群

要创建 Kubernetes 部署清单文件并将应用程序部署到 OKE,请执行以下步骤:

  1. 创建 Kubernetes Secret 以使所有配置参数可用于 OKE 群集。
    1. 设置 OCI IAM 配置参数。
      $ kubectl create secret generic idcs_config --from-literal=url=https://<domain instanceid>.identity.oraclecloud.com --from-literal=client-id=<client_id_of_sign_in_app> --from-literal=client-secret=<client_secret_of_sign_in_app>
    2. 创建 OCI 注册表标记。
      $ kubectl create secret generic idcs_config --from-literal=url=https://<domain instanceid>.identity.oraclecloud.com --from-literal=client-id=<client_id_of_sign_in_app> --from-literal=client-secret=<client_secret_of_sign_in_app>
    3. 设置 HTTPS 端点以使用负载平衡器访问定制应用程序时,需要负载平衡器服务 SSL 密钥和证书。为负载平衡器创建新的密钥对。
    4. 创建 Kubernetes 密钥以使其可供 OKE 集群使用。
      $ kubectl create secret tls ssl-certificate-secret --key your.key --cert your.crt

      注意:

      Oracle 建议您使用 SSL 端口设置负载平衡器服务,除非该服务用于开发或快速测试。
  2. 创建 Kubernetes 部署清单文件。

    该文件包含定制应用程序的 pod 规范和负载平衡器的服务规范。

    配置参数(例如 OCIR 令牌和 OCI IAM 配置)作为环境变量进行传递,并从在前面的步骤中创建的 Kubernetes 密钥中获取值。

    应用程序的 Docker 容器映像路径应为映像的 OCIR 路径。

    下面是一个名为 customlogin.yaml 的 YAML 文件样例。
    apiVersion: v1
    kind: Pod
    metadata:
      name: login-app
      labels:
        app: customlogin
    spec:
      containers:
        - name: idcslogin
          image: iad.ocir.io/<tenancy namespace>/idcslogin:latest
          imagePullPolicy: Always
          ports:
          - name: httpport
            containerPort: 3000
            protocol: TCP
          env:
          - name: IDCS_URL
            valueFrom:
              secretKeyRef:
                name: idcs-config
                key: url
          - name: IDCS_CLIENT_ID
            valueFrom:
              secretKeyRef:
                name: idcs-config
                key: client-id
          - name: IDCS_CLIENT_SECRET
            valueFrom:
              secretKeyRef:
                name: idcs-config
                key: client-secret
    
      imagePullSecrets:
        - name: ocirsecret
    ---
    
    apiVersion: v1
    kind: Service
    metadata:
      name:
     loginlb
      annotations:
        service.beta.kubernetes.io/oci-load-balancer-ssl-ports: "443"
        service.beta.kubernetes.io/oci-load-balancer-tls-secret: ssl-certificate-secret
      labels:
        app: loginlb
    spec:
      selector:
        app: customlogin
      type: LoadBalancer
      ports:
      - name: http
        port: 80
        protocol: TCP
        targetPort: 3000
      - name: https
        port: 443
        protocol: TCP
        targetPort: 3000

    注意:

    要查找当前租户的租户名称空间,请打开配置文件菜单,然后单击租户:。租户名称空间将显示在对象存储名称空间字段中。
  3. 将定制应用程序云池和负载平衡器服务部署到 OKE 集群。
    $ kubectl apply -f ./customlogin.yaml
    $ kubectl get all
    名称 就绪 状态 重新启动 存活时间
    pod/login-app 1/1 Running 0 12d
    名称 类型 Cluster-IP 外部 - IP 端口 存活时间
    service/kubernetes ClusterIP 10.96.0.1 None 443/TCP 109d
    service/loginlb LoadBalancer 10.96.45.133 10.1.1.1 80:31420/TCP, 443:30563/TCP 12d

测试定制登录体验

使用您准备测试的工作示例应用程序,按照以下步骤测试登录体验:

  1. 更新示例应用程序以使用新部署的定制应用程序的负载平衡器 URL。
  2. 在示例应用程序中,在定制登录 URL 字段中输入负载平衡器 URL。此 URL 可以是负载平衡器公共 IP 地址,也可以是基于 DNS 条目的 FQDN。
  3. 访问浏览器中的示例应用程序 URL。

    您应转到自定义登录应用程序页。