GKE 用 Service Directory の概要

Google Kubernetes Engine(GKE)用 Service Directory は、すべての GKE デプロイ全体にわたるすべてのサービスを単一のビューで提供します。さまざまなタイプの GKE サービスを追加してアノテーションを付け、Service Directory でこれらのサービスを確認できます。

GKE 用 Service Directory には次の機能があります。

  • これにより、gRPC と HTTP を介してサービスを検出でき、Service Directory DNS ゾーンを使用して DNS 経由でサービスを解決できます。Service Directory と Cloud DNS の統合により、Service Directory の DNS ゾーンを構成できます。
  • Service Directory は GKE の外部でサービスを登録するため、GKE サービスと非 GKE サービスが互いを簡単に検出できます。
  • Service Directory は、IAM 権限と VPC Service Controls のチェックを実施して、顧客データの適切なセキュリティとプライバシーを確保します。
  • Service Directory for GKE は、Autopilot GKE クラスタまたは Standard GKE クラスタで構成できます。2 つのモードについては、GKE のオペレーション モードを選択するをご覧ください。

Service Directory を構成して GKE サービスを Service Directory に自動的に登録する方法については、GKE 用 Service Directory の構成をご覧ください。

サービス マッピング

Service Directory にサービスを登録すると、GKE クラスタの Kubernetes Namespace とリージョンの名前を使用して、Google Cloud フリート プロジェクトにサービスが作成されます。次の表に、すべての GKE サービスタイプについて、GKE サービスのプロパティが Service Directory で作成されたサービスのプロパティにマッピングされる方法を示します。

最上位プロパティ

Service Directory プロパティ GKE プロパティ
プロジェクト フリート プロジェクト
リージョン クラスタのリージョン
Namespace Kubernetes Namespace

LoadBalancer サービスタイプ

次の例は、GKE LoadBalancer サービスが Service Directory にマッピングされる方法を示しています。Service Directory サービスは、フリート プロジェクトの Kubernetes Namespace と GKE クラスタのリージョンと同じ名前の Namespace に存在します。

Service Directory プロパティ GKE プロパティ
サービス名 サービス名
エンドポイント名 Service Directory コントローラによって自動生成されます。
エンドポイントの IP アドレス LoadBalancer イングレス
エンドポイント ポート LoadBalancer Service のポート
エンドポイント ネットワーク クラスタの VPC ネットワーク

次に、GKE LoadBalancer サービスの例を示します。

apiVersion: v1
kind: Service
metadata:
  name: hello-app
  annotations:
    cloud.google.com/load-balancer-type: "Internal"
  labels:
    app: hello-app
    sd-import: "true"
spec:
  ports:
  - port: 80
    targetPort: 8080
    protocol: TCP
  selector:
    app: hello-app
  type: LoadBalancer
status:
  loadBalancer:
    ingress:
    - ip: 10.140.0.5

Service Directory サービスの例を次に示します。

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/endpoints/gke-hello-cluster-12345
    port: 80
    network: projects/my-project/locations/global/networks/default
  name: projects/my-project/locations/us-central1/namespaces/default/services/hello-app

NodePort サービスタイプ

次の例は、GKE NodePort Service が Service Directory にマッピングされる方法を示しています。Service Directory サービスは、GKE クラスタのハブとリージョンのプロジェクトの Kubernetes Namespace と同じ名前の Namespace に存在します。

Service Directory プロパティ GKE プロパティ
サービス名 サービス名
エンドポイント名 Service Directory コントローラによって自動生成されます。
エンドポイントの IP アドレス サービスの Pod を実行する各ノードのノード内部 IP アドレス
エンドポイント ポート 静的ノードポート
エンドポイント ネットワーク クラスタの VPC ネットワーク

次に、GKE NodePort サービスの例を示します。

apiVersion: v1
kind: Service
metadata:
  name: hello-app
  annotations:
    key1: "value1"
spec:
  ports:
  - nodePort: 30007
    port: 80
    targetPort: 8080
    protocol: TCP
  selector:
    app: hello-app
  type: NodePort
  

GKE ノードの例を次に示します。

apiVersion: v1
items:
- apiVersion: v1
  kind: Node
  metadata:
    name: gke-hello-cluster-default-pool-a40cbab6-d2rr
  status:
    addresses:
    - address: 10.142.0.27
      type: InternalIP
    - address: 34.73.248.170
- apiVersion: v1
  kind: Node
  metadata:
    name: gke-hello-cluster-default-pool-a40cbab6-kb38
  status:
    addresses:
    - address: 10.142.0.29
      type: InternalIP
    - address: 35.196.219.215
      type: ExternalIP
- apiVersion: v1
  kind: Node
  metadata:
    name: gke-hello-cluster-default-pool-a40cbab6-x34q
  status:
    addresses:
    - address: 10.142.0.28
      type: InternalIP
    - address: 34.75.202.26
      type: ExternalIP
    

Service Directory サービスの例を次に示します。

service:
  endpoints:
  - address: 10.142.0.27
    metadata:
      key1: value1
    name: projects/my-project/locations/us-central1/namespaces/default/services/hello-app/endpoints/gke-hello-cluster-12345
    port: 30007
    network: projects/my-project/locations/global/networks/default
  - address: 10.142.0.28
    metadata:
      key1: value1
    name: projects/my-project/locations/us-central1/namespaces/default/services/hello-app/endpoints/gke-hello-cluster-23456
    port: 30007
    network: projects/my-project/locations/global/networks/default
  - address: 10.142.0.29
    metadata:
      key1: value1
    name: projects/my-project/locations/us-central1/namespaces/default/services/hello-app/endpoints/gke-hello-cluster-34567
    port: 30007
    network: projects/my-project/locations/global/networks/default
  name: projects/my-project/locations/us-central1/namespaces/default/services/hello-app
  

ClusterIP サービス

次の例は、GKE ClusterIP サービスが Service Directory にマッピングされる方法を示しています。Service Directory サービスは、フリート プロジェクトと GKE クラスタのリージョンの Kubernetes Namespace と同じ名前の Namespace に存在します。

Service Directory プロパティ GKE プロパティ
サービス名 サービス名
エンドポイント名 Service Directory コントローラによって自動生成されます。
エンドポイントの IP アドレス ClusterIP
エンドポイント ポート サービスポート
エンドポイント ネットワーク クラスタの VPC ネットワーク

次に、GKE ClusterIP サービスの例を示します。

apiVersion: v1
kind: Service
metadata:
  name: hello-app
  annotations:
    key1: "value1"
  labels:
    app: hello-app
    sd-import: "true"
spec:
  clusterIP: 10.15.254.17
  ports:
  - port: 80
    targetPort: 8080
    protocol: TCP
  selector:
    app: hello-app
  type: ClusterIP
  

Service Directory サービスの例を次に示します。

service:
  endpoints:
  - address: 10.15.254.17
    metadata:
      key1: value1
    name: projects/my-project/locations/us-central1/namespaces/default/services/hello-app/endpoints/gke-hello-cluster-12345
    port: 80
    network: projects/my-project/locations/global/networks/default
  name: projects/my-project/locations/us-central1/namespaces/default/services/hello-app
  

次のステップ