15 Oracle Unified Directory Services Managerのインストールおよび構成

Oracle Unified Directory Service Manager (OUDSM)は、Oracle Unified Directoryを管理するために使用されるグラフィカル・ユーザー・インタフェース(GUI)ツールです。本番環境では、OUDSMのインストールは必須ではありません。ただし、OUDSMによりOracle Unified Directoryの管理が容易になります。

OUDSMをインストールする場合は、OUDと異なるKubernetesネームスペースにインストールすることをお薦めします。OUDSMにはデータが含まれず、OUDから分離すると、OUDのディザスタ・リカバリが簡略化されます。OUDSMには、次のものを使用して直接アクセスできます:
  • NodePortサービス
  • イングレス・コントローラ
  • Oracle HTTP Server (iadadmin.example.comなどの仮想ホストに追加された場合)

この章の内容は次のとおりです。

Oracle Unified Directory Services Managerの構成

Oracle Unified Directory Services Manager (OUDSM)は、Oracle Unified Directoryを管理するために使用されるツールです。これはオプションです。

この章では、OUDSMをKubernetesクラスタ内にインストールする方法について説明します。

Kubernetes/イングレス・サービス

OUDSMを構成すると、各ワーカー・ノードで次のOUDSMサービスが使用可能になります:

表15-1 各ワーカー・ノードのOUDSMサービス

サービス タイプ サービス・ポート マップ済ポート

OUDSM

NodePort

30901

7001

ノート:

OUDSMは、独自のKubernetesサービス・ポートをランダムに選択します。この表に示されている番号は、単なる例です。
イングレスベースのデプロイメントを使用する場合、デプロイメントの一部として次のイングレス・サービスが作成されます:

表15-2 イングレス・サービス

サービス名 ホスト名

oudsm-ingress

oudsm.example.com

この章で使用される変数

この章の以降の項では、多数のファイルを作成する手順について説明します。これらのサンプル・ファイルには、デプロイメントに適用可能な値に置換する必要がある変数が含まれています。

変数の形式は<VARIABLE_NAME>です。次の表に、これらの各変数に設定する必要がある値を示します。

表15-3 変更する必要がある変数

変数 サンプル値 説明

<WORKDIR>

/workdir/OUD

OUDの作業ディレクトリを作成する場所。

<REGISTRY_ADDRESS>

iad.ocir.io/<mytenancy>

レジストリの場所。Oracleコンテナ・レジストリを使用する場合、値はcontainer-registry.oracle.com/middleware/oud_cpuになります。

<REG_USER>

mytenancy/oracleidentitycloudservice/myemail@email.com

レジストリへのログインに使用するユーザーID。Oracleコンテナ・レジストリを使用する場合、この値はOracleシングル・サインオン・ユーザー名になります。

<REG_PWD>

<password>

レジストリ・ユーザー・パスワード。

<OUDSM_REPOSITORY>

oracle/oudsm

local/oracle/oudsm

container-registry.oracle.com/middleware/oudsm_cpu

<REGISTRY_ADDRESS>/oracle/oudsm

OUDSMソフトウェア・リポジトリの名前。

コンテナ・イメージをダウンロードしてステージングした場合、この値はoracle/oudsmになります。OLCNEを使用している場合、値はlocal/oracle/oudsmになります。

Oracleコンテナ・レジストリを使用している場合、値はcontainer-registry.oracle.com/middleware/oudsm_cpuになります。

コンテナ・レジストリを使用している場合、値は製品名を含むレジストリの名前になります: <REGISTRY_ADDRESS>/oracle/oudsm

<OUDSM_VER>

12.2.1.4-jdk8-ol7-220411.1608または最新のもの

使用するイメージのバージョン。これは、ダウンロードしてローカルまたはコンテナ・レジストリにステージングしたバージョンです

<PVSERVER>

mynfsserver.example.com

NFSサーバーの名前。

ノート: この名前は、Kubernetesクラスタ内で解決可能である必要があります。

