|
この文書は自動機械翻訳技術を使用して翻訳されています。 正確な翻訳を提供するように努めておりますが、翻訳された内容の完全性、正確性、信頼性については一切保証いたしません。 相違がある場合は、元の英語版 英語 が優先され、正式なテキストとなります。 |
|
これは未公開の文書です Admission Controller 1.34-dev. |
K3sで相互トランスポート層セキュリティ(mTLS)を使用してWebhookを保護する
このガイドでは、https://k3s.io/[K3s]をKubernetesディストリビューションとして使用する際に、SUSE Security Admission ControllerスタックWebhookのために相互トランスポート層セキュリティ(mTLS)を有効にする方法を示します。
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`にその内容を格納する必要があります。`client-ca.crt`という名前のキーに`rootCA.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のインストールが保護されます。