Algunos problemas con la implementación de nodos
- La implementación del nodo no implica la replicación de certificados, y la autenticación y autorización se generan a través de kubectl config (el acceso de todo el clúster debe pasar las dos etapas de autenticación y autorización)
- La red del nodo del nodo se puede basar en el propio cni de la ventana acoplable y en el complemento de red (franela) para completar la función de red (la diferencia es que la ventana acoplable viene con ella solo puede ser utilizada por la ventana acoplable)
- La autorización se basa en el nombre de usuario, y tanto kubelet como kube-porxy necesitan acceder a los recursos a través de la autorización de roles.
- Después de implementar un nodo, otros nodos pueden usar directamente el archivo coincidente (siempre que se modifique el nombre para mostrar del nodo -hostname-override = k8s-nodex, no se puede agregar el mismo nombre al clúster)
- Después de la solicitud de autenticación del nodo, se debe confirmar la sección maestra. Si encuentra un error de configuración o modifica la configuración, debe eliminar todos los archivos de certificado generados por el nodo, luego eliminar la información de la solicitud maestra y finalmente reiniciar el kubelet servicio y volver a unirse al clúster
nodo nodo
- kubelet: darse cuenta del ciclo de vida del contenedor
- kube-proxy: Responsable de escribir reglas en IPTABLES, IPVS para lograr el acceso al mapeo de servicios (para lograr el acceso a las aplicaciones de Pod fuera del clúster)
mkdir -p /usr/local/k8s/{
conf,logs}
#创建工作目录
#拷贝kubelet和kube-proxy二进制文件到/usr/local/bin
Generar archivo de certificación
- kubelet se basa en la autenticación de token
- autenticación de certificado de proxy kube
kubele
head -c 16 /dev/urandom | od -An -t x | tr -d ' '
#自动生成一个随机token
cat token.csv
64c8a4bd1c2e920aa92049044b5197ba,kubelet-bootstrap,10001,"system:kubelet-bootstrap"
#格式:token,用户名,UID,用户组
proxy de kube
cat kube-proxy-csr.json
{
"CN": "kube-proxy",
"hosts": [ ],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"L": "SHANGHAI",
"ST": "SHANGHAI"
}
]
}
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=server kube-proxy-csr.json | cfssljson -bare /opt/etcd/ssl/k8s/kube-proxy
#只要注意-profile指定的名称,这个是ca证书里指定的
Archivo de configuración kubeconfig generation
kubeconfig se usa para autenticar kubelet y kube-proxy para acceder al clúster en los nodos de nodo
kubele
kubectl config set-cluster k8s-master --certificate-authority=/usr/local/k8s/ssl/ca.pem --embed-certs=true --server=https://192.168.12.2:6443 --kubeconfig=kubelet-bootstrap.kubeconfig
#配置集群参数,修改ca公钥和集群server地址
kubectl config set-credentials kubelet-bootstrap --token=64c8a4bd1c2e920aa92049044b5197ba --kubeconfig=kubelet-bootstrap.kubeconfig
#配置客户端认证参数,token值就是生成token文件里的
kubectl config set-context default --cluster=k8s-master --user=kubelet-bootstrap --kubeconfig=kubelet-bootstrap.kubeconfig
#设置上下文参数,集群参数和用户参数可以同时设置多对,在上下文参数中将集群参数和用户参数关联起来
#上下文名称default,集群名称k8s-master,访问集群的用户名为kubelet-bootstrap
proxy de kube
kubectl config set-cluster k8s-master --certificate-authority=/usr/local/k8s/ssl/ca.pem --embed-certs=true --server=https://192.168.12.2:6443 --kubeconfig=kube-proxy.kubeconfig
kubectl config set-credentials kube-proxy --client-certificate=/usr/local/k8s/ssl/kube-proxy.pem \
--client-key=/usr/local/k8s/ssl/kube-proxy-key.pem --embed-certs=true --kubeconfig=kube-proxy.kubeconfig
#不同在于kube-proxy使用认证方式
kubectl config set-context default --cluster=k8s-master --user=kube-proxy --kubeconfig=kube-proxy.kubeconfig
#用户kube-proxy
Copie los archivos generados al nodo
Autorización de usuario
kubeconfig completa la autenticación del clúster, pero también requiere la autorización de recursos del usuario para acceder oficialmente al clúster
kubectl create clusterrolebinding kubelet-bootstrap \
--clusterrole=system:node-bootstrapper \
--user=kubelet-bootstrap
kubectl create clusterrolebinding kube-proxy \
--clusterrole=system:node-proxier \
--user=kube-proxy
#clusterrole代表的是集群角色,也就是所有的namespace资源
#2个角色的授权资源可以通过命令查看,system:node-bootstrapper和system:node-proxier都是自带的集群角色
Vista de rol
kubectl get clusterrole
#查看所有的集群角色
kubectl get clusterrole system:node-bootstrapper -o yaml
#查看system:node-bootstrapper角色的yaml信息
#verbs授权资源,create、get、list、watch
kubectl get clusterrolebinding kube-proxy -o wide
#查看集群构建kube-proxy详细信息
La fase de preparación ha terminado
archivo de configuración de kubele
cat kubelet.conf
KUBELET_OPTS="--logtostderr=false \
--v=2 \
--log-dir=/usr/local/k8s/logs \
--hostname-override=k8s-node1 \
--kubeconfig=/usr/local/k8s/conf/kubelet.kubeconfig \
--bootstrap-kubeconfig=/usr/local/k8s/conf/kubelet-bootstrap.kubeconfig \
--cert-dir=/usr/local/k8s/ssl \
--cluster-dns=10.2.0.2 \
--cluster-domain=cluster.local. \
--fail-swap-on=false \
--pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google-containers/pause-amd64:3.0"
- --Hostname-override: nombre para mostrar del nodo
- - Complemento de red: Habilitar CNI #Use CNI de terceros debe configurarse, no se puede usar la ventana acoplable predeterminada
- --Kubeconfig: ruta vacía, se generará automáticamente, luego se usará para conectarse a apiserver
- –Bootstrap-kubeconfig: primero comience a solicitar un certificado de apiserver
- –Cert-dir: directorio de generación de certificados de kubelet
- --Pod-infra-container-image: administra la imagen del contenedor de red de Pod
pod-infra-container-image es el contenedor de pausa, que realiza el montaje y el espacio de nombres de red compartido
gestión systemcd
cat /usr/lib/systemd/system/kubelet.service
[Unit]
Description=Kubernetes Kubelet
After=docker.service
Requires=docker.service
[Service]
EnvironmentFile=/usr/local/k8s/conf/kubelet.conf
ExecStart=/usr/local/bin/kubelet $KUBELET_OPTS
Restart=on-failure
KillMode=process
[Install]
WantedBy=multi-user.target
systemctl start kubelet.service
#启动服务
configuración de kube-proxy
cat kube-proxy.conf
KUBE_PROXY_OPTS="--logtostderr=false \
--v=2 \
--log-dir=/usr/loacl/k8s/logs \
--config=/usr/local/k8s/conf/kube-proxy-config.yml"
--Config almacena los parámetros de configuración
cat kube-proxy-config.yml
kind: KubeProxyConfiguration
apiVersion: kubeproxy.config.k8s.io/v1alpha1
bindAddress: 0.0.0.0
metricsBindAddress: 0.0.0.0:10249
clientConnection:
kubeconfig: /usr/local/k8s/conf/kube-proxy.kubeconfig
hostnameOverride: k8s-node1
clusterCIDR: 10.2.0.0/24
Parámetros de referencia: https://github.com/kubernetes/kube-proxy/blob/20569a1933eee4b6a526bfe564d476dd7e29c020/config/v1alpha1/types.go#L136
Plantilla de configuración: https://github.com/ReSearchITEng/kubeadm-playbook/blob/master /group_vars/all/KubeProxyConfiguration.yml
gestión systemcd
cat /usr/lib/systemd/system/kube-proxy.service
[Unit]
Description=Kubernetes Proxy
After=network.target
[Service]
EnvironmentFile=-/usr/local/k8s/conf/kube-proxy.conf
ExecStart=/usr/local/bin/kube-proxy $KUBE_PROXY_OPTS
Restart=on-failure
[Install]
WantedBy=multi-user.target
Comprobar estado
kubectl get node -o wide
#查看节点详细信息
kubectl run nginx --image=nginx --replicas=2
kubectl expose deployment nginx --port=88 --target-port=80 --type=NodePort
#创建测试pod
kubectl get pods
#查看pod,默认namespace=default
El proceso de construcción es comprender cada componente. La configuración debe ajustarse más tarde. La configuración se refiere a los videos en línea y de aprendizaje. El funcionario en sí no proporciona un tutorial de instalación binaria. Todas las configuraciones se basan en la comprensión de los componentes. En presente, la configuración solo se puede decir. Está en funcionamiento, lo cual es muy útil para ajustes de aprendizaje posteriores. La configuración correcta o incorrecta puede ser ajustada o verificada por usted mismo en la etapa posterior.