2017-08-29 00:19:25 +03:00
# Generating Kubernetes Configuration Files for Authentication
2022-09-20 09:17:00 +03:00
In this lab you will generate [Kubernetes configuration files ](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/ ), also known as "kubeconfigs", which enable Kubernetes clients to locate and authenticate to the Kubernetes API Servers.
Note: It is good practice to use file paths to certificates in kubeconfigs that will be used by the services. When certificates are updated, it is not necessary to regenerate the config files, as you would have to if the certificate data was embedded. Note also that the cert files don't exist in these paths yet - we will place them in later labs.
User configs, like admin.kubeconfig will have the certificate info embedded within them.
2017-08-29 00:19:25 +03:00
## Client Authentication Configs
2019-11-11 07:05:19 +03:00
In this section you will generate kubeconfig files for the `controller manager` , `kube-proxy` , `scheduler` clients and the `admin` user.
2017-08-29 00:19:25 +03:00
### Kubernetes Public IP Address
2022-09-20 09:17:00 +03:00
Each kubeconfig requires a Kubernetes API Server to connect to. To support high availability the IP address assigned to the load balancer will be used, so let's first get the address of the loadbalancer into a shell variable such that we can use it in the kubeconfigs for services that run on worker nodes. The controller manager and scheduler need to talk to the local API server, hence they use the localhost address.
2017-08-29 00:19:25 +03:00
2022-09-20 09:17:00 +03:00
[//]: # (host:master-1)
```bash
LOADBALANCER=$(dig +short loadbalancer)
2017-08-29 00:19:25 +03:00
```
### The kube-proxy Kubernetes Configuration File
Generate a kubeconfig file for the `kube-proxy` service:
2022-09-20 09:17:00 +03:00
```bash
2018-05-12 19:54:18 +03:00
{
kubectl config set-cluster kubernetes-the-hard-way \
2022-09-20 09:17:00 +03:00
--certificate-authority=/var/lib/kubernetes/pki/ca.crt \
--server=https://${LOADBALANCER}:6443 \
2018-05-12 19:54:18 +03:00
--kubeconfig=kube-proxy.kubeconfig
kubectl config set-credentials system:kube-proxy \
2022-09-20 09:17:00 +03:00
--client-certificate=/var/lib/kubernetes/pki/kube-proxy.crt \
--client-key=/var/lib/kubernetes/pki/kube-proxy.key \
2018-05-12 19:54:18 +03:00
--kubeconfig=kube-proxy.kubeconfig
kubectl config set-context default \
--cluster=kubernetes-the-hard-way \
--user=system:kube-proxy \
--kubeconfig=kube-proxy.kubeconfig
kubectl config use-context default --kubeconfig=kube-proxy.kubeconfig
}
```
Results:
```
kube-proxy.kubeconfig
2020-10-27 17:34:06 +03:00
```
2019-11-19 13:22:52 +03:00
Reference docs for kube-proxy [here ](https://kubernetes.io/docs/reference/command-line-tools-reference/kube-proxy/ )
2018-05-12 19:54:18 +03:00
### The kube-controller-manager Kubernetes Configuration File
Generate a kubeconfig file for the `kube-controller-manager` service:
2022-09-20 09:17:00 +03:00
```bash
2018-05-12 19:54:18 +03:00
{
kubectl config set-cluster kubernetes-the-hard-way \
2022-09-20 09:17:00 +03:00
--certificate-authority=/var/lib/kubernetes/pki/ca.crt \
2018-05-12 19:54:18 +03:00
--server=https://127.0.0.1:6443 \
--kubeconfig=kube-controller-manager.kubeconfig
kubectl config set-credentials system:kube-controller-manager \
2022-09-20 09:17:00 +03:00
--client-certificate=/var/lib/kubernetes/pki/kube-controller-manager.crt \
--client-key=/var/lib/kubernetes/pki/kube-controller-manager.key \
2018-05-12 19:54:18 +03:00
--kubeconfig=kube-controller-manager.kubeconfig
kubectl config set-context default \
--cluster=kubernetes-the-hard-way \
--user=system:kube-controller-manager \
--kubeconfig=kube-controller-manager.kubeconfig
kubectl config use-context default --kubeconfig=kube-controller-manager.kubeconfig
}
```
Results:
```
kube-controller-manager.kubeconfig
```
2019-11-19 13:22:52 +03:00
Reference docs for kube-controller-manager [here ](https://kubernetes.io/docs/reference/command-line-tools-reference/kube-controller-manager/ )
2018-05-12 19:54:18 +03:00
### The kube-scheduler Kubernetes Configuration File
Generate a kubeconfig file for the `kube-scheduler` service:
2022-09-20 09:17:00 +03:00
```bash
2018-05-12 19:54:18 +03:00
{
kubectl config set-cluster kubernetes-the-hard-way \
2022-09-20 09:17:00 +03:00
--certificate-authority=/var/lib/kubernetes/pki/ca.crt \
2018-05-12 19:54:18 +03:00
--server=https://127.0.0.1:6443 \
--kubeconfig=kube-scheduler.kubeconfig
kubectl config set-credentials system:kube-scheduler \
2022-09-20 09:17:00 +03:00
--client-certificate=/var/lib/kubernetes/pki/kube-scheduler.crt \
--client-key=/var/lib/kubernetes/pki/kube-scheduler.key \
2018-05-12 19:54:18 +03:00
--kubeconfig=kube-scheduler.kubeconfig
kubectl config set-context default \
--cluster=kubernetes-the-hard-way \
--user=system:kube-scheduler \
--kubeconfig=kube-scheduler.kubeconfig
kubectl config use-context default --kubeconfig=kube-scheduler.kubeconfig
}
2017-08-29 00:19:25 +03:00
```
2018-05-12 19:54:18 +03:00
Results:
2017-08-29 00:19:25 +03:00
```
2018-05-12 19:54:18 +03:00
kube-scheduler.kubeconfig
2017-08-29 00:19:25 +03:00
```
2019-11-19 13:22:52 +03:00
Reference docs for kube-scheduler [here ](https://kubernetes.io/docs/reference/command-line-tools-reference/kube-scheduler/ )
2018-05-12 19:54:18 +03:00
### The admin Kubernetes Configuration File
Generate a kubeconfig file for the `admin` user:
2022-09-20 09:17:00 +03:00
```bash
2018-05-12 19:54:18 +03:00
{
kubectl config set-cluster kubernetes-the-hard-way \
2019-03-20 07:34:49 +03:00
--certificate-authority=ca.crt \
2018-05-12 19:54:18 +03:00
--embed-certs=true \
--server=https://127.0.0.1:6443 \
--kubeconfig=admin.kubeconfig
kubectl config set-credentials admin \
2019-03-20 07:34:49 +03:00
--client-certificate=admin.crt \
--client-key=admin.key \
2018-05-12 19:54:18 +03:00
--embed-certs=true \
--kubeconfig=admin.kubeconfig
kubectl config set-context default \
--cluster=kubernetes-the-hard-way \
--user=admin \
--kubeconfig=admin.kubeconfig
kubectl config use-context default --kubeconfig=admin.kubeconfig
}
2017-08-29 00:19:25 +03:00
```
2018-05-12 19:54:18 +03:00
Results:
2017-08-29 00:19:25 +03:00
```
2018-05-12 19:54:18 +03:00
admin.kubeconfig
2017-08-29 00:19:25 +03:00
```
2019-11-19 13:22:52 +03:00
Reference docs for kubeconfig [here ](https://kubernetes.io/docs/tasks/access-application-cluster/configure-access-multiple-clusters/ )
2018-05-12 19:54:18 +03:00
2019-03-20 07:34:49 +03:00
##
2018-05-12 19:54:18 +03:00
2017-08-29 00:19:25 +03:00
## Distribute the Kubernetes Configuration Files
2019-06-19 06:07:24 +03:00
Copy the appropriate `kube-proxy` kubeconfig files to each worker instance:
2017-08-29 00:19:25 +03:00
2022-09-20 09:17:00 +03:00
```bash
2019-03-20 07:34:49 +03:00
for instance in worker-1 worker-2; do
scp kube-proxy.kubeconfig ${instance}:~/
2017-08-29 00:19:25 +03:00
done
```
2019-11-11 07:05:19 +03:00
Copy the appropriate `admin.kubeconfig` , `kube-controller-manager` and `kube-scheduler` kubeconfig files to each controller instance:
2018-05-12 19:54:18 +03:00
2022-09-20 09:17:00 +03:00
```bash
2019-03-20 07:34:49 +03:00
for instance in master-1 master-2; do
scp admin.kubeconfig kube-controller-manager.kubeconfig kube-scheduler.kubeconfig ${instance}:~/
2018-05-12 19:54:18 +03:00
done
```
2022-09-20 09:17:00 +03:00
## Optional - Check kubeconfigs
At `master-1` and `master-2` nodes, run the following, selecting option 2
```bash
./cert_verify.sh
```
Prev: [Certificate Authority ](04-certificate-authority.md )< br >
2017-08-29 00:19:25 +03:00
Next: [Generating the Data Encryption Config and Key ](06-data-encryption-keys.md )