<OUDSM_WEBLOGIC_USER>

weblogic

OUDSMドメインを管理するユーザーの名前。

<OUDSM_WEBLOGIC_PWD>

-

管理ユーザー(<AdminUser>)アカウントに割り当てられたパスワード。

     
     

<OUDSM_SERVICE_PORT>

30901

OUDSMリクエストに使用するポート。

ノート: この値は、Kubernetesサービス・ポートの範囲内である必要があります。

<OUDSM_SHARE>

/exports/IAMPVS/oudsmpv

共有のNFSマウント・ポイント。

<OUSDM_INGRESS_HOST>

oudsm.example.com

OUDSMに専用ホスト名を使用している場合は、この値をそのホストの名前に設定します。例: oudsm.example.com。既存の仮想ホストを介してOUDSMにアクセスできるようにする場合は、この値をそのホスト名に設定します。例: iadadmin.example.com

<ELK_HOST>

https://elasticsearch-es-http.elkns.svc:9200

集中管理型のElasticsearchデプロイメントのホストおよびポート。このホストは、Kubernetesクラスタの中と外のどちらでもかまいません。このホストは、Elasticsearchが使用されている場合にのみ使用されます。

<ELK_VER>

8.11.0

使用するElasticsearchのバージョン。

<ELK_USER_PWD>

<password>

ELKユーザーに割り当てられたパスワード。「Logstash用のロールおよびユーザーの作成」を参照してください。

製品固有の作業ディレクトリの設定

インストールを開始する前に、Oracle Unified Directory Service Managerコンテナ・イメージおよびコード・リポジトリをすでにダウンロードしてステージングしておく必要があります。「エンタープライズ・デプロイメント用のソフトウェア・ディストリビューションの特定と取得」を参照してください。

この項では、ダウンロードしたサンプル・デプロイメント・スクリプトをOUDSMの一時作業ディレクトリにコピーする手順について説明します。

  1. 作業ディレクトリを作成します。
    mkdir <WORKDIR>
    たとえば:
    mkdir /workdir/OUDSM
  2. ディレクトリをこの場所に変更します:
    cd /workdir/OUDSM

    ノート:

    このガイドでは、複数の製品で同じサンプル・ファイル・セットが使用されています。毎回ダウンロードする必要がないように、ファイルは製品固有でない作業ディレクトリにステージングされます。
  3. サンプル・スクリプトを作業ディレクトリにコピーします。
    cp -R <WORKDIR>/fmw-kubernetes/OracleUnifiedDirectorySM /<WORKDIR>/samples
    たとえば:
    cp -R /workdir/OUDSM/fmw-kubernetes/OracleUnifiedDirectorySM /workdir/OUDSM/samples

Kubernetesネームスペースの作成

Oracle Unified Directory Services Managerのすべてのオブジェクトを含むネームスペースを作成する必要があります。

ネームスペースを作成するには、次のコマンドを実行します:
kubectl create namespace oudsmns
出力が次のように表示されます。
namespace/oudsmns created

コンテナ・レジストリ・シークレットの作成

コンテナ・レジストリを使用することをお薦めします。コンテナ・レジストリを使用して、オンデマンドでOracleコンテナ・イメージをプルする場合は、コンテナ・レジストリのログイン詳細を含むシークレットを作成する必要があります。

コンテナ・イメージをローカルにステージングした場合は、このステップを実行する必要はありません。

コンテナ・レジストリ・シークレットを作成するには、次のコマンドを使用します:
kubectl create secret -n <OUDSMNS> docker-registry regcred --docker-server=<REGISTRY_ADDRESS> --docker-username=<REG_USER> --docker-password=<REG_PWD>
たとえば:
kubectl create secret -n oudsmns docker-registry regcred --docker-server=iad.ocir.io/mytenancy --docker-username=mytenancy/oracleidentitycloudservice/myemail@email.com --docker-password=<password>

OUDSMコンテナの作成

