client-goでKubernetesのIngress Ruleを作る

JenkinsXのコマンドを検証しているうちに、うまく動作しない部分もあって、どうやってプログラムで、Ingress Ruleを作ること気になったので、ちょっとやってみました。 client-goライブラリを利用して、以下のようなKubernetesのIngress Ruleを作成します。 apiVersion: extensions/v1beta1 kind: Ingress metadata: name: ingress-rule-created-from-go namespace: default spec: backend: serviceName: nginx servicePort: 80 rules: - host: nginx.my.domain 上の情報に基づいて、Ingress Ruleを作成するのに以下のの情報を指定すると作成できます。 apiVersion kind metadata spec.backend.serviceName spec.backend.servicePort rules.host Ingress Ruleを作るのにGoのライブラリのドキュメントはかなり役に立っています。ドキュメントを参照して、必要なものを正しい形で指定すれば良いです。 package main import ( "fmt" v1beta1 "k8s.io/api/extensions/v1beta1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/intstr" "k8s.io/client-go/kubernetes" "k8s.io/client-go/tools/clientcmd" "log" "os" "path/filepath" "reflect" ) func main() { // kubernetesの設定ファイルのパスを組み立てる kubeconfig := filepath.Join(os.Getenv("HOME"), ".kube", "config") config, err := clientcmd.BuildConfigFromFlags("", kubeconfig) if err !

KubernetesのServiceを監視するコントローラ

やりたいことはclient-goというオフィシャルのKubernetesのクライアントを利用して、KubernetesのServiceの作成、削除、更新を監視することです。 ファイル名: watch_service.go package main import ( "flag" "fmt" "github.com/golang/glog" "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/fields" "k8s.io/client-go/kubernetes" "k8s.io/client-go/tools/cache" "k8s.io/client-go/tools/clientcmd" "k8s.io/client-go/util/homedir" "path/filepath" "time" ) func main() { var kubeconfig *string home := homedir.HomeDir() kubeconfig = flag.String("kubeconfig", filepath.Join(home, ".kube", "config"), "optional) absolute path to the kubeconfig file") flag.Parse() config, err := clientcmd.BuildConfigFromFlags("", *kubeconfig) if err != nil { glog.Fatal(err) } clientset, err := kubernetes.NewForConfig(config) if err != nil { glog.Fatal(err) } watchlist := cache.NewListWatchFromClient( clientset.CoreV1().RESTClient(), string(v1.ResourceServices), v1.

Pod中からKubernetesのAPI Serverに認証

概要 やりたいことは簡単のアプリケーションを作って、Kubernetesの中にPodとしてデプロイして、このアプリは現在Kubernetesクラスター中に何個のPodがあるかをKubernetesのApi Serverに問い合わせる。 つまりPodの中のアプリケーションはどうやってKubernetesのAPI Serverに認証して、情報を取得することである。 このアプリを作るためにKubernetesのclient-goライブラリを使います。サンプルとしてここに載っています。Pod内からKubernetesのApi Serverと通信するための認証部分の設定は rest.InClusterConfig()を呼び出すことになる。 プログラム作成 ファイル名はin-cluster-client-configuration.go package main import ( "fmt" "time" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/kubernetes" "k8s.io/client-go/rest" ) func main() { // creates the in-cluster config config, err := rest.InClusterConfig() if err != nil { panic(err.Error()) } // creates the clientset clientset, err := kubernetes.NewForConfig(config) if err != nil { panic(err.Error()) } for { pods, err := clientset.CoreV1().Pods("").List(metav1.ListOptions{}) if err != nil { panic(err.Error()) } fmt.

client-goでKubernetesのAPIを試す

概要 Kubernetesのclient-goクライアントを利用して、クラスターへの操作を色々試す。 Nodeの取得 package main import ( "fmt" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/kubernetes" "k8s.io/client-go/tools/clientcmd" "log" "os" "path/filepath" ) func main() { // kubernetesの設定ファイルのパスを組み立てる kubeconfig := filepath.Join(os.Getenv("HOME"), ".kube", "config") // BuildConfigFromFlags is a helper function that builds configs from a master url or // a kubeconfig filepath. config, err := clientcmd.BuildConfigFromFlags("", kubeconfig) if err != nil { log.Fatal(err) } // NewForConfig creates a new Clientset for the given config. // https://godoc.