ノード間のトラフィック: ノードは Compute Engine の VM です。 Google Cloud 本番環境ネットワーク内のノード間の接続には、認証と暗号化が適用されます。詳細については、転送データの暗号化に関するホワイトペーパーで VM 間の説明に関するセクションをご覧ください。
Pod 間のトラフィック: Pod が別の Pod にリクエストを送信しても、そのトラフィックはデフォルトでは認証されません。GKE では、ネットワーク レイヤにある異なるノードの Pod 間のトラフィックが暗号化されます。同じノードの Pod 間のトラフィックは、デフォルトでは暗号化されません。ネットワーク レイヤの暗号化の詳細については、Google Cloud の仮想ネットワーク暗号化と認証をご覧ください。
Pod 間のトラフィックは NetworkPolicy で制限できます。Cloud Service Mesh などのサービス メッシュを使用すると、同じノード上のトラフィックを含むすべての Pod 間トラフィックを暗号化できます。また、別の方法でアプリケーション レイヤでの暗号化を行うことも可能です。
コントロール プレーンのコンポーネント間のトラフィック: コントロール プレーンで実行されるさまざまなコンポーネント間のトラフィックは、TLS を使用して認証および暗号化されます。トラフィックが、ファイアウォールで保護された Google 所有のネットワークを離れることはありません。
ルート オブ トラスト
GKE の構成は次のとおりです。
クラスタルート認証局(CA)は、API サーバーと kubelet のクライアント証明書を検証するために使用されます。つまり、コントロール プレーンとノードは同じ信頼のルートになります。クラスタ ノードプール内の kubelet のすべてがこの CA から、certificates.k8s.io API を使用して証明書署名リクエストを送信することにより証明書をリクエストできます。クラスタルート CA の存続期間で説明されているように、ルート CA の存続期間は限られています。
コントロール プレーン VM で etcd データベース インスタンスを実行するクラスタでは、クラスタごとの etcd ピア CA も使用され、etcd インスタンス間の信頼関係が確立されます。
すべての GKE クラスタでは、Kubernetes API サーバー間と etcd API 間の信頼を確立するために、個別の etcd API CA が使用されます。
API サーバーと kubelet
API サーバーと kubelet は、信頼に関してクラスタルート CA に依存しています。GKE では、コントロール プレーンの API 証明書がクラスタルート CA によって署名されます。各クラスタがそれぞれの CA を実行するため、あるクラスタの CA の信頼が損なわれても、他のクラスタ CA は影響を受けません。
内部サービスが管理するこの CA のルートキーは、エクスポートできません。このサービスが証明書署名リクエストを、各 GKE クラスタの kubelet からの同リクエストも含めて受け入れます。クラスタ内の API サーバーが信頼を損なっても、CA は信頼を損なわないため、他のクラスタは影響を受けません。
クラスタ内の各ノードには共有シークレットが作成時に挿入されるので、それを使用して証明書署名リクエストをクラスタルート CA に送信して kubelet クライアント証明書を取得できます。そしてこれらの証明書は、kubelet がそのリクエストを API サーバーに対して認証するために使用します。この共有シークレットには、Shielded GKE Nodes または Workload Identity Federation for GKE を有効にしない限り、ノード上の Pod から到達可能です。
クラスタルート CA の存続期間
クラスタルート CA の存続期間は限られているので、その後は期限切れの CA によって署名された証明書がすべて無効になります。認証情報の存続期間を確認するの手順に沿って、クラスタの CA のおおよその存続期限を確認します。
既存のルート CA が期限切れになる前に、認証情報を手動でローテーションする必要があります。CA が期限切れになり、認証情報をローテーションしないと、クラスタが復元不能な状態になる可能性があります。GKE には、復元できないクラスタを試して防ぐための次のメカニズムがあります。
GKE クラスタでは、Kubernetes API オブジェクトの状態が Key-Value ペアとしてデータベースに保存されます。コントロール プレーンの Kubernetes API サーバーは、etcd API を使用してこのデータベースとやり取りします。GKE では、クラスタ状態データベースは次のいずれかのテクノロジーを使用して実行されます。
etcd: クラスタは、コントロール プレーン VM で実行される etcd インスタンスを使用します。
Spanner: クラスタは、コントロール プレーン VM の外部で実行される Spanner データベースを使用します。
クラスタで使用されているデータベース テクノロジーに関係なく、すべての GKE クラスタはコントロール プレーンで etcd API を提供します。クラスタ状態データベースに関連するトラフィックを暗号化するために、GKE では次のクラスタごとの CA のいずれかまたは両方を使用します。
etcd API CA: etcd API エンドポイントとの間のトラフィックの証明書の署名に使用されます。etcd API CA は、すべての GKE クラスタで実行されます。
etcd ピア CA: コントロール プレーンの etcd データベース インスタンス間のトラフィックの証明書に署名するために使用されます。etcd ピア CA は、etcd データベースを使用するすべてのクラスタで実行されます。Spanner データベースを使用するクラスタでは、etcd ピア CA は使用されません。
etcd API CA のルートキーは、コントロール プレーンが実行されている各 Compute Engine インスタンスのメタデータに配布されます。etcd API CA は、クラスタ間で共有されません。
etcd の CA 証明書は 5 年間有効です。これらの証明書が期限切れになる前に、GKE により自動的にローテーションが行われます。
証明書のローテーション
クラスタの API サーバーと kubelet の証明書すべてをローテーションするには、認証情報のローテーションを行います。etcd 証明書のローテーションをトリガーする方法はありません。これは GKE で管理されています。
[[["わかりやすい","easyToUnderstand","thumb-up"],["問題の解決に役立った","solvedMyProblem","thumb-up"],["その他","otherUp","thumb-up"]],[["わかりにくい","hardToUnderstand","thumb-down"],["情報またはサンプルコードが不正確","incorrectInformationOrSampleCode","thumb-down"],["必要な情報 / サンプルがない","missingTheInformationSamplesINeed","thumb-down"],["翻訳に関する問題","translationIssue","thumb-down"],["その他","otherDown","thumb-down"]],["最終更新日 2025-07-29 UTC。"],[],[],null,["# Cluster trust\n\n[Autopilot](/kubernetes-engine/docs/concepts/autopilot-overview) [Standard](/kubernetes-engine/docs/concepts/choose-cluster-mode)\n\n*** ** * ** ***\n\nThis page describes the trust model in Google Kubernetes Engine (GKE) clusters, including\ncommunication within clusters and how requests are authenticated\nfor components like control planes.\n\nThis document is for\nSecurity specialists who want to understand GKE's cluster trust model.\nTo learn more about\ncommon roles and example tasks that we reference in Google Cloud content, see\n[Common GKE user roles and tasks](/kubernetes-engine/enterprise/docs/concepts/roles-tasks).\n\nBefore reading this page, ensure that you're familiar with the following:\n\n- [General overview of GKE security](/kubernetes-engine/docs/concepts/security-overview)\n- [General overview of GKE networking](/kubernetes-engine/docs/concepts/network-overview)\n\nIntracluster communication\n--------------------------\n\nGKE applies various security mechanisms to traffic between\ncluster components, as follows:\n\n- **Traffic between the control plane and nodes** : the control plane communicates\n with a node for managing containers. When the control plane sends a request,\n (for example, `kubectl logs`) to nodes, the request is sent over a Konnectivity\n proxy tunnel. Requests that the control plane sends are authenticated and\n protected by TLS. When a node sends a\n request to the control plane, for example, from the kubelet to the API server,\n that request is authenticated and encrypted using mutual TLS (mTLS).\n\n All newly created and updated clusters use TLS 1.3 for control plane to node\n communication. TLS 1.2 is the minimum supported version for control plane to\n node communication.\n- **Traffic between nodes** : nodes are Compute Engine VMs. Connections between\n nodes inside the Google Cloud production network are authenticated and\n encrypted. For details, refer to the VM-to-VM section of the\n [Encryption in Transit whitepaper](/docs/security/encryption-in-transit#virtual_machine_to_virtual_machine).\n\n- **Traffic between Pods** : when a Pod sends a request to another Pod, that traffic\n isn't authenticated by default. GKE encrypts traffic between\n Pods on different nodes at the network layer. Traffic between Pods on the\n *same node* isn't encrypted by default. For details about the network-layer\n encryption, see\n [Google Cloud virtual network encryption and authentication](/docs/security/encryption-in-transit#virtual-network).\n\n You can restrict Pod-to-Pod traffic with a\n [NetworkPolicy](/kubernetes-engine/docs/how-to/network-policy), and you can\n encrypt all Pod-to-Pod traffic, including traffic on the same node, by using a\n service mesh like [Cloud Service Mesh](/anthos/service-mesh)\n or a different method of application-layer encryption.\n- **Traffic between control plane components**: traffic between various\n components that run on the control plane is authenticated and encrypted using\n TLS. The traffic never leaves a Google-owned network that's protected by\n firewalls.\n\nRoot of trust\n-------------\n\nGKE has the following configuration:\n\n- The [cluster root Certificate Authority (CA)](https://kubernetes.io/docs/tasks/tls/managing-tls-in-a-cluster/) is used to validate the API server and kubelets' client certificates. That is, control planes and nodes have the same root of trust. Any kubelet within the cluster node pool can request a certificate from this CA using the `certificates.k8s.io` API, by submitting a [certificate signing request](https://kubernetes.io/docs/tasks/tls/managing-tls-in-a-cluster/#create-a-certificate-signing-request). The root CA has a limited lifetime as described in the [Cluster root CA lifetime](#root-ca-lifetime) section.\n- In clusters that run etcd database instances on the control plane VMs, a separate per-cluster etcd peer CA is used to establish trust between etcd instances.\n- In all GKE clusters, a separate etcd API CA is used to establish trust between the Kubernetes API server and the etcd API.\n\n### API server and kubelets\n\nThe API server and the kubelets rely on the cluster root CA for trust. In\nGKE, the control plane API certificate is signed by the\ncluster root CA. Each cluster runs its own CA, so that if one cluster's CA is\ncompromised, no other cluster CA is affected.\n\nAn internal service manages root keys for this CA, which are non-exportable.\nThis service accepts certificate signing requests, including those from the kubelets\nin each GKE cluster. Even if the API server in a cluster were\ncompromised, the CA would not be compromised, so no other clusters would be\naffected.\n\nEach node in the cluster is injected with a shared secret at creation, which it\ncan use to submit certificate signing requests to the cluster root CA and obtain\nkubelet client certificates. These certificates are then used by the kubelet to\nauthenticate its requests to the API server. This shared secret is reachable by\nPods on the node, unless you enable\n[Shielded GKE Nodes](/kubernetes-engine/docs/how-to/shielded-gke-nodes) or\n[Workload Identity Federation for GKE](/kubernetes-engine/docs/how-to/workload-identity).\n\n#### Cluster root CA lifetime\n\nThe cluster root CA has a limited lifetime, after which any\ncertificates signed by the expired CA are invalid. Check the approximate expiry\ndate of your cluster's CA by following the instructions in\n[Check credential lifetime](/kubernetes-engine/docs/how-to/credential-rotation#check_credential_lifetime).\n\nYou should manually rotate your credentials before your existing root CA\nexpires. If the CA expires and you don't rotate your credentials, your cluster\nmight enter an unrecoverable state. GKE has the following\nmechanisms to try and prevent unrecoverable clusters:\n\n- Your cluster enters a `DEGRADED` state seven days before CA expiry\n- GKE attempts an automatic credential rotation 30 days\n before CA expiry. This automatic rotation ignores maintenance windows and\n might cause disruptions as GKE recreates nodes to use new\n credentials. External clients, like kubectl in local environments, won't\n work until you update them to use the new credentials.\n\n | **Note:** This is a last resort to prevent an unrecoverable cluster. Don't rely on automatic rotation---instead, plan to rotate your credentials manually during maintenance periods well in advance of CA expiry.\n\nTo learn how to perform a rotation, see\n[Rotate your cluster credentials](/kubernetes-engine/docs/how-to/credential-rotation).\n\n### Cluster state storage\n\nGKE clusters store the state of Kubernetes API objects as\nkey-value pairs in a database. The Kubernetes API server in your control plane\ninteracts with this database by using the\n[etcd API](https://etcd.io/docs/latest/learning/api/). GKE uses\none of the following technologies to run the cluster state database:\n\n- **etcd**: the cluster uses etcd instances that run on the control plane VMs.\n- **Spanner** : the cluster uses a [Spanner](/spanner) database that runs outside of the control plane VMs.\n\nRegardless of the database technology that a cluster uses, every\nGKE cluster serves the etcd API in the control plane. To encrypt\ntraffic that involves the cluster state database, GKE uses one or\nboth of the following per-cluster CAs:\n\n- **etcd API CA**: used to sign certificates for traffic to and from etcd API endpoints. An etcd API CA runs in every GKE cluster.\n- **etcd peer CA**: used to sign certificates for traffic between etcd database instances on the control plane. An etcd peer CA runs in any cluster that uses etcd databases. Clusters that use Spanner databases don't use the etcd peer CA.\n\nRoot keys for the etcd API CA are distributed to the metadata of each\nCompute Engine instance that the control plane runs on. The etcd API\nCA isn't shared between clusters.\n\nThe etcd CA certificates are valid for five years. GKE\nautomatically rotates these certificates before they expire.\n\nCertificate rotation\n--------------------\n\nTo rotate all your cluster's API server and kubelet certificates, perform a\n[credential rotation](/kubernetes-engine/docs/how-to/credential-rotation). There is no way for you to trigger a rotation of the etcd\ncertificates; this is managed for you in GKE.\n| **Note:** Performing a credential rotation causes GKE to upgrade all node pools to the closest supported node version, and causes brief downtime for the cluster API.\n\nWhat's next\n-----------\n\n- [Read more about Managing TLS certificates in the Kubernetes documentation](https://kubernetes.io/docs/tasks/tls/managing-tls-in-a-cluster/)."]]