OUDSMコンテナを作成する前に、Helmオーバーライド・ファイルを作成する必要があります。この項では、これらのタスクを実行するために使用する必要のあるコマンドについて説明します。

Helmオーバーライド・ファイルの作成

OUDSMコンテナは、Helmを使用してデプロイされます。OUDSMのデプロイ方法を通知するHelmオーバーライド・ファイルを作成します。

次に、OUDSMの/workdir/OUDSM/override_oudsm.yamlというオーバーライド・ファイルの例を示します:

image:
  repository: <OUDSM_REPOSITORY>
  tag: <OUDSM_VER>
  pullPolicy: IfNotPresent

imagePullSecrets:
  - name: regcred
oudsm:
  adminUser: <OUDSM_WEBLOGIC_USER>
  adminPass: <OUDSM_WEBLOGIC_PWD>
  startupTime: 200
persistence:
  type: networkstorage
  networkstorage:
    nfs:
      server: <PVSERVER>
      path: <OUDSM_SHARE>
  size: 5Gi
replicaCount: 1

elk:
  enabled: false
ingress:
  enabled: false
  type: nginx
  tlsEnabled: true
たとえば:
image:
  repository: iad.ocir.io/mytenancy/oudsm
  tag: 12.2.1.4-jdk8-ol7-220119.2054
  pullPolicy: IfNotPresent

imagePullSecrets:
  - name: regcred
oudsm:
  adminUser: weblogic
  adminPass: password
  startupTime: 200
persistence:
  type: networkstorage
  networkstorage:
    nfs:
      server: mynfsserver.example.com
      path:/export/IAMPVS/oudsmpv
  size: 5Gi
replicaCount: 1

elk:
  enabled: false
ingress:
  enabled: false
  type: nginx
  tlsEnabled: true

コンテナの作成

オーバーライド・ファイルを作成したら、コマンドを使用してコンテナを作成できます:
cd /workdir/OUDSM/samples/kubernetes/helm
helm install --namespace <OUDSMNS> --values /workdir/OUDSM/override_oudsm.yaml oudsm oudsm
出力が次のように表示されます。
NAME: oudsm
LAST DEPLOYED: Thu Jan 28 08:08:40 2021
NAMESPACE: oudsmns
STATUS: deployed
REVISION: 1
TEST SUITE: None

OUDSMインスタンスのトラブルシューティング

次のコマンドを使用して、各OUDSMインスタンスの作成をモニターできます:

ネームスペースに作成されるオブジェクト:
kubectl -n oudsmns get all -o wide

各コンテナのステータスがREADY 1/1およびStatus = Runningと表示された場合のみ、インストールおよび構成が完了します。

作成中のオブジェクトが表示されない場合は、次のコマンドを使用して問題を確認します:
kubectl get pod -n oudsmns
詳細な説明は、次を使用します:
kubectl describe pod -n oudsmns

コンテナ・ログ

作成中の各コンテナの進行状況を表示するには、次のコマンドを使用します:
kubectl logs oudsm-1 -n oudsmns

OUDSMへの外部アクセスの作成

デフォルトでは、Oracle Unified Directory Service Managerデプロイメントは、ClusterIPサービスとして構成されたすべてのコンポーネントを使用して作成されます。つまり、OUDSMはKubernetesクラスタ内でのみ表示されます。

OUDSMへのアクセス権を取得するには、それをKuberenetesクラスタの外部に公開する必要があります。これは、次の2つの方法のいずれかで実行できます。
  • イングレス・コントローラの使用
  • Kubernetes NodePortサービスの使用

Kubernetes OUDSM NodePortサービスの作成

