DNSのカスタマイズ

Verrazzanoシステムおよびアプリケーション・エンドポイントのDNS構成のカスタマイズ

Verrazzanoは、Verrazzanoサービスとアプリケーションについて3つのDNSの選択肢をサポートしています:

VerrazzanoによるDNSドメインの構成方法

使用するDNS管理に関係なく、インストールのspec.environmentNameフィールドの値は、カスタム・リソースのspec.components.dnsセクションの構成されたドメインに付加され、Verrazzanoエンドポイントへのアクセスに使用される完全なDNSドメイン名が形成されます。

たとえば、spec.environmentNamesalesに設定され、ドメインがspec.components.dnsus.example.comとして構成されている場合、VerrazzanoはインストールのDNSドメインとしてsales.us.example.comを作成します。

ワイルドカードDNSサービス

Verrazzanoは、無料のワイルドカードDNSサービスnip.ioまたはsslip.ioを使用するように構成できます。IPアドレスが含まれているホスト名を使用して問い合せると、ワイルドカードDNSサービスはそのIPアドレスを返します。

たとえば、nip.ioサービスを使用すると、次のDNS名はすべてIPアドレス10.0.0.1にマップされます:

10.0.0.1.nip.io
app.10.0.0.1.nip.io
customer1.app.10.0.0.1.nip.io

これらのサービスのいずれかを使用するようにVerrazzanoを構成するには、Verrazzanoカスタム・リソースのspec.wildcard.domainフィールドをnip.ioまたはsslip.ioに設定します。デフォルトはnip.ioです。

たとえば、次の構成では、devインストール・プロファイルでnip.ioのかわりにsslip.ioがワイルドカードDNSに使用されます

apiVersion: install.verrazzano.io/v1beta1
kind: Verrazzano
metadata:
  name: example-verrazzano
spec:
  profile: dev
  components:
    dns:
      wildcard:
        domain: sslip.io

Oracle Cloud Infrastructure DNS

Verrazzanoは、spec.components.dns.ociフィールドを使用するように構成されている場合、Oracle Oracle Cloud Infrastructure DNSのレコードを直接管理できます。これは、外部DNSサービスを介して実現されるもので、このサービスは、VerrazzanoでOracle Cloud Infrastructure DNSが、DNS管理用に構成されている場合に条件付きでインストールされるコンポーネントです。

前提条件

VerrazzanoでOracle Cloud Infrastructure DNSを使用するには、次の前提条件を満たす必要があります:

  • DNSドメインを制御する必要があります。

  • そのドメインのレコードを管理するように構成されたOracle Cloud Infrastructure DNSサービス・ゾーンが必要です。Verrazzanoでは、Oracle Cloud Infrastructure DNSゾーンのGLOBALおよびPRIVATEの両方を使用できます。

    DNSサービス・ゾーンは、ドメイン・ネームスペースの個別の部分です。ゾーンが親ドメインに適切に関連付けられていることを確認する必要があります。たとえば、親ドメインexample.comに対する適切なゾーン名はus.example.comです。

    Oracle Cloud Infrastructure CLIを使用してOracle Cloud Infrastructure DNSゾーンを作成するには:

    $ oci dns zone create \
        -c <compartment ocid> \
        --name <zone-name-prefix>.example.com \
        --zone-type PRIMARY
    
    Oracle Cloud Infrastructure Consoleを使用してOracle Cloud Infrastructure DNSゾーンを作成するには、DNSサービス・ゾーンの管理に関する項を参照してください。

  • テナンシ内のOracle Cloud Infrastructure DNSとの通信に使用できる有効なOracle Cloud Infrastructure API署名キーが必要です。

    たとえば、Oracle Cloud Infrastructure CLIを使用してAPI署名キーを作成できます

      $ oci setup keys --key-name myapikey
      Enter a passphrase for your private key (empty for no passphrase):
      Public key written to: /Users/jdoe/.oci/myapikey_public.pem
      Private key written to: /Users/jdoe/.oci/myapikey.pem
      Public key fingerprint: 39:08:44:69:9f:f5:73:86:7a:46:d8:ad:34:4f:95:29
    
    API署名公開キーをコンソールからまだアップロードしていない場合は、この項の公開キーのアップロード方法の手順に従います。

    キー・ペアを作成したら、Oracle Cloud Infrastructureテナンシのアカウントに公開キーをアップロードする必要があります。詳細は、Oracle Cloud Infrastructureのドキュメントの必要なキーとOCIDに関する項を参照してください。

ターゲット・クラスタでのOracle Cloud Infrastructure APIシークレットの作成

