Skip to content

Commit 24b21f4

Browse files
authored
[ja] Translate content/en/docs/tasks/run-application/access-api-from-pod.md (#49751)
* translate access-api-from-pod.md * incorporated review feedback * incorporated review feedback * incorporated review feedback
1 parent 686bfbe commit 24b21f4

File tree

1 file changed

+101
-0
lines changed

1 file changed

+101
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
---
2+
title: PodからKubernetes APIにアクセスする
3+
content_type: task
4+
weight: 120
5+
---
6+
7+
<!-- overview -->
8+
9+
このガイドでは、Pod内からKubernetes APIにアクセスする方法を示します。
10+
11+
## {{% heading "prerequisites" %}}
12+
13+
{{< include "task-tutorial-prereqs.md" >}}
14+
15+
<!-- steps -->
16+
17+
## Pod内からAPIへのアクセス
18+
19+
Podの中からAPIにアクセスする時、APIサーバーの場所の検出と認証は、外部クライアントの場合とは若干異なります。
20+
21+
PodからKubernetes APIを使用する最も簡単な方法は、公式の[クライアントライブラリ](/docs/reference/using-api/client-libraries/)を使用することです。
22+
これらのライブラリは自動的にAPIサーバーを検出して認証できます。
23+
24+
### 公式クライアントライブラリの使用
25+
26+
Podの中からKubernetes APIに接続する推奨された方法として次のものがあります:
27+
28+
- Goクライアントの場合、公式の[Goクライアントライブラリ](https://github.com/kubernetes/client-go/)を使用します。
29+
`rest.InClusterConfig()`関数はAPIホストの探索と認証を自動的に処理します。
30+
[ここにあるサンプル](https://git.k8s.io/client-go/examples/in-cluster-client-configuration/main.go)を参照してください。
31+
32+
- Pythonクライアントの場合、公式の[Pythonクライアントライブラリ](https://github.com/kubernetes-client/python/)を使用します。
33+
`config.load_incluster_config()`関数はAPIホストの探索と認証を自動的に処理します。
34+
[ここにあるサンプル](https://github.com/kubernetes-client/python/blob/master/examples/in_cluster_config.py)を参照してください。
35+
36+
- 他にも多くのライブラリが利用できます。
37+
[クライアントライブラリ](/docs/reference/using-api/client-libraries/)のページを参照してください。
38+
39+
いずれの場合も、APIサーバーと安全に通信するために、Podのサービスアカウントの資格情報が使用されます。
40+
41+
### REST APIによる直接アクセス
42+
43+
コンテナは、Pod内での実行中に環境変数`KUBERNETES_SERVICE_HOST``KUBERNETES_SERVICE_PORT_HTTPS`を取得することで、Kubernetes APIサーバーのHTTPSのURLを作成することができます。
44+
APIサーバーのクラスター内アドレスは、PodがローカルAPIサーバーのDNS名として`kubernetes.default.svc`を参照できるように、`default` Namespaceの`kubernetes`という名前のServiceにも公開されます。
45+
46+
{{< note >}}
47+
Kubernetesは、APIサーバーがホスト名`kubernetes.default.svc`に対する有効な証明書を持っていることを保証しません。
48+
しかし、コントロールプレーンは`$KUBERNETES_SERVICE_HOST`によって表されるホスト名またはIPアドレスに対する有効な証明書を提示することが期待**されます**
49+
{{< /note >}}
50+
51+
APIサーバーに対して認証を行う推奨された方法は、[サービスアカウント](/docs/tasks/configure-pod-container/configure-service-account/)の資格情報を使用することです。
52+
既定では、Podはサービスアカウントと関連づけられており、そのサービスアカウントに対する資格情報(トークン)が、そのPod内の各コンテナのファイルシステムツリーの`/var/run/secrets/kubernetes.io/serviceaccount/token`内に配置されます。
53+
54+
利用可能であれば、証明書バンドルが各コンテナのファイルシステムツリーの`/var/run/secrets/kubernetes.io/serviceaccount/ca.crt`に配置され、APIサーバーが提供する証明書を検証するために使用されます。
55+
56+
最後に、NamespaceスコープのAPIの操作に対して使用される既定のNamespaceは、各コンテナの`/var/run/secrets/kubernetes.io/serviceaccount/namespace`にあるファイルに記載されます。
57+
58+
### kubectl proxyの使用
59+
60+
公式のクライアントライブラリを使用せずにAPIを呼び出したい場合は、Pod内の新しいサイドカーコンテナの[コマンド](/docs/tasks/inject-data-application/define-command-argument-container/)として`kubectl proxy`を実行することができます。
61+
こうすることで、`kubectl proxy`がAPIを認証してPodの`localhost`インターフェースに公開するため、Pod内の他のコンテナが直接使用することができます。
62+
63+
### プロキシを使用しない方法
64+
65+
認証トークンを直接APIサーバーに渡すことで、kubectl proxyの使用を避けることも可能です。
66+
内部の証明書によって接続を保護します。
67+
68+
```shell
69+
# 内部のAPIサーバーのホスト名の指定
70+
APISERVER=https://kubernetes.default.svc
71+
72+
# ServiceAccountトークンのパス
73+
SERVICEACCOUNT=/var/run/secrets/kubernetes.io/serviceaccount
74+
75+
# PodのNamespaceの読み込み
76+
NAMESPACE=$(cat ${SERVICEACCOUNT}/namespace)
77+
78+
# ServiceAccountのBearerトークンを取得
79+
TOKEN=$(cat ${SERVICEACCOUNT}/token)
80+
81+
# 内部の認証局(CA)の参照
82+
CACERT=${SERVICEACCOUNT}/ca.crt
83+
84+
# トークンを用いてAPIの探索
85+
curl --cacert ${CACERT} --header "Authorization: Bearer ${TOKEN}" -X GET ${APISERVER}/api
86+
```
87+
88+
次のような出力になります:
89+
90+
```json
91+
{
92+
"kind": "APIVersions",
93+
"versions": ["v1"],
94+
"serverAddressByClientCIDRs": [
95+
{
96+
"clientCIDR": "0.0.0.0/0",
97+
"serverAddress": "10.0.1.149:443"
98+
}
99+
]
100+
}
101+
```

0 commit comments

Comments
 (0)