はじめに
kubernetes(以下k8s)のREST APIを呼び出す際にgo/python etc.のさまざまなクライアントライブラリが存在します。
この際、多くの実行例がk8sクラスタ内部またはk8sコンテナ上からAPIを呼び出す方法を解説しており、実際の作成物は最終的にはそうなるんでしょうが、開発途中の段階ではクラスタの外部からk8s APIを呼び出しながらコードを書きたいということでやり方を調べました。
接続先だけを設定した空っぽのconfigを作って、そこに必要な設定を上書きしていく感じですかね
コード
BuildConfigFromFlagsに渡している IP は https://10.0.1.44:32382
みたいな感じでk8sのAPIサーバのアドレスとポート
BearerToken
に指定しているTOKENは secret で出てくる token(eyJhbGciOiJSUzI1NiIsImtpZCIとかなってる長い奴)
importはやや適当
main.go
import(
"fmt"
meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/tools/clientcmd"
)
func main() {
config, err := clientcmd.BuildConfigFromFlags("https://API_SERVER_ADDRESS:API_PORT", "")
if err != nil {
log.Fatal(err)
}
config.Insecure = true
config.BearerToken = "YOUR TOKEN HERE"
client, err := kubernetes.NewForConfig(config)
if err != nil {
log.Fatal(err)
}
pods, err := client.CoreV1().Pods("").List(meta_v1.ListOptions{})
if err != nil {
log.Fatal(err)
}
for _, pod := range pods.Items {
fmt.Println(pod.Name)
}
}
参考資料
https://qiita.com/dtan4/items/f2f30207e0acec454c3d
http://ks888.hatenablog.com/entry/2017/12/25/001259