DNSレコードを管理するためにOracle Cloud Infrastructure DNSと通信するには、Verrazzanoが必要なAPI資格証明を認識する必要があります。
クラスタのverrazzano-installネームスペースに、必要な資格証明を使用して汎用Kubernetesシークレットを作成する必要があります。そのシークレットは、Verrazzanoのインストールに使用するカスタム・リソースによって参照される必要があります。

Oracle Cloud Infrastructure APIキーを使用する準備ができたら、次の形式でAPI資格証明を使用してYAMLファイルoci.yamlを作成します:

auth:
  region: <oci-region>
  tenancy: <oci-tenancy-ocid>
  user: <oci-user-ocid>
  key: |
    <oci-api-private-key-file-contents>
  fingerprint: <oci-api-private-key-fingerprint>

通常、この情報は、Oracle Cloud Infrastructure CLI構成ファイルまたはOracle Cloud Infrastructureコンソールにあります。<oci-api-private-key-file-contents>の内容は、Oracle Cloud Infrastructure CLI構成プロファイル内のkey_file値のPEMでエンコードされた内容です。

たとえば、oci.yamlファイルは次のようになります:

auth:
  region: us-ashburn-1
  tenancy: ocid1.tenancy.oc1.....
  user: ocid1.user.oc1.....
  key: |
    -----BEGIN RSA PRIVATE KEY-----
    ...
    -----END RSA PRIVATE KEY-----
  fingerprint: 12:d3:4c:gh:fd:9e:27:g8:b9:0d:9f:00:22:33:c3:gg

Verrazzanoでは、インスタンス・プリンシパルを使用して、Oracle Cloud Infrastructureと通信し、Oracle Cloud Infrastructure DNSレコードを作成または更新することもできます。インスタンス・プリンシパルにはいくつかの前提条件が必要であり、ここで確認できます。

インスタンス・プリンシパルを使用する場合、oci.yamlファイルは次のようになります:

auth:
  authtype: instance_principal

次に、kubectlを使用して、クラスタのverrazzano-installネームスペースに汎用Kubernetesシークレットを作成できます。

$ kubectl create secret generic -n verrazzano-install <secret-name> --from-file=<path-to-oci-yaml-file>

たとえば、ファイルoci.yamlからociという名前のシークレットを作成するには、次のようにします:

$ kubectl create secret generic -n verrazzano-install oci --from-file=oci.yaml

このシークレットは、インストール中に使用されるVerrazzanoカスタム・リソースから後で参照されます。

Verrazzanoヘルパー・スクリプトを使用したOracle Cloud Infrastructureシークレットの作成

Verrazzanoには、Oracle Cloud Infrastructure CLI構成ファイルに基づいて必要なKubernetesシークレットを作成するためのヘルパー・スクリプトも用意されていますが、Oracle Cloud Infrastructure CLIがインストールされていて、必要なAPIキー情報を含む有効なOracle Cloud Infrastructure CLIプロファイルがあることを前提としています。スクリプトcreate_oci_config_secret.shは、Oracle Cloud Infrastructure CLI構成ファイルを読み取ってシークレットを作成します。

まず、create_oci_config_secret.shスクリプトをダウンロードします

$ curl \
    -o ./create_oci_config_secret.sh \
    https://raw.githubusercontent.com/verrazzano/verrazzano/v1.7.1/platform-operator/scripts/install/create_oci_config_secret.sh

次に、KUBECONFIG環境変数をクラスタを指すように設定し、create_oci_config_secret.sh -hを実行してスクリプト・オプションを表示します

$ chmod +x create_oci_config_secret.sh
$ export KUBECONFIG=<kubeconfig-file>
$ ./create_oci_config_secret.sh  -h
usage: ./create_oci_config_secret.sh [-o oci_config_file] [-s config_file_section]
  -o oci_config_file         The full path to the Oracle Cloud Infrastructure configuration file (default ~/.oci/config)
  -s config_file_section     The properties section within the Oracle Cloud Infrastructure configuration file.  Default is DEFAULT
  -k secret_name             The secret name containing the Oracle Cloud Infrastructure configuration.  Default is oci
  -c context_name            The kubectl context to use
  -a auth_type               The auth_type to be used to access Oracle Cloud Infrastructure. Valid values are user_principal/instance_principal. Default is user_principal.
  -h                         Help

たとえば、スクリプトで[DEFAULT] Oracle Cloud Infrastructure CLIプロファイルを使用してYAMLファイルを作成し、ociという名前のKubernetesシークレットを作成するには、次のように引数なしでスクリプトを実行できます:

$ ./create_oci_config_secret.sh
secret/oci created

次の例では、[dev]という名前のOracle Cloud Infrastructure CLIプロファイルを使用して、シークレットmyociを作成します

$ ./create_oci_config_secret.sh -s dev -k myoci
secret/myoci created