Kubernetesクラスタの外部からOUDSMに接続するには、OUDSM NodePortサービスを作成する必要があります。

  1. 次の内容を含む/workdir/OUDSM/oudsm_nodeport.yamlというテキスト・ファイルを作成します:
    kind: Service
    apiVersion: v1
    metadata:
      name: oudsm-nodeport
      namespace: <OUDSMNS>
    spec:
      type: NodePort
      selector:
        app.kubernetes.io/instance: oudsm
        app.kubernetes.io/name: oudsm
      ports:
        - targetPort: 7001
          port: 7001
          nodePort: <OUDSM_SERVICE_PORT>
          protocol: TCP
    
    たとえば:
    kind: Service
    apiVersion: v1
    metadata:
      name: oudsm-nodeport
      namespace: oudsmns
    spec:
      type: NodePort
      selector:
        app.kubernetes.io/instance: oudsm
        app.kubernetes.io/name: oudsm
      ports:
        - targetPort: 7001
          port: 7001
          nodePort: 30901
          protocol: TCP

    ノート:

    namespaceが、使用するネームスペースに設定されていることを確認します。
  2. 次のコマンドを使用して、サービスを作成します:
    kubectl create -f /workdir/OUDSM/oudsm_nodeport.yaml
    出力が次のように表示されます。
    service/oudsm-nodeport created
  3. http://k8worker1.example.com:30901/OUDSM URLを使用してOUDSMにアクセスできることを検証します。

Oracle Unified Directory Services Managerのイングレス・サービスの作成

イングレスを介してOUDSMにアクセスするには、イングレス・サービスを作成する必要があります。イングレス・サービスを製品ネームスペース内に作成します。イングレス・サービスにより、ネームスペース内でリクエストを転送する方法がイングレス・コントローラに指示されます。

イングレス・サービスを作成するには:

  1. 次の内容を含むoudsm_ingress.yamlというファイルを作業ディレクトリに作成します:
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: oudsm-ingress
      namespace: <OUDSMNS>
      annotations:
        nginx.ingress.kubernetes.io/affinity: "cookie"
        nginx.ingress.kubernetes.io/proxy-buffer-size: "2000k"
        nginx.ingress.kubernetes.io/enable-access-log: "false"
    spec:
      ingressClassName: nginx
      rules:
      - host: <OUSDM_INGRESS_HOST>
        http:
          paths:
          - backend:
              service:
                name: oudsm-1
                port:
                  number: 7001
            path: /oudsm
            pathType: Prefix
  2. 次のコマンドを使用して、イングレス・サービスを作成します:
    kubectl create -f /workdir/OUDSM/oudsm_ingress.yaml
  3. 次のコマンドを使用して、イングレス・サービスが正しく作成されたことを検証します:
    kubectl get ingress -n oudsmns

Oracle Unified Directory Services Manager用のOracle HTTP Serverの構成

OUDSMをOracle HTTP Server構成に組み込む必要はありません。イングレス・サービスまたはNodePortサービスを使用して、OUDSMに直接アクセスできます。ただし、OUDSMをOracle HTTP Serverに組み込む場合は、この項で説明するステップを実行する必要があります。

「Oracle HTTP Serverのインストールと構成」の説明に従ってOracle HTTP Serverを構成したら、Oracle Unified Directory Services ManagerにリクエストをルーティングするようにOracle HTTP Serverを構成できます。

