このページでは、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 の統合を使用してのみ登録できます。Ingress、ゲートウェイ、その他のリソースは、Service Directory API を使用して手動で登録する必要があります。
- クラスタ内のサービスを Service Directory に同期するには、まず フリートを使用して GKE クラスタを登録する必要があります。GKE クラスタを登録する方法の詳細については、クラスタを登録するをご覧ください。
- すべての Service Directory リソースは、クラスタのプロジェクトではなく、フリート プロジェクトに登録されます。
- この統合を使用して登録された Service Directory エンティティは変更できません。Service Directory に伝播するように、GKE サービス リソース自体に変更を加える必要があります。
始める前に
- アカウントにログインします。 Google Cloud を初めて使用する場合は、 アカウントを作成して、実際のシナリオで Google プロダクトのパフォーマンスを評価してください。 Google Cloud新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud 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 Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud 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 Google Cloud 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 登録ポリシーを構成する
登録ポリシーは、GKE 内のどの種類のサービスが Service Directory に自動的にインポートされるかを定義します。このポリシーで構成可能なオプションは次のとおりです。
resources: インポートされる GKE リソースのタイプ。複数のリソースタイプを指定できます。リソースはGroupとKindで識別されます。デフォルトでは、Groupはcoreです。Kind: serviceのみを使用できます。selector: GKE リソースに適用される key:value ラベルに一致する GKE ラベルセレクタ。デフォルトでは、リソースは選択されていません。annotationsToSync: Service Directory に同期されるリソースのアノテーション キー。このリストが空の場合、リソースはアノテーションなしで Service Directory に同期されます。
各 Namespace には単一のポリシーを定義する必要があります。このポリシーには name:
"default" が必要です。Controller では、他の名前は許可されず、調整もされません。
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 つだけ含めることができます。1 つの Namespace に複数のポリシーがある場合、GKE は 1 つのポリシーをアクティブ ポリシーとして選択し、他のポリシーを非アクティブとしてマークします。LABELS: ラベルセレクタ(sd-import: "true"など)。 この値は、種類で指定されたリソースに適用されます。デフォルトでは、 リソースは選択されていません。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
確認するには、サービスの Service Directory クエリを
gcloud service-directory services resolve
コマンドを使用して実行します。
gcloud
gcloud beta service-directory services resolve SERVICE_NAME \ --location=LOCATION \ --namespace=NAMESPACE
次のように置き換えます。
SERVICE_NAME: サービスの名前または完全修飾識別子(hello-app-serviceなど)LOCATION: サービスのリージョンの名前(us-central1など)NAMESPACE: サービスの 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 の使用時に発生する可能性のある一般的な問題の解決策については、トラブルシューティングをご覧ください。