このセクションでは、クラスターとやり取りするための複数の方法について説明します。
Kubernetes APIに初めてアクセスする際は、Kubernetes CLIのkubectlを使用することをおすすめします。
クラスターにアクセスするには、クラスターの接続先とアクセス用の認証情報が必要です。 通常、入門ガイドに従って進めると、自動的にセットアップされます。 または、他の誰かがクラスターをセットアップ済みで、認証情報と接続先が提供されている場合もあります。
以下のコマンドで、kubectlが認識している接続先と認証情報を確認してください:
kubectl config view
多くの例でkubectlの基本的な使い方を紹介しており、完全なドキュメントはkubectlリファレンスで確認できます。
kubectlは、APIサーバーの接続先を特定し、認証処理を行います。 curlやwget、ブラウザーなどのHTTPクライアントでREST APIに直接アクセスしたい場合、接続先を特定して認証する方法がいくつかあります:
以下のコマンドを実行すると、kubectlがリバースプロキシとして機能するモードで動作します。 APIサーバーの接続先の特定と認証を処理します。 以下のように実行します:
kubectl proxy --port=8080
詳細については、kubectl proxyを参照してください。
その後、curl、wget、またはブラウザーでAPIにアクセスできます。 IPv6の場合は、localhostを[::1]に置き換えてください:
curl http://localhost:8080/api/
出力は以下のようになります:
{
"kind": "APIVersions",
"versions": [
"v1"
],
"serverAddressByClientCIDRs": [
{
"clientCIDR": "0.0.0.0/0",
"serverAddress": "10.0.1.149:443"
}
]
}
kubectl applyとkubectl describe secret...を使用して、デフォルトのサービスアカウント用のトークンをgrep/cutで作成します:
まず、デフォルトのServiceAccount用のトークンを要求するSecretを作成します:
kubectl apply -f - <<EOF
apiVersion: v1
kind: Secret
metadata:
name: default-token
annotations:
kubernetes.io/service-account.name: default
type: kubernetes.io/service-account-token
EOF
次に、トークンコントローラーがSecretにトークンを設定するまで待ちます:
while ! kubectl describe secret default-token | grep -E '^token' >/dev/null; do
echo "waiting for token..." >&2
sleep 1
done
生成されたトークンを取得して、使用します:
APISERVER=$(kubectl config view --minify | grep server | cut -f 2- -d ":" | tr -d " ")
TOKEN=$(kubectl describe secret default-token | grep -E '^token' | cut -f2 -d':' | tr -d " ")
curl $APISERVER/api --header "Authorization: Bearer $TOKEN" --insecure
出力は以下のようになります:
{
"kind": "APIVersions",
"versions": [
"v1"
],
"serverAddressByClientCIDRs": [
{
"clientCIDR": "0.0.0.0/0",
"serverAddress": "10.0.1.149:443"
}
]
}
jsonpathを使用する場合:
APISERVER=$(kubectl config view --minify -o jsonpath='{.clusters[0].cluster.server}')
TOKEN=$(kubectl get secret default-token -o jsonpath='{.data.token}' | base64 --decode)
curl $APISERVER/api --header "Authorization: Bearer $TOKEN" --insecure
出力は以下のようになります:
{
"kind": "APIVersions",
"versions": [
"v1"
],
"serverAddressByClientCIDRs": [
{
"clientCIDR": "0.0.0.0/0",
"serverAddress": "10.0.1.149:443"
}
]
}
上記の例では、--insecureフラグを使用しているため、MITM攻撃を受ける可能性があります。
kubectlがクラスターにアクセスする際は、保存済みのルート証明書とクライアント証明書を使用してサーバーにアクセスします(これらは、~/.kubeディレクトリにインストールされています)。
通常、クラスター証明書は自己署名されているため、HTTPクライアントでルート証明書を使用するには、特別な設定が必要になる場合があります。
一部のクラスターでは、APIサーバーが認証を必要としない場合があります。 localhostで提供されていたり、ファイアウォールで保護されている場合などです。 このような、認証を必要としない構成を行うための標準的な方法はありません。 クラスター管理者がアクセス制御を設定する方法については、APIへのアクセスコントロールを参照してください。
Kubernetesは、GoとPythonのクライアントライブラリを公式にサポートしています。
go get k8s.io/client-go@kubernetes-<kubernetes-version-number>。
詳細なインストール手順については、INSTALL.mdを参照してください。
サポートされているバージョンについては、https://github.com/kubernetes/client-goを参照してください。import "k8s.io/client-go/kubernetes"が正しい形です。Goクライアントは、kubectl CLIと同じkubeconfigファイルを使用して、APIサーバーの接続先の特定と認証を行うことができます。 こちらの例を参照してください。
クラスター内で、アプリケーションがPodとしてデプロイされている場合は、次のセクションを参照してください。
Pythonクライアントを使用するには、次のコマンドを実行します:
pip install kubernetes。
その他のインストールオプションについては、Pythonクライアントライブラリページを参照してください。
Pythonクライアントは、kubectl CLIと同じkubeconfigファイルを使用して、APIサーバーの接続先の特定と認証を行うことができます。 こちらの例を参照してください。
その他の言語でAPIにアクセスするためのクライアントライブラリもあります。 認証方法については、各ライブラリのドキュメントを参照してください。
PodからAPIにアクセスする場合、APIサーバーの接続先の特定と認証は多少異なります。
詳細については、PodからAPIにアクセスするを参照してください。
前のセクションでは、Kubernetes APIサーバーへの接続方法について説明しました。 Kubernetesクラスター上で実行されている他のサービスへの接続については、クラスターサービスへのアクセスを参照してください。
リダイレクト機能は非推奨となり、削除されました。 代わりに、プロキシを使用してください(以下を参照)。
Kubernetesを使用する際に見かける可能性のあるプロキシがいくつかあります:
APIサーバー前段のプロキシ/ロードバランサー:
外部サービスのクラウドロードバランサー:
LoadBalancerの場合、自動的に作成されますKubernetesユーザーは通常、最初の2つのタイプ以外について気にする必要はありません。 残りのタイプは、通常は、クラスター管理者によって適切に設定されます。