OKE에 사인인 애플리케이션 배치

GitHub에서 코드를 다운로드하여 커스터마이즈하고 배치합니다.

샘플 코드는 GitHub에서 사용할 수 있습니다.

  1. GitHub로 이동합니다.
  2. 저장소를 복제하거나 다운로드합니다.
  3. README 문서의 지침을 따릅니다.

다음 단계에 따라 OKE에 응용 프로그램을 배치합니다.

  1. GitHub 저장소를 포크하고 복제합니다.
  2. Dockerfile을 만들고 이미지를 빌드합니다.
  3. Docker 이미지를 OCI 레지스트리로 푸시합니다.
  4. 환경 변수를 설정합니다.
  5. ID 도메인에 애플리케이션을 등록합니다.
  6. OKE 클러스터에 Docker 이미지를 배치합니다.
  7. 작업 중인 샘플 애플리케이션을 사용하여 사용자정의 사인인 환경을 테스트합니다.

포크 및 복제 GitHub 저장소

GitHub 저장소를 포크하여 개발 시스템에 저장소 복사본을 생성합니다.

그런 다음 다음 다음 명령을 사용하여 개발 시스템에서 포크된 저장소를 복제합니다.

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

도커 파일 생성

복제된 repository에 새 파일 이름 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 레지스트리에 푸시할 수 있습니다.
Docker 이미지는 OCI 레지스트리로 추출되어 배포할 준비가 되었습니다.

환경 변수 설정

  • 필수: IDCS_CLIENT_ID, IDCS_CLIENT_IDIDCS_SECRET
  • 선택 사항: IDCS_SELFREGPROFILES - 자체 등록 프로파일을 사인인 응용 프로그램에 전달하고 DEBUG_LOGIN=true - NodeJS에서 디버그 로깅을 사용으로 설정합니다.
  • 운용: NODE_ENV=production variable

Kubernetes 암호를 사용하여 이러한 값을 저장하고 매니페스트 파일에 전달합니다.

애플리케이션 등록

사용자정의 사인인 애플리케이션이 Oracle Identity Cloud Service 인증 REST API를 호출하고 사용자가 사인인할 수 있도록 IDCS 또는 ID 도메인에 클라이언트 인증서 애플리케이션을 등록합니다.

  1. Oracle Identity Cloud Service 콘솔에서 탐색 드로어를 확장한 다음 애플리케이션을 누릅니다.
  2. 애플리케이션 페이지에서 추가를 누릅니다.
  3. 애플리케이션 추가 대화상자에서 신뢰할 수 있는 애플리케이션 또는 기밀 애플리케이션을 누릅니다.
  4. 세부정보 창에서 다음 값을 입력합니다.
    • 이름: 내 사인인 애플리케이션
    • 설명: 내 사인인 애플리케이션
  5. 다음을 누릅니다.
  6. Client 창에서 Configure this application as a client now를 선택한 다음 Client CredentialsAllowed Grant Types로 선택합니다.
  7. 클라이언트 창에서 아래로 스크롤하고 클라이언트에 Identity Cloud Service 관리 API에 대한 액세스 권한을 부여한 후 추가를 누릅니다.
  8. 앱 롤 추가 대화상자에서 사인인, 전자메일 확인, 비밀번호 재설정, 비밀번호 찾기자체 등록을 선택한 다음 추가를 누릅니다.
  9. 마지막 창에 도달할 때까지 클라이언트 창과 다음 창에서 다음을 누릅니다.
  10. 완료를 누릅니다.
  11. 애플리케이션 추가됨 대화상자에서 클라이언트 ID클라이언트 암호 값을 기록한 다음 닫기를 누릅니다.
  12. 애플리케이션을 활성화하려면 활성화를 누릅니다.
  13. 애플리케이션을 활성화하겠습니까? 대화상자에서 애플리케이션 활성화를 누릅니다.
    성공 메시지가 나타납니다.

OKE 클러스터 만들기

  1. 아직 없는 경우 지침에 따라 create an OKE cluster를 수행합니다.
  2. kubectl를 사용하여 새 클러스터에 액세스할 수 있는지 확인합니다. 빠른 시작 섹션의 단계에 따라 클러스터에 액세스합니다.

OKE 클러스터에 애플리케이션 배치

Kubernetes 배치 Manifest 파일을 생성하고 OKE에 애플리케이션을 배치하려면 다음 단계를 수행합니다.

  1. OKE 클러스터에서 모든 구성 매개변수를 사용할 수 있도록 Kubernetes Secret를 만듭니다.
    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. OKE 클러스터에서 사용할 수 있도록 Kubernetes 암호를 생성합니다.
      $ 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

    주:

    현재 테넌시의 테넌시 네임스페이스를 찾으려면 프로파일 메뉴를 열고 테넌시:을 누릅니다. 테넌시 네임스페이스가 Object Storage Namespace 필드에 표시됩니다.
  3. 사용자정의 애플리케이션 Pod 및 로드 밸런서 서비스를 OKE 클러스터에 배치합니다.
    $ kubectl apply -f ./customlogin.yaml
    $ kubectl get all
    이름 준비 상태 재시작 나이
    pod/login-app 1/1 Running 0 12d
    이름 유형 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에 액세스합니다.

    사용자정의 사인인 애플리케이션 페이지로 이동해야 합니다.