Oracle HTTP Serverを構成するには:

  1. WEB_DOMAIN_HOME/config/fmwconfig/components/OHS/ohs1/moduleconf/にあるiadadmin_vh.confまたはigdadmin_vh.confファイルに次のエントリを追加します:
    <Location /oudsm>
        WLSRequest ON
        DynamicServerList OFF
        WeblogicCluster k8worker1.example.com:30901, k8worker2.example.com:30901
    </Location>

    ノート:

    • インスタンスの構成ファイルと実行時ファイルにはそれぞれ別のディレクトリがあります。.../OHS/instances/ohsn/*フォルダにある実行時ファイルは、直接編集しないでください。.../OHS/ohsn/*構成ファイルのみ編集します。
    • iadadmin_vh.confおよびigdadmin_vh.confは、Oracle Access ManagerまたはOracle Identity Governanceを構成した後にのみ使用できます。
    • イングレス・コントローラを使用している場合、ポートはイングレス・コントローラに割り当てられたHTTPポートである必要があります。例: 30777
    • イングレス・コントローラを使用している場合は、必ず、イングレス・ホスト名に対応するディレクティブをOHS仮想ホスト・ファイルに追加してください。
  2. igdadmin_vh.confまたはiadadmin_vh.confファイルを2つ目のOracle HTTP Serverインスタンス(ohs2)の次の構成ディレクトリにコピーします。
    OHS_DOMAIN_HOME/config/fmwconfig/components/ohs2/moduleconf/
  3. WEBHOST1とWEBHOST2上のOracle HTTP Serverインスタンスを再起動します。

ElasticsearchおよびKibanaを使用した集中管理型のログ・ファイル監視

ElasticsearchとKibanaを使用している場合は、集中管理型のElasticearch/Kibanaコンソールにログ・ファイルを送信するようLogstashポッドを構成できます。Logstashポッドを構成する前に、集中管理型のElasticsearchデプロイメントにアクセスできることを確認してください。
  • OUDSM永続ボリューム(Logstashポッドによってロードされ、ログ・ファイルの検索が可能になります)。
  • 永続ボリューム内のログ・ファイルの場所。
  • 集中管理型のElasticsearchの場所。

Logstashポッドを構成するには、次のステップを実行します。Kubernetesクラスタ内のelknsというネームスペースで、Elasticsearchが実行されていることを前提としています。

Elasticsearchのシークレットの作成

Logstashでは、Elasticsearchデプロイメントに接続するための資格証明が必要です。これらの資格証明は、シークレットとしてKubernetesに格納されます。

Elasticsearchで認証にAPIキーを使用する場合は、次のコマンドを使用します:
kubectl create secret generic elasticsearch-pw-elastic -n <OUDSMNS> --from-literal password=<ELK_APIKEY>
たとえば:
kubectl create secret generic elasticsearch-pw-elastic -n oudsmns --from-literal password=afshfashfkahf5f
Elasticsearchで認証にユーザー名とパスワードを使用する場合は、次のコマンドを使用します:
kubectl create secret generic elasticsearch-pw-elastic -n <OUDSMNS> --from-literal password=<ELK_PWD>
たとえば:
kubectl create secret generic elasticsearch-pw-elastic -n oudsmns --from-literal password=mypassword
Elasticsearchパスワードを見つけるには、次のコマンドを使用します:
kubectl get secret elasticsearch-es-elastic-user -n <ELKNS> -o go-template='{{.data.elastic | base64decode}}'

ELK証明書の構成マップの作成

本番環境に対応したElasticsearchデプロイメントを構成した場合は、SSLが構成されています。Elasticsearchと通信できるよう、LogstashでElasticsearch証明書を信頼する必要があります。信頼を有効にするには、Elasticsearch証明書の内容で、構成マップを作成する必要があります。

Elasticsearchの自己署名証明書は、すでに保存されています。「Elasticsearch証明書のコピー」を参照してください。本番証明書がある場合は、かわりにそれを使用できます。

証明書を使用して構成マップを作成し、次のコマンドを実行します:

kubectl create configmap elk-cert --from-file=<WORKDIR>/ELK/elk.crt -n <OUDSMNS>
たとえば:
kubectl create configmap elk-cert --from-file=/workdir/ELK/elk.crt -n oudsmns

OUDSMのログ・ファイル監視の構成

ログ・ファイル監視を構成するには、次のステップを実行します:

Logstashの構成マップの作成

Logstashは、OUDSMインストールのログ・ファイルを検索し、集中管理型のElasticsearchに送信します。ログ・ファイルが存在する場所とその送信先は、構成マップを使用してLogstashに指示されます。

  1. <WORKDIR>/OUDSM/logstash_cm.yamlというファイルを、次の内容で作成します:
    apiVersion: v1
    kind: ConfigMap
    metadata:
     name: oudsm-logstash-configmap
     namespace: <OUDSMNS>
    data:
     logstash.yaml: |
     #http.host: "0.0.0.0"
     logstash-config.conf: |
       input {
          file {
            path => "/u01/oracle/user_projects/domains/oudsmdomain-1/servers/AdminServer/logs/*.log"
            type => "setup-logs"
            start_position => beginning
            sincedb_path => "/dev/null"
          }
        }
        filter {
          if [type] == "setup-logs" {
            grok {
              match => [ "message", "<%{DATA:log_timestamp}> <%{WORD:log_level}> <%{WORD:thread}> <%{HOSTNAME:hostname}> <%{HOSTNAME:hostserver}> %{GREEDYDATA:message}" ]
              }
          }
          if "_grokparsefailure" in [tags] {
            mutate {
              remove_tag => [ "_grokparsefailure" ]
              }
            }
          }
       output {
        elasticsearch {
         hosts => ["<ELK_HOST>"]
         cacert => '/usr/share/logstash/config/certs/elk.crt'
         user => "<ELK_USER>"
         password => "<ELK_USER_PWD>"
         index => "oudsmlogs-000001"
         ssl => true
         ssl_certificate_verification => false
        }
       }
  2. ファイルを保存します。
  3. 次のコマンドを使用して、構成マップを作成します:
    kubectl create -f <WORKDIR>/OUDSM/logstash_cm.yaml
    たとえば:
    kubectl create -f /workdir/OUDSM/logstash_cm.yaml
  4. 次のコマンドを使用して、構成マップが作成されたことを確認します:
    kubectl get cm -n <OUDSMNS>

    構成マップのリストにoudsm-logstash-configmapが表示されます。

Logstashデプロイメントの作成
構成マップを作成したら、Logstashデプロイメントを作成できます。このデプロイメントは、OUDネームスペースに存在します。
  1. <WORKDIR>/OUDSM/logstash.yamlというファイルを、次の内容で作成します:
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: oudsm-logstash
      namespace: <OUDSMNS>
    spec:
      selector:
        matchLabels:
          k8s-app: logstash
      template: # create pods using pod definition in this template
        metadata:
          labels:
            k8s-app: logstash
        spec:
          imagePullSecrets:
          - name: dockercred
          containers:
          - command:
            - logstash
            image: logstash:<ELK_VER>
            imagePullPolicy: IfNotPresent
            name: oudsm-logstash
            env:
            - name: ELASTICSEARCH_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: elasticsearch-pw-elastic
                  key: password
            ports:
            - containerPort: 5044
              name: logstash
            volumeMounts:
            - mountPath: /u01/oracle/user_projects
              name: oudsm-storage-volume
            - name: shared-logs
              mountPath: /shared-logs
            - mountPath: /usr/share/logstash/pipeline/
              name: oudsm-logstash-pipeline
            - mountPath: /usr/share/logstash/config/certs
              name: elk-cert
          volumes:
          - configMap:
              defaultMode: 420
              items:
              - key: logstash-config.conf
                path: logstash-config.conf
              name: oudsm-logstash-configmap
            name: oudsm-logstash-pipeline
          - configMap:
              defaultMode: 420
              items:
              - key: ca.crt
                path: elk.crt
              name: elk-cert
          - name: oudsm-storage-volume
            persistentVolumeClaim:
              claimName: oudsm-pvc
          - name: shared-logs
            emptyDir: {}

    ノート:

    独自のレジストリを使用している場合は、レジストリ名をイメージ・タグに含めます。レジストリのregcredシークレットを作成した場合は、imagePullSecretsの名前を、作成したシークレット名に置き換えます。例: regcred
  2. ファイルを保存します。
  3. 次のコマンドを使用して、Logstashデプロイメントを作成します:
    kubectl create -f <WORKDIR>/OUDSM/logstash.yaml
    たとえば:
    kubectl create -f /workdir/OUDSM/logstash.yaml
  4. 次のコマンドを使用して、logstashというポッドを作成できます:
    kubectl get pod -n oudsmns

    これで、Kibanaコンソールでログを使用できるようになります。