サービス・メッシュ用のOCI Service Operator for Kubernetesのインストール
OCI Service Operator for Kubernetesにより、Kubernetes環境からのOCIリソースの作成、管理および接続が容易になります。Kubernetesユーザーは、OCI Service Operator for Kubernetesをインストールするだけで、Kubernetes APIを使用してOCIリソースに対してアクションを実行できます。OCI Service Operator for Kubernetesにより、OCI CLIやその他のOCI開発者ツールを使用してサービスAPIと対話する必要がなくなります。
OCI Service Operator for Kubernetesは、Operatorの管理に使用されるオープン・ソース・ツールキットであるOperator Frameworkに基づいています。コントローラ・ランタイム・ライブラリを使用します。このライブラリは、操作ロジックを記述するための高レベルのAPIと抽象化を提供し、オペレータのスキャフォールディングおよびコード生成用のツールも提供します。
Operator SDKの詳細は、オペレータ・フレームワークのサイトを参照してください。
オペレータSDKおよびOLMのインストール
次のステップを使用して、オペレータSDKをローカル・マシンにインストールします。
- オペレータSDKのインストール
Operator SDKのインストール・ページに移動し、オペレーティング・システムのインストール手順に従います。
- オペレータ・ライフサイクル・マネージャ(OLM)をインストールします。OLMは、ユーザーがKubernetesネイティブ・アプリケーション(オペレータ)のライフサイクルと、クラスタで実行されている関連サービスをインストール、更新および管理するのに役立ちます。次のコマンドを使用してインストールします。
operator-sdk olm install --version 0.20.0
ノート
このステップを実行するには、マシンでKubernetesクラスタへのローカル・アクセスを設定する必要があります。 - クラスタ内の必要なすべての顧客リソース定義(CRD)を最初にチェックして、OLMのインストールを確認します。次のコマンドを実行します
operator-sdk olm status
コマンドを実行すると、次のように出力されます。
INFO[0003] Fetching CRDs for version "v0.20.0" INFO[0003] Fetching resources for resolved version "v0.20.0" INFO[0021] Successfully got OLM status for version "v0.20.0" NAME NAMESPACE KIND STATUS operatorgroups.operators.coreos.com CustomResourceDefinition Installed operatorconditions.operators.coreos.com CustomResourceDefinition Installed olmconfigs.operators.coreos.com CustomResourceDefinition Installed installplans.operators.coreos.com CustomResourceDefinition Installed clusterserviceversions.operators.coreos.com CustomResourceDefinition Installed olm-operator-binding-olm ClusterRoleBinding Installed operatorhubio-catalog olm CatalogSource Installed olm-operators olm OperatorGroup Installed aggregate-olm-view ClusterRole Installed catalog-operator olm Deployment Installed cluster OLMConfig Installed operators.operators.coreos.com CustomResourceDefinition Installed olm-operator olm Deployment Installed subscriptions.operators.coreos.com CustomResourceDefinition Installed aggregate-olm-edit ClusterRole Installed olm Namespace Installed global-operators operators OperatorGroup Installed operators Namespace Installed packageserver olm ClusterServiceVersion Installed olm-operator-serviceaccount olm ServiceAccount Installed catalogsources.operators.coreos.com CustomResourceDefinition Installed system:controller:operator-lifecycle-manager ClusterRole Installed
OCI Service Operator for Kubernetesのデプロイ
Kubernetes OLMバンドルのOCI Service Operatorには、CRD、RBAC、ConfigMapsなど、必要なすべての詳細が含まれます。デプロイメントでは、OCI Service Operator for KubernetesがKubernetesクラスタにインストールされます。まず、演算子のネームスペースを作成します。
kubectl create ns oci-service-operator-system
アプリケーション・ネームスペースにデプロイされている場合、演算子は通常機能します。このオプションは、オペレータ名前空間を作成するかわりに使用します。
接続されていないレルムの場合は、https://github.com/oracle/oci-service-operator/blob/main/BUILD_OSOK_OPERATOR.mdのステップに従って独自のOSOK演算子を作成します。次のコマンドのバンドルを、OSOKオペレータをインストールするために手動で作成されたバンドルに置き換えます。
次のコマンドを使用して、KubernetesクラスタのOCI Service Operator for Kubernetes Operatorをネームスペース(OCI-service-operator-system
)にインストールします。
operator-sdk run bundle iad.ocir.io/oracle/oci-service-operator-bundle:X.X.X -n oci-service-operator-system --timeout 5m
X.X.Xを現在のバージョンのOCI Service Operator for Kubernetesに置き換えます。現在のバージョンを取得するには、GitHubリリースサイト(https://github.com/oracle/oci-service-operator/releases)にアクセスしてください。
コマンドを実行するには、Dockerの
iad.ocir.io
にあるOracle Registryにログインする必要があります。ログインしていることを確認するには、Docker CLIを使用したイメージのプルを参照してください。コマンドを実行すると、次のように出力されます。
INFO[0036] Successfully created registry pod: iad-ocir-io-oracle-oci-service-operator-bundle-X-X-X
INFO[0036] Created CatalogSource: oci-service-operator-catalog
INFO[0037] OperatorGroup "operator-sdk-og" created
INFO[0037] Created Subscription: oci-service-operator-vX-X-X-sub
INFO[0040] Approved InstallPlan install-tzk5f for the Subscription: oci-service-operator-vX-X-X-sub
INFO[0040] Waiting for ClusterServiceVersion "oci-service-operator-system/oci-service-operator.vX.X.X" to reach 'Succeeded' phase
INFO[0040] Waiting for ClusterServiceVersion "oci-service-operator-system/oci-service-operator.vX.X.X" to appear
INFO[0048] Found ClusterServiceVersion "oci-service-operator-system/oci-service-operator.vX.X.X" phase: Pending
INFO[0049] Found ClusterServiceVersion "oci-service-operator-system/oci-service-operator.vX.X.X" phase: InstallReady
INFO[0053] Found ClusterServiceVersion "oci-service-operator-system/oci-service-operator.vX.X.X" phase: Installing
INFO[0066] Found ClusterServiceVersion "oci-service-operator-system/oci-service-operator.vX.X.X" phase: Succeeded
INFO[0067] OLM has successfully installed "oci-service-operator.vX.X.X"
インストールを確認するには、次のステップを実行します。
kubectl
を使用してカスタム定義を確認します。$ kubectl get crds | grep "servicemesh.oci.oracle.com" | awk -F. '{print $1}' accesspolicies ingressgatewaydeployments ingressgatewayroutetables ingressgateways meshes virtualdeploymentbindings virtualdeployments virtualserviceroutetables virtualservices
kubectl
を使用して、すべてのサービス・メッシュ・リソースに対応するWebフックが正常にインストールされたことを確認します。まず、Webフックの検証を確認します。
$ kubectl get validatingwebhookconfiguration | grep "servicemesh.oci.oracle.cloud.com" | awk -F. '{print $1}' ap-validator ig-validator igd-validator igrt-validator mesh-validator vd-validator vdb-validator vs-validator vsrt-validator
次に、Webフックの変更を確認します。
$ kubectl get mutatingwebhookconfiguration | grep "servicemesh.oci.oracle.com" | awk -F. '{print $1}' proxy-injector
トラブルシューティングの詳細は、「サービス・メッシュのトラブルシューティング」を参照してください。
メトリック・サーバーのインストール
イングレス・ゲートウェイを使用する場合は、メトリック・サーバーをインストールします。Kubernetes Horizontal Pod Autoscalarは、メトリック・サーバーを使用して、CPU使用率に基づいてイングレス・ゲートウェイ内のポッド数をスケーリングします。メトリック・サーバーは次のコマンドを使用してインストールします。
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/high-availability.yaml
別の方法として、独自の証明書(BYOC)を使用して通信を保護します。Kubernetesは、certificates.k8s.io
APIを提供します。これにより、ユーザーが制御する認証局(CA)によって署名されたTLS証明書をプロビジョニングできます。CAおよび証明書は、信頼を確立するためにワークロードで使用されます。KubernetesのOCI Service OperatorとKubernetes間の信頼を確立するには、certificates.k8s.io
を使用してCAと証明書を作成します。oci-service-operator-controller-manager-service-cert
シークレットにパッチを適用して、新しいCAおよび証明書を使用します。
詳細は、クラスタでのTLS証明書の管理を参照してください
CAおよびCertificateBundleを生成するには、cfssl(Cloudfare SSL)またはOpenSSLなどのツールを使用します。ユーザーが作成したCAを使用するには、デフォルト構成をインストールし、OLM for OCI Service Operator for Kubernetesによって生成されたkubernetes.io/tls
にパッチを適用してください。次のステップでは、CFSSLを使用した構成ステップを示します。
次のステップで、
{operators-namespace}
を、演算子が実行するネームスペースに置き換えます。- 次のステップ
cfssl
を使用して、証明書署名リクエスト(CSR)および秘密キーを作成します:cat <<EOF | cfssl genkey - | cfssljson -bare server { "hosts": [ "oci-service-operator-webhook-service.{operators-namespace}.svc.cluster.local", "oci-service-operator-controller-manager-service.{operators-namespace}.svc.cluster.local" ], "CN": "kube.operator.cert", "key": { "algo": "ecdsa", "size": 256 } } EOF
このコマンドは2つのファイルを生成します。
server.CSR
ファイルには、PEMでエンコードされたCSRが含まれています。server-key.PEM
ファイルには、まだ作成されていない証明書へのPEMエンコードされたキーが含まれています。 - CSRマニフェストを作成し、次の項に従ってKubernetesに送信します。
cat <<EOF | kubectl apply -f - apiVersion: certificates.k8s.io/v1 kind: CertificateSigningRequest metadata: name: oci-service-operator-controller.{operators-namespace} spec: request: $(cat server.csr | base64 | tr -d '\n') signerName: oci.com usages: - digital signature - key encipherment - server auth EOF
このコマンドの実行後、作成されたCSRは保留状態になります。
kubectl describe csr {csr-name}
CSRを承認します。
kubectl certificate approve {csr-name}
承認後に状態を検証します。値が
CONDITION-Approved
であることを確認します。 - CSRに署名します。
- 認証局キー・ファイル(
ca-key.pem
)および証明書(ca.pem
)を作成します。cat <<EOF | cfssl gencert -initca - | cfssljson -bare ca { "CN": "My Example Signer", "key": { "algo": "rsa", "size": 2048 } } EOF
- サーバー署名リクエストを作成して証明書を発行します。
server-signing-config.json
ファイルを作成します。{ "signing": { "default": { "usages": [ "digital signature", "key encipherment", "server auth" ], "expiry": "876000h", "ca_constraint": { "is_ca": false } } } }
server-signing-config.json
署名構成、認証局のキー・ファイルおよび証明書ファイルを使用して、証明書リクエストに署名します。kubectl get csr oci-service-operator-controller.{operators-namespace} -o jsonpath='{.spec.request}' | \ base64 --decode | \ cfssl sign -ca ca.pem -ca-key ca-key.pem -config server-signing-config.json - | \ cfssljson -bare ca-signed-server
- 署名付き証明書をアップロードします。
kubectl get csr oci-service-operator-controller.{operators-namespace} -o json | \ jq '.status.certificate = "'$(base64 ca-signed-server.pem | tr -d '\n')'"' | \ kubectl replace --raw /apis/certificates.k8s.io/v1/certificatesigningrequests/oci-service-operator-controller.{operators-namespace}/status -f -
前述の変更を適用した後、CSR条件が「承認済、発行済」であることを確認します。
- 証明書をダウンロードします。
kubectl get csr {csr-name} -o jsonpath='{.status.certificate}' \ | base64 --decode > server.crt
前述のコマンドを実行すると、
server.crt
ファイルが作成されます。
- 認証局キー・ファイル(
- ステップ(3)(d)の
server.crt
、ステップ(3)(a)のca-key.pem
ファイルおよびステップ(1)のserver-key.pem
ファイルをエンコードおよびパッチ適用します。kubectl patch secret oci-service-operator-controller-manager-service-cert --namespace {operators-namespace} --type merge --patch }}{{'{"data": "olmCAKey": "'$(base64 ca.pem | tr -d }}{{'\n')'", "tls.key": "'$(base64 server-key.pem | tr -d }}{{'\n')'", "tls.crt": "'$(base64 ca-signed-server.pem | tr -d }}{{'\n')'"}'
oci-service-operator-controller-manager-service-cert
に最新の値が含まれていることを検証します。- 前述のステップが完了すると、リソースが作成され、機能しています。ただし、
x509: certificate signed by unknown authority
というエラーが表示された場合は、次のステップを確認してトラブルシューティングします。- CSRに「承認済、発行済」の条件があるかどうかを確認します。それ以外の場合は、ステップ(3)(c)から再度開始します。
- base64デコードされた
olmCAKey
がステップ(3)(d)のserver.crt
と一致するかどうかを検証します。それ以外の場合は、olmCAKey
をserver.crt
ファイルで更新します。 - base64デコードされた
tls.key
がステップ(1)のserver-key.pem
ファイルと一致するかどうかを検証します。それ以外の場合は、tls.key
をserver-key.pem
ファイルで更新します。 - base64デコードされた
tls.crt
がステップ(3)(a)のca-key.pem
ファイルと一致するかどうかを検証します。それ以外の場合は、ca-key.pem
ファイルでtls.crt
を更新します。
サービス・メッシュに必要なリソースの設定
ステップの設定
サービス メッシュの使用を開始するには、独自のメッシュを作成する前に、いくつかの要件を満たす必要があります。
管理者でない場合は、サービス・メッシュ、Vaultおよび証明書の3つのサービスのリソースへのアクセス権を管理者に依頼してください。管理者は、Identity and Access Management (IAM)ポリシーを使用してこれらのサービスへのアクセス権を付与できます。
サービス・メッシュを使用するようにテナンシを準備するには、OCIアカウントで次のステップを実行します。
- ボールトを作成して、認証局の暗号化キーを格納します。詳細は、ボールトの管理を参照してください。
VaultのHardware Security Module (HSM)暗号化鍵を追加します。キーの管理を参照してください。認証局キーの場合、Rivest- Shamir- Adleman (RSA) 2,048-bitキーまたは4,096-bitキーを使用できます。
- 認証局を作成します。「証明書認証局の管理」を参照してください。 ノート
認証局の「証明書の最大有効期間(日数)」設定は、少なくとも45日である必要があります。 - クライアントがアプリケーションへのTLS接続を確立できるように、TLS証明書を作成します。この証明書は、イングレス・ゲートウェイTLS暗号化へのHTTPリクエストを保持します。「証明書の管理」を参照してください。
詳細情報
サービス・メッシュに関連するIAMポリシーの詳細は、次を参照してください:
- サービス・メッシュのIAMポリシーを追加します。
- 証明書のIAMポリシーを追加します。
- VaultのIAMポリシーを追加します。