インスタンス・プリンシパルを使用する場合、他のすべてのパラメータは自動的に無視されます。次の例では、Oracle Cloud Infrastructureインスタンス・プリンシパルを使用して、シークレットmyociを作成します

$ ./create_oci_config_secret.sh -a instance_principal
secret/myoci created

インストール

Oracle Cloud Infrastructure APIシークレットの作成後、Oracle Cloud Infrastructure DNSを使用するように構成されているインストール用のVerrazzanoカスタム・リソースを作成し、作成したシークレットを参照します。

まず、Oracle Cloud Infrastructure DNS用のサンプルVerrazzanoカスタム・リソースinstall-oci.yamlファイルをダウンロードします

$ curl \
    -o ./install-oci.yaml \
    https://raw.githubusercontent.com/verrazzano/verrazzano/v1.7.1/platform-operator/config/samples/install-oci.yaml

install-oci.yamlファイルを編集して、カスタム・リソース仕様の次の構成設定の値を指定します:

  • spec.environmentName
  • spec.components.dns.oci.ociConfigSecret
  • spec.components.dns.oci.dnsZoneCompartmentOCID
  • spec.components.dns.oci.dnsZoneOCID
  • spec.components.dns.oci.dnsZoneName
  • spec.components.dns.oci.dnsScope

フィールドspec.components.dns.oci.ociConfigSecretは、前に作成したシークレットを参照する必要があります。Oracle Cloud Infrastructure DNS構成設定の詳細は、spec.components.DNS.ociを参照してください。

たとえば、Oracle Cloud Infrastructure DNSを使用したprodインストール・プロファイルのカスタム・リソースは次のようになりますが、これにより、ドメインmyenv.example.com (リダクションされたOracle Cloud Infrastructure識別子)が生成されます:

apiVersion: install.verrazzano.io/v1beta1
kind: Verrazzano
metadata:
  name: example-verrazzano
spec:
  profile: prod
  environmentName: myenv
  components:
    dns:
      oci:
        ociConfigSecret: oci
        dnsZoneCompartmentOCID: ocid1.compartment.oc1..compartment-ocid
        dnsZoneOCID: ocid1.dns-zone.oc1..zone-ocid
        dnsZoneName: example.com

プライベートDNSゾーンを使用している場合、Oracle Cloud Infrastructure DNSを使用した同じprodインストール・プロファイルは次のようになります:

apiVersion: install.verrazzano.io/v1beta1
kind: Verrazzano
metadata:
  name: my-verrazzano
spec:
  profile: prod
  environmentName: myenv
  components:
    dns:
      oci:
        ociConfigSecret: oci
        dnsZoneCompartmentOCID: ocid1.compartment.oc1..compartment-ocid
        dnsZoneOCID: ocid1.dns-zone.oc1..zone-ocid
        dnsZoneName: example.com
        dnsScope: PRIVATE

カスタム・リソースの準備ができたら、kubectl apply -f <path-to-custom-resource-file>を使用して適用します。

カスタムDNS

独自の外部管理のカスタムDNSドメインを指定できます。このシナリオでは、独自のDNSドメインとそのドメイン内のすべてのDNSレコードを管理します。

外部管理のDNSドメインは、Verrazzanoカスタム・リソースの spec.components.dns.external.suffixフィールドで指定します。

外部管理DNSドメインを使用する場合は、次の作業を行います:

  • Verrazzanoイングレス・ポイント(ロード・バランサ)のAレコードの構成
  • 必要に応じて、Aレコードを指すドメイン内のホスト名に対するCNAMEレコードの構成

Verrazzanoインストーラは、指定したDNSゾーンで2つの特定のAレコードを検索します。
これらはクラスタの構成に使用され、ユーザーがプロビジョニングするロード・バランサの外部アドレスを参照する必要があります。

Aレコードは手動で作成する必要があります。

レコード 使用方法
ingress-mgmt ingress-controller-nginx-ingress-controllerサービスの.spec.externalIPs値として設定します。
ingress-verrazzano istio-ingressgatewayサービスの.spec.externalIPs値として設定します。

たとえば、spec.environmentNamemyenvに設定され、spec.components.dns.external.suffixexample.comに設定されている場合、Aレコードは次のように設定する必要があります:

198.51.100.10                                   A       ingress-mgmt.myenv.example.com.
203.0.113.10                                    A       ingress-verrazzano.myenv.example.com.

この例では、ingress-mgmtのロード・バランサは198.51.100.10に、ingress-verrazzanoのロード・バランサは203.0.113.10に存在すると想定しています。

より詳細な例は、Oracle Cloud Native Environmentプラットフォームで、Verrazzanoを設定するためのドキュメントを参照してください。