DNSのカスタマイズ
Verrazzanoは、Verrazzanoサービスとアプリケーションについて3つのDNSの選択肢をサポートしています:
- 無料のワイルドカードDNSサービス(nip.ioおよびsslip.io)
- Verrazzanoで管理されるOracle Cloud Infrastructure DNS
- カスタム(ユーザー管理)DNS
VerrazzanoによるDNSドメインの構成方法
使用するDNS管理に関係なく、インストールのspec.environmentName
フィールドの値は、カスタム・リソースのspec.components.dns
セクションの構成されたドメインに付加され、Verrazzanoエンドポイントへのアクセスに使用される完全なDNSドメイン名が形成されます。
たとえば、spec.environmentName
がsales
に設定され、ドメインがspec.components.dns
にus.example.com
として構成されている場合、VerrazzanoはインストールのDNSドメインとしてsales.us.example.com
を作成します。
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/v1alpha1
kind: Verrazzano
metadata:
name: example-verrazzano
spec:
profile: dev
environmentName: default
components:
dns:
wildcard:
domain: sslip.io
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 If you haven't already uploaded your API signing public key through the console, follow the instructions on the page linked below in the section 'How to upload the public key': https://docs.cloud.oracle.com/Content/API/Concepts/apisigningkey.htm#How2
キー・ペアを作成したら、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.2.2/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.2.2/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/v1alpha1
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/v1alpha1
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ドメインは、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.environmentName
がmyenv
に設定され、spec.components.dns.external.suffix
がexample.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を設定するためのドキュメントを参照してください。