1. ホーム
  2. kubernetes

[解決済み] PodコンテナからKubernetes apiにアクセスするには?

2022-06-03 06:54:51

質問

以前はカールできたのですが

https://$KUBERNETES_SERVICE_HOST:$KUBERNETES_PORT_443_TCP_PORT/api/v1beta3/namespaces/default/

をベースURLとした場合、kubernetes 0.18.0では"unauthorized"が表示されます。不思議なのは、APIマシンの外部IPアドレス( http://172.17.8.101:8080/api/v1beta3/namespaces/default/ ) を使用すると、それはうまく動作します。

どのように解決するのですか?

公式ドキュメントに、このような記述がありました。

https://kubernetes.io/docs/tasks/access-application-cluster/access-cluster/#accessing-the-api-from-a-pod

どうやら、以前のバージョンのKubernetesでは必要なかったセキュリティトークンが抜けていたようです。そこから、プロキシを実行したり、コンテナに golang をインストールしたりするよりも簡単な解決策を考案しました。この例では、現在のコンテナに関する情報をapiから取得しています。

KUBE_TOKEN=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)
curl -sSk -H "Authorization: Bearer $KUBE_TOKEN" \
      https://$KUBERNETES_SERVICE_HOST:$KUBERNETES_PORT_443_TCP_PORT/api/v1/namespaces/default/pods/$HOSTNAME

また、単純なバイナリであるjqをインクルードして使っています( http://stedolan.github.io/jq/download/ ) を使って、bash スクリプトで使用するために json をパースしています。