|
本文档采用自动化机器翻译技术翻译。 尽管我们力求提供准确的译文,但不对翻译内容的完整性、准确性或可靠性作出任何保证。 若出现任何内容不一致情况,请以原始 英文 版本为准,且原始英文版本为权威文本。 |
|
这是尚未发布的文档。 Admission Controller 1.34-dev. |
使用 K3s 通过双向 TLS 保护 Webhook
先决条件
在安装 K3s 之前,您需要创建一个证书颁发机构 (CA) 和一个客户端证书。您用来保护 Admission Controller Webhook 与 Kubernetes API 服务器之间的通信。
第一步,创建 /etc/rancher/k3s/admission/certs 目录:
sudo mkdir -p /etc/rancher/k3s/admission/certs
创建根 CA 和客户端证书
作为 root 用户,切换到 /etc/rancher/k3s/admission/certs 目录并创建所有所需的证书:
export FQDN=mtls.kubewarden.io
# Create openssl config file
cat > openssl.cnf <<EOL
[ req ]
default_keyfile = rootCA.key
distinguished_name = req_distinguished_name
x509_extensions = v3_ca
string_mask = utf8only
[ req_distinguished_name ]
countryName = Country Name (2 letter code)
countryName_default = US
stateOrProvinceName = State or Province Name (full name)
localityName = Locality Name (eg, city)
organizationName = Organization Name (eg, company)
commonName = Common Name (eg, your domain or your CA name)
[ v3_ca ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical, CA:true, pathlen:1
keyUsage = critical, keyCertSign, cRLSign
EOL
# Create CA
openssl req -nodes -batch -x509 -sha256 -days 3650 -newkey rsa:4096 -keyout rootCA.key -out rootCA.crt \
-config openssl.cnf
# Create CSR
openssl req -nodes -batch -newkey rsa:4096 -keyout client.key -out client.csr \
-addext "subjectAltName = DNS:$FQDN" -config openssl.cnf
# Create CRT
openssl x509 -req -CA rootCA.crt -CAkey rootCA.key -in client.csr -out client.crt -days 3650 -CAcreateserial \
-extfile <(echo "subjectAltName=DNS:$FQDN")
# Print CRT
openssl x509 -text -noout -in client.crt
这将创建以下文件:
-
client.crt -
client.csr -
client.key -
rootCA.crt -
rootCA.key -
rootCA.srl
创建 Kubernetes 配置文件
创建包含以下内容的 /etc/rancher/k3s/admission/admission.yaml 文件:
# /etc/rancher/k3s/admission/admission.yaml
apiVersion: apiserver.config.k8s.io/v1
kind: AdmissionConfiguration
plugins:
- name: ValidatingAdmissionWebhook
configuration:
apiVersion: apiserver.config.k8s.io/v1
kind: WebhookAdmissionConfiguration
kubeConfigFile: "/etc/rancher/k3s/admission/kubeconfig"
- name: MutatingAdmissionWebhook
configuration:
apiVersion: apiserver.config.k8s.io/v1
kind: WebhookAdmissionConfiguration
kubeConfigFile: "/etc/rancher/k3s/admission/kubeconfig"
最后,在 /etc/rancher/k3s/admission/kubeconfig 创建一个 kubeconfig 文件:
# /etc/rancher/admission/kubeconfig
apiVersion: v1
kind: Config
users:
- name: "*.kubewarden.svc" # namespace where the kubewarden stack is deployed
user:
client-certificate: /etc/rancher/k3s/admission/certs/client.crt
client-key: /etc/rancher/k3s/admission/certs/client.key
安装 Admission Controller 堆栈
先决条件
颁发 Kubernetes 客户端证书的根 CA 证书需要在 Admission Controller 堆栈中可用。
根 CA 可在 Kubernetes 节点的 /etc/rancher/k3s/admission/certs/rootCA.crt 处找到。您需要将其内容存放在 ConfigMap 命名空间下的 kubewarden 中。您将 rootCA.crt 文件的内容存储在名为 client-ca.crt 的密钥中。
首先,创建 kubewarden 命名空间:
kubectl create namespace kubewarden
然后在其中创建 ConfigMap。在 Kubernetes 节点上运行以下命令:
kubectl create configmap -n kubewarden api-server-mtls \
--from-file=client-ca.crt=/etc/rancher/k3s/admission/certs/rootCA.crt
生成的 ConfigMap 名称为 api-server-mtls。
安装 Admission Controller 堆栈
按照 快速入门指南 中描述的方式安装 Admission Controller 堆栈。遵循所有步骤,但在安装 kubewarden-controller Helm 图表时,请确保启用以下值:
-
mTLS.enable:必须为true。 -
mTLS.configMapName:必须是之前创建的ConfigMap的名称。
ConfigMap 名称为 api-server-mtls。安装 kubewarden-controller 的 Helm 命令为:
helm install --wait -n kubewarden kubewarden-controller kubewarden/kubewarden-controller \
--set mTLS.enable=true \
--set mTLS.configMapName=api-server-mtls
一旦此命令完成,mTLS 将确保 Admission Controller 堆栈及其 Webhook 的安装安全。