将登录应用程序部署到 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_IDIDCS_CLIENT_IDIDCS_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.yamlYAML 文件样例。
    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。

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