What is kubernetes kubeconfig ?

The container is a package that comprises code and libraries that are to be executed. Now to automate the deployment of Containers we need Kubernetes or K8s. Kubernetes or K8s is an open source that is used for the deployment of containers. It is a container orchestration platform that is used to automate the deployment of containers. They help to manage, schedule, and scale the applications. Kubernetes should be confused with cloud services. They are basically integrated with cloud services in order to generate comprehensive solutions.

If we go through the structure, Kubernetes basically makes use of clusters. Inside clusters there exists nodes or physical machines. Inside those physical machines are pods. Inside pods, there exist containers.

Introduction to kubeconfig

Kubernetes kubeconfig is a file used in Kubernetes to manage clusters. The command line tool kubectl is used to manage the configuration file. This file is used for authentication of the Kubernetes cluster and also interacts with the same. They are used to verify client certificates, passwords, etc. It is to be noted that the config file is stored in the yaml file. This is because we need to deal with clusters, contexts, and users. So in the yaml file, we can specify the hierarchy accordingly. The file is present in ~/.kube/config.

Structure of kubeconfig

A kubeconfig file usually requires the necessary details in order to interact with the cluster. Some of them are as follows:

  1. apiVersion: Specify the version of Kubernetes API.
  2. clusters: Specify a list of clusters that are to be managed.
  3. users: Used to authenticate. Typically the subcategories include name and secret tokens.
  4. contexts: Specify contexts so as to group the clusters.
  5. current-context: Specify the context to which the current cluster should connect.

Below is the sample of the kubeconfig file

apiVersion: v1
kind: Config
clusters:
- name: c1
cluster:
server: https://clustersample1.example.com
certificate-authority: /path/to/cluster1-ca.crt
- name: c2
cluster:
server: https://clustersample2.example.com
certificate-authority: /path/to/cluster2-ca.crt
contexts:
- name: context1
context:
cluster: c1
user: user1
namespace: default
- name: context2
context:
cluster: c2
user: user2
namespace: developer
current-context: context1
users:
- name: user1
user:
client-certificate: /path/to/user1.crt
client-key: /path/to/user1.key
- name: user2
user:
client-certificate: /path/to/user2.crt
client-key: /path/to/user2.key

This is a sample kubeconfig file. In this we have two clusters named c1 and c2 along with server links and certificate authority. A separate client key and certificate pair is also specified for authenticating each user.

How to generate and configure kubeconfig files

We have to install minikube and Docker Desktop for Windows. For first time set docker context use default in the Command Prompt. Now again open the Command Prompt and execute the following commands one by one:

1. Execute the command

minikube start

2. Now write and execute the below mentioned command

minikube kubectl config view

It will take sometime to get executed. Finally it will look something like this

3. Now use the command to view the kubeconfig file

minikube kubectl config view

Best Practices to Handle Multiple kubeconfig files

There are many ways to handle multiple kubeconfig files. Some of them are as follows:

  • For separate clusters, ensure that you have separate kubeconfig files.
  • Encrypt the kubeconfig files so as to avoid any accidental changes.
  • Use contexts to switch between different environments and utilise one cluster in one particular environment.
  • Use scripts or configuration management tools to automate the processes and reduce the misconfiguration.
  • Keep multiple kubeconfig files in separate directories. For instance create multiple sub directories and store one config file in each sub directory.

Commands and Tools to Access kubeconfig File

To perform actions on the file we use kubectl followed by config and then specify the operations. For editing the file we can make use of vim editor or open the file in notepad and make the necessary changes. Some of them are as follows.

1. kubectl config current-context

To view the current context we use the command kubectl config current-context

Here minikube is our current context

2. kubectl config get-contexts

To get list of all contexts we use kubectl config get-contexts

Here we get all the details including name, cluster, Author info and Namespace.

3. kubectl config get-clusters

To get list of clusters we use this command

As we can see the cluster name is minikube.

4. kubectl config use-context <context-name>

To switch to a different context as specified in the config file.

5. kubectl config set-cluster <cluster-name> –server=<server> –certificate-authority=<path-to-ca-cert>

To add a new cluster along with other details. However we can provide certificate details later on as per our requirement.

Here e2e is our new cluster.

6. kubectl config set-credentials <user-name> –client-certificate=<path-to-client-cert> –client-key=<path-to-client-key>

To add a new user along with other necessary details. Here also we can provide additional details later on.

7. kubectl config set-context <context-name> –cluster=<cluster-name> –user=<user-name> –namespace=<namespace>

To add a new context to the file. We can provide namespace details later as well

Commands

Use

kubectl config current-context

To view the current context

kubectl config get-contexts

Get list of all contexts

kubectl config get-clusters

Get list of clusters

kubectl config use-context <context-name>

To switch to a different context as specified in cconfig file

kubectl config set-cluster <cluster-name> –server=<server> –certificate-authority=<path-to-ca-cert>

To add a new cluster along with other details

kubectl config set-credentials <user-name> –client-certificate=<path-to-client-cert> –client-key=<path-to-client-key>

To add a new user along with other necessary details

kubectl config set-context <context-name> –cluster=<cluster-name> –user=<user-name> –namespace=<namespace>

To add a new context to the file

There are different tools available However the most commonly used ones are text editors like Notepad, vim editor etc.

  • To make further changes to kubeconfig file locate the file in the location C:\Users\<username>\.kube\.
  • Then open the file in notepad.
  • Make the changes accordingly.

Conclusion

The kubeconfig file is an important file as it helps in the management of clusters. It should have limited access so as to avoid errors. The hierarchical format provides an easy way to guide through and look for the information.

Kubernetes kubeconfig – FAQs

What are contexts in kubeconfig file?

Context is an element present in config file that allows users to switch between the clusters. Each context has three parts: cluster name, namespace and user name.

When can we have access to config file?

When we configure access to Kubernetes cluster we can find the kubeconfig file. The path is ~/.kube/config. We can manually create the config file as well.

Why yaml file is preferred over other file formats?

Since Kubernetes follows a hierarchy of clusters, contexts and users and in order to get information at each level, yaml files serves the best purpose.

Can we specify nodes, pods etc in config file?

No we cannot specify nodes, pods in the config file. The file is explicitly used to interact with the cluster. To get information about nodes, pods we have other kubectl commands.