1

To use kubectl(to talk to kubernetes api-server) with merged config,

below two commands can be used to merge kubeConfig:

KUBECONFIG=~/.kube/config:/path/to/another/config.yml kubectl config view --flatten > ~/.kube/config-new.yaml

and then

cp ~/.kube/config-new.yaml ~/.kube/config


after running above two commands, ~/.kube/config will have merged config


But, In our case, instead of using kubectl, we are planning for a GoLang tool that uses client-go library, as part of automation.

GoLang tool maintains kubeconfig retrieved from MongoDB(every 10 minutes) and stored in []map[string]string(shown below):

[
   {
      "name" : "cluster-1-in-gcp",
      "kubernetes-version": "1.16",
      "server": "https://192.168.10.190:6443",
      "user": "kubernetes-admin-1",
      "client-certificate": "sadfhdsjfkhsdjfklhsdjfkassdfsd",
      "client-key": "sahgjkshfgjkdf",      
   },
   {
      "name" : "cluster-1-in-aws",
      "kubernetes-version": "1.17",
      "server": "https://192.168.11.191:6443",
      "user": "kubernetes-admin-2",
      "client-certificate": "ssssshdsjfkhsdjfklhsdjfkassdfsd",
      "client-key": "pppppsahgjkshfgjkdf",
   },
   {
      "name" : "cluster-1-in-aks",
      "kubernetes-version": "1.18",
      "server": "https://192.168.11.192:6443",
      "user": "kubernetes-admin-3",
      "client-certificate": "oooossssshdsjfkhsdjfklhsdjfkassdfsd",
      "client-key": "tttttpppppsahgjkshfgjkdf",      
   },
]

client-certificate & client-key are PEM format certificates(stored as string)

Certificates will be stored as(shown below):

apiVersion: v1
clusters:
- cluster:
    server: https://192.168.10.190:6443
  name: cluster-1
- cluster:
    server: https://192.168.99.101:8443
  name: cluster-2
contexts:
- context:
    cluster: cluster-1
    user: kubernetes-admin-1
  name: cluster-1
- context:
    cluster: cluster-2
    user: kubernetes-admin-2
  name: cluster-2
kind: Config
preferences: {}
users:
- name: kubernetes-admin-1
  user:
    client-certificate: /home/user/.minikube/credential-for-cluster-1.crt
    client-key: /home/user/.minikube/credential-for-cluster-1.key
- name: kubernetes-admin-2
  user:
    client-certificate: /home/user/.minikube/credential-for-cluster-2.crt
    client-key: /home/user/.minikube/credential-for-cluster-2.key

Seeking a Go package to merge this kubeConfig([]map[string]string) to ~/.kube/config

Does cliendcmd package of client-go library support this merge functionality?

overexchange
  • 15,768
  • 30
  • 152
  • 347
  • So, store data in `Config` and then merge using `ClientConfigLoadingRules`.... here is the reference to `Config`: https://github.com/kubernetes/client-go/blob/master/tools/clientcmd/api/types.go#L31 – overexchange Aug 16 '22 at 00:17
  • Here is an [example](https://pkg.go.dev/k8s.io/client-go/tools/clientcmd#example-package-MergingEverythingNoConflicts) where `testConfigAlfa` is of `Config` type – overexchange Aug 16 '22 at 00:26

0 Answers0