2017-08-29 00:19:25 +03:00
# Generating Kubernetes Configuration Files for Authentication
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.
## Client Authentication Configs
2023-11-01 09:16:49 +03:00
In this section you will generate kubeconfig files for the `kubelet` and the `admin` user.
2017-08-29 00:19:25 +03:00
### The kubelet Kubernetes Configuration File
2024-07-08 05:00:32 +03:00
When generating kubeconfig files for Kubelets the client certificate matching the Kubelet's node name must be used. This will ensure Kubelets are properly authorized by the Kubernetes [Node Authorizer ](https://kubernetes.io/docs/reference/access-authn-authz/node/ ).
2017-08-29 00:19:25 +03:00
2019-09-14 21:41:56 +03:00
> The following commands must be run in the same directory used to generate the SSL certificates during the [Generating TLS Certificates](04-certificate-authority.md) lab.
2023-11-01 09:16:49 +03:00
Generate a kubeconfig file the node-0 worker node:
2017-08-29 00:19:25 +03:00
2023-11-01 09:16:49 +03:00
```bash
for host in node-0 node-1; do
2017-08-29 00:19:25 +03:00
kubectl config set-cluster kubernetes-the-hard-way \
2023-11-01 09:16:49 +03:00
--certificate-authority=ca.crt \
2017-08-29 00:19:25 +03:00
--embed-certs=true \
2023-11-01 09:16:49 +03:00
--server=https://server.kubernetes.local:6443 \
--kubeconfig=${host}.kubeconfig
2017-08-29 00:19:25 +03:00
2023-11-01 09:16:49 +03:00
kubectl config set-credentials system:node:${host} \
--client-certificate=${host}.crt \
--client-key=${host}.key \
2017-08-29 00:19:25 +03:00
--embed-certs=true \
2023-11-01 09:16:49 +03:00
--kubeconfig=${host}.kubeconfig
2017-08-29 00:19:25 +03:00
kubectl config set-context default \
--cluster=kubernetes-the-hard-way \
2023-11-01 09:16:49 +03:00
--user=system:node:${host} \
--kubeconfig=${host}.kubeconfig
2017-08-29 00:19:25 +03:00
2023-11-01 09:16:49 +03:00
kubectl config use-context default \
--kubeconfig=${host}.kubeconfig
2017-08-29 00:19:25 +03:00
done
```
Results:
2023-11-01 09:16:49 +03:00
```text
node-0.kubeconfig
node-1.kubeconfig
2017-08-29 00:19:25 +03:00
```
### The kube-proxy Kubernetes Configuration File
Generate a kubeconfig file for the `kube-proxy` service:
2023-11-01 09:16:49 +03:00
```bash
2018-05-12 19:54:18 +03:00
{
kubectl config set-cluster kubernetes-the-hard-way \
2023-11-01 09:16:49 +03:00
--certificate-authority=ca.crt \
2018-05-12 19:54:18 +03:00
--embed-certs=true \
2023-11-01 09:16:49 +03:00
--server=https://server.kubernetes.local:6443 \
2018-05-12 19:54:18 +03:00
--kubeconfig=kube-proxy.kubeconfig
kubectl config set-credentials system:kube-proxy \
2023-11-01 09:16:49 +03:00
--client-certificate=kube-proxy.crt \
--client-key=kube-proxy.key \
2018-05-12 19:54:18 +03:00
--embed-certs=true \
--kubeconfig=kube-proxy.kubeconfig
kubectl config set-context default \
--cluster=kubernetes-the-hard-way \
--user=system:kube-proxy \
--kubeconfig=kube-proxy.kubeconfig
2023-11-01 09:16:49 +03:00
kubectl config use-context default \
--kubeconfig=kube-proxy.kubeconfig
2018-05-12 19:54:18 +03:00
}
```
Results:
2023-11-01 09:16:49 +03:00
```text
2018-05-12 19:54:18 +03:00
kube-proxy.kubeconfig
```
### The kube-controller-manager Kubernetes Configuration File
Generate a kubeconfig file for the `kube-controller-manager` service:
2023-11-01 09:16:49 +03:00
```bash
2018-05-12 19:54:18 +03:00
{
kubectl config set-cluster kubernetes-the-hard-way \
2023-11-01 09:16:49 +03:00
--certificate-authority=ca.crt \
2018-05-12 19:54:18 +03:00
--embed-certs=true \
2023-11-01 09:16:49 +03:00
--server=https://server.kubernetes.local:6443 \
2018-05-12 19:54:18 +03:00
--kubeconfig=kube-controller-manager.kubeconfig
kubectl config set-credentials system:kube-controller-manager \
2023-11-01 09:16:49 +03:00
--client-certificate=kube-controller-manager.crt \
--client-key=kube-controller-manager.key \
2018-05-12 19:54:18 +03:00
--embed-certs=true \
--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
2023-11-01 09:16:49 +03:00
kubectl config use-context default \
--kubeconfig=kube-controller-manager.kubeconfig
2018-05-12 19:54:18 +03:00
}
```
Results:
2023-11-01 09:16:49 +03:00
```text
2018-05-12 19:54:18 +03:00
kube-controller-manager.kubeconfig
```
### The kube-scheduler Kubernetes Configuration File
Generate a kubeconfig file for the `kube-scheduler` service:
2023-11-01 09:16:49 +03:00
```bash
2018-05-12 19:54:18 +03:00
{
kubectl config set-cluster kubernetes-the-hard-way \
2023-11-01 09:16:49 +03:00
--certificate-authority=ca.crt \
2018-05-12 19:54:18 +03:00
--embed-certs=true \
2023-11-01 09:16:49 +03:00
--server=https://server.kubernetes.local:6443 \
2018-05-12 19:54:18 +03:00
--kubeconfig=kube-scheduler.kubeconfig
kubectl config set-credentials system:kube-scheduler \
2023-11-01 09:16:49 +03:00
--client-certificate=kube-scheduler.crt \
--client-key=kube-scheduler.key \
2018-05-12 19:54:18 +03:00
--embed-certs=true \
--kubeconfig=kube-scheduler.kubeconfig
kubectl config set-context default \
--cluster=kubernetes-the-hard-way \
--user=system:kube-scheduler \
--kubeconfig=kube-scheduler.kubeconfig
2023-11-01 09:16:49 +03:00
kubectl config use-context default \
--kubeconfig=kube-scheduler.kubeconfig
2018-05-12 19:54:18 +03:00
}
2017-08-29 00:19:25 +03:00
```
2018-05-12 19:54:18 +03:00
Results:
2023-11-01 09:16:49 +03:00
```text
2018-05-12 19:54:18 +03:00
kube-scheduler.kubeconfig
2017-08-29 00:19:25 +03:00
```
2018-05-12 19:54:18 +03:00
### The admin Kubernetes Configuration File
Generate a kubeconfig file for the `admin` user:
2023-11-01 09:16:49 +03:00
```bash
2018-05-12 19:54:18 +03:00
{
kubectl config set-cluster kubernetes-the-hard-way \
2023-11-01 09:16: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 \
2023-11-01 09:16: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
2023-11-01 09:16:49 +03:00
kubectl config use-context default \
--kubeconfig=admin.kubeconfig
2018-05-12 19:54:18 +03:00
}
2017-08-29 00:19:25 +03:00
```
2018-05-12 19:54:18 +03:00
Results:
2023-11-01 09:16:49 +03:00
```text
2018-05-12 19:54:18 +03:00
admin.kubeconfig
2017-08-29 00:19:25 +03:00
```
## Distribute the Kubernetes Configuration Files
2023-11-01 09:16:49 +03:00
Copy the `kubelet` and `kube-proxy` kubeconfig files to the node-0 instance:
```bash
for host in node-0 node-1; do
ssh root@$host "mkdir /var/lib/{kube-proxy,kubelet}"
scp kube-proxy.kubeconfig \
root@$host:/var/lib/kube-proxy/kubeconfig \
scp ${host}.kubeconfig \
root@$host:/var/lib/kubelet/kubeconfig
2017-08-29 00:19:25 +03:00
done
```
2023-11-01 09:16:49 +03:00
Copy the `kube-controller-manager` and `kube-scheduler` kubeconfig files to the controller instance:
2018-05-12 19:54:18 +03:00
2023-11-01 09:16:49 +03:00
```bash
scp admin.kubeconfig \
kube-controller-manager.kubeconfig \
kube-scheduler.kubeconfig \
root@server:~/
2018-05-12 19:54:18 +03:00
```
2017-08-29 00:19:25 +03:00
Next: [Generating the Data Encryption Config and Key ](06-data-encryption-keys.md )