diff --git a/content/ja/docs/concepts/services-networking/network-policies.md b/content/ja/docs/concepts/services-networking/network-policies.md deleted file mode 100644 index 61a798b947..0000000000 --- a/content/ja/docs/concepts/services-networking/network-policies.md +++ /dev/null @@ -1,200 +0,0 @@ ---- -title: ネットワークポリシー -content_type: concept -weight: 50 ---- - - - -ネットワークポリシーは、{{< glossary_tooltip text="Pod" term_id="pod">}}のグループが、Pod相互や他のネットワークエンドポイントと通信する場合に許可を与える方法を指定するための仕様です。 - -NetworkPolicyリソースは、{{< glossary_tooltip text="ラベル" term_id="label">}}を使用してPodを選択し、選択したPodに対してどんなトラフィックを許可するかを指定するルールを定義します。 - - -## 前提条件 - -ネットワークポリシーは、[ネットワークプラグイン](/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/)により実装されます。ネットワークポリシーを使用するには、NetworkPolicyをサポートするネットワークソリューションを使用しなければなりません。ネットワークポリシーを実装したコントローラーを使用せずにNetworkPolicyリソースを作成した場合は、何も効果はありません。 - -## 分離されたPodと分離されていないPod - -デフォルトでは、Podは分離されていない状態(non-isolated)となるため、すべてのソースからのトラフィックを受信します。 - -Podを選択するNetworkPolicyが存在すると、Podは分離されるようになります。名前空間内に特定のPodを選択するNetworkPolicyが1つでも存在すると、そのPodはいずれかのNetworkPolicyで許可されていないすべての接続を拒否するようになります。(同じ名前空間内のPodでも、どのNetworkPolicyにも選択されなかった他のPodは、引き続きすべてのトラフィックを許可します。) - -ネットワークポリシーは追加式であるため、競合することはありません。複数のポリシーがPodを選択する場合、そのPodに許可されるトラフィックは、それらのポリシーのingress/egressルールの和集合で制限されます。したがって、評価の順序はポリシーの結果には影響がありません。 - -## NetworkPolicyリソース {#networkpolicy-resource} - -リソースの完全な定義については、リファレンスの[NetworkPolicy](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#networkpolicy-v1-networking-k8s-io)のセクションを参照してください。 - -以下は、NetworkPolicyの一例です。 - -```yaml -apiVersion: networking.k8s.io/v1 -kind: NetworkPolicy -metadata: - name: test-network-policy - namespace: default -spec: - podSelector: - matchLabels: - role: db - policyTypes: - - Ingress - - Egress - ingress: - - from: - - ipBlock: - cidr: 172.17.0.0/16 - except: - - 172.17.1.0/24 - - namespaceSelector: - matchLabels: - project: myproject - - podSelector: - matchLabels: - role: frontend - ports: - - protocol: TCP - port: 6379 - egress: - - to: - - ipBlock: - cidr: 10.0.0.0/24 - ports: - - protocol: TCP - port: 5978 -``` - -{{< note >}} -選択したネットワークソリューションがネットワークポリシーをサポートしていない場合には、これをクラスターのAPIサーバーにPOSTしても効果はありません。 -{{< /note >}} - -__必須フィールド__: 他のKubernetesの設定と同様に、NetworkPolicyにも`apiVersion`、`kind`、`metadata`フィールドが必須です。設定ファイルの扱い方に関する一般的な情報については、[ConfigMapを使用してコンテナを構成する](/ja/docs/tasks/configure-pod-container/configure-pod-configmap/)と[オブジェクト管理](/ja/docs/concepts/overview/working-with-objects/object-management)を参照してください。 - -__spec__: NetworkPolicyの[spec](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#spec-and-status)を見ると、指定した名前空間内で特定のネットワークポリシーを定義するのに必要なすべての情報が確認できます。 - -__podSelector__: 各NetworkPolicyには、ポリシーを適用するPodのグループを選択する`podSelector`が含まれます。ポリシーの例では、ラベル"role=db"を持つPodを選択しています。`podSelector`を空にすると、名前空間内のすべてのPodが選択されます。 - -__policyTypes__: 各NetworkPolicyには、`policyTypes`として、`Ingress`、`Egress`、またはその両方からなるリストが含まれます。`policyTypes`フィールドでは、指定したポリシーがどの種類のトラフィックに適用されるかを定めます。トラフィックの種類としては、選択したPodへの内向きのトラフィック(Ingress)、選択したPodからの外向きのトラフィック(Egress)、またはその両方を指定します。`policyTypes`を指定しなかった場合、デフォルトで常に -`Ingress`が指定され、NetworkPolicyにegressルールが1つでもあれば`Egress`も設定されます。 - -__ingress__: 各NetworkPolicyには、許可する`ingress`ルールのリストを指定できます。各ルールは、`from`および`ports`セクションの両方に一致するトラフィックを許可します。ポリシーの例には1つのルールが含まれ、このルールは、3つのソースのいずれかから送信された1つのポート上のトラフィックに一致します。1つ目のソースは`ipBlock`で、2つ目のソースは`namespaceSelector`で、3つ目のソースは`podSelector`でそれぞれ定められます。 - -__egress__: 各NetworkPolicyには、許可する`egress`ルールのリストを指定できます。各ルールは、`to`および`ports`セクションの両方に一致するトラフィックを許可します。ポリシーの例には1つのルールが含まれ、このルールは、1つのポート上で`10.0.0.0/24`の範囲内の任意の送信先へ送られるトラフィックに一致します。 - -したがって、上のNetworkPolicyの例では、次のようにネットワークポリシーを適用します。 - -1. "default"名前空間内にある"role=db"のPodを、内向きと外向きのトラフィックに対して分離する(まだ分離されていない場合) -2. (Ingressルール) "default"名前空間内の"role=db"ラベルが付いたすべてのPodのTCPの6379番ポートへの接続のうち、次の送信元からのものを許可する - * "default"名前空間内のラベル"role=frontend"が付いたすべてのPod - * ラベル"project=myproject"が付いた名前空間内のすべてのPod - * 172.17.0.0–172.17.0.255および172.17.2.0–172.17.255.255(言い換えれば、172.17.1.0/24の範囲を除く172.17.0.0/16)の範囲内のすべてのIPアドレス -3. (Egressルール) "role=db"というラベルが付いた"default"名前空間内のすべてのPodからの、TCPの5978番ポート上でのCIDR 10.0.0.0/24への接続を許可する - -追加の例については、[ネットワークポリシーを宣言する](/ja/docs/tasks/administer-cluster/declare-network-policy/)の説明を参照してください。 - -## `to`と`from`のセレクターの振る舞い - -`ingress`の`from`セクションまたは`egress`の`to`セクションに指定できるセレクターは4種類あります。 - -__podSelector__: NetworkPolicyと同じ名前空間内の特定のPodを選択して、ingressの送信元またはegressの送信先を許可します。 - -__namespaceSelector__: 特定の名前空間を選択して、その名前空間内のすべてのPodについて、ingressの送信元またはegressの送信先を許可します。 - -__namespaceSelector__ *および* __podSelector__: 1つの`to`または`from`エントリーで`namespaceSelector`と`podSelector`の両方を指定して、特定の名前空間内の特定のPodを選択します。正しいYAMLの構文を使うように気をつけてください。このポリシーの例を以下に示します。 - -```yaml - ... - ingress: - - from: - - namespaceSelector: - matchLabels: - user: alice - podSelector: - matchLabels: - role: client - ... -``` - -このポリシーには、1つの`from`要素があり、ラベル`user=alice`の付いた名前空間内にある、ラベル`role=client`の付いたPodからの接続を許可します。しかし、*以下の*ポリシーには注意が必要です。 - -```yaml - ... - ingress: - - from: - - namespaceSelector: - matchLabels: - user: alice - - podSelector: - matchLabels: - role: client - ... -``` - -このポリシーには、`from`配列の中に2つの要素があります。そのため、ラベル`role=client`の付いた名前空間内にあるすべてのPodからの接続、*または*、任意の名前空間内にあるラベル`user=alice`の付いたすべてのPodからの接続を許可します。 - -正しいルールになっているか自信がないときは、`kubectl describe`を使用すると、Kubernetesがどのようにポリシーを解釈したのかを確認できます。 - -__ipBlock__: 特定のIPのCIDRの範囲を選択して、ingressの送信元またはegressの送信先を許可します。PodのIPは一時的なもので予測できないため、ここにはクラスター外のIPを指定するべきです。 - -クラスターのingressとegressの仕組みはパケットの送信元IPや送信先IPの書き換えを必要とすることがよくあります。その場合、NetworkPolicyの処理がIPの書き換えの前後どちらで行われるのかは定義されていません。そのため、ネットワークプラグイン、クラウドプロバイダー、`Service`の実装などの組み合わせによっては、動作が異なる可能性があります。 - -内向きのトラフィックの場合は、実際のオリジナルの送信元IPに基づいてパケットをフィルタリングできる可能性もあれば、NetworkPolicyが対象とする「送信元IP」が`LoadBalancer`やPodのノードなどのIPになってしまっている可能性もあることになります。 - -外向きのトラフィックの場合は、クラスター外のIPに書き換えられたPodから`Service`のIPへの接続は、`ipBlock`ベースのポリシーの対象になる場合とならない場合があることになります。 - -## デフォルトのポリシー - -デフォルトでは、名前空間にポリシーが存在しない場合、その名前空間内のPodの内向きと外向きのトラフィックはすべて許可されます。以下の例を利用すると、その名前空間内でのデフォルトの振る舞いを変更できます。 - -### デフォルトですべての内向きのトラフィックを拒否する - -すべてのPodを選択して、そのPodへのすべての内向きのトラフィックを許可しないNetworkPolicyを作成すると、その名前空間に対する「デフォルト」の分離ポリシーを作成できます。 - -{{< codenew file="service/networking/network-policy-default-deny-ingress.yaml" >}} - -このポリシーを利用すれば、他のいかなるNetworkPolicyにも選択されなかったPodでも分離されることを保証できます。このポリシーは、デフォルトの外向きの分離の振る舞いを変更しません。 - -### デフォルトで内向きのすべてのトラフィックを許可する - -(たとえPodを「分離されたもの」として扱うポリシーが追加された場合でも)名前空間内のすべてのPodへのすべてのトラフィックを許可したい場合には、その名前空間内のすべてのトラフィックを明示的に許可するポリシーを作成できます。 - -{{< codenew file="service/networking/network-policy-allow-all-ingress.yaml" >}} - -### デフォルトで外向きのすべてのトラフィックを拒否する - -すべてのPodを選択して、そのPodからのすべての外向きのトラフィックを許可しないNetworkPolicyを作成すると、その名前空間に対する「デフォルト」の外向きの分離ポリシーを作成できます。 - -{{< codenew file="service/networking/network-policy-default-deny-egress.yaml" >}} - -このポリシーを利用すれば、他のいかなるNetworkPolicyにも選択されなかったPodでも、外向きのトラフィックが許可されないことを保証できます。このポリシーは、デフォルトの内向きの分離の振る舞いを変更しません。 - -### デフォルトで外向きのすべてのトラフィックを許可する - -(たとえPodを「分離されたもの」として扱うポリシーが追加された場合でも)名前空間内のすべてのPodからのすべてのトラフィックを許可したい場合には、その名前空間内のすべての外向きのトラフィックを明示的に許可するポリシーを作成できます。 - -{{< codenew file="service/networking/network-policy-allow-all-egress.yaml" >}} - -### デフォルトで内向きと外向きのすべてのトラフィックを拒否する - -名前空間内に以下のNetworkPolicyを作成すると、その名前空間で内向きと外向きのすべてのトラフィックを拒否する「デフォルト」のポリシーを作成できます。 - -{{< codenew file="service/networking/network-policy-default-deny-all.yaml" >}} - -このポリシーを利用すれば、他のいかなるNetworkPolicyにも選択されなかったPodでも、内向きと外向きのトラフィックが許可されないことを保証できます。 - -## SCTPのサポート - -{{< feature-state for_k8s_version="v1.12" state="alpha" >}} - -この機能を利用するには、クラスター管理者がAPIサーバーで`--feature-gates=SCTPSupport=true,…`と指定して、`SCTPSupport`[フィーチャーゲート](/ja/docs/reference/command-line-tools-reference/feature-gates/)を有効にする必要があります。フィーチャーゲートが有効になれば、NetworkPolicyの`protocol`フィールドに`SCTP`が指定できるようになります。 - -{{< note >}} -SCTPプロトコルのネットワークポリシーをサポートする{{< glossary_tooltip text="CNI" term_id="cni" >}}プラグインを使用している必要があります。 -{{< /note >}} - -## {{% heading "whatsnext" %}} - -- [ネットワークポリシーを宣言する](/ja/docs/tasks/administer-cluster/declare-network-policy/)で追加の例の説明を読む。 -- NetworkPolicyリソースで実現できるよくあるシナリオのためのさまざまな[レシピ](https://github.com/ahmetb/kubernetes-network-policy-recipes)を確認する。 diff --git a/content/ja/docs/reference/access-authn-authz/rbac.md b/content/ja/docs/reference/access-authn-authz/rbac.md deleted file mode 100644 index fee25f323e..0000000000 --- a/content/ja/docs/reference/access-authn-authz/rbac.md +++ /dev/null @@ -1,1102 +0,0 @@ ---- -title: RBAC認可を使用する -content_type: concept -weight: 70 ---- - - -Role Based Access Control(RBAC)は、組織内の個々のユーザーのRoleをベースに、コンピューターまたはネットワークリソースへのアクセスを制御する方法です。 - - - -RBAC認可は{{< glossary_tooltip term_id="api-group" >}} `rbac.authorization.k8s.io`を使用して認可の決定を行い、Kubernetes APIを介して動的にポリシーを構成できるようにします。 - -RBACを有効にするには、以下の例のように{{< glossary_tooltip text="API server" term_id="kube-apiserver" >}}の`--authorization-mode` フラグをコンマ区切りの`RBAC`を含むリストでスタートします。 - -```shell -kube-apiserver --authorization-mode=Example,RBAC --other-options --more-options -``` - -## APIオブジェクト{#api-overview} - -RBAC APIは4種類のKubernetesオブジェクト(_Role_、 _ClusterRole_、 _RoleBinding_ そして _ClusterRoleBinding_)を宣言します。他のKubernetesオブジェクトのように`kubectl`のようなツールを使って、[オブジェクトを記述](https://kubernetes.io/ja/docs/concepts/overview/working-with-objects/kubernetes-objects/#kubernetes-objects)、または変更できます。 - -{{< caution >}} -これらのオブジェクトは設計上、アクセス制限を課します。学んできたように変更を行っている場合、 -[特権エスカレーション防止とブートストラップ](#特権昇格の防止とブートストラップ) -を参照し、これらの制限がどのようにいつかの変更を防止するのかを理解しましょう。 -{{< /caution >}} - -### RoleとClusterRole - -RBACの _Role_ または _ClusterRole_ には、一連の権限を表すルールが含まれて言います。 -権限は完全な追加方式です(「deny」のルールはありません)。 - -Roleは常に特定の{{< glossary_tooltip text="namespace" term_id="namespace" >}}で権限を設定します。 -つまり、Roleを作成する時は、Roleが属するNamespaceを指定する必要があります。 - -対照的にClusterRoleは、Namespaceに属さないリソースです。Kubernetesオブジェクトは常にNamespaceに属するか、属さないかのいずれかである必要があり、リソースは異なる名前(RoleとClusterRole)を持っています。つまり、両方であることは不可能です。 - -ClusterRolesにはいくつかの用途があります。ClusterRoleを利用して、以下のことができます。 - -1. Namespaceに属するリソースに対する権限を定義し、個々のNamespace内で付与する -2. Namespaceに属するリソースに対する権限を定義し、すべてのNamespaceにわたって付与する -3. クラスター単位でスコープされているリソースに対するアクセス許可を定義する - -NamespaceでRoleを定義する場合は、Roleを使用します。クラスター全体でRoleを定義する婆は、ClusterRoleを使用します - -#### Roleの例 - -以下はNamespace「default」にあるRoleの例で、 -{{< glossary_tooltip text="Pod" term_id="pod" >}}への読み取りアクセス権の付与に使用できます。 - -```yaml -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - namespace: default - name: pod-reader -rules: -- apiGroups: [""] # "" はコアのAPIグループを示します - resources: ["pods"] - verbs: ["get", "watch", "list"] -``` - -#### ClusterRoleの例 - -ClusterRoleを使用してRoleと同じ権限を付与できます。 -ClusterRolesはクラスター単位でスコープされているため、以下へのアクセスの許可もできます。 - -* クラスター単位でスコープされているリソースに({{< glossary_tooltip text="node" term_id="node" >}}など) -* 非リソースエンドポイントに(`/healthz`など) -* すべてのNamespaceに渡ってNamespaceに属するリソースに(Podなど)。 - 例えば、ClusterRoleを使用して特定のユーザーに`kubectl get pods --all-namespaces`の実行を許可できます。 - -以下は特定のNamespace、またはすべてのNamespace([バインド](#rolebindingとclusterrolebinding)方法によります)で{{< glossary_tooltip text="secrets" term_id="secret" >}}への読み取りアクセス権を付与するClusterRoleの例です。 - - -```yaml -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - # 「namespace」はClusterRolesがNamespaceに属していないため、省略されています - name: secret-reader -rules: -- apiGroups: [""] - # - # HTTPレベルでの、Secretにアクセスするリソースの名前 - # オブジェクトは"secrets" - resources: ["secrets"] - verbs: ["get", "watch", "list"] -``` - -RoleまたはClusterRoleオブジェクトの名前は有効な -[パスセグメント名](https://kubernetes.io/ja/docs/concepts/overview/working-with-objects/names/)である必要があります。 - -### RoleBindingとClusterRoleBinding - -RoleBindingはRoleで定義された権限をユーザーまたはユーザのセットに付与します。 -RoleBindingは*subjects* (ユーザー、グループ、サービスアカウント)のリストと、付与されるRoleへの参照を保持します。 -RoleBindingは特定のNamespace内の権限を付与しますが、ClusterRoleBindingはクラスター全体にアクセスする権限を付与します。 - -RoleBindingは、同じNamespace内の任意のRoleを参照できます。 -または、RoleBindingはClusterRoleを参照し、そのClusterRoleをRoleBindingのNamespaceにバインドできます。 -ClusterRoleをクラスター内のすべてのNamespaceにバインドする場合は、ClusterRoleBindingを使用します。 - -RoleBindingまたはClusterRoleBindingオブジェクトは有効な -[パスセグメント名](https://kubernetes.io/ja/docs/concepts/overview/working-with-objects/names/)である必要があります。 - -#### RoleBindingの例 {#rolebinding-example} - -以下はNamespace「default」内でユーザー「jane」に「pod-reader」のRoleを付与するRoleBindingの例です。 -これにより、「jane」にNamespace「default」のポッドの読み取り許可されます。 - -```yaml -apiVersion: rbac.authorization.k8s.io/v1 -# このRoleBindingは「jane」にNamespace「default」のポッドの読み取りを許可する -# そのNamespaceでRole「pod-reader」を既に持っている必要があります。 -kind: RoleBinding -metadata: - name: read-pods - namespace: default -subjects: -# 一つ以上の「subject」を指定する必要があります -- kind: User - name: jane # 「name」は大文字と小文字が区別されます - apiGroup: rbac.authorization.k8s.io -roleRef: - # 「roleRef」はRole/ClusterRoleへのバインドを指定します - kind: Role #RoleまたはClusterRoleである必要があります - name: pod-reader # これはバインドしたいRole名またはClusterRole名とマッチする必要があります - apiGroup: rbac.authorization.k8s.io -``` - -RoleBindingはClusterRoleを参照し、ClusterRoleで定義されている権限をRoleBinding内のNamespaceのリソースに権限付与もできます。この種類の参照を利用すると、クラスター全体で共通のRoleのセットを定義して、それらを複数のNamespace内での再利用できます。 - -例えば、以下のRoleBindingがClusterRoleを参照している場合でも、 -「dave」(大文字と小文字が区別されるsubject)はRoleBindingのNamespace(メタデータ内)が「development」のため、Namespace「development」のSecretsのみの読み取りができます。 - -```yaml -apiVersion: rbac.authorization.k8s.io/v1 -# このRoleBindingは「dave」にNamespace「development」のSecretsの読み取りを許可する -# ClusterRole「secret-reader」を既に持っている必要があります。 -kind: RoleBinding -metadata: - name: read-secrets - # - # RoleBindingのNamespaceが、どこの権限が付与されるかを決定する。 - # これはNamespace「development」内の権限のみ付与する。 - namespace: development -subjects: -- kind: User - name: dave # nameは大文字、小文字を区別する - apiGroup: rbac.authorization.k8s.io -roleRef: - kind: ClusterRole - name: secret-reader - apiGroup: rbac.authorization.k8s.io -``` - -#### ClusterRoleBindingの例 - -クラスター全体に権限を付与するには、ClusterRoleBindingを使用できます。 -以下のClusterRoleBindingはグループ「manager」のすべてのユーザーに -Secretsの読み取りを許可します。 - -```yaml -apiVersion: rbac.authorization.k8s.io/v1 -# このClusterRoleBindingはグループ「manager」のすべてのユーザーに任意のNamespaceのSecretsの読み取りを許可します。 -kind: ClusterRoleBinding -metadata: - name: read-secrets-global -subjects: -- kind: Group - name: manager # nameは大文字、小文字を区別します - apiGroup: rbac.authorization.k8s.io -roleRef: - kind: ClusterRole - name: secret-reader - apiGroup: rbac.authorization.k8s.io -``` - -Bindingを作成後は、それが参照するRoleまたはClusterRoleを変更できません。 -Bindingの`roleRef`を変更しようとすると、バリデーションエラーが発生します。Bindingの`roleRef`を変更する場合は、Bindingのオブジェクトを削除して、代わりのオブジェクトを作成する必要があります。 - -この制限には2つの理由があります。 - -1. `roleRef`をイミュータブルにすることで、誰かに既存のオブジェクトに対する`update`権限を付与します。それにより、subjectsに付与されたRoleの変更ができなくても、subjectsのリストを管理できるようになります。 -2. 異なるRoleへのBindingは根本的に異なるBindingです。 -`roleRef`を変更するためにBindingの削除/再作成を要求することによって、(すべての既存のsubjectsを確認せずに、roleRefだけを誤って変更できるようにするのとは対照的に)Binding内のsubjectsのリストのすべてが意図された新しいRoleが付与されることを担保します。 - -`kubectl auth reconcile` コマンドラインユーティリティーはRBACオブジェクトを含んだマニフェストファイルを作成または更新します。また、それらが参照しているRoleへの変更を要求されると、Bindingオブジェクトの削除と再作成を取り扱います。 -詳細は[command usage and examples](#kubectl-auth-reconcile)を確認してください。 - -### リソースを参照する - -KubernetesのAPIでは、ほとんどのリソースはPodであれば`pods`のように、オブジェクト名の文字列表現を使用して表されます。RBACは、関連するAPIエンドポイントのURLに表示されるものとまったく同じ名前を使用するリソースを参照します。 -一部のKubernetes APIには、Podのログなどの -_subresource_ が含まれます。Podのログのリクエストは次のようになります。 - -```http -GET /api/v1/namespaces/{namespace}/pods/{name}/log -``` - -この場合、`pods` はPodリソースのNamespaceに属するリソースであり、`log`は`pods`のサブリソースです。これをRBACRoleで表すには、スラッシュ(`/`)を使用してリソースとサブリソースを区切ります。サブジェクトへの`pods`の読み込みと各Podの`log`サブリソースへのアクセスを許可するには、次のように記述します。 - -```yaml -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - namespace: default - name: pod-and-pod-logs-reader -rules: -- apiGroups: [""] - resources: ["pods", "pods/log"] - verbs: ["get", "list"] -``` - -`resourceNames`リストを通じて、特定のリクエストのリソースを名前で参照することもできます。 -指定すると、リクエストをリソースの個々のインスタンスに制限できます。 -以下は対象を`get`または`my-configmap`と名付けられた -{{< glossary_tooltip term_id="ConfigMap" >}}を`update`のみに制限する例です。 - -```yaml -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - namespace: default - name: configmap-updater -rules: -- apiGroups: [""] - # - # HTTPレベルでの、ConfigMapにアクセスするリソースの名前 - # オブジェクトは"configmaps" - resources: ["configmaps"] - resourceNames: ["my-configmap"] - verbs: ["update", "get"] -``` - -{{< note >}} -`resourceNames`で`create`または`deletecollection`のリクエストを制限することはできません。この制限は`create`の場合、認証時にオブジェクト名がわからないためです。 -{{< /note >}} - - -### 集約ClusterRole - -複数のClusterRoleを一つのClusterRoleに _集約_ できます。 -クラスターコントロールプレーンの一部として実行されるコントローラーは、`aggregationRule`セットを持つClusterRoleオブジェクトを監視します。`aggregationRule`はコントローラーが、このオブジェクトの`rules`フィールドに結合する必要のある他のClusterRoleオブジェクトを一致させるために使用するラベル{{< glossary_tooltip text="selector" term_id="selector" >}}を定義します。 - -以下に、集約されたClusterRoleの例を示します。 - -```yaml -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: monitoring -aggregationRule: - clusterRoleSelectors: - - matchLabels: - rbac.example.com/aggregate-to-monitoring: "true" -rules: [] # コントロールプレーンは自動的にルールを入力します -``` -既存の集約されたClusterRoleのラベルセレクターと一致する新しいClusterRoleを作成すると、その変更をトリガーに、集約されたClusterRoleに新しいルールが追加されます。 -`rbac.example.com/aggregate-to-monitoring: true`ラベルが付けられた別のClusterRoleを作成して、ClusterRole「monitoring」にルールを追加する例を以下に示します。 - -```yaml -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: monitoring-endpoints - labels: - rbac.example.com/aggregate-to-monitoring: "true" -# ClusterRole「monitoring-endpoints」を作成すると、 -# 以下のルールがClusterRole「monitoring」に追加されます -rules: -- apiGroups: [""] - resources: ["services", "endpoints", "pods"] - verbs: ["get", "list", "watch"] -``` - -[デフォルトのユーザー向けRole](#デフォルトroleとclusterrolebinding)はClusterRoleの集約を使用します。これによりクラスター管理者として、 デフォルトroleを拡張するため、{{< glossary_tooltip term_id="CustomResourceDefinition" text="CustomResourceDefinitions" >}}または集約されたAPIサーバーなどによって提供されたルールをカスタムリソースに含めることができます。 - -例えば、次のClusterRoleでは、「admin」と「edit」のデフォルトのRoleでCronTabという名前のカスタムリソースを管理できますが、「view」のRoleではCronTabリソースに対して読み取りアクションのみを実行できます。CronTabオブジェクトは、APIサーバーから見たURLで`"crontabs"`と名前が付けられていると想定できます。 - -```yaml -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: aggregate-cron-tabs-edit - labels: - # デフォルトRoleの「admin」と「edit」にこれらの権限を追加する。 - rbac.authorization.k8s.io/aggregate-to-admin: "true" - rbac.authorization.k8s.io/aggregate-to-edit: "true" -rules: -- apiGroups: ["stable.example.com"] - resources: ["crontabs"] - verbs: ["get", "list", "watch", "create", "update", "patch", "delete"] ---- -kind: ClusterRole -apiVersion: rbac.authorization.k8s.io/v1 -metadata: - name: aggregate-cron-tabs-view - labels: - # デフォルトRoleの「view」にこれらの権限を追加します。 - rbac.authorization.k8s.io/aggregate-to-view: "true" -rules: -- apiGroups: ["stable.example.com"] - resources: ["crontabs"] - verbs: ["get", "list", "watch"] -``` - -#### Roleの例 - -次の例は、RoleオブジェクトまたはClusterRoleオブジェクトからの抜粋であり、`rules`セクションのみを示しています。 - -`"pods"`の読み取りを許可する -{{< glossary_tooltip text="API Group" term_id="api-group" >}}。 - -```yaml -rules: -- apiGroups: [""] - # - # HTTPレベルでの、Podにアクセスするリソースの名前 - # オブジェクトは"pods" - resources: ["pods"] - verbs: ["get", "list", "watch"] -``` - -APIグループ`" extensions "`と `" apps "` の両方で、Deploymentsへの読み取り/書き込みを許可します。 -(HTTPレベルでURLのリソース部分に`"deployments"`を持つオブジェクトで) - -```yaml -rules: -- apiGroups: ["extensions", "apps"] - # - # HTTPレベルでの、Deploymentにアクセスするリソースの名前 - # オブジェクトは"deployments" - resources: ["deployments"] - verbs: ["get", "list", "watch", "create", "update", "patch", "delete"] -``` - -コアAPIグループのPodの読み取り、および`"batch"`または`"extensions"`APIグループのJobリソースの読み取りまたは書き込みを許可します。 - - -```yaml -rules: -- apiGroups: [""] - # - # HTTPレベルでの、Podにアクセスするリソースの名前 - # オブジェクトは"pods" - resources: ["pods"] - verbs: ["get", "list", "watch"] -- apiGroups: ["batch", "extensions"] - # - # HTTPレベルでの、Jobにアクセスするリソースの名前 - # オブジェクトは"jobs" - resources: ["jobs"] - verbs: ["get", "list", "watch", "create", "update", "patch", "delete"] -``` - -「my-config」という名前のConfigMapの読み取りを許可します( -単一のNamespace内の単一のConfigMapに制限するRoleBinding) - -```yaml -rules: -- apiGroups: [""] - # - # HTTPレベルでの、ConfigMapにアクセスするリソースの名前 - # オブジェクトは"configmaps" - resources: ["configmaps"] - resourceNames: ["my-config"] - verbs: ["get"] -``` - - -コアグループ内のリソース `"nodes"`の読み取りを許可します(Nodeはクラスタースコープであり、ClusterRoleBindingが効果的であるため、ClusterRoleにバインドされている必要があります)。 - -```yaml -rules: -- apiGroups: [""] - # - # HTTPレベルでの、Nodeにアクセスするリソースの名前 - # オブジェクトは"nodes" - resources: ["nodes"] - verbs: ["get", "list", "watch"] -``` - -非リソースエンドポイント `/ healthz`およびすべてのサブパス(ClusterRoleBindingが効果的であるため、ClusterRoleにバインドされている必要があります)のGETおよびPOSTリクエストを許可します。 - -```yaml -rules: -- nonResourceURLs: ["/healthz", "/healthz/*"] # nonResourceURLの「*」はサフィックスグロブマッチです - verbs: ["get", "post"] -``` - -### subjectsを参照する - -RoleBindingまたはClusterRoleBindingは、Roleをsubjectsにバインドします。subjectsはグループ、ユーザー、または{{< glossary_tooltip text="ServiceAccounts" term_id="service-account" >}}にすることができます。 - -Kubernetesはユーザー名を文字列として表します。 -これらは次のようにできます。「alice」などの単純な名前。「bob@example.com」のような電子メール形式の名前。または文字列として表される数値のユーザーID。 認証が必要な形式のユーザー名を生成するように[認証モジュール](https://kubernetes.io/ja/docs/reference/access-authn-authz/authentication/)を構成するかどうかは、クラスター管理者が決定します。 - -{{< caution >}} -プレフィックス`system:`はKubernetesシステムで使用するために予約されているため、誤って`system:`で始まる名前のユーザーまたはグループが存在しないようにする必要があります。 -この特別なプレフィックスを除いて、RBAC承認システムでは、ユーザー名の形式は問いません。 -{{< /caution >}} - -Kubernetesでは、Authenticatorモジュールがグループ情報を提供します。 -ユーザーと同様に、グループは文字列として表され、その文字列には、プレフィックス`system:`が予約されていることを除いて、フォーマット要件はありません。 - -[ServiceAccount](/docs/tasks/configure-pod-container/configure-service-account/)の名前はプレフィックス`system:serviceaccount:`が付いており、名前のプレフィックス`system:serviceaccounts:`が付いているグループに属しています。 - -{{< note >}} -- `system:serviceaccount:` (単数)は、サービスアカウントのユーザー名のプレフィックスです。 -- `system:serviceaccounts:`(複数)は、サービスアカウントグループのプレフィックスです。 -{{< /note >}} - -#### RoleBindingの例 {#role-binding-examples} - -次の例は`RoleBinding`、`subjects`セクションのみを示す抜粋です。 - -`alice@example.com`という名前のユーザーの場合。 - -```yaml -subjects: -- kind: User - name: "alice@example.com" - apiGroup: rbac.authorization.k8s.io -``` - -`frontend-admins`という名前のグループの場合。 - -```yaml -subjects: -- kind: Group - name: "frontend-admins" - apiGroup: rbac.authorization.k8s.io -``` - -Namespace「kube-system」のデフォルトのサービスアカウントの場合。 - -```yaml -subjects: -- kind: ServiceAccount - name: default - namespace: kube-system -``` - -Namespace「qa」の全てのサービスアカウントの場合。 - -```yaml -subjects: -- kind: Group - name: system:serviceaccounts:qa - apiGroup: rbac.authorization.k8s.io -``` - -任意のNamespaceの全てのサービスアカウントの場合。 - -```yaml -subjects: -- kind: Group - name: system:serviceaccounts - apiGroup: rbac.authorization.k8s.io -``` - -すべての認証済みユーザーの場合。 - -```yaml -subjects: -- kind: Group - name: system:authenticated - apiGroup: rbac.authorization.k8s.io -``` - -認証されていないすべてのユーザーの場合。 - -```yaml -subjects: -- kind: Group - name: system:unauthenticated - apiGroup: rbac.authorization.k8s.io -``` - -すべてのユーザーの場合。 - -```yaml -subjects: -- kind: Group - name: system:authenticated - apiGroup: rbac.authorization.k8s.io -- kind: Group - name: system:unauthenticated - apiGroup: rbac.authorization.k8s.io -``` - -## デフォルトRoleとClusterRoleBinding - -APIサーバーは、デフォルトのClusterRoleオブジェクトとClusterRoleBindingオブジェクトのセットを作成します。 -これらの多くにはプレフィックス`system:`が付いています。これは、リソースがクラスターコントロールプレーンによって直接管理されることを示しています。 -デフォルトのすべてのClusterRoleおよびClusterRoleBindingには、ラベル`kubernetes.io/bootstrapping=rbac-defaults`が付いています。 - -{{< caution >}} -プレフィックスとして`system:`を含む名前で、ClusterRolesおよびClusterRoleBindingsを変更する場合は注意してください。 -これらのリソースを変更すると、クラスターが機能しなくなる可能性があります。 -{{< /caution >}} - -### 自動調整 - -起動するたびに、APIサーバーはデフォルトのClusterRoleを不足している権限で更新し、 -デフォルトのClusterRoleBindingを不足しているsubjectsで更新します。 -これにより、誤った変更をクラスタが修復できるようになり、新しいKubernetesリリースで権限とsubjectsが変更されても、 -RoleとRoleBindingを最新の状態に保つことができます。 - -この調整を無効化するには`rbac.authorization.kubernetes.io/autoupdate`をデフォルトのClusterRoleまたはRoleBindingのアノテーションを`false`に設定します。 -デフォルトの権限と subjectsがないと、クラスターが機能しなくなる可能性があることに注意してください。 - -RBAC authorizerが有効な場合、自動調整はデフォルトで有効になっています。 - -### APIディスカバリーRole {#discovery-roles} - -デフォルトのRoleBindingでは、認証されていないユーザーと認証されたユーザーが、パブリックアクセスが安全であると見なされるAPI情報(CustomResourceDefinitionを含む)の読み取りを認可しています。匿名の非認証アクセスを無効にするには、APIサーバー構成に`--anonymous-auth=false` 追加します。 - -`kubectl`の実行によってこれらのRoleの構成を表示するには。 - -```shell -kubectl get clusterroles system:discovery -o yaml -``` - -{{< note >}} -ClusterRoleを編集すると、変更が[自動調整](#自動調整)によるAPIサーバーの再起動時に上書きされます。この上書きを回避するにはRoleを手動で編集しないか、自動調整を無効にします。 -{{< /note >}} - - - - - - - - - - - - - - - - - - - - - - - - -
Kubernetes RBAC APIディスカバリーRole
デフォルトのClusterRoleデフォルトのClusterRoleBinding説明
system:basic-usersystem:authenticated groupユーザーに、自身に関する基本情報への読み取り専用アクセスを許可します。v1.14より前は、このRoleはデフォルトでsystem:unauthenticatedにもバインドされていました。
system:discoverysystem:authenticated groupAPIレベルのディスカバリーとネゴシエーションに必要なAPIディスカバリーエンドポイントへの読み取り専用アクセスを許可します。v1.14より前は、このRoleはデフォルトでsystem:unauthenticatedにもバインドされていました。
system:public-info-viewersystem:authenticated and system:unauthenticated groupsクラスターに関する機密情報以外への読み取り専用アクセスを許可します。Kubernetes v1.14で導入されました。
- -### ユーザー向けRole - -一部のデフォルトClusterRolesにはプレフィックス`system:`が付いていません。これらは、ユーザー向けのroleを想定しています。それらは、スーパーユーザのRole(`cluster-admin`)、ClusterRoleBindingsを使用してクラスタ全体に付与されることを意図しているRole、そしてRoleBindings(`admin`, `edit`, `view`)を使用して、特定のNamespace内に付与されることを意図しているRoleを含んでいます。 - -ユーザー向けのClusterRolesは[ClusterRoleの集約](#集約clusterrole)を使用して、管理者がこれらのClusterRolesにカスタムリソースのルールを含めることができるようにします。ルールを`admin`、`edit`、または`view` Roleに追加するには、次のラベルの一つ以上でClusterRoleを作成します。 - -```yaml -metadata: - labels: - rbac.authorization.k8s.io/aggregate-to-admin: "true" - rbac.authorization.k8s.io/aggregate-to-edit: "true" - rbac.authorization.k8s.io/aggregate-to-view: "true" -``` - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
デフォルトのClusterRoleデフォルトのClusterRoleBinding説明
cluster-adminsystem:masters groupスーパーユーザーが任意のリソースで任意のアクションを実行できるようにします。 -ClusterRoleBindingで使用すると、クラスター内およびすべてのNamespace内のすべてのリソースを完全に制御できます。 -RoleBindingで使用すると、Namespace自体を含む、RoleBindingのNamespace内のすべてのリソースを完全に制御できます。
adminNoneRoleBindingを使用してNamespace内で付与することを想定した、管理者アクセスを許可します。 -RoleBindingで使用した場合、Namespace内にRoleとRoleBindingを作成する機能を含め、Namespaceのほとんどのリソースへの読み取り/書き込みアクセスを許可します。 -このRoleは、リソースクォータまたはNamespace自体への書き込みアクセスを許可しません。
editNoneNamespace内のほとんどのオブジェクトへの読み取り/書き込みアクセスを許可します。 - -このRoleは、RoleまたはRoleBindingの表示または変更を許可しません。 -ただし、このRoleでは、Secretsにアクセスして、Namespace内の任意のServiceAccountとしてPodsを実行できるため、Namespace内の任意のServiceAccountのAPIアクセスレベルを取得するために使用できます。
viewNoneNamespace内のほとんどのオブジェクトを表示するための読み取り専用アクセスを許可します。 -RoleまたはRoleBindingは表示できません。 - -Secretsの内容を読み取るとNamespaceのServiceAccountのクレデンシャルにアクセスできるため、このRoleではSecretsの表示は許可されません。これにより、Namespace内の任意のServiceAccountとしてAPIアクセスが許可されます(特権昇格の形式)。
- -### コアコンポーネントのRole - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
デフォルトのClusterRoleデフォルトのClusterRoleBinding説明
system:kube-schedulersystem:kube-scheduler user{{< glossary_tooltip term_id="kube-scheduler" text="scheduler" >}}コンポーネントが必要とするリソースへのアクセスを許可します。
system:volume-schedulersystem:kube-scheduler userkube-scheduleコンポーネントが必要とするリソースへのアクセスを許可します。
system:kube-controller-managersystem:kube-controller-manager user{{< glossary_tooltip term_id="kube-controller-manager" text="controller manager" >}}コンポーネントが必要とするリソースへのアクセスを許可します。 -個々のコントローラーに必要な権限については、組み込みコントローラーのRoleで詳しく説明しています
system:nodeNoneすべてのsecretへの読み取りアクセス、すべてのポッドステータスオブジェクトへの書き込みアクセスなど、kubeletが必要とするリソースへのアクセスを許可します。 - -system:nodeRoleの代わりにNode authorizerNodeRestriction admission pluginを使用し、それらで実行するようにスケジュールされたPodに基づいてkubeletへのAPIアクセスを許可する必要があります。 - -system:nodeのRoleは、V1.8より前のバージョンからアップグレードしたKubernetesクラスターとの互換性のためだけに存在します。 -
system:node-proxiersystem:kube-proxy user{{< glossary_tooltip term_id="kube-proxy" text="kube-proxy" >}}コンポーネントが必要とするリソースへのアクセスを許可します。
- -### 他のコンポーネントのRole - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
デフォルトのClusterRoleデフォルトのClusterRoleBinding説明
system:auth-delegatorNone委任された認証と認可のチェックを許可します。 -これは一般に、認証と認可を統合するためにアドオンAPIサーバーで使用されます。
system:heapsterNoneHeapsterコンポーネントのRole(非推奨)。
system:kube-aggregatorNonekube-aggregatorコンポーネントのRole。
system:kube-dnskube-systemNamespaceのサービスアカウントkube-dnskube-dnsコンポーネントのRole。
system:kubelet-api-adminNonekubelet APIへのフルアクセスを許可します。
system:node-bootstrapperNonekubelet TLS bootstrappingの実行に必要なリソースへのアクセスを許可します。
system:node-problem-detectorNonenode-problem-detectorコンポーネントのRole。
system:persistent-volume-provisionerNoneほとんどのdynamic volume provisionersが必要とするリソースへのアクセスを許可します。
- -### 組み込みコントローラーのRole {#controller-roles} - -Kubernetes {{< glossary_tooltip term_id="kube-controller-manager" text="controller manager" >}}は、Kubernetesコントロールプレーンに組み込まれている{{< glossary_tooltip term_id="controller" text="controllers" >}}を実行します。 -`--use-service-account-credentials`を指定して呼び出すと、kube-controller-manager個別のサービスアカウントを使用して各コントローラーを起動します。 -組み込みコントローラーごとに、プレフィックス`system:controller:`付きの対応するRoleが存在します。 -コントローラーマネージャーが`--use-service-account-credentials`で開始されていない場合、コントローラマネージャーは、関連するすべてのRoleを付与する必要がある自身のクレデンシャルを使用して、すべてのコントロールループを実行します。 -これらのRoleは次のとおりです。 - -* `system:controller:attachdetach-controller` -* `system:controller:certificate-controller` -* `system:controller:clusterrole-aggregation-controller` -* `system:controller:cronjob-controller` -* `system:controller:daemon-set-controller` -* `system:controller:deployment-controller` -* `system:controller:disruption-controller` -* `system:controller:endpoint-controller` -* `system:controller:expand-controller` -* `system:controller:generic-garbage-collector` -* `system:controller:horizontal-pod-autoscaler` -* `system:controller:job-controller` -* `system:controller:namespace-controller` -* `system:controller:node-controller` -* `system:controller:persistent-volume-binder` -* `system:controller:pod-garbage-collector` -* `system:controller:pv-protection-controller` -* `system:controller:pvc-protection-controller` -* `system:controller:replicaset-controller` -* `system:controller:replication-controller` -* `system:controller:resourcequota-controller` -* `system:controller:root-ca-cert-publisher` -* `system:controller:route-controller` -* `system:controller:service-account-controller` -* `system:controller:service-controller` -* `system:controller:statefulset-controller` -* `system:controller:ttl-controller` - -## 特権昇格の防止とブートストラップ - -RBAC APIは、RoleまたはRoleBindingを編集することにより、ユーザーが特権を昇格するのを防ぎます。 -これはAPIレベルで適用されるため、RBAC authorizerが使用されていない場合でも適用されます。 - -### Roleの作成または更新に関する制限 - -次の項目1つ以上が当てはまる場合にのみ、Roleを作成/更新できます。 - -1. 変更対象のオブジェクトと同じスコープで、Roleに含まれるすべての権限を既に持っている(ClusterRoleの場合はクラスター全体。Roleの場合は、同じNamespace内またはクラスター全体)。 -2. `rbac.authorization.k8s.io`APIグループの` roles`または`clusterroles`リソースで` escalate` verbを実行する明示的な権限が付与されている。 - -たとえば、 `user-1`にクラスター全体でSecretsを一覧表示する権限がない場合、それらにその権限を含むClusterRoleを作成できません。 -ユーザーがRoleを作成/更新できるようにするには、以下のいずれかを実施します。 - -1. 必要に応じて、RoleオブジェクトまたはClusterRoleオブジェクトを作成/更新できるRoleを付与する。 -2. 作成/更新するRoleに特定の権限を含む権限を付与する。 - * 暗黙的に、これらの権限を付与することにより(自分自身が付与されていない権限でRoleまたはClusterRoleを作成または変更しようとすると、APIリクエストは禁止されます)。 - * または、`rbac.authorization.k8s.io`APIグループの` roles`または `clusterroles`リソースで` escalate` verbを実行する権限を与えることにより、 `Role`または` ClusterRole`で権限を指定することを明示的に許可する - -### RoleBindingの作成または更新に関する制限 - -参照されるRoleに含まれるすべての権限を(RoleBindingと同じスコープで)すでに持っている場合、 -*または*参照されたRoleで`bind` verbを実行する認可されている場合のみ、RoleBindingを作成/更新できます。 -たとえば、 `user-1`にクラスター全体でSecretsを一覧表示する権限がない場合、ClusterRoleBindingを作成してもRoleにその権限を付与できません。 -ユーザーがRoleBindingを作成/更新できるようにするには、以下のいずれかを実施します。 - -1. 必要に応じて、RoleBindingまたはClusterRoleBindingオブジェクトを作成/更新できるようにする役割を付与する。 -2. 特定の役割をバインドするために必要なアクセス許可を付与する。 - * 暗黙的に、Roleに含まれる権限を付与することによって。 - * 明示的に、特定のRole(またはClusterRole)で `bind` verbを実行する許可を与えることによって。 - -たとえば、このClusterRoleとRoleBindingを使用すると、 `user-1`は他のユーザーにNamespace` user-1-namespace`の `admin`、` edit`、および `view`Roleを付与します。 - -```yaml -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: role-grantor -rules: -- apiGroups: ["rbac.authorization.k8s.io"] - resources: ["rolebindings"] - verbs: ["create"] -- apiGroups: ["rbac.authorization.k8s.io"] - resources: ["clusterroles"] - verbs: ["bind"] - resourceNames: ["admin","edit","view"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: role-grantor-binding - namespace: user-1-namespace -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: role-grantor -subjects: -- apiGroup: rbac.authorization.k8s.io - kind: User - name: user-1 -``` - -最初のRoleとRoleBindingをブートストラップするときは、最初のユーザーがまだ持っていない権限を付与する必要があります。 -初期RoleとRoleBindingをブートストラップするには、以下のいずれかを実施します。 - -* 「system:masters」グループのクレデンシャルを使用します。このグループは、デフォルトのBindingによって「cluster-admin」スーパーユーザーRoleにバインドされています。 -* APIサーバーが安全でないポート(`--insecure-port`)を有効にして実行されている場合、そのポートを介してのAPI呼び出しもできます。これにより、認証や認可が実行されません。 - -## コマンドラインユーティリティー - -### `kubectl create role` - -以下に、単一のNamespace内で権限を定義するRoleオブジェクトをいくつか例として作成します。 - -* ユーザーがポッドで `get`、` watch`、および `list`を実行できるように「pod-reader」という名前のRoleを作成します。 - - ```shell - kubectl create role pod-reader --verb=get --verb=list --verb=watch --resource=pods - ``` - -* resourceNamesを指定して、「pod-reader」という名前のRoleを作成します。 - - ```shell - kubectl create role pod-reader --verb=get --resource=pods --resource-name=readablepod --resource-name=anotherpod - ``` - -* apiGroupsを指定して「foo」という名前のRoleを作成します。 - - ```shell - kubectl create role foo --verb=get,list,watch --resource=replicasets.apps - ``` - -* サブリソースの権限を持つ「foo」という名前のRoleを作成します。 -* Create a Role named "foo" with subresource permissions: - - ```shell - kubectl create role foo --verb=get,list,watch --resource=pods,pods/status - ``` -* 特定の名前のリソースを取得/更新する権限を持つ「my-component-lease-holder」という名前のRoleを作成します。 - - ```shell - kubectl create role my-component-lease-holder --verb=get,list,watch,update --resource=lease --resource-name=my-component - ``` - -### `kubectl create clusterrole` - -以下にClusterRoleをいくつか例として作成します。 - -* ユーザーがポッドに対して`get`、` watch`、および `list`を実行できるようにする「pod-reader」という名前のClusterRoleを作成します。 - - ```shell - kubectl create clusterrole pod-reader --verb=get,list,watch --resource=pods - ``` - -* resourceNamesを指定して、「pod-reader」という名前のClusterRoleを作成します。 - - ```shell - kubectl create clusterrole pod-reader --verb=get --resource=pods --resource-name=readablepod --resource-name=anotherpod - ``` - -* apiGroupsを指定して「foo」という名前のClusterRoleを作成します。 - - ```shell - kubectl create clusterrole foo --verb=get,list,watch --resource=replicasets.apps - ``` - -* サブリソースの権限を持つ「foo」という名前のClusterRoleを作成します。 - - ```shell - kubectl create clusterrole foo --verb=get,list,watch --resource=pods,pods/status - ``` - -* nonResourceURLを指定して「foo」という名前のClusterRoleを作成します。 - - ```shell - kubectl create clusterrole "foo" --verb=get --non-resource-url=/logs/* - ``` - -* aggregationRuleを指定して、「monitoring」という名前のClusterRoleを作成します。 - - ```shell - kubectl create clusterrole monitoring --aggregation-rule="rbac.example.com/aggregate-to-monitoring=true" - ``` - -### `kubectl create rolebinding` - -以下に、特定のNamespace内でRoleまたはClusterRoleをいくつか例として付与します。 - -* Namespace「acme」内で、「admin」ClusterRoleの権限を「bob」という名前のユーザーに付与します。 - - ```shell - kubectl create rolebinding bob-admin-binding --clusterrole=admin --user=bob --namespace=acme - ``` - -* Namespace「acme」内で、ClusterRole「view」へのアクセス許可を「myapp」というNamespace「acme」のサービスアカウントに付与します。 - - ```shell - kubectl create rolebinding myapp-view-binding --clusterrole=view --serviceaccount=acme:myapp --namespace=acme - ``` - -* Namespace「acme」内で、ClusterRole「view」へのアクセス許可を「myapp」というNamespace「myappnamespace」のサービスアカウントに付与します。 - - ```shell - kubectl create rolebinding myappnamespace-myapp-view-binding --clusterrole=view --serviceaccount=myappnamespace:myapp --namespace=acme - ``` - -### `kubectl create clusterrolebinding` - -以下に、クラスタ全体(すべてのNamespace)にClusterRoleをいくつか例として付与します。 - -* クラスター全体で、ClusterRole「cluster-admin」へのアクセス許可を「root」という名前のユーザーに付与します。 - - ```shell - kubectl create clusterrolebinding root-cluster-admin-binding --clusterrole=cluster-admin --user=root - ``` - -* クラスター全体で、ClusterRole「system:node-proxier」へのアクセス許可を「system:kube-proxy」という名前のユーザーに付与します。 - - ```shell - kubectl create clusterrolebinding kube-proxy-binding --clusterrole=system:node-proxier --user=system:kube-proxy - ``` - -* クラスター全体で、ClusterRole「view」へのアクセス許可を、Namespace「acme」の「myapp」という名前のサービスアカウントに付与します。 - - ```shell - kubectl create clusterrolebinding myapp-view-binding --clusterrole=view --serviceaccount=acme:myapp - ``` - -### `kubectl auth reconcile` {#kubectl-auth-reconcile} - -マニフェストファイルから `rbac.authorization.k8s.io/v1`APIオブジェクトを作成または更新します。 - -欠落しているオブジェクトが作成され、必要に応じて、Namespaceに属するオブジェクト用にオブジェクトを含むNamespaceが作成されます。 - -既存のRoleが更新され、入力オブジェクトに権限が含まれるようになります。 -`--remove-extra-permissions`が指定されている場合は、余分な権限を削除します。 - -既存のBindingが更新され、入力オブジェクトにsubjectsが含まれるようになります。 -`--remove-extra-subjects`が指定されている場合は、余分な件名を削除します。 - -以下、例として。 - -* RBACオブジェクトのマニフェストファイルをテストとして適用し、行われる変更を表示します。 - - ``` - kubectl auth reconcile -f my-rbac-rules.yaml --dry-run=client - ``` - -* RBACオブジェクトのマニフェストファイルを適用し、(Role内の)追加のアクセス許可と(Binding内の)追加のsubjectsを保持します。 - - ```shell - kubectl auth reconcile -f my-rbac-rules.yaml - ``` - -* RBACオブジェクトのマニフェストファイルを適用し、(Role内の)余分なアクセス許可と(Binding内の)余分なsubjectsを削除します。 - -## ServiceAccount権限 {#service-account-permissions} - -デフォルトのRBACポリシーは、コントロールプレーンコンポーネント、ノード、 -およびコントローラーをスコープとして権限を付与しますが、 Namespace`kube-system`外のサービスアカウントには*no permissions*で付与します -(すべての認証されたユーザーに与えられたディスカバリー権限に関わらず)。 - -これにより、必要に応じて特定のServiceAccountに特定のRoleを付与できます。 -きめ細かいRoleBindingはセキュリティを強化しますが、管理にはより多くの労力が必要です。 -より広範な権限は、不必要な(そして潜在的にエスカレートする)APIアクセスをServiceAccountsに与える可能性がありますが、管理が簡単です。 - -アプローチを最も安全なものから最も安全でないものの順に並べると、次のとおりです。 - -1. アプリケーション固有のサービスアカウントにRoleを付与する(ベストプラクティス) - これには、アプリケーションがpodのspec、そして作成するサービスアカウント(API、アプリケーションマニフェスト、 `kubectl create serviceaccount`などを介して)で`serviceAccountName`を指定する必要があります。 - たとえば、「my-namespace」内の読み取り専用権限を「my-sa」サービスアカウントに付与します。 - - ```shell - kubectl create rolebinding my-sa-view \ - --clusterrole=view \ - --serviceaccount=my-namespace:my-sa \ - --namespace=my-namespace - ``` - -2. あるNamespaceのサービスアカウント「default」にRoleを付与します - - アプリケーションが `serviceAccountName`を指定しない場合、サービスアカウント「default」を使用します。 - - {{< note >}} - サービスアカウント「default」に付与された権限は、`serviceAccountName`を指定しないNamespace内のすべてのポッドで利用できます。 - {{< /note >}} - - たとえば、「my-namespace」内の読み取り専用権限をサービスアカウント「default」に付与します。 - - ```shell - kubectl create rolebinding default-view \ - --clusterrole=view \ - --serviceaccount=my-namespace:default \ - --namespace=my-namespace - ``` - - 多くの[アドオン](https://kubernetes.io/docs/concepts/cluster-administration/addons/)は、 - Namespace`kube-system`のサービスアカウント「default」として実行されます。 - これらのアドオンをスーパーユーザーアクセスでの実行を許可するには、Namespace`kube-system`のサービスアカウント「default」のcluster-admin権限を付与します。 - - {{< caution >}} - これを有効にすると、 Namespace`kube-systemにクラスターのAPIへのスーパーユーザーアクセス許可するSecretsが含まれます。 - {{< /caution >}} - - ```shell - kubectl create clusterrolebinding add-on-cluster-admin \ - --clusterrole=cluster-admin \ - --serviceaccount=kube-system:default - ``` - -3. Namespace内のすべてのサービスアカウントにRoleを付与します - - Namespace内のすべてのアプリケーションにRoleを持たせたい場合は、使用するサービスアカウントに関係なく、 - そのNamespaceのサービスアカウントグループにRoleを付与できます。 - - たとえば、「my-namespace」内の読み取り専用アクセス許可を、そのNamespace内のすべてのサービスアカウントに付与します。 - - ```shell - kubectl create rolebinding serviceaccounts-view \ - --clusterrole=view \ - --group=system:serviceaccounts:my-namespace \ - --namespace=my-namespace - ``` - -4. クラスター全体のすべてのサービスアカウントに制限されたRoleを付与します(お勧めしません) - - Namespaceごとのアクセス許可を管理したくない場合は、すべてのサービスアカウントにクラスター全体の役割を付与できます。 - - たとえば、クラスター内のすべてのサービスアカウントに、すべてのNamespaceで読み取り専用のアクセス許可を付与します。 - - ```shell - kubectl create clusterrolebinding serviceaccounts-view \ - --clusterrole=view \ - --group=system:serviceaccounts - ``` - -5. クラスター全体のすべてのサービスアカウントへのスーパーユーザーアクセスを許可します。(強くお勧めしません) - - 権限の分割をまったく考慮しない場合は、すべてのサービスアカウントにスーパーユーザーアクセスを許可できます。 - - {{< warning >}} - これにより、すべてのアプリケーションにクラスターへのフルアクセスが許可され、Secretsの読み取りアクセス権(または任意のポッドを作成する機能)を持つユーザーに、クラスターへのフルアクセスが許可されます。 - {{< /warning >}} - - ```shell - kubectl create clusterrolebinding serviceaccounts-cluster-admin \ - --clusterrole=cluster-admin \ - --group=system:serviceaccounts - ``` - -## ABACからアップグレードする - -以前は古いバージョンのKubernetesを実行していたクラスターは、すべてのサービスアカウントに完全なAPIアクセスを許可するなど、permissiveなABACポリシーを使用することがよくありました。 - -デフォルトのRBACポリシーは、コントロールプレーンコンポーネント、ノード、 -およびコントローラーをスコープとして権限を付与しますが、 Namespace`kube-system`外のサービスアカウントには*no permissions*で付与します -(すべての認証されたユーザーに与えられたディスカバリー権限に関わらず)。 - -これははるかに安全ですが、API権限を自動的に受け取ることを期待している既存のワークロードを混乱させる可能性があります。 -この移行を管理するための2つのアプローチは次のとおりです。 - -### 並行認可 - - -RBACとABACの両方のauthorizerを実行し、[legacy ABAC policy](/docs/reference/access-authn-authz/abac/#policy-file-format)を含むポリシーファイルを指定します。 - -``` ---authorization-mode=...,RBAC,ABAC --authorization-policy-file=mypolicy.json -``` - -最初のコマンドラインオプションを詳細に説明すると、Nodeなどの以前のauthorizerが -要求を拒否すると、RBAC authorizerはAPI要求を認可しようとします。 RBACの場合 -また、そのAPI要求を拒否すると、ABAC authorizerが実行されます。これにより、すべてのリクエストが -RBACまたはABACポリシーの*いずれか*で許可されます。 - -RBACコンポーネントのログレベルが5以上でkube-apiserverを実行した場合(`--vmodule = rbac * = 5`または` --v = 5`)、APIサーバーログでRBACの拒否を確認できます(プレフィックスは「RBAC」)。 -その情報を使用して、どのRoleをどのユーザー、グループ、またはサービスアカウントに付与する必要があるかを判断できます。 - -[サービスアカウントに付与されたRole](#service-account-permissions)を取得し、 -ワークロードがサーバーログにRBACの拒否メッセージがない状態で実行されている場合は、ABAC authorizerを削除できます。 - -### Permissive RBAC権限 - -RBACRoleBindingを使用して、permissive ABACポリシーを複製できます。 - -{{< warning >}} -次のポリシーでは、**すべて**のサービスアカウントがクラスター管理者としてふるまうことを許可しています。 -コンテナで実行されているアプリケーションは、サービスアカウントのクレデンシャルを自動的に受け取ります。 -secretsの表示や権限の変更など、APIに対して任意のアクションを実行できます。 -これは推奨されるポリシーではありません。 - -```shell -kubectl create clusterrolebinding permissive-binding \ - --clusterrole=cluster-admin \ - --user=admin \ - --user=kubelet \ - --group=system:serviceaccounts -``` -{{< /warning >}} - -RBACの使用に移行後、クラスターが情報セキュリティのニーズを確実に満たすように、アクセスコントロールを調整する必要があります。 diff --git a/content/ja/docs/reference/command-line-tools-reference/kubelet-authentication-authorization.md b/content/ja/docs/reference/command-line-tools-reference/kubelet-authentication-authorization.md deleted file mode 100644 index fe7a1626fb..0000000000 --- a/content/ja/docs/reference/command-line-tools-reference/kubelet-authentication-authorization.md +++ /dev/null @@ -1,83 +0,0 @@ ---- -title: Kubelet 認証/認可 ---- - - -## 概要 - -kubeletのHTTPSエンドポイントは、さまざまな感度のデータへのアクセスを提供するAPIを公開し、 -ノードとコンテナ内のさまざまなレベルの権限でタスクを実行できるようにします。 - -このドキュメントでは、kubeletのHTTPSエンドポイントへのアクセスを認証および承認する方法について説明します。 - -## Kubelet 認証 - -デフォルトでは、他の構成済み認証方法によって拒否されないkubeletのHTTPSエンドポイントへのリクエストは -匿名リクエストとして扱われ、ユーザー名は`system:anonymous`、 -グループは`system:unauthenticated`になります。 - -匿名アクセスを無効にし、認証されていないリクエストに対して`401 Unauthorized`応答を送信するには: - -* `--anonymous-auth=false`フラグでkubeletを開始します。 - -kubeletのHTTPSエンドポイントに対するX509クライアント証明書認証を有効にするには: - -* `--client-ca-file`フラグでkubeletを起動し、クライアント証明書を確認するためのCAバンドルを提供します。 -* `--kubelet-client-certificate`および`--kubelet-client-key`フラグを使用してapiserverを起動します。 -* 詳細については、[apiserver認証ドキュメント](/ja/docs/reference/access-authn-authz/authentication/#x509-client-certs)を参照してください。 - -APIベアラートークン(サービスアカウントトークンを含む)を使用して、kubeletのHTTPSエンドポイントへの認証を行うには: - -* APIサーバーで`authentication.k8s.io/v1beta1`グループが有効になっていることを確認します。 -* `--authentication-token-webhook`および`--kubeconfig`フラグを使用してkubeletを開始します。 -* kubeletは、構成済みのAPIサーバーで `TokenReview` APIを呼び出して、ベアラートークンからユーザー情報を判別します。 - -## Kubelet 承認 - -認証に成功した要求(匿名要求を含む)はすべて許可されます。デフォルトの認可モードは、すべての要求を許可する`AlwaysAllow`です。 - -kubelet APIへのアクセスを細分化するのは、次のような多くの理由が考えられます: - -* 匿名認証は有効になっていますが、匿名ユーザーがkubeletのAPIを呼び出す機能は制限する必要があります。 -* ベアラートークン認証は有効になっていますが、kubeletのAPIを呼び出す任意のAPIユーザー(サービスアカウントなど)の機能を制限する必要があります。 -* クライアント証明書の認証は有効になっていますが、構成されたCAによって署名されたクライアント証明書の一部のみがkubeletのAPIの使用を許可されている必要があります。 - -kubeletのAPIへのアクセスを細分化するには、APIサーバーに承認を委任します: - -* APIサーバーで`authorization.k8s.io/v1beta1` APIグループが有効になっていることを確認します。 -* `--authorization-mode=Webhook`と`--kubeconfig`フラグでkubeletを開始します。 -* kubeletは、構成されたAPIサーバーで`SubjectAccessReview` APIを呼び出して、各リクエストが承認されているかどうかを判断します。 - -kubeletは、apiserverと同じ[リクエスト属性](/docs/reference/access-authn-authz/authorization/#review-your-request-attributes)アプローチを使用してAPIリクエストを承認します。 - -動詞は、受けとったリクエストのHTTP動詞から決定されます: - -HTTP動詞 | 要求 動詞 -----------|--------------- -POST | create -GET, HEAD | get -PUT | update -PATCH | patch -DELETE | delete - -リソースとサブリソースは、受けとったリクエストのパスから決定されます: - -Kubelet API | リソース | サブリソース --------------|----------|------------ -/stats/\* | nodes | stats -/metrics/\* | nodes | metrics -/logs/\* | nodes | log -/spec/\* | nodes | spec -*all others* | nodes | proxy - -名前空間とAPIグループの属性は常に空の文字列であり、 -リソース名は常にkubeletの`Node` APIオブジェクトの名前です。 - -このモードで実行する場合は、apiserverに渡される`--kubelet-client-certificate`フラグと`--kubelet-client-key` -フラグで識別されるユーザーが次の属性に対して許可されていることを確認します: - -* verb=\*, resource=nodes, subresource=proxy -* verb=\*, resource=nodes, subresource=stats -* verb=\*, resource=nodes, subresource=log -* verb=\*, resource=nodes, subresource=spec -* verb=\*, resource=nodes, subresource=metrics diff --git a/content/ja/docs/reference/glossary/cloud-controller-manager.md b/content/ja/docs/reference/glossary/cloud-controller-manager.md deleted file mode 100755 index 6e9c9104da..0000000000 --- a/content/ja/docs/reference/glossary/cloud-controller-manager.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: クラウドコントローラーマネージャー -id: cloud-controller-manager -date: 2018-04-12 -full_link: /ja/docs/concepts/architecture/cloud-controller/ -short_description: > - サードパーティクラウドプロバイダーにKubernetewを結合するコントロールプレーンコンポーネント -aka: -tags: -- core-object -- architecture -- operation ---- - クラウド特有の制御ロジックを組み込むKubernetesの{{< glossary_tooltip text="control plane" term_id="control-plane" >}}コンポーネントです。クラウドコントロールマネージャーは、クラスターをクラウドプロバイダーAPIをリンクし、クラスタのみで相互作用するコンポーネントからクラウドプラットフォームで相互作用するコンポーネントを分離します。 - - - -Kubernetesと下のクラウドインフラストラクチャー間の相互運用ロジックを分離することで、cloud-controller-managerコンポーネントはクラウドプロバイダを主なKubernetesプロジェクトと比較し異なるペースで機能をリリース可能にします。 diff --git a/content/ja/docs/tasks/administer-cluster/kubeadm/adding-windows-nodes.md b/content/ja/docs/tasks/administer-cluster/kubeadm/adding-windows-nodes.md deleted file mode 100644 index 62e610b277..0000000000 --- a/content/ja/docs/tasks/administer-cluster/kubeadm/adding-windows-nodes.md +++ /dev/null @@ -1,181 +0,0 @@ ---- -title: Windowsノードの追加 -min-kubernetes-server-version: 1.17 -content_type: tutorial -weight: 30 ---- - - - -{{< feature-state for_k8s_version="v1.18" state="beta" >}} - -Kubernetesを使用してLinuxノードとWindowsノードを混在させて実行できるため、Linuxで実行するPodとWindowsで実行するPodを混在させることができます。このページでは、Windowsノードをクラスターに登録する方法を示します。 - - - - -## {{% heading "prerequisites" %}} - {{< version-check >}} - -* WindowsコンテナをホストするWindowsノードを構成するには、[Windows Server 2019ライセンス](https://www.microsoft.com/en-us/cloud-platform/windows-server-pricing)(またはそれ以上)を取得します。 -VXLAN/オーバーレイネットワークを使用している場合は、[KB4489899](https://support.microsoft.com/help/4489899)もインストールされている必要があります。 - -* コントロールプレーンにアクセスできるLinuxベースのKubernetes kubeadmクラスター([kubeadmを使用したシングルコントロールプレーンクラスターの作成](/ja/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/)を参照) - - - - -## {{% heading "objectives" %}} - - -* Windowsノードをクラスターに登録する -* LinuxとWindowsのPodとServiceが相互に通信できるようにネットワークを構成する - - - - - - -## はじめに: クラスターへのWindowsノードの追加 - -### ネットワーク構成 - -LinuxベースのKubernetesコントロールプレーンノードを取得したら、ネットワーキングソリューションを選択できます。このガイドでは、簡単にするためにVXLANモードでのFlannelの使用について説明します。 - -#### Flannel構成 - -1. FlannelのためにKubernetesコントロールプレーンを準備する - - クラスター内のKubernetesコントロールプレーンでは、多少の準備が推奨されます。Flannelを使用する場合は、iptablesチェーンへのブリッジIPv4トラフィックを有効にすることをお勧めします。すべてのLinuxノードで次のコマンドを実行する必要があります: - - ```bash - sudo sysctl net.bridge.bridge-nf-call-iptables=1 - ``` - -1. Linux用のFlannelをダウンロードして構成する - - 最新のFlannelマニフェストをダウンロード: - - ```bash - wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml - ``` - - VNIを4096、ポートを4789に設定するために、flannelマニフェストの`net-conf.json`セクションを変更します。次のようになります: - - ```json - net-conf.json: | - { - "Network": "10.244.0.0/16", - "Backend": { - "Type": "vxlan", - "VNI" : 4096, - "Port": 4789 - } - } - ``` - - {{< note >}}Linux上のFlannelがWindows上のFlannelと相互運用するには、VNIを4096およびポート4789に設定する必要があります。これらのフィールドの説明については、[VXLANドキュメント](https://github.com/coreos/flannel/blob/master/Documentation/backends.md#vxlan)を参照してください。{{< /note >}} - - {{< note >}}L2Bridge/Host-gatewayモードを使用するには、代わりに`Type`の値を`"host-gw"`に変更し、`VNI`と`Port`を省略します。{{< /note >}} - -1. Flannelマニフェストを適用して検証する - - Flannelの構成を適用しましょう: - - ```bash - kubectl apply -f kube-flannel.yml - ``` - - 数分後、Flannel Podネットワークがデプロイされていれば、すべてのPodが実行されていることがわかります。 - - ```bash - kubectl get pods -n kube-system - ``` - - 出力結果には、実行中のLinux flannel DaemonSetが含まれているはずです: - - ``` - NAMESPACE NAME READY STATUS RESTARTS AGE - ... - kube-system kube-flannel-ds-54954 1/1 Running 0 1m - ``` - -1. Windows Flannelとkube-proxy DaemonSetを追加する - - これで、Windows互換バージョンのFlannelおよびkube-proxyを追加できます。 - 互換性のあるバージョンのkube-proxyを確実に入手するには、イメージのタグを置換する必要があります。 - 次の例は、Kubernetes{{< param "fullversion" >}}の使用方法を示していますが、 - 独自のデプロイに合わせてバージョンを調整する必要があります。 - - ```bash - curl -L https://github.com/kubernetes-sigs/sig-windows-tools/releases/latest/download/kube-proxy.yml | sed 's/VERSION/{{< param "fullversion" >}}/g' | kubectl apply -f - - kubectl apply -f https://github.com/kubernetes-sigs/sig-windows-tools/releases/latest/download/flannel-overlay.yml - ``` - {{< note >}} - ホストゲートウェイを使用している場合は、代わりに https://github.com/kubernetes-sigs/sig-windows-tools/releases/latest/download/flannel-host-gw.yml を使用してください。 - {{< /note >}} - - {{< note >}} -Windowsノードでイーサネット(「Ethernet0 2」など)ではなく別のインターフェースを使用している場合は、次の行を変更する必要があります: - -```powershell -wins cli process run --path /k/flannel/setup.exe --args "--mode=overlay --interface=Ethernet" -``` - -`flannel-host-gw.yml`または`flannel-overlay.yml`ファイルで、それに応じてインターフェースを指定します。 - -```bash -# 例 -curl -L https://github.com/kubernetes-sigs/sig-windows-tools/releases/latest/download/flannel-overlay.yml | sed 's/Ethernet/Ethernet0 2/g' | kubectl apply -f - -``` - {{< /note >}} - - - -### Windowsワーカーノードの参加 -{{< note >}} -`Containers`機能をインストールし、Dockerをインストールする必要があります。 -行うための指示としては、[Dockerエンジンのインストール - Windowsサーバー上のエンタープライズ](https://docs.mirantis.com/docker-enterprise/v3.1/dockeree-products/docker-engine-enterprise/dee-windows.html)を利用できます。 -{{< /note >}} - -{{< note >}} -Windowsセクションのすべてのコードスニペットは、 -Windowsワーカーノードの(管理者)権限を持つPowerShell環境で実行されます。 -{{< /note >}} - -1. wins、kubelet、kubeadmをインストールします。 - - ```PowerShell - curl.exe -LO https://github.com/kubernetes-sigs/sig-windows-tools/releases/latest/download/PrepareNode.ps1 - .\PrepareNode.ps1 -KubernetesVersion {{< param "fullversion" >}} - ``` - -1. `kubeadm`を実行してノードに参加します - - コントロールプレーンホストで`kubeadm init`を実行したときに提供されたコマンドを使用します。 - このコマンドがなくなった場合、またはトークンの有効期限が切れている場合は、`kubeadm token create --print-join-command` - (コントロールプレーンホスト上で)を実行して新しいトークンを生成します。 - - -#### インストールの確認 -次のコマンドを実行して、クラスター内のWindowsノードを表示できるようになります: - -```bash -kubectl get nodes -o wide -``` - -新しいノードが`NotReady`状態の場合は、flannelイメージがまだダウンロード中の可能性があります。 -`kube-system`名前空間のflannel Podを確認することで、以前と同様に進行状況を確認できます: - -```shell -kubectl -n kube-system get pods -l app=flannel -``` - -flannel Podが実行されると、ノードは`Ready`状態になり、ワークロードを処理できるようになります。 - - - -## {{% heading "whatsnext" %}} - - -- [Windows kubeadmノードのアップグレード](/docs/tasks/administer-cluster/kubeadm/upgrading-windows-nodes) diff --git a/content/ja/docs/tasks/administer-cluster/kubeadm/upgrading-windows-nodes.md b/content/ja/docs/tasks/administer-cluster/kubeadm/upgrading-windows-nodes.md deleted file mode 100644 index 3c367aaa22..0000000000 --- a/content/ja/docs/tasks/administer-cluster/kubeadm/upgrading-windows-nodes.md +++ /dev/null @@ -1,92 +0,0 @@ ---- -title: Windowsノードのアップグレード -min-kubernetes-server-version: 1.17 -content_type: task -weight: 40 ---- - - - -{{< feature-state for_k8s_version="v1.18" state="beta" >}} - -このページでは、[kubeadmで作られた](/docs/tasks/administer-cluster/kubeadm/adding-windows-nodes)Windowsノードをアップグレードする方法について説明します。 - - - - -## {{% heading "prerequisites" %}} - -{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} -* [残りのkubeadmクラスターをアップグレードするプロセス](/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade)を理解します。 -Windowsノードをアップグレードする前にコントロールプレーンノードをアップグレードしたいと思うかもしれません。 - - - - - - -## ワーカーノードをアップグレード - -### kubeadmをアップグレード - -1. Windowsノードから、kubeadmをアップグレードします。: - - ```powershell - # {{< param "fullversion" >}}を目的のバージョンに置き換えます - curl.exe -Lo C:\k\kubeadm.exe https://dl.k8s.io/{{< param "fullversion" >}}/bin/windows/amd64/kubeadm.exe - ``` - -### ノードをドレインする - -1. Kubernetes APIにアクセスできるマシンから、 - ノードをスケジュール不可としてマークして、ワークロードを削除することでノードのメンテナンスを準備します: - - ```shell - # をドレインするノードの名前に置き換えます - kubectl drain --ignore-daemonsets - ``` - - このような出力結果が表示されるはずです: - - ``` - node/ip-172-31-85-18 cordoned - node/ip-172-31-85-18 drained - ``` - -### kubeletの構成をアップグレード - -1. Windowsノードから、次のコマンドを呼び出して新しいkubelet構成を同期します: - - ```powershell - kubeadm upgrade node - ``` - -### kubeletをアップグレード - -1. Windowsノードから、kubeletをアップグレードして再起動します: - - ```powershell - stop-service kubelet - curl.exe -Lo C:\k\kubelet.exe https://dl.k8s.io/{{< param "fullversion" >}}/bin/windows/amd64/kubelet.exe - restart-service kubelet - ``` - -### ノードをオンライン状態に - -1. Kubernetes APIにアクセスできるマシンから、 -スケジュール可能としてマークして、ノードをオンラインに戻します: - - ```shell - # をノードの名前に置き換えます - kubectl uncordon - ``` -### kube-proxyをアップグレード - -1. Kubernetes APIにアクセスできるマシンから、次を実行します、 -もう一度{{< param "fullversion" >}}を目的のバージョンに置き換えます: - - ```shell - curl -L https://github.com/kubernetes-sigs/sig-windows-tools/releases/latest/download/kube-proxy.yml | sed 's/VERSION/{{< param "fullversion" >}}/g' | kubectl apply -f - - ``` - -