2 min read | by Jordi Prats
The configuration file kubeconfig (~/.kube/config) is used to get access to a Kubernetes cluster. It looks like a Kubernetes object that defines the cluster, the user and the context to use:
apiVersion: v1
kind: Config
preferences: {}
clusters:
(...)
users:
(...)
contexts:
(...)
Let's take a minikube kubeconfig as an example
On the clusters section we are defining how to connect to the cluster:
apiVersion: v1
clusters:
- cluster:
certificate-authority: /home/pet2cattle/.minikube/ca.crt
extensions:
- extension:
last-update: Wed, 23 Jun 2021 08:27:49 CEST
provider: minikube.sigs.k8s.io
version: v1.20.0
name: cluster_info
server: https://192.168.49.2:8443
name: minikube
(...)
On the users section we are telling kubectl how to identify itself using SSL certificates:
apiVersion: v1
kind: Config
users:
- name: minikube
user:
client-certificate: /home/pet2cattle/.minikube/profiles/minikube/client.crt
client-key: /home/pet2cattle/.minikube/profiles/minikube/client.key
(...)
Finally, the contexts section is the glue between the other sections telling which user to use to connect to which cluster. We can also fins which is the default namespace to use:
apiVersion: v1
kind: Config
contexts:
- context:
cluster: minikube
extensions:
- extension:
last-update: Wed, 23 Jun 2021 08:27:49 CEST
provider: minikube.sigs.k8s.io
version: v1.20.0
name: context_info
namespace: default
user: minikube
name: minikube
(...)
There's also the current-context which tell us which is context is currently in use. A complete example would be:
apiVersion: v1
current-context: minikube
kind: Config
preferences: {}
clusters:
- cluster:
certificate-authority: /home/pet2cattle/.minikube/ca.crt
extensions:
- extension:
last-update: Wed, 23 Jun 2021 08:27:49 CEST
provider: minikube.sigs.k8s.io
version: v1.20.0
name: cluster_info
server: https://192.168.49.2:8443
name: minikube
contexts:
- context:
cluster: minikube
extensions:
- extension:
last-update: Wed, 23 Jun 2021 08:27:49 CEST
provider: minikube.sigs.k8s.io
version: v1.20.0
name: context_info
namespace: default
user: minikube
name: minikube
users:
- name: minikube
user:
client-certificate: /home/pet2cattle/.minikube/profiles/minikube/client.crt
client-key: /home/pet2cattle/.minikube/profiles/minikube/client.key
So, if we have two cluster with two different kubeconfig files we can create a new one with both clusters copying the three sections (users, clusters and contexts) and making sure it's names don't collide between them
Posted on 29/06/2021