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 !