Skip to content

Commit 963dd1a

Browse files
authored
[ja] Translate content/ja/docs/tasks/access-application-cluster/access-cluster.md into Japanese (#53820)
* [ja] Translate content/ja/docs/tasks/access-application-cluster/access-cluster.md into Japanese * update docs * update
1 parent 9012150 commit 963dd1a

1 file changed

Lines changed: 262 additions & 0 deletions

File tree

Lines changed: 262 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,262 @@
1+
---
2+
title: クラスターへのアクセス
3+
weight: 20
4+
content_type: concept
5+
---
6+
7+
<!-- overview -->
8+
9+
このセクションでは、クラスターとやり取りするための複数の方法について説明します。
10+
11+
<!-- body -->
12+
13+
## kubectlで初めてアクセスする {#accessing-for-the-first-time-with-kubectl}
14+
15+
Kubernetes APIに初めてアクセスする際は、Kubernetes CLIの`kubectl`を使用することをおすすめします。
16+
17+
クラスターにアクセスするには、クラスターの接続先とアクセス用の認証情報が必要です。
18+
通常、[入門ガイド](/docs/setup/)に従って進めると、自動的にセットアップされます。
19+
または、他の誰かがクラスターをセットアップ済みで、認証情報と接続先が提供されている場合もあります。
20+
21+
以下のコマンドで、kubectlが認識している接続先と認証情報を確認してください:
22+
23+
```shell
24+
kubectl config view
25+
```
26+
27+
多くの[](/docs/reference/kubectl/quick-reference/)`kubectl`の基本的な使い方を紹介しており、完全なドキュメントは[kubectlリファレンス](/docs/reference/kubectl/)で確認できます。
28+
29+
## REST APIに直接アクセスする {#directly-accessing-the-rest-api}
30+
31+
kubectlは、APIサーバーの接続先を特定し、認証処理を行います。
32+
curlやwget、ブラウザーなどのHTTPクライアントでREST APIに直接アクセスしたい場合、接続先を特定して認証する方法がいくつかあります:
33+
34+
- kubectlをプロキシモードで実行する。
35+
- 推奨される方法です。
36+
- 保存済みのAPIサーバーの接続先を使用します。
37+
- 自己署名証明書を使用して、APIサーバーの身元を検証します。MITM攻撃は不可能です。
38+
- APIサーバーに対して認証を行います。
39+
- 将来的には、クライアント側で高度な負荷分散やフェイルオーバーを行う可能性があります。
40+
- HTTPクライアントに接続先と認証情報を直接提供する。
41+
- 代替の方法です。
42+
- プロキシを使用すると正しく動作しない一部のクライアントコードでも動作します。
43+
- MITM攻撃を防ぐために、ルート証明書をブラウザーにインポートする必要があります。
44+
45+
### kubectl proxyの使用 {#using-kubectl-proxy}
46+
47+
以下のコマンドを実行すると、kubectlがリバースプロキシとして機能するモードで動作します。
48+
APIサーバーの接続先の特定と認証を処理します。
49+
以下のように実行します:
50+
51+
```shell
52+
kubectl proxy --port=8080
53+
```
54+
55+
詳細については、[kubectl proxy](/docs/reference/generated/kubectl/kubectl-commands/#proxy)を参照してください。
56+
57+
その後、curl、wget、またはブラウザーでAPIにアクセスできます。
58+
IPv6の場合は、localhostを[::1]に置き換えてください:
59+
60+
```shell
61+
curl http://localhost:8080/api/
62+
```
63+
64+
出力は以下のようになります:
65+
66+
```json
67+
{
68+
"kind": "APIVersions",
69+
"versions": [
70+
"v1"
71+
],
72+
"serverAddressByClientCIDRs": [
73+
{
74+
"clientCIDR": "0.0.0.0/0",
75+
"serverAddress": "10.0.1.149:443"
76+
}
77+
]
78+
}
79+
```
80+
81+
### kubectl proxyを使用しない場合 {#without-kubectl-proxy}
82+
83+
`kubectl apply``kubectl describe secret...`を使用して、デフォルトのサービスアカウント用のトークンをgrep/cutで作成します:
84+
85+
まず、デフォルトのServiceAccount用のトークンを要求するSecretを作成します:
86+
87+
```shell
88+
kubectl apply -f - <<EOF
89+
apiVersion: v1
90+
kind: Secret
91+
metadata:
92+
name: default-token
93+
annotations:
94+
kubernetes.io/service-account.name: default
95+
type: kubernetes.io/service-account-token
96+
EOF
97+
```
98+
99+
次に、トークンコントローラーがSecretにトークンを設定するまで待ちます:
100+
101+
```shell
102+
while ! kubectl describe secret default-token | grep -E '^token' >/dev/null; do
103+
echo "waiting for token..." >&2
104+
sleep 1
105+
done
106+
```
107+
108+
生成されたトークンを取得して、使用します:
109+
110+
```shell
111+
APISERVER=$(kubectl config view --minify | grep server | cut -f 2- -d ":" | tr -d " ")
112+
TOKEN=$(kubectl describe secret default-token | grep -E '^token' | cut -f2 -d':' | tr -d " ")
113+
114+
curl $APISERVER/api --header "Authorization: Bearer $TOKEN" --insecure
115+
```
116+
117+
出力は以下のようになります:
118+
119+
```json
120+
{
121+
"kind": "APIVersions",
122+
"versions": [
123+
"v1"
124+
],
125+
"serverAddressByClientCIDRs": [
126+
{
127+
"clientCIDR": "0.0.0.0/0",
128+
"serverAddress": "10.0.1.149:443"
129+
}
130+
]
131+
}
132+
```
133+
134+
`jsonpath`を使用する場合:
135+
136+
```shell
137+
APISERVER=$(kubectl config view --minify -o jsonpath='{.clusters[0].cluster.server}')
138+
TOKEN=$(kubectl get secret default-token -o jsonpath='{.data.token}' | base64 --decode)
139+
140+
curl $APISERVER/api --header "Authorization: Bearer $TOKEN" --insecure
141+
```
142+
143+
出力は以下のようになります:
144+
145+
```json
146+
{
147+
"kind": "APIVersions",
148+
"versions": [
149+
"v1"
150+
],
151+
"serverAddressByClientCIDRs": [
152+
{
153+
"clientCIDR": "0.0.0.0/0",
154+
"serverAddress": "10.0.1.149:443"
155+
}
156+
]
157+
}
158+
```
159+
160+
上記の例では、`--insecure`フラグを使用しているため、MITM攻撃を受ける可能性があります。
161+
kubectlがクラスターにアクセスする際は、保存済みのルート証明書とクライアント証明書を使用してサーバーにアクセスします(これらは、`~/.kube`ディレクトリにインストールされています)。
162+
通常、クラスター証明書は自己署名されているため、HTTPクライアントでルート証明書を使用するには、特別な設定が必要になる場合があります。
163+
164+
一部のクラスターでは、APIサーバーが認証を必要としない場合があります。
165+
localhostで提供されていたり、ファイアウォールで保護されている場合などです。
166+
このような、認証を必要としない構成を行うための標準的な方法はありません。
167+
クラスター管理者がアクセス制御を設定する方法については、[APIへのアクセスコントロール](/docs/concepts/security/controlling-access)を参照してください。
168+
169+
## プログラムによるAPIアクセス {#programmatic-access-to-the-api}
170+
171+
Kubernetesは、[Go](#go-client)[Python](#python-client)のクライアントライブラリを公式にサポートしています。
172+
173+
### Goクライアント {#go-client}
174+
175+
* ライブラリを取得するには、次のコマンドを実行します: `go get k8s.io/client-go@kubernetes-<kubernetes-version-number>`
176+
詳細なインストール手順については、[INSTALL.md](https://github.com/kubernetes/client-go/blob/master/INSTALL.md#for-the-casual-user)を参照してください。
177+
サポートされているバージョンについては、[https://github.com/kubernetes/client-go](https://github.com/kubernetes/client-go#compatibility-matrix)を参照してください。
178+
* client-goクライアントを使用してアプリケーションを作成します。
179+
client-goは独自のAPIオブジェクトを定義しているため、必要に応じて、メインリポジトリではなくclient-goからAPI定義をインポートしてください。
180+
例: `import "k8s.io/client-go/kubernetes"`が正しい形です。
181+
182+
Goクライアントは、kubectl CLIと同じ[kubeconfigファイル](/docs/concepts/configuration/organize-cluster-access-kubeconfig/)を使用して、APIサーバーの接続先の特定と認証を行うことができます。
183+
こちらの[](https://git.k8s.io/client-go/examples/out-of-cluster-client-configuration/main.go)を参照してください。
184+
185+
クラスター内で、アプリケーションがPodとしてデプロイされている場合は、[次のセクション](#accessing-the-api-from-a-pod)を参照してください。
186+
187+
### Pythonクライアント {#python-client}
188+
189+
[Pythonクライアント](https://github.com/kubernetes-client/python)を使用するには、次のコマンドを実行します:
190+
`pip install kubernetes`
191+
その他のインストールオプションについては、[Pythonクライアントライブラリページ](https://github.com/kubernetes-client/python)を参照してください。
192+
193+
Pythonクライアントは、kubectl CLIと同じ[kubeconfigファイル](/docs/concepts/configuration/organize-cluster-access-kubeconfig/)を使用して、APIサーバーの接続先の特定と認証を行うことができます。
194+
こちらの[](https://github.com/kubernetes-client/python/tree/master/examples)を参照してください。
195+
196+
### その他の言語 {#other-languages}
197+
198+
その他の言語でAPIにアクセスするための[クライアントライブラリ](/docs/reference/using-api/client-libraries/)もあります。
199+
認証方法については、各ライブラリのドキュメントを参照してください。
200+
201+
## PodからAPIにアクセスする {#accessing-the-api-from-a-pod}
202+
203+
PodからAPIにアクセスする場合、APIサーバーの接続先の特定と認証は多少異なります。
204+
205+
詳細については、[PodからAPIにアクセスする](/docs/tasks/run-application/access-api-from-pod/)を参照してください。
206+
207+
## クラスター上で実行されているサービスにアクセスする {#accessing-services-running-on-the-cluster}
208+
209+
前のセクションでは、Kubernetes APIサーバーへの接続方法について説明しました。
210+
Kubernetesクラスター上で実行されている他のサービスへの接続については、[クラスターサービスへのアクセス](/docs/tasks/access-application-cluster/access-cluster-services/)を参照してください。
211+
212+
## リダイレクトのリクエスト {#requesting-redirects}
213+
214+
リダイレクト機能は非推奨となり、削除されました。
215+
代わりに、プロキシを使用してください(以下を参照)。
216+
217+
## 様々なプロキシ {#many-proxies}
218+
219+
Kubernetesを使用する際に見かける可能性のあるプロキシがいくつかあります:
220+
221+
1. [kubectl proxy](#directly-accessing-the-rest-api):
222+
223+
- ユーザーのデスクトップまたはPod内で実行されます
224+
- localhostアドレスからKubernetes APIサーバーへプロキシします
225+
- クライアントからプロキシへの通信では、HTTPを使用します
226+
- プロキシからAPIサーバーへの通信では、HTTPSを使用します
227+
- APIサーバーの接続先を特定します
228+
- 認証ヘッダーを追加します
229+
230+
1. [APIサーバープロキシ](/docs/tasks/access-application-cluster/access-cluster-services/#discovering-builtin-services):
231+
232+
- APIサーバーに組み込まれた踏み台サーバーです
233+
- クラスター外のユーザーを、通常では到達できないクラスターIPに接続します
234+
- APIサーバーのプロセス内で実行されます
235+
- クライアントからプロキシへの通信では、HTTPS(または、APIサーバーがHTTPを使うように設定されている場合はHTTP)を使用します
236+
- プロキシからターゲットへの通信では、利用可能な情報に基づいてプロキシが選択したHTTPまたはHTTPSを使用します
237+
- ノード、Pod、またはServiceへのアクセスに使用できます
238+
- Serviceにアクセスする際に負荷分散を行います
239+
240+
1. [kube proxy](/docs/concepts/services-networking/service/#ips-and-vips):
241+
242+
- 各ノード上で実行されます
243+
- UDPとTCPをプロキシします
244+
- HTTPを解釈しません
245+
- 負荷分散を提供します
246+
- Serviceへのアクセスにのみ使用されます
247+
248+
1. APIサーバー前段のプロキシ/ロードバランサー:
249+
250+
- クラスターによって、存在の有無や実装方法が異なります(例: nginx)
251+
- すべてのクライアントと1つ以上のAPIサーバーの間に位置します
252+
- 複数のAPIサーバーがある場合、ロードバランサーとして機能します
253+
254+
1. 外部サービスのクラウドロードバランサー:
255+
256+
- 一部のクラウドプロバイダーによって提供されます(例: AWS ELB、Google Cloud Load Balancer)
257+
- Kubernetesサービスのタイプが`LoadBalancer`の場合、自動的に作成されます
258+
- UDP/TCPのみを使用します
259+
- クラウドプロバイダーによって実装が異なります
260+
261+
Kubernetesユーザーは通常、最初の2つのタイプ以外について気にする必要はありません。
262+
残りのタイプは、通常は、クラスター管理者によって適切に設定されます。

0 commit comments

Comments
 (0)