將登入應用程式部署至 OKE

從 GitHub 下載程式碼、自訂程式碼,然後進行部署。

範例程式碼可從 GitHub 取得。

  1. 請前往 GitHub
  2. 複製或下載儲存區域。
  3. 請依照 README 文件中的指示進行。

請依照下列步驟,將應用程式建置到確定

  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. 在「認證權杖」頁上,按一下「產生權杖」以建立新的權杖。

    警示:

    複製認證權杖並儲存至安全位置,以供日後擷取。您之後在主控台中見到認證權杖。
  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. 將上一個步驟中建立的停駐程式映像檔標記並推送至 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

    部署 Pod 時,Kubernetes 資訊清單檔案將使用此映像檔。

  7. 或者,您可以依照下列詳細指示,將 Docker 映像檔推送至 OCI Registry
Docker 映像檔會提取至 OCI Registry 並可供部署。

設定環境變數

  • 必要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. 在「新增應用程式」對話方塊中,按一下「信任的應用程式」或「機密應用程式」。
  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. 需要有負載平衡器服務 SSL 金鑰和憑證,才能設定使用負載平衡器存取自訂應用程式的 HTTPS 端點。為您的負載平衡器建立新的金鑰組。
    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. 將自訂應用程式 Pod 和負載平衡器服務部署到您的 OKE 叢集。
    $ kubectl apply -f ./customlogin.yaml
    $ kubectl get all
    名稱 就緒 狀態 重新啟動 年齡
    pod/login-app 1/1 Running 0 12d
    名稱 Type Cluster-IP 外部 IP 連接埠 (s) 年齡
    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。

    您應該前往自訂登入應用程式頁面。