このページでは、Google Kubernetes Engine(GKE)で Service Directory を構成し、GKE クラスタを Service Directory に自動的に登録する方法について説明します。GKE 用 Service Directory は、Autopilot GKE クラスタまたは Standard GKE クラスタで構成できます。2 つのモードについては、GKE のオペレーション モードを選択するをご覧ください。
GKE 用 Service Directory の詳細については、GKE 用 Service Directory の概要をご覧ください。
制限事項
GKE 用 Service Directory には次の制限があります。
- サービスを登録できるのは、Service Directory と GKE の統合を使用する場合のみです。Service Directory API を使用して、上り(内向き)トラフィック、ゲートウェイ、その他のリソースを手動で登録する必要があります。
- これらのクラスタのサービスを Service Directory に同期するには、フリートを使用して GKE クラスタを登録する必要があります。GKE クラスタを登録する方法の詳細については、クラスタの登録をご覧ください。
- すべての Service Directory リソースは、クラスタのプロジェクトではなく、フリート プロジェクトに登録されます。
- この統合を使用して登録された Service Directory エンティティは変更できません。Service Directory に反映されるように、GKE サービス リソース自体に変更を加える必要があります。
始める前に
-
In the Cloud de Confiance console, on the project selector page, select or create a Cloud de Confiance project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Cloud de Confiance project.
- GKE クラスタをフリートに登録する必要があります。GKE クラスタを登録するには、クラスタの登録の手順に沿って操作します。
GKE クラスタを設定する
GKE クラスタを設定する手順は次のとおりです。
- Service Directory GKE フリート機能を有効にします。
- Service Directory 登録ポリシーを構成します。
- GKE サービスをデプロイします。
Service Directory GKE フリート機能を有効にする
Service Directory GKE フリート機能を有効にするには、gcloud container hub コマンドを実行します。
gcloud
gcloud alpha container hub service-directory enable
サービスの Service Directory 登録ポリシーを構成する
登録ポリシーは、Service Directory によって自動的にインポートされる GKE 内のサービスの種類を定義します。このポリシーで構成可能なオプションを次に示します。
resources: インポートされる GKE リソースのタイプ。複数のリソースタイプを指定できます。リソースはGroupとKindで識別されます。デフォルトでは、Groupはcoreです。Kind: serviceのみ利用可能です。selector: GKE リソースに適用される key:value ラベルと一致する GKE ラベル セレクタ。デフォルトでは、リソースは選択されていません。annotationsToSync: Service Directory に同期されるリソースのアノテーション キー。このリストが空の場合、リソースはアノテーションなしで Service Directory に同期されます。
各 Namespace は単一のポリシーを定義する必要があります。このポリシーには name:
"default" が必要です。コントローラは、他の名前を許可または調整しません。
ServiceDirectoryRegistrationPolicy を構成します。
次のマニフェストは、ServiceDirectoryRegistrationPolicy を記述しています。
apiVersion: networking.gke.io/v1alpha1 kind: ServiceDirectoryRegistrationPolicy metadata: # Only the name "default" is allowed. name: default # The ServiceDirectoryRegistrationPolicy is a namespaced resource namespace: NAMESPACE spec: resources: # Kind specifies the types of Kubernetes resources that can be synced into Service Directory. - kind: Service # Selector is a label selector for the resource types specified in Kind. selector: matchLabels: LABELS # annotationsToSync specifies the annotations that are matched and imported. # Any annotations that do not match this set of keys will not be imported into Service Directory. annotationsToSync: - ANNOTATIONS
次のように置き換えます。
NAMESPACE: Namespace の名前。Namespace にはServiceDirectoryRegistrationPolicyを 1 つだけ含めることができます。単一の Namespace に複数のポリシーがある場合、GKE は 1 つのポリシーをアクティブ ポリシーとして選択し、他のポリシーを非アクティブとしてマークします。LABELS: ラベルセレクタ(例:sd-import: "true")。この値は、kind で指定されたリソースに適用されます。デフォルトでは、リソースは選択されていません。ANNOTATIONS: 照合されてインポートされるアノテーションのリスト(- cloud.google.com/load-balancer-typeなど)。選択した GKE リソースにリスト内のアノテーションのいずれかが含まれている場合、アノテーションとその値はリソースとともに Service Directory に同期されます。このリストが空の場合、リソースはアノテーションなしで Service Directory に同期されます。
マニフェストを registration_policy.yaml として保存します。
マニフェストをクラスタに適用する
マニフェストをクラスタに適用するには、kubectl apply -f コマンドを実行します。
kubectl apply -f registration_policy.yaml
GKE サービスをデプロイする
リージョンの GKE クラスタに GKE リージョン外部パススルー ネットワーク ロードバランサ サービスとアプリケーションをデプロイします。たとえば、リージョンが us-central1 の場合は、GKE クラスタ gke-us-central1 にデプロイします。
これにより、GKE サービスが Service Directory にインポートされます。
YAML ファイルを作成し、他の GKE リソースと同様に適用します。LoadBalancer タイプの Service のマニフェストは次のとおりです。
apiVersion: v1
kind: Service
metadata:
name: hello-app-service
labels:
sd-import: "true"
annotations:
cloud.google.com/load-balancer-type: "Internal"
spec:
type: LoadBalancer
selector:
app: hello
ports:
- name: tcp-port
protocol: TCP
port: 80
targetPort: 8080
Deployment のマニフェストは次のとおりです。
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: hello
name: hello-app
spec:
replicas: 2
selector:
matchLabels:
app: hello
template:
metadata:
labels:
app: hello
spec:
containers:
- image: gcr.io/google-samples/hello-app:1.0
name: hello
ports:
- containerPort: 8080
protocol: TCP
確認するには、gcloud service-directory services resolve コマンドを使用して、サービスの Service Directory クエリを実行します。
gcloud
gcloud beta service-directory services resolve SERVICE_NAME \ --location=LOCATION \ --namespace=NAMESPACE
次のように置き換えます。
SERVICE_NAME: サービスの名前または完全修飾識別子(例:hello-app-service)LOCATION: サービスのリージョン名(例:us-central1)NAMESPACE: サービスの名前空間の名前(例:default)
出力にはサービスが表示されます。出力は次のようになります。
service:
endpoints:
- address: 10.140.0.5
metadata:
cloud.google.com/load-balancer-type: "Internal"
name: projects/my-project/locations/us-central1/namespaces/default/services/hello-app-service/endpoints/my-cluster-12345
port: 80
network: projects/123456789/locations/global/networks/default
name: projects/my-project/locations/us-central1/namespaces/default/services/hello-app-service
課金
Service Directory は、GKE 統合によって作成されたリソースに対して課金しません。ただし、API 呼び出しには料金がかかります。料金の詳細については、Service Directory の料金をご覧ください。
次のステップ
- Service Directory の概要については、Service Directory の概要をご覧ください。
- Service Directory の使用時に発生する可能性のある一般的な問題の解決策については、トラブルシューティングをご覧ください。