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?