diff --git a/docs/backups/docker-installs/docker-installs.md b/docs/backups/docker-installs/docker-installs.md
deleted file mode 100644
index cc211cee5e0..00000000000
--- a/docs/backups/docker-installs/docker-installs.md
+++ /dev/null
@@ -1,6 +0,0 @@
----
-title: Backup and Restore for Rancher Installed with Docker
----
-
-- [Backups](../../how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/back-up-docker-installed-rancher.md)
-- [Restores](../../how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/restore-docker-installed-rancher.md)
\ No newline at end of file
diff --git a/docs/how-to-guides/advanced-user-guides/manage-projects/manage-project-resource-quotas/about-project-resource-quotas.md b/docs/how-to-guides/advanced-user-guides/manage-projects/manage-project-resource-quotas/about-project-resource-quotas.md
index be7d1b5a57a..85f57c5b1bd 100644
--- a/docs/how-to-guides/advanced-user-guides/manage-projects/manage-project-resource-quotas/about-project-resource-quotas.md
+++ b/docs/how-to-guides/advanced-user-guides/manage-projects/manage-project-resource-quotas/about-project-resource-quotas.md
@@ -45,6 +45,27 @@ If the requested resources exceed the remaining capacity in the project for thos
However, this is not the case with namespaces created **_outside_** of Rancher's UI. For namespaces created via `kubectl`, Rancher
will assign a resource quota that has a **zero** amount for any resource that requested more capacity than what remains in the project.
+To create a project with a resource quota via `kubectl`, use the `spec.resourceQuota` and `spec.namespaceDefaultResourceQuota` fields:
+
+```
+apiVersion: management.cattle.io/v3
+kind: Project
+metadata:
+ generateName: p-
+ namespace: c-m-abcde
+spec:
+ clusterName: c-m-abcde
+ displayName: myproject
+ resourceQuota:
+ limit:
+ limitsCpu: 1000m
+ namespaceDefaultResourceQuota:
+ limit:
+ limitsCpu: 50m
+```
+
+Use `metadata.generateName` to ensure a unique project ID. Set `metadata.namespace` and `spec.clusterName` to the ID for the cluster the project belongs to.
+
To create a namespace in an existing project via `kubectl`, use the `field.cattle.io/projectId` annotation. To override the default
requested quota limit, use the `field.cattle.io/resourceQuota` annotation.
diff --git a/docs/how-to-guides/new-user-guides/helm-charts-in-rancher/create-apps.md b/docs/how-to-guides/new-user-guides/helm-charts-in-rancher/create-apps.md
index bc5cc83d471..300e152bb22 100644
--- a/docs/how-to-guides/new-user-guides/helm-charts-in-rancher/create-apps.md
+++ b/docs/how-to-guides/new-user-guides/helm-charts-in-rancher/create-apps.md
@@ -109,20 +109,23 @@ This reference contains variables that you can use in `questions.yml` nested und
| label | string | true | Define the UI label. |
| description | string | false | Specify the description of the variable.|
| type | string | false | Default to `string` if not specified (current supported types are string, multiline, boolean, int, enum, password, storageclass, hostname, pvc, and secret).|
-| required | bool | false | Define if the variable is required or not (true \| false)|
| default | string | false | Specify the default value. Only used if there is no corresponding value in the `values.yml` file. |
| group | string | false | Group questions by input value. |
-| min_length | int | false | Min character length.|
-| max_length | int | false | Max character length.|
-| min | int | false | Min integer length. |
-| max | int | false | Max integer length. |
| options | []string | false | Specify the options when the variable type is `enum`, for example: options: - "ClusterIP" - "NodePort" - "LoadBalancer"|
-| valid_chars | string | false | Regular expression for input chars validation. |
-| invalid_chars | string | false | Regular expression for invalid input chars validation.|
| subquestions | []subquestion | false| Add an array of subquestions.|
| show_if | string | false | Show current variable if conditional variable is true. For example `show_if: "serviceType=Nodeport"` |
| show\_subquestion_if | string | false | Show subquestions if is true or equal to one of the options. for example `show_subquestion_if: "true"`|
+
+
:::note
`subquestions[]` cannot contain `subquestions` or `show_subquestions_if` keys, but all other keys in the above table are supported.
diff --git a/docs/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-clusters-from-hosted-kubernetes-providers/aks.md b/docs/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-clusters-from-hosted-kubernetes-providers/aks.md
index b65d7aa9b4b..f176acc177b 100644
--- a/docs/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-clusters-from-hosted-kubernetes-providers/aks.md
+++ b/docs/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-clusters-from-hosted-kubernetes-providers/aks.md
@@ -8,7 +8,6 @@ title: Creating an AKS Cluster
You can use Rancher to create a cluster hosted in Microsoft Azure Kubernetes Service (AKS).
-
## Prerequisites in Microsoft Azure
:::caution
@@ -65,6 +64,14 @@ az ad sp create-for-rbac \
--role Contributor
```
+### Setting Up the Service Principal with the Azure Command Line Tool
+
+Create the Resource Group by running this command:
+
+```
+az group create --location AZURE_LOCATION_NAME --resource-group AZURE_RESOURCE_GROUP_NAME
+```
+
### Setting Up the Service Principal from the Azure Portal
You can also follow these instructions to set up a service principal and give it role-based access from the Azure Portal.
@@ -124,6 +131,17 @@ When provisioning an AKS cluster in the Rancher UI, RBAC is not configurable bec
RBAC is required for AKS clusters that are registered or imported into Rancher.
+### Setting Up the Role Assignment to Service Principal with the Azure Command Line Tool
+
+Assign the Rancher AKSv2 role to the service principal with the Azure Command Line Tool:
+
+```
+az role assignment create \
+--assignee CLIENT_ID \
+--scope "/subscriptions/SUBSCRIPTION_ID/resourceGroups/RESOURCE_GROUP_NAME" \
+--role "Rancher AKSv2"
+```
+
## AKS Cluster Configuration Reference
For more information about how to configure AKS clusters from the Rancher UI, see the [configuration reference.](../../../../reference-guides/cluster-configuration/rancher-server-configuration/aks-cluster-configuration.md)
@@ -146,12 +164,114 @@ Please be aware that when registering an existing AKS cluster, the cluster might
For more information about connecting to an AKS private cluster, see the [AKS documentation.](https://docs.microsoft.com/en-us/azure/aks/private-clusters#options-for-connecting-to-the-private-cluster)
+## Setting Up the Minimum Permission Role with the Azure Command Line Tool
+
+1. Create the Minimum Rancher AKSv2 Permission Role by running this command:
+
+ ```
+ cat >> rancher-azure.json << EOF
+
+ {
+ "Name": "Rancher AKSv2",
+ "IsCustom": true,
+ "Description": "Everything needed by Rancher AKSv2 operator",
+ "Actions": [
+ "Microsoft.Compute/disks/delete",
+ "Microsoft.Compute/disks/read",
+ "Microsoft.Compute/disks/write",
+ "Microsoft.Compute/diskEncryptionSets/read",
+ "Microsoft.Compute/locations/DiskOperations/read",
+ "Microsoft.Compute/locations/vmSizes/read",
+ "Microsoft.Compute/locations/operations/read",
+ "Microsoft.Compute/proximityPlacementGroups/write",
+ "Microsoft.Compute/snapshots/delete",
+ "Microsoft.Compute/snapshots/read",
+ "Microsoft.Compute/snapshots/write",
+ "Microsoft.Compute/virtualMachineScaleSets/manualUpgrade/action",
+ "Microsoft.Compute/virtualMachineScaleSets/delete",
+ "Microsoft.Compute/virtualMachineScaleSets/read",
+ "Microsoft.Compute/virtualMachineScaleSets/virtualMachines/networkInterfaces/read",
+ "Microsoft.Compute/virtualMachineScaleSets/virtualMachines/networkInterfaces/ipconfigurations/publicipaddresses/read",
+ "Microsoft.Compute/virtualMachineScaleSets/virtualmachines/instanceView/read",
+ "Microsoft.Compute/virtualMachineScaleSets/virtualMachines/read",
+ "Microsoft.Compute/virtualMachineScaleSets/virtualMachines/write",
+ "Microsoft.Compute/virtualMachineScaleSets/write",
+ "Microsoft.Compute/virtualMachines/read",
+ "Microsoft.Compute/virtualMachines/write",
+ "Microsoft.ContainerService/managedClusters/read",
+ "Microsoft.ContainerService/managedClusters/write"
+ "Microsoft.ContainerService/managedClusters/delete",
+ "Microsoft.ContainerService/managedClusters/accessProfiles/listCredential/action",
+ "Microsoft.ContainerService/managedClusters/agentPools/read",
+ "Microsoft.ContainerService/managedClusters/agentPools/write",
+ "Microsoft.ManagedIdentity/userAssignedIdentities/assign/action",
+ "Microsoft.Network/applicationGateways/read",
+ "Microsoft.Network/applicationGateways/write",
+ "Microsoft.Network/loadBalancers/write",
+ "Microsoft.Network/loadBalancers/backendAddressPools/join/action",
+ "Microsoft.Network/loadBalancers/delete",
+ "Microsoft.Network/loadBalancers/read",
+ "Microsoft.Network/networkInterfaces/join/action",
+ "Microsoft.Network/networkInterfaces/read",
+ "Microsoft.Network/networkInterfaces/write",
+ "Microsoft.Network/networkSecurityGroups/read",
+ "Microsoft.Network/networkSecurityGroups/write",
+ "Microsoft.Network/publicIPAddresses/delete",
+ "Microsoft.Network/publicIPAddresses/join/action",
+ "Microsoft.Network/publicIPAddresses/read",
+ "Microsoft.Network/publicIPAddresses/write",
+ "Microsoft.Network/publicIPPrefixes/join/action",
+ "Microsoft.Network/privatednszones/*",
+ "Microsoft.Network/routeTables/read",
+ "Microsoft.Network/routeTables/routes/delete",
+ "Microsoft.Network/routeTables/routes/read",
+ "Microsoft.Network/routeTables/routes/write",
+ "Microsoft.Network/routeTables/write",
+ "Microsoft.Network/virtualNetworks/read",
+ "Microsoft.Network/virtualNetworks/subnets/join/action",
+ "Microsoft.Network/virtualNetworks/subnets/read",
+ "Microsoft.Network/virtualNetworks/joinLoadBalancer/action",
+ "Microsoft.OperationalInsights/workspaces/sharedkeys/read",
+ "Microsoft.OperationalInsights/workspaces/read",
+ "Microsoft.OperationsManagement/solutions/write",
+ "Microsoft.OperationsManagement/solutions/read",
+ "Microsoft.Resources/subscriptions/resourcegroups/read",
+ "Microsoft.Resources/subscriptions/resourcegroups/write",
+ "Microsoft.Storage/operations/read",
+ "Microsoft.Storage/storageAccounts/listKeys/action",
+ "Microsoft.Storage/storageAccounts/delete",
+ "Microsoft.Storage/storageAccounts/read",
+ "Microsoft.Storage/storageAccounts/write"
+ ],
+ "NotActions": [],
+ "DataActions": [],
+ "NotDataActions": [],
+ "AssignableScopes": [
+ "/subscriptions/SUBSCRIPTION_ID"
+ ]
+ }
+ EOF
+ ```
+
+2. Apply the Rancher AKSv2 Role:
+
+ ```
+ az role definition create --role-definition rancher-azure.json
+ ```
+
+3. Verify if the Rancher AKSv2 Role was created:
+
+ ```
+ az role definition list | grep "Rancher AKSv2"
+ ```
+
## Syncing
The AKS provisioner can synchronize the state of an AKS cluster between Rancher and the provider. For an in-depth technical explanation of how this works, see [Syncing.](../../../../reference-guides/cluster-configuration/rancher-server-configuration/sync-clusters.md)
For information on configuring the refresh interval, see [this section.](../../../../pages-for-subheaders/gke-cluster-configuration.md#configuring-the-refresh-interval)
+
## Programmatically Creating AKS Clusters
-The most common way to programmatically deploy AKS clusters through Rancher is by using the Rancher2 Terraform provider. The documentation for creating clusters with Terraform is [here.](https://registry.terraform.io/providers/rancher/rancher2/latest/docs/resources/cluster)
\ No newline at end of file
+The most common way to programmatically deploy AKS clusters through Rancher is by using the Rancher2 Terraform provider. The documentation for creating clusters with Terraform is [here](https://registry.terraform.io/providers/rancher/rancher2/latest/docs/resources/cluster).
diff --git a/docs/pages-for-subheaders/rancher-hardening-guides.md b/docs/pages-for-subheaders/rancher-hardening-guides.md
index a7ffa3ce2e1..5db6c192945 100644
--- a/docs/pages-for-subheaders/rancher-hardening-guides.md
+++ b/docs/pages-for-subheaders/rancher-hardening-guides.md
@@ -27,25 +27,25 @@ Each self-assessment guide is accompanied by a hardening guide. These guides wer
| Kubernetes Version | CIS Benchmark Version | Self Assessment Guide | Hardening Guides |
|--------------------|-----------------------|-----------------------|------------------|
| Kubernetes v1.23 | CIS v1.23 | [Link](../reference-guides/rancher-security/hardening-guides/rke1-hardening-guide/rke1-self-assessment-guide-with-cis-v1.23-k8s-v1.23.md) | [Link](rke1-hardening-guide.md) |
-| Kubernetes v1.24 | CIS v1.23 | [Link](../reference-guides/rancher-security/hardening-guides/rke1-hardening-guide/rke1-self-assessment-guide-with-cis-v1.23-k8s-v1.24.md) | [Link](rke1-hardening-guide.md) |
-| Kubernetes v1.25 | CIS v1.23 | [Link](../reference-guides/rancher-security/hardening-guides/rke1-hardening-guide/rke1-self-assessment-guide-with-cis-v1.7-k8s-v1.25.md) | [Link](rke1-hardening-guide.md) |
+| Kubernetes v1.24 | CIS v1.24 | [Link](../reference-guides/rancher-security/hardening-guides/rke1-hardening-guide/rke1-self-assessment-guide-with-cis-v1.24-k8s-v1.24.md) | [Link](rke1-hardening-guide.md) |
+| Kubernetes v1.25/v1.26/v1.27 | CIS v1.7 | [Link](../reference-guides/rancher-security/hardening-guides/rke1-hardening-guide/rke1-self-assessment-guide-with-cis-v1.7-k8s-v1.25-v1.26-v1.27.md) | [Link](rke1-hardening-guide.md) |
### RKE2 Guides
| Type | Kubernetes Version | CIS Benchmark Version | Self Assessment Guide | Hardening Guides |
|------|--------------------|-----------------------|-----------------------|------------------|
| Rancher provisioned RKE2 | Kubernetes v1.23 | CIS v1.23 | [Link](../reference-guides/rancher-security/hardening-guides/rke2-hardening-guide/rke2-self-assessment-guide-with-cis-v1.23-k8s-v1.23.md) | [Link](rke2-hardening-guide.md) |
-| Rancher provisioned RKE2 | Kubernetes v1.24 | CIS v1.23 | [Link](../reference-guides/rancher-security/hardening-guides/rke2-hardening-guide/rke2-self-assessment-guide-with-cis-v1.23-k8s-v1.24.md) | [Link](rke2-hardening-guide.md) |
-| Rancher provisioned RKE2 | Kubernetes v1.25 | CIS v1.23 | [Link](../reference-guides/rancher-security/hardening-guides/rke2-hardening-guide/rke2-self-assessment-guide-with-cis-v1.7-k8s-v1.25.md) | [Link](rke2-hardening-guide.md) |
-| Standalone RKE2 | Kubernetes v1.25 | CIS v1.23 | [Link](https://docs.rke2.io/security/cis_self_assessment123) | [Link](https://docs.rke2.io/security/hardening_guide) |
+| Rancher provisioned RKE2 | Kubernetes v1.24 | CIS v1.24 | [Link](../reference-guides/rancher-security/hardening-guides/rke2-hardening-guide/rke2-self-assessment-guide-with-cis-v1.24-k8s-v1.24.md) | [Link](rke2-hardening-guide.md) |
+| Rancher provisioned RKE2 | Kubernetes v1.25/v1.26/v1.27 | CIS v1.7 | [Link](../reference-guides/rancher-security/hardening-guides/rke2-hardening-guide/rke2-self-assessment-guide-with-cis-v1.7-k8s-v1.25-v1.26-v1.27.md) | [Link](rke2-hardening-guide.md) |
+| Standalone RKE2 | Kubernetes v1.25/v1.26/v1.27 | CIS v1.7 | [Link](https://docs.rke2.io/security/cis_self_assessment123) | [Link](https://docs.rke2.io/security/hardening_guide) |
### K3s Guides
| Type | Kubernetes Version | CIS Benchmark Version | Self Assessment Guide | Hardening Guides |
|------|--------------------|-----------------------|-----------------------|------------------|
| Rancher provisioned K3s cluster | Kubernetes v1.23 | CIS v1.23 | [Link](../reference-guides/rancher-security/hardening-guides/k3s-hardening-guide/k3s-self-assessment-guide-with-cis-v1.23-k8s-v1.23.md) | [Link](k3s-hardening-guide.md) |
-| Rancher provisioned K3s cluster | Kubernetes v1.24 | CIS v1.23 | [Link](../reference-guides/rancher-security/hardening-guides/k3s-hardening-guide/k3s-self-assessment-guide-with-cis-v1.23-k8s-v1.24.md) | [Link](k3s-hardening-guide.md) |
-| Rancher provisioned K3s cluster | Kubernetes v1.25 | CIS v1.23 | [Link](../reference-guides/rancher-security/hardening-guides/k3s-hardening-guide/k3s-self-assessment-guide-with-cis-v1.7-k8s-v1.25.md) | [Link](k3s-hardening-guide.md) |
+| Rancher provisioned K3s cluster | Kubernetes v1.24 | CIS v1.24 | [Link](../reference-guides/rancher-security/hardening-guides/k3s-hardening-guide/k3s-self-assessment-guide-with-cis-v1.24-k8s-v1.24.md) | [Link](k3s-hardening-guide.md) |
+| Rancher provisioned K3s cluster | Kubernetes v1.25/v1.26/v1.27 | CIS v1.7 | [Link](../reference-guides/rancher-security/hardening-guides/k3s-hardening-guide/k3s-self-assessment-guide-with-cis-v1.7-k8s-v1.25-v1.26-v1.27.md) | [Link](k3s-hardening-guide.md) |
| Standalone K3s | Kubernetes v1.22 up to v1.24 | CIS v1.23 | [Link](https://docs.k3s.io/security/self-assessment) | [Link](https://docs.k3s.io/security/hardening-guide) |
## Rancher with SELinux
diff --git a/docs/pages-for-subheaders/rancher-security.md b/docs/pages-for-subheaders/rancher-security.md
index 4426fb66c60..f9c30b41f29 100644
--- a/docs/pages-for-subheaders/rancher-security.md
+++ b/docs/pages-for-subheaders/rancher-security.md
@@ -88,6 +88,10 @@ Rancher is committed to informing the community of security issues in our produc
For recommendations on securing your Kubernetes cluster, refer to the [Kubernetes Security Best Practices](../reference-guides/rancher-security/kubernetes-security-best-practices.md) guide.
+### Rancher Webhook Hardening
+
+The Rancher webhook deploys on both the upstream Rancher cluster and all provisioned clusters. For recommendations on hardening the Rancher webhook, see the [Hardening the Rancher Webhook](../reference-guides/rancher-security/rancher-webhook-hardening.md) guide.
+
### Rancher Security Best Practices
-For recommendations on securing your Rancher, refer to the [Rancher Security Best Practices](../reference-guides/rancher-security/rancher-security-best-practices.md) guide.
+For recommendations on securing your Rancher Manager deployments, refer to the [Rancher Security Best Practices](../reference-guides/rancher-security/rancher-security-best-practices.md) guide.
diff --git a/docs/reference-guides/about-the-api/api-tokens.md b/docs/reference-guides/about-the-api/api-tokens.md
index eccd4d962b1..5fe8a0eb5a4 100644
--- a/docs/reference-guides/about-the-api/api-tokens.md
+++ b/docs/reference-guides/about-the-api/api-tokens.md
@@ -3,7 +3,7 @@ title: API Tokens
---
-
+
By default, some cluster-level API tokens are generated with infinite time-to-live (`ttl=0`). In other words, API tokens with `ttl=0` never expire unless you invalidate them. Tokens are not invalidated by changing a password.
diff --git a/docs/reference-guides/backup-restore-configuration/backup-configuration.md b/docs/reference-guides/backup-restore-configuration/backup-configuration.md
index 313a3de1d83..2bb79d074b7 100644
--- a/docs/reference-guides/backup-restore-configuration/backup-configuration.md
+++ b/docs/reference-guides/backup-restore-configuration/backup-configuration.md
@@ -3,7 +3,7 @@ title: Backup Configuration
---
-
+
The **Backup: Create** page lets you configure a schedule, enable encryption and specify the storage location for your backups.
diff --git a/docs/reference-guides/backup-restore-configuration/examples.md b/docs/reference-guides/backup-restore-configuration/examples.md
index 32a1eb76c6a..0afd8a359fb 100644
--- a/docs/reference-guides/backup-restore-configuration/examples.md
+++ b/docs/reference-guides/backup-restore-configuration/examples.md
@@ -3,7 +3,7 @@ title: Examples
---
-
+
This section contains examples of Backup and Restore custom resources.
diff --git a/docs/reference-guides/backup-restore-configuration/restore-configuration.md b/docs/reference-guides/backup-restore-configuration/restore-configuration.md
index 5e958fcd674..b162a6ef873 100644
--- a/docs/reference-guides/backup-restore-configuration/restore-configuration.md
+++ b/docs/reference-guides/backup-restore-configuration/restore-configuration.md
@@ -3,7 +3,7 @@ title: Restore Configuration
---
-
+
The Restore Create page lets you provide details of the backup to restore from
diff --git a/docs/reference-guides/backup-restore-configuration/storage-configuration.md b/docs/reference-guides/backup-restore-configuration/storage-configuration.md
index 3ad8b94487f..b1b8bad0896 100644
--- a/docs/reference-guides/backup-restore-configuration/storage-configuration.md
+++ b/docs/reference-guides/backup-restore-configuration/storage-configuration.md
@@ -3,7 +3,7 @@ title: Backup Storage Location Configuration
---
-
+
Configure a storage location where all backups are saved by default. You will have the option to override this with each backup, but will be limited to using an S3-compatible object store.
diff --git a/docs/reference-guides/best-practices/rancher-managed-clusters/logging-best-practices.md b/docs/reference-guides/best-practices/rancher-managed-clusters/logging-best-practices.md
index 9fc13c9ce70..dc200ae62b1 100644
--- a/docs/reference-guides/best-practices/rancher-managed-clusters/logging-best-practices.md
+++ b/docs/reference-guides/best-practices/rancher-managed-clusters/logging-best-practices.md
@@ -3,7 +3,7 @@ title: Logging Best Practices
---
-
+
In this guide, we recommend best practices for cluster-level logging and application logging.
diff --git a/docs/reference-guides/best-practices/rancher-managed-clusters/monitoring-best-practices.md b/docs/reference-guides/best-practices/rancher-managed-clusters/monitoring-best-practices.md
index 9255c76a28b..a6e34b03a50 100644
--- a/docs/reference-guides/best-practices/rancher-managed-clusters/monitoring-best-practices.md
+++ b/docs/reference-guides/best-practices/rancher-managed-clusters/monitoring-best-practices.md
@@ -3,7 +3,7 @@ title: Monitoring Best Practices
---
-
+
Configuring sensible monitoring and alerting rules is vital for running any production workloads securely and reliably. This is not different when using Kubernetes and Rancher. Fortunately the integrated monitoring and alerting functionality makes this whole process a lot easier.
diff --git a/docs/reference-guides/best-practices/rancher-managed-clusters/rancher-managed-clusters-in-vsphere.md b/docs/reference-guides/best-practices/rancher-managed-clusters/rancher-managed-clusters-in-vsphere.md
index 3012223f423..9d24fb3c5db 100644
--- a/docs/reference-guides/best-practices/rancher-managed-clusters/rancher-managed-clusters-in-vsphere.md
+++ b/docs/reference-guides/best-practices/rancher-managed-clusters/rancher-managed-clusters-in-vsphere.md
@@ -3,7 +3,7 @@ title: Best Practices for Rancher Managed vSphere Clusters
---
-
+
This guide outlines a reference architecture for provisioning downstream Rancher clusters in a vSphere environment, in addition to standard vSphere best practices as documented by VMware.
diff --git a/docs/reference-guides/best-practices/rancher-managed-clusters/tips-to-set-up-containers.md b/docs/reference-guides/best-practices/rancher-managed-clusters/tips-to-set-up-containers.md
index 1298ff18b87..0cec0a91864 100644
--- a/docs/reference-guides/best-practices/rancher-managed-clusters/tips-to-set-up-containers.md
+++ b/docs/reference-guides/best-practices/rancher-managed-clusters/tips-to-set-up-containers.md
@@ -3,7 +3,7 @@ title: Tips for Setting Up Containers
---
-
+
Running well-built containers can greatly impact the overall performance and security of your environment.
diff --git a/docs/reference-guides/best-practices/rancher-server/on-premises-rancher-in-vsphere.md b/docs/reference-guides/best-practices/rancher-server/on-premises-rancher-in-vsphere.md
index c19ac243d98..74243559753 100644
--- a/docs/reference-guides/best-practices/rancher-server/on-premises-rancher-in-vsphere.md
+++ b/docs/reference-guides/best-practices/rancher-server/on-premises-rancher-in-vsphere.md
@@ -3,7 +3,7 @@ title: Installing Rancher in a vSphere Environment
---
-
+
This guide outlines a reference architecture for installing Rancher on an RKE Kubernetes cluster in a vSphere environment, in addition to standard vSphere best practices as documented by VMware.
diff --git a/docs/reference-guides/best-practices/rancher-server/rancher-deployment-strategy.md b/docs/reference-guides/best-practices/rancher-server/rancher-deployment-strategy.md
index cc8811dc77e..99583f75579 100644
--- a/docs/reference-guides/best-practices/rancher-server/rancher-deployment-strategy.md
+++ b/docs/reference-guides/best-practices/rancher-server/rancher-deployment-strategy.md
@@ -3,7 +3,7 @@ title: Rancher Deployment Strategy
---
-
+
There are two recommended deployment strategies for a Rancher instance that manages downstream Kubernetes clusters. Each one has its own pros and cons. Read more about which one would fit best for your use case.
diff --git a/docs/reference-guides/best-practices/rancher-server/tips-for-running-rancher.md b/docs/reference-guides/best-practices/rancher-server/tips-for-running-rancher.md
index 1863ff82503..1ed05696fa2 100644
--- a/docs/reference-guides/best-practices/rancher-server/tips-for-running-rancher.md
+++ b/docs/reference-guides/best-practices/rancher-server/tips-for-running-rancher.md
@@ -3,7 +3,7 @@ title: Tips for Running Rancher
---
-
+
This guide is geared toward use cases where Rancher is used to manage downstream Kubernetes clusters. The high-availability setup is intended to prevent losing access to downstream clusters if the Rancher server is not available.
diff --git a/docs/reference-guides/best-practices/rancher-server/tips-for-scaling-rancher.md b/docs/reference-guides/best-practices/rancher-server/tips-for-scaling-rancher.md
index 691ef18f576..e8e919bde9b 100644
--- a/docs/reference-guides/best-practices/rancher-server/tips-for-scaling-rancher.md
+++ b/docs/reference-guides/best-practices/rancher-server/tips-for-scaling-rancher.md
@@ -3,7 +3,7 @@ title: Tips for Scaling Rancher
---
-
+
This guide aims to introduce the approaches that should be considered to scale Rancher setups, and associated challenges with doing so. As systems grow performance will naturally reduce, but there are steps we can take to minimize the load put on Rancher, as well as optimize Rancher's ability to handle these larger setups.
diff --git a/docs/reference-guides/cli-with-rancher/kubectl-utility.md b/docs/reference-guides/cli-with-rancher/kubectl-utility.md
index 45502753a08..fefa1a66b1b 100644
--- a/docs/reference-guides/cli-with-rancher/kubectl-utility.md
+++ b/docs/reference-guides/cli-with-rancher/kubectl-utility.md
@@ -3,7 +3,7 @@ title: kubectl Utility
---
-
+
## kubectl
diff --git a/docs/reference-guides/cli-with-rancher/rancher-cli.md b/docs/reference-guides/cli-with-rancher/rancher-cli.md
index 44024172658..0c9a27c1694 100644
--- a/docs/reference-guides/cli-with-rancher/rancher-cli.md
+++ b/docs/reference-guides/cli-with-rancher/rancher-cli.md
@@ -4,7 +4,7 @@ description: Interact with Rancher using command line interface (CLI) tools from
---
-
+
The Rancher CLI (Command Line Interface) is a unified tool that you can use to interact with Rancher. With this tool, you can operate Rancher using a command line rather than the GUI.
diff --git a/docs/reference-guides/cluster-configuration/downstream-cluster-configuration/machine-configuration/amazon-ec2.md b/docs/reference-guides/cluster-configuration/downstream-cluster-configuration/machine-configuration/amazon-ec2.md
index 6043df8f1ba..4640d142697 100644
--- a/docs/reference-guides/cluster-configuration/downstream-cluster-configuration/machine-configuration/amazon-ec2.md
+++ b/docs/reference-guides/cluster-configuration/downstream-cluster-configuration/machine-configuration/amazon-ec2.md
@@ -3,7 +3,7 @@ title: EC2 Machine Configuration Reference
---
-
+
For more details about EC2 nodes, refer to the official documentation for the [EC2 Management Console](https://aws.amazon.com/ec2).
diff --git a/docs/reference-guides/cluster-configuration/downstream-cluster-configuration/machine-configuration/azure.md b/docs/reference-guides/cluster-configuration/downstream-cluster-configuration/machine-configuration/azure.md
index 98d299762b0..ba7e806295e 100644
--- a/docs/reference-guides/cluster-configuration/downstream-cluster-configuration/machine-configuration/azure.md
+++ b/docs/reference-guides/cluster-configuration/downstream-cluster-configuration/machine-configuration/azure.md
@@ -3,7 +3,7 @@ title: Azure Machine Configuration
---
-
+
For more information about Azure, refer to the official [Azure documentation.](https://docs.microsoft.com/en-us/azure/?product=featured)
diff --git a/docs/reference-guides/cluster-configuration/downstream-cluster-configuration/machine-configuration/digitalocean.md b/docs/reference-guides/cluster-configuration/downstream-cluster-configuration/machine-configuration/digitalocean.md
index 1d62fe9d9d7..634c7f48561 100644
--- a/docs/reference-guides/cluster-configuration/downstream-cluster-configuration/machine-configuration/digitalocean.md
+++ b/docs/reference-guides/cluster-configuration/downstream-cluster-configuration/machine-configuration/digitalocean.md
@@ -3,7 +3,7 @@ title: DigitalOcean Machine Configuration
---
-
+
For more details about DigitalOcean, Droplets, refer to the [official documentation](https://docs.digitalocean.com/products/compute/).
diff --git a/docs/reference-guides/cluster-configuration/downstream-cluster-configuration/node-template-configuration/amazon-ec2.md b/docs/reference-guides/cluster-configuration/downstream-cluster-configuration/node-template-configuration/amazon-ec2.md
index ffe36cf7723..bd79dabbed5 100644
--- a/docs/reference-guides/cluster-configuration/downstream-cluster-configuration/node-template-configuration/amazon-ec2.md
+++ b/docs/reference-guides/cluster-configuration/downstream-cluster-configuration/node-template-configuration/amazon-ec2.md
@@ -3,7 +3,7 @@ title: EC2 Node Template Configuration
---
-
+
For more details about EC2, nodes, refer to the official documentation for the [EC2 Management Console](https://aws.amazon.com/ec2).
diff --git a/docs/reference-guides/cluster-configuration/downstream-cluster-configuration/node-template-configuration/azure.md b/docs/reference-guides/cluster-configuration/downstream-cluster-configuration/node-template-configuration/azure.md
index e8fa8b382ee..e747dbbb547 100644
--- a/docs/reference-guides/cluster-configuration/downstream-cluster-configuration/node-template-configuration/azure.md
+++ b/docs/reference-guides/cluster-configuration/downstream-cluster-configuration/node-template-configuration/azure.md
@@ -3,7 +3,7 @@ title: Azure Node Template Configuration
---
-
+
For more information about Azure, refer to the official [Azure documentation.](https://docs.microsoft.com/en-us/azure/?product=featured)
diff --git a/docs/reference-guides/cluster-configuration/downstream-cluster-configuration/node-template-configuration/digitalocean.md b/docs/reference-guides/cluster-configuration/downstream-cluster-configuration/node-template-configuration/digitalocean.md
index 0e679ae7d13..87b5fccdcfb 100644
--- a/docs/reference-guides/cluster-configuration/downstream-cluster-configuration/node-template-configuration/digitalocean.md
+++ b/docs/reference-guides/cluster-configuration/downstream-cluster-configuration/node-template-configuration/digitalocean.md
@@ -3,7 +3,7 @@ title: DigitalOcean Node Template Configuration
---
-
+
Account access information is stored as a cloud credential. Cloud credentials are stored as Kubernetes secrets. Multiple node templates can use the same cloud credential. You can use an existing cloud credential or create a new one.
diff --git a/docs/reference-guides/cluster-configuration/downstream-cluster-configuration/node-template-configuration/nutanix.md b/docs/reference-guides/cluster-configuration/downstream-cluster-configuration/node-template-configuration/nutanix.md
index cbecb1be01b..4e44d5ceca7 100644
--- a/docs/reference-guides/cluster-configuration/downstream-cluster-configuration/node-template-configuration/nutanix.md
+++ b/docs/reference-guides/cluster-configuration/downstream-cluster-configuration/node-template-configuration/nutanix.md
@@ -3,7 +3,7 @@ title: Nutanix Node Template Configuration
---
-
+
## Account Access
diff --git a/docs/reference-guides/cluster-configuration/downstream-cluster-configuration/node-template-configuration/vsphere.md b/docs/reference-guides/cluster-configuration/downstream-cluster-configuration/node-template-configuration/vsphere.md
index 0e665ba93f4..135c3edf7cc 100644
--- a/docs/reference-guides/cluster-configuration/downstream-cluster-configuration/node-template-configuration/vsphere.md
+++ b/docs/reference-guides/cluster-configuration/downstream-cluster-configuration/node-template-configuration/vsphere.md
@@ -3,7 +3,7 @@ title: VSphere Node Template Configuration
---
-
+
## Account Access
diff --git a/docs/reference-guides/cluster-configuration/rancher-server-configuration/aks-cluster-configuration.md b/docs/reference-guides/cluster-configuration/rancher-server-configuration/aks-cluster-configuration.md
index 136c71a45a2..67cd280e470 100644
--- a/docs/reference-guides/cluster-configuration/rancher-server-configuration/aks-cluster-configuration.md
+++ b/docs/reference-guides/cluster-configuration/rancher-server-configuration/aks-cluster-configuration.md
@@ -3,7 +3,7 @@ title: AKS Cluster Configuration Reference
---
-
+
## Changes in Rancher v2.6
diff --git a/docs/reference-guides/cluster-configuration/rancher-server-configuration/eks-cluster-configuration.md b/docs/reference-guides/cluster-configuration/rancher-server-configuration/eks-cluster-configuration.md
index 5bfe091028c..ba6b826b4f1 100644
--- a/docs/reference-guides/cluster-configuration/rancher-server-configuration/eks-cluster-configuration.md
+++ b/docs/reference-guides/cluster-configuration/rancher-server-configuration/eks-cluster-configuration.md
@@ -3,7 +3,7 @@ title: EKS Cluster Configuration Reference
---
-
+
### Account Access
diff --git a/docs/reference-guides/cluster-configuration/rancher-server-configuration/gke-cluster-configuration/gke-private-clusters.md b/docs/reference-guides/cluster-configuration/rancher-server-configuration/gke-cluster-configuration/gke-private-clusters.md
index 60228c3fb97..120be47a641 100644
--- a/docs/reference-guides/cluster-configuration/rancher-server-configuration/gke-cluster-configuration/gke-private-clusters.md
+++ b/docs/reference-guides/cluster-configuration/rancher-server-configuration/gke-cluster-configuration/gke-private-clusters.md
@@ -3,7 +3,7 @@ title: Private Clusters
---
-
+
In GKE, [private clusters](https://cloud.google.com/kubernetes-engine/docs/concepts/private-cluster-concept) are clusters whose nodes are isolated from inbound and outbound traffic by assigning them internal IP addresses only. Private clusters in GKE have the option of exposing the control plane endpoint as a publicly accessible address or as a private address. This is different from other Kubernetes providers, which may refer to clusters with private control plane endpoints as "private clusters" but still allow traffic to and from nodes. You may want to create a cluster with private nodes, with or without a public control plane endpoint, depending on your organization's networking and security requirements. A GKE cluster provisioned from Rancher can use isolated nodes by selecting "Private Cluster" in the Cluster Options (under "Show advanced options"). The control plane endpoint can optionally be made private by selecting "Enable Private Endpoint".
diff --git a/docs/reference-guides/cluster-configuration/rancher-server-configuration/rke1-cluster-configuration.md b/docs/reference-guides/cluster-configuration/rancher-server-configuration/rke1-cluster-configuration.md
index 94c3b2c3442..6d260b3dd68 100644
--- a/docs/reference-guides/cluster-configuration/rancher-server-configuration/rke1-cluster-configuration.md
+++ b/docs/reference-guides/cluster-configuration/rancher-server-configuration/rke1-cluster-configuration.md
@@ -127,7 +127,7 @@ ACE is available on RKE, RKE2, and K3s clusters that are provisioned or register
:::
-ACE must be set up [manually](../../../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/register-existing-clusters#authorized-cluster-endpoint-support-for-rke2-and-k3s-clusters.md) on RKE2 and K3s clusters. In RKE, ACE is enabled by default in Rancher-launched Kubernetes clusters, using the IP of the node with the `controlplane` role and the default Kubernetes self-signed certificates.
+ACE must be set up [manually](../../../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/register-existing-clusters.md#authorized-cluster-endpoint-support-for-rke2-and-k3s-clusters) on RKE2 and K3s clusters. In RKE, ACE is enabled by default in Rancher-launched Kubernetes clusters, using the IP of the node with the `controlplane` role and the default Kubernetes self-signed certificates.
For more detail on how an authorized cluster endpoint works and why it is used, refer to the [architecture section.](../../../reference-guides/rancher-manager-architecture/communicating-with-downstream-user-clusters.md#4-authorized-cluster-endpoint)
diff --git a/docs/reference-guides/cluster-configuration/rancher-server-configuration/sync-clusters.md b/docs/reference-guides/cluster-configuration/rancher-server-configuration/sync-clusters.md
index 9ccc2cfe9f0..63fa8df3511 100644
--- a/docs/reference-guides/cluster-configuration/rancher-server-configuration/sync-clusters.md
+++ b/docs/reference-guides/cluster-configuration/rancher-server-configuration/sync-clusters.md
@@ -3,7 +3,7 @@ title: Syncing
---
-
+
Syncing allows Rancher to update cluster values so that they're up to date with the corresponding cluster object hosted in AKS, EKS or GKE. This enables sources other than Rancher to own a hosted cluster’s state.
diff --git a/docs/reference-guides/cluster-configuration/rancher-server-configuration/use-existing-nodes/rancher-agent-options.md b/docs/reference-guides/cluster-configuration/rancher-server-configuration/use-existing-nodes/rancher-agent-options.md
index a0e092fee87..3c363d053cf 100644
--- a/docs/reference-guides/cluster-configuration/rancher-server-configuration/use-existing-nodes/rancher-agent-options.md
+++ b/docs/reference-guides/cluster-configuration/rancher-server-configuration/use-existing-nodes/rancher-agent-options.md
@@ -3,7 +3,7 @@ title: Rancher Agent Options
---
-
+
Rancher deploys an agent on each node to communicate with the node. This pages describes the options that can be passed to the agent. To use these options, you will need to [create a cluster with custom nodes](../../../../pages-for-subheaders/use-existing-nodes.md) and add the options to the generated `docker run` command when adding a node.
diff --git a/docs/reference-guides/monitoring-v2-configuration/examples.md b/docs/reference-guides/monitoring-v2-configuration/examples.md
index 7c586657eb2..c65722cfa97 100644
--- a/docs/reference-guides/monitoring-v2-configuration/examples.md
+++ b/docs/reference-guides/monitoring-v2-configuration/examples.md
@@ -3,7 +3,7 @@ title: Examples
---
-
+
### ServiceMonitor
diff --git a/docs/reference-guides/monitoring-v2-configuration/helm-chart-options.md b/docs/reference-guides/monitoring-v2-configuration/helm-chart-options.md
index fabd9fc222f..112c41c9ea0 100644
--- a/docs/reference-guides/monitoring-v2-configuration/helm-chart-options.md
+++ b/docs/reference-guides/monitoring-v2-configuration/helm-chart-options.md
@@ -3,7 +3,7 @@ title: Helm Chart Options
---
-
+
## Configuring Resource Limits and Requests
diff --git a/docs/reference-guides/monitoring-v2-configuration/receivers.md b/docs/reference-guides/monitoring-v2-configuration/receivers.md
index eb3a029b45b..dc459f34378 100644
--- a/docs/reference-guides/monitoring-v2-configuration/receivers.md
+++ b/docs/reference-guides/monitoring-v2-configuration/receivers.md
@@ -3,7 +3,7 @@ title: Receiver Configuration
---
-
+
The [Alertmanager Config](https://prometheus.io/docs/alerting/latest/configuration/#configuration-file) Secret contains the configuration of an Alertmanager instance that sends out notifications based on alerts it receives from Prometheus.
diff --git a/docs/reference-guides/monitoring-v2-configuration/routes.md b/docs/reference-guides/monitoring-v2-configuration/routes.md
index 339dd2a606a..f79d1e190c6 100644
--- a/docs/reference-guides/monitoring-v2-configuration/routes.md
+++ b/docs/reference-guides/monitoring-v2-configuration/routes.md
@@ -3,7 +3,7 @@ title: Route Configuration
---
-
+
The route configuration is the section of the Alertmanager custom resource that controls how the alerts fired by Prometheus are grouped and filtered before they reach the receiver.
diff --git a/docs/reference-guides/monitoring-v2-configuration/servicemonitors-and-podmonitors.md b/docs/reference-guides/monitoring-v2-configuration/servicemonitors-and-podmonitors.md
index 780d13c2673..30fccb634c8 100644
--- a/docs/reference-guides/monitoring-v2-configuration/servicemonitors-and-podmonitors.md
+++ b/docs/reference-guides/monitoring-v2-configuration/servicemonitors-and-podmonitors.md
@@ -3,7 +3,7 @@ title: ServiceMonitor and PodMonitor Configuration
---
-
+
ServiceMonitors and PodMonitors are both pseudo-CRDs that map the scrape configuration of the Prometheus custom resource.
diff --git a/docs/reference-guides/prometheus-federator/rbac.md b/docs/reference-guides/prometheus-federator/rbac.md
index 47887415d85..8b54ce9559f 100644
--- a/docs/reference-guides/prometheus-federator/rbac.md
+++ b/docs/reference-guides/prometheus-federator/rbac.md
@@ -2,6 +2,10 @@
title: Role-Based Access Control
---
+
+
+
+
This section describes the expectations for Role-Based Access Control (RBAC) for Prometheus Federator.
As described in the section on [namespaces](../../pages-for-subheaders/prometheus-federator.md#namespaces), Prometheus Federator expects that Project Owners, Project Members, and other users in the cluster with Project-level permissions (e.g. permissions in a certain set of namespaces identified by a single label selector) have minimal permissions in any namespaces except the Project Registration Namespace (which is imported into the project by default) and those that already comprise their projects. Therefore, in order to allow Project Owners to assign specific chart permissions to other users in their Project namespaces, the Helm Project Operator will automatically watch the following bindings:
diff --git a/docs/reference-guides/rancher-manager-architecture/architecture-recommendations.md b/docs/reference-guides/rancher-manager-architecture/architecture-recommendations.md
index d68f5b9320c..1ece990ff8c 100644
--- a/docs/reference-guides/rancher-manager-architecture/architecture-recommendations.md
+++ b/docs/reference-guides/rancher-manager-architecture/architecture-recommendations.md
@@ -2,6 +2,10 @@
title: Architecture Recommendations
---
+
+
+
+
If you are installing Rancher on a single node, the main architecture recommendation that applies to your installation is that the node running Rancher should be [separate from downstream clusters.](#separation-of-rancher-and-user-clusters)
## Separation of Rancher and User Clusters
diff --git a/docs/reference-guides/rancher-manager-architecture/communicating-with-downstream-user-clusters.md b/docs/reference-guides/rancher-manager-architecture/communicating-with-downstream-user-clusters.md
index 0c5b83a3ffe..586b55b0db8 100644
--- a/docs/reference-guides/rancher-manager-architecture/communicating-with-downstream-user-clusters.md
+++ b/docs/reference-guides/rancher-manager-architecture/communicating-with-downstream-user-clusters.md
@@ -2,6 +2,10 @@
title: Communicating with Downstream User Clusters
---
+
+
+
+
This section describes how Rancher provisions and manages the downstream user clusters that run your apps and services.
The below diagram shows how the cluster controllers, cluster agents, and node agents allow Rancher to control downstream clusters.
diff --git a/docs/reference-guides/rancher-manager-architecture/rancher-server-and-components.md b/docs/reference-guides/rancher-manager-architecture/rancher-server-and-components.md
index bb1cf170e7a..e9fec332622 100644
--- a/docs/reference-guides/rancher-manager-architecture/rancher-server-and-components.md
+++ b/docs/reference-guides/rancher-manager-architecture/rancher-server-and-components.md
@@ -2,6 +2,10 @@
title: Rancher Server and Components
---
+
+
+
+
The majority of Rancher 2.x software runs on the Rancher Server. Rancher Server includes all the software components used to manage the entire Rancher deployment.
The figure below illustrates the high-level architecture of Rancher 2.x. The figure depicts a Rancher Server installation that manages two downstream Kubernetes clusters: one created by RKE and another created by Amazon EKS (Elastic Kubernetes Service).
diff --git a/docs/reference-guides/rancher-security/hardening-guides/k3s-hardening-guide/k3s-self-assessment-guide-with-cis-v1.24-k8s-v1.24.md b/docs/reference-guides/rancher-security/hardening-guides/k3s-hardening-guide/k3s-self-assessment-guide-with-cis-v1.24-k8s-v1.24.md
new file mode 100644
index 00000000000..1d348069a2a
--- /dev/null
+++ b/docs/reference-guides/rancher-security/hardening-guides/k3s-hardening-guide/k3s-self-assessment-guide-with-cis-v1.24-k8s-v1.24.md
@@ -0,0 +1,3208 @@
+---
+title: K3s Self-Assessment Guide - CIS Benchmark v1.24 - K8s v1.24
+---
+
+
+
+
+
+This document is a companion to the [K3s Hardening Guide](../../../../pages-for-subheaders/k3s-hardening-guide.md), which provides prescriptive guidance on how to harden K3s clusters that are running in production and managed by Rancher. This benchmark guide helps you evaluate the security of a hardened cluster against each control in the CIS Kubernetes Benchmark.
+
+This guide corresponds to the following versions of Rancher, CIS Benchmarks, and Kubernetes:
+
+| Rancher Version | CIS Benchmark Version | Kubernetes Version |
+|-----------------|-----------------------|--------------------|
+| Rancher v2.7 | Benchmark v1.24 | Kubernetes v1.24 |
+
+This document is for Rancher operators, security teams, auditors and decision makers.
+
+For more information about each control, including detailed descriptions and remediations for failing tests, refer to the corresponding section of the CIS Kubernetes Benchmark v1.24. You can download the benchmark, after creating a free account, at [Center for Internet Security (CIS)](https://www.cisecurity.org/benchmark/kubernetes/).
+
+## Testing Methodology
+
+Each control in the CIS Kubernetes Benchmark was evaluated against a K3s cluster that was configured according to the accompanying hardening guide.
+
+Where control audits differ from the original CIS benchmark, the audit commands specific to K3s are provided for testing.
+
+These are the possible results for each control:
+
+- **Pass** - The K3s cluster passes the audit outlined in the benchmark.
+- **Not Applicable** - The control is not applicable to K3s because of how it is designed to operate. The remediation section explains why.
+- **Warn** - The control is manual in the CIS benchmark and it depends on the cluster's use-case or some other factor that must be determined by the cluster operator. These controls have been evaluated to ensure K3s doesn't prevent their implementation, but no further configuration or auditing of the cluster has been performed.
+
+This guide makes the assumption that K3s is running as a Systemd unit. Your installation may vary. Adjust the "audit" commands to fit your scenario.
+
+:::note
+
+This guide only covers `automated` (previously called `scored`) tests.
+
+:::
+
+### Controls
+
+
+## 1.1 Control Plane Node Configuration Files
+### 1.1.1 Ensure that the API server pod specification file permissions are set to 644 or more restrictive (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the
+control plane node.
+For example, chmod 644 /etc/kubernetes/manifests/kube-apiserver.yaml
+
+### 1.1.2 Ensure that the API server pod specification file ownership is set to root:root (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example, chown root:root /etc/kubernetes/manifests/kube-apiserver.yaml
+
+### 1.1.3 Ensure that the controller manager pod specification file permissions are set to 600 or more restrictive (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example, chmod 600 /etc/kubernetes/manifests/kube-controller-manager.yaml
+
+### 1.1.4 Ensure that the controller manager pod specification file ownership is set to root:root (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example, chown root:root /etc/kubernetes/manifests/kube-controller-manager.yaml
+
+### 1.1.5 Ensure that the scheduler pod specification file permissions are set to 600 or more restrictive (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example, chmod 600 /etc/kubernetes/manifests/kube-scheduler.yaml
+
+### 1.1.6 Ensure that the scheduler pod specification file ownership is set to root:root (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example, chown root:root /etc/kubernetes/manifests/kube-scheduler.yaml
+
+### 1.1.7 Ensure that the etcd pod specification file permissions are set to 600 or more restrictive (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example,
+chmod 600 /etc/kubernetes/manifests/etcd.yaml
+
+### 1.1.8 Ensure that the etcd pod specification file ownership is set to root:root (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example,
+chown root:root /etc/kubernetes/manifests/etcd.yaml
+
+### 1.1.9 Ensure that the Container Network Interface file permissions are set to 600 or more restrictive (Manual)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example, chmod 600
+
+### 1.1.10 Ensure that the Container Network Interface file ownership is set to root:root (Manual)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example,
+chown root:root
+
+### 1.1.11 Ensure that the etcd data directory permissions are set to 700 or more restrictive (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+On the etcd server node, get the etcd data directory, passed as an argument --data-dir,
+from the command 'ps -ef | grep etcd'.
+Run the below command (based on the etcd data directory found above). For example,
+chmod 700 /var/lib/etcd
+
+**Audit Script:** `check_for_k3s_etcd.sh`
+
+```bash
+#!/bin/bash
+
+# This script is used to ensure that k3s is actually running etcd (and not other databases like sqlite3)
+# before it checks the requirement
+set -eE
+
+handle_error() {
+ echo "false"
+}
+
+trap 'handle_error' ERR
+
+
+if [[ "$(journalctl -D /var/log/journal -u k3s | grep 'Managed etcd cluster initializing' | grep -v grep | wc -l)" -gt 0 ]]; then
+ case $1 in
+ "1.1.11")
+ echo $(stat -c %a /var/lib/rancher/k3s/server/db/etcd);;
+ "1.2.29")
+ echo $(journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'etcd-');;
+ "2.1")
+ echo $(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');;
+ "2.2")
+ echo $(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth');;
+ "2.3")
+ echo $(grep 'auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);;
+ "2.4")
+ echo $(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');;
+ "2.5")
+ echo $(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth');;
+ "2.6")
+ echo $(grep 'peer-auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);;
+ "2.7")
+ echo $(grep 'trusted-ca-file' /var/lib/rancher/k3s/server/db/etcd/config);;
+ esac
+else
+# If another database is running, return whatever is required to pass the scan
+ case $1 in
+ "1.1.11")
+ echo "700";;
+ "1.2.29")
+ echo "--etcd-certfile AND --etcd-keyfile";;
+ "2.1")
+ echo "cert-file AND key-file";;
+ "2.2")
+ echo "--client-cert-auth=true";;
+ "2.3")
+ echo "false";;
+ "2.4")
+ echo "peer-cert-file AND peer-key-file";;
+ "2.5")
+ echo "--client-cert-auth=true";;
+ "2.6")
+ echo "--peer-auto-tls=false";;
+ "2.7")
+ echo "--trusted-ca-file";;
+ esac
+fi
+
+```
+
+**Audit Execution:**
+
+```bash
+./check_for_k3s_etcd.sh 1.1.11
+```
+
+**Expected Result**:
+
+```console
+'700' is equal to '700'
+```
+
+**Returned Value**:
+
+```console
+700
+```
+
+### 1.1.12 Ensure that the etcd data directory ownership is set to etcd:etcd (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+On the etcd server node, get the etcd data directory, passed as an argument --data-dir,
+from the command 'ps -ef | grep etcd'.
+Run the below command (based on the etcd data directory found above).
+For example, chown etcd:etcd /var/lib/etcd
+
+### 1.1.13 Ensure that the admin.conf file permissions are set to 600 or more restrictive (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example, chmod 600 /var/lib/rancher/k3s/server/cred/admin.kubeconfig
+
+### 1.1.14 Ensure that the admin.conf file ownership is set to root:root (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example, chown root:root /etc/kubernetes/admin.conf
+
+**Audit:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/rancher/k3s/server/cred/admin.kubeconfig; then stat -c %U:%G /var/lib/rancher/k3s/server/cred/admin.kubeconfig; fi'
+```
+
+**Expected Result**:
+
+```console
+'root:root' is equal to 'root:root'
+```
+
+**Returned Value**:
+
+```console
+root:root
+```
+
+### 1.1.15 Ensure that the scheduler.conf file permissions are set to 600 or more restrictive (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example,
+chmod 600 scheduler
+
+**Audit:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/rancher/k3s/server/cred/scheduler.kubeconfig; then stat -c permissions=%a /var/lib/rancher/k3s/server/cred/scheduler.kubeconfig; fi'
+```
+
+**Expected Result**:
+
+```console
+permissions has permissions 600, expected 600 or more restrictive
+```
+
+**Returned Value**:
+
+```console
+permissions=600
+```
+
+### 1.1.16 Ensure that the scheduler.conf file ownership is set to root:root (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example,
+chown root:root scheduler
+
+**Audit:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/rancher/k3s/server/cred/scheduler.kubeconfig; then stat -c %U:%G /var/lib/rancher/k3s/server/cred/scheduler.kubeconfig; fi'
+```
+
+**Expected Result**:
+
+```console
+'root:root' is present
+```
+
+**Returned Value**:
+
+```console
+root:root
+```
+
+### 1.1.17 Ensure that the controller-manager.conf file permissions are set to 600 or more restrictive (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example,
+chmod 600 controllermanager
+
+**Audit:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/rancher/k3s/server/cred/controller.kubeconfig; then stat -c permissions=%a /var/lib/rancher/k3s/server/cred/controller.kubeconfig; fi'
+```
+
+**Expected Result**:
+
+```console
+permissions has permissions 600, expected 600 or more restrictive
+```
+
+**Returned Value**:
+
+```console
+permissions=600
+```
+
+### 1.1.18 Ensure that the controller-manager.conf file ownership is set to root:root (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example,
+chown root:root controllermanager
+
+**Audit:**
+
+```bash
+stat -c %U:%G /var/lib/rancher/k3s/server/tls
+```
+
+**Expected Result**:
+
+```console
+'root:root' is equal to 'root:root'
+```
+
+**Returned Value**:
+
+```console
+root:root
+```
+
+### 1.1.19 Ensure that the Kubernetes PKI directory and file ownership is set to root:root (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example,
+chown -R root:root /etc/kubernetes/pki/
+
+**Audit:**
+
+```bash
+find /var/lib/rancher/k3s/server/tls | xargs stat -c %U:%G
+```
+
+**Expected Result**:
+
+```console
+'root:root' is present
+```
+
+**Returned Value**:
+
+```console
+root:root root:root root:root root:root root:root root:root root:root root:root root:root root:root root:root root:root root:root root:root root:root root:root root:root root:root root:root root:root root:root root:root root:root root:root root:root root:root root:root root:root root:root root:root root:root root:root root:root root:root root:root root:root root:root root:root root:root root:root root:root root:root root:root root:root root:root root:root root:root root:root root:root root:root root:root root:root root:root root:root root:root root:root root:root root:root
+```
+
+### 1.1.20 Ensure that the Kubernetes PKI certificate file permissions are set to 600 or more restrictive (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example,
+chmod -R 600 /etc/kubernetes/pki/*.crt
+
+**Audit:**
+
+```bash
+stat -c %n %a /var/lib/rancher/k3s/server/tls/*.crt
+```
+
+### 1.1.21 Ensure that the Kubernetes PKI key file permissions are set to 600 (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example,
+chmod -R 600 /etc/kubernetes/pki/*.key
+
+**Audit:**
+
+```bash
+stat -c %n %a /var/lib/rancher/k3s/server/tls/*.key
+```
+
+## 1.2 API Server
+### 1.2.1 Ensure that the --anonymous-auth argument is set to false (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the below parameter.
+--anonymous-auth=false
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'anonymous-auth'
+```
+
+### 1.2.2 Ensure that the --token-auth-file parameter is not set (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the documentation and configure alternate mechanisms for authentication. Then,
+edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and remove the --token-auth-file= parameter.
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--token-auth-file' is not present
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:31:58 ip-172-31-3-32 k3s[45195]: time="2023-09-11T20:31:58Z" level=info msg="Running kube-apiserver --advertise-port=6443 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,k3s --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/k3s/server/logs/audit.log --audit-policy-file=/var/lib/rancher/k3s/server/audit.yaml --authorization-mode=Node,RBAC --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/k3s/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/k3s/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,PodSecurityPolicy,ServiceAccount --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/k3s/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/k3s/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/k3s/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.key --request-timeout=300s --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6444 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-account-lookup=true --service-account-signing-key-file=/var/lib/rancher/k3s/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.key"
+```
+
+### 1.2.3 Ensure that the --DenyServiceExternalIPs is not set (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and remove the `DenyServiceExternalIPs`
+from enabled admission plugins.
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep containerd | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--enable-admission-plugins' is present OR '--enable-admission-plugins' is not present
+```
+
+**Returned Value**:
+
+```console
+root 410 1 0 Sep11 ? 00:01:50 /usr/bin/containerd root 539 1 0 Sep11 ? 00:00:09 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock root 45213 45195 3 Sep11 ? 00:45:14 containerd -c /var/lib/rancher/k3s/agent/etc/containerd/config.toml -a /run/k3s/containerd/containerd.sock --state /run/k3s/containerd --root /var/lib/rancher/k3s/agent/containerd root 47188 1 0 Sep11 ? 00:01:00 /var/lib/rancher/k3s/data/484bf694b486d93cc93bcf90f74d5c77628550d4456f21760fd720b88c93881e/bin/containerd-shim-runc-v2 -namespace k8s.io -id 02b8fdd94b7628d575ace92f337dcc93202151d07f33858341cfcb0178fea586 -address /run/k3s/containerd/containerd.sock root 47235 1 0 Sep11 ? 00:00:33 /var/lib/rancher/k3s/data/484bf694b486d93cc93bcf90f74d5c77628550d4456f21760fd720b88c93881e/bin/containerd-shim-runc-v2 -namespace k8s.io -id eb0f03c4bc1125ae34e5de77c7eaeb9c2c1e46bec0bb106b99281df7353f9ded -address /run/k3s/containerd/containerd.sock root 47948 1 0 Sep11 ? 00:00:31 /var/lib/rancher/k3s/data/484bf694b486d93cc93bcf90f74d5c77628550d4456f21760fd720b88c93881e/bin/containerd-shim-runc-v2 -namespace k8s.io -id 5eece7110bd3876414f890ed1b7158eb91f60d1f14450a9f8c77a0fc62b73c4a -address /run/k3s/containerd/containerd.sock root 48047 1 0 Sep11 ? 00:00:32 /var/lib/rancher/k3s/data/484bf694b486d93cc93bcf90f74d5c77628550d4456f21760fd720b88c93881e/bin/containerd-shim-runc-v2 -namespace k8s.io -id 4ef831f4bb8830a0a7b46a1e8be58197be00846ea0caa094014ea7ce3adf008e -address /run/k3s/containerd/containerd.sock root 48220 1 0 Sep11 ? 00:00:33 /var/lib/rancher/k3s/data/484bf694b486d93cc93bcf90f74d5c77628550d4456f21760fd720b88c93881e/bin/containerd-shim-runc-v2 -namespace k8s.io -id f8d5d3791ad2b1a8534476aa2fbdf8da1e4f0b9fdcdd26b1ae161142458a5336 -address /run/k3s/containerd/containerd.sock root 48878 1 0 Sep11 ? 00:00:32 /var/lib/rancher/k3s/data/484bf694b486d93cc93bcf90f74d5c77628550d4456f21760fd720b88c93881e/bin/containerd-shim-runc-v2 -namespace k8s.io -id 41b93a6581e272b0852257b3d7c44ab4cadcdf465a3579a8b29b493ea75feaf7 -address /run/k3s/containerd/containerd.sock root 49870 1 0 Sep11 ? 00:00:30 /var/lib/rancher/k3s/data/484bf694b486d93cc93bcf90f74d5c77628550d4456f21760fd720b88c93881e/bin/containerd-shim-runc-v2 -namespace k8s.io -id be329cdccda4049f048c759a2b1915cd72526473ff7768e895bcfc153a66c125 -address /run/k3s/containerd/containerd.sock root 50271 1 0 Sep11 ? 00:00:32 /var/lib/rancher/k3s/data/484bf694b486d93cc93bcf90f74d5c77628550d4456f21760fd720b88c93881e/bin/containerd-shim-runc-v2 -namespace k8s.io -id cceb5d26eba7d7d3c474a2dc842b72495689f4e40055505ea2598e4ac6849d40 -address /run/k3s/containerd/containerd.sock root 50571 1 0 Sep11 ? 00:00:32 /var/lib/rancher/k3s/data/484bf694b486d93cc93bcf90f74d5c77628550d4456f21760fd720b88c93881e/bin/containerd-shim-runc-v2 -namespace k8s.io -id 3a26e691e0d0186165d523bef22b0af71f175c39df82845b32ce7b4e3d652d4a -address /run/k3s/containerd/containerd.sock root 96693 1 0 16:13 ? 00:00:00 /var/lib/rancher/k3s/data/484bf694b486d93cc93bcf90f74d5c77628550d4456f21760fd720b88c93881e/bin/containerd-shim-runc-v2 -namespace k8s.io -id 9ed77e6e58410f1295f730ba4a8f8daf7aff8f4e896e24219a8fa710729c2287 -address /run/k3s/containerd/containerd.sock root 97726 1 0 16:16 ? 00:00:00 /var/lib/rancher/k3s/data/484bf694b486d93cc93bcf90f74d5c77628550d4456f21760fd720b88c93881e/bin/containerd-shim-runc-v2 -namespace k8s.io -id 1be4fe50e6bb29d4549f8b03102b5dc15b7669fe56b32beae3f701cf6d2e58cc -address /run/k3s/containerd/containerd.sock root 97923 1 1 16:16 ? 00:00:00 /var/lib/rancher/k3s/data/484bf694b486d93cc93bcf90f74d5c77628550d4456f21760fd720b88c93881e/bin/containerd-shim-runc-v2 -namespace k8s.io -id 7c65c47376f36a8980a5bebad7ffdc1abe1853821cf6c4a1d45f1b6be3452062 -address /run/k3s/containerd/containerd.sock
+```
+
+### 1.2.4 Ensure that the --kubelet-https argument is set to true (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and remove the --kubelet-https parameter.
+
+### 1.2.5 Ensure that the --kubelet-client-certificate and --kubelet-client-key arguments are set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the Kubernetes documentation and set up the TLS connection between the
+apiserver and kubelets. Then, edit API server pod specification file
+/etc/kubernetes/manifests/kube-apiserver.yaml on the control plane node and set the
+kubelet client certificate and key parameters as below.
+--kubelet-client-certificate=
+--kubelet-client-key=
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'kubelet-certificate-authority'
+```
+
+**Expected Result**:
+
+```console
+'--kubelet-client-certificate' is present AND '--kubelet-client-key' is present
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:31:58 ip-172-31-3-32 k3s[45195]: time="2023-09-11T20:31:58Z" level=info msg="Running kube-apiserver --advertise-port=6443 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,k3s --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/k3s/server/logs/audit.log --audit-policy-file=/var/lib/rancher/k3s/server/audit.yaml --authorization-mode=Node,RBAC --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/k3s/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/k3s/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,PodSecurityPolicy,ServiceAccount --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/k3s/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/k3s/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/k3s/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.key --request-timeout=300s --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6444 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-account-lookup=true --service-account-signing-key-file=/var/lib/rancher/k3s/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.key"
+```
+
+### 1.2.6 Ensure that the --kubelet-certificate-authority argument is set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the Kubernetes documentation and setup the TLS connection between
+the apiserver and kubelets. Then, edit the API server pod specification file
+/etc/kubernetes/manifests/kube-apiserver.yaml on the control plane node and set the
+--kubelet-certificate-authority parameter to the path to the cert file for the certificate authority.
+--kubelet-certificate-authority=
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'kubelet-certificate-authority'
+```
+
+**Expected Result**:
+
+```console
+'--kubelet-certificate-authority' is present
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:31:58 ip-172-31-3-32 k3s[45195]: time="2023-09-11T20:31:58Z" level=info msg="Running kube-apiserver --advertise-port=6443 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,k3s --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/k3s/server/logs/audit.log --audit-policy-file=/var/lib/rancher/k3s/server/audit.yaml --authorization-mode=Node,RBAC --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/k3s/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/k3s/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,PodSecurityPolicy,ServiceAccount --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/k3s/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/k3s/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/k3s/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.key --request-timeout=300s --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6444 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-account-lookup=true --service-account-signing-key-file=/var/lib/rancher/k3s/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.key"
+```
+
+### 1.2.7 Ensure that the --authorization-mode argument is not set to AlwaysAllow (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the --authorization-mode parameter to values other than AlwaysAllow.
+One such example could be as below.
+--authorization-mode=RBAC
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'authorization-mode'
+```
+
+**Expected Result**:
+
+```console
+'--authorization-mode' does not have 'AlwaysAllow'
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:31:58 ip-172-31-3-32 k3s[45195]: time="2023-09-11T20:31:58Z" level=info msg="Running kube-apiserver --advertise-port=6443 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,k3s --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/k3s/server/logs/audit.log --audit-policy-file=/var/lib/rancher/k3s/server/audit.yaml --authorization-mode=Node,RBAC --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/k3s/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/k3s/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,PodSecurityPolicy,ServiceAccount --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/k3s/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/k3s/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/k3s/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.key --request-timeout=300s --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6444 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-account-lookup=true --service-account-signing-key-file=/var/lib/rancher/k3s/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.key"
+```
+
+### 1.2.8 Ensure that the --authorization-mode argument includes Node (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the --authorization-mode parameter to a value that includes Node.
+--authorization-mode=Node,RBAC
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'authorization-mode'
+```
+
+**Expected Result**:
+
+```console
+'--authorization-mode' has 'Node'
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:31:58 ip-172-31-3-32 k3s[45195]: time="2023-09-11T20:31:58Z" level=info msg="Running kube-apiserver --advertise-port=6443 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,k3s --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/k3s/server/logs/audit.log --audit-policy-file=/var/lib/rancher/k3s/server/audit.yaml --authorization-mode=Node,RBAC --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/k3s/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/k3s/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,PodSecurityPolicy,ServiceAccount --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/k3s/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/k3s/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/k3s/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.key --request-timeout=300s --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6444 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-account-lookup=true --service-account-signing-key-file=/var/lib/rancher/k3s/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.key"
+```
+
+### 1.2.9 Ensure that the --authorization-mode argument includes RBAC (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the --authorization-mode parameter to a value that includes RBAC,
+for example `--authorization-mode=Node,RBAC`.
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'authorization-mode'
+```
+
+**Expected Result**:
+
+```console
+'--authorization-mode' has 'RBAC'
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:31:58 ip-172-31-3-32 k3s[45195]: time="2023-09-11T20:31:58Z" level=info msg="Running kube-apiserver --advertise-port=6443 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,k3s --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/k3s/server/logs/audit.log --audit-policy-file=/var/lib/rancher/k3s/server/audit.yaml --authorization-mode=Node,RBAC --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/k3s/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/k3s/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,PodSecurityPolicy,ServiceAccount --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/k3s/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/k3s/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/k3s/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.key --request-timeout=300s --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6444 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-account-lookup=true --service-account-signing-key-file=/var/lib/rancher/k3s/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.key"
+```
+
+### 1.2.10 Ensure that the admission control plugin EventRateLimit is set (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Follow the Kubernetes documentation and set the desired limits in a configuration file.
+Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+and set the below parameters.
+--enable-admission-plugins=...,EventRateLimit,...
+--admission-control-config-file=
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'enable-admission-plugins'
+```
+
+**Expected Result**:
+
+```console
+'--enable-admission-plugins' has 'EventRateLimit'
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:31:58 ip-172-31-3-32 k3s[45195]: time="2023-09-11T20:31:58Z" level=info msg="Running kube-apiserver --advertise-port=6443 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,k3s --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/k3s/server/logs/audit.log --audit-policy-file=/var/lib/rancher/k3s/server/audit.yaml --authorization-mode=Node,RBAC --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/k3s/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/k3s/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,PodSecurityPolicy,ServiceAccount --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/k3s/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/k3s/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/k3s/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.key --request-timeout=300s --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6444 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-account-lookup=true --service-account-signing-key-file=/var/lib/rancher/k3s/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.key"
+```
+
+### 1.2.11 Ensure that the admission control plugin AlwaysAdmit is not set (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and either remove the --enable-admission-plugins parameter, or set it to a
+value that does not include AlwaysAdmit.
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'enable-admission-plugins'
+```
+
+**Expected Result**:
+
+```console
+'--enable-admission-plugins' does not have 'AlwaysAdmit' OR '--enable-admission-plugins' is not present
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:31:58 ip-172-31-3-32 k3s[45195]: time="2023-09-11T20:31:58Z" level=info msg="Running kube-apiserver --advertise-port=6443 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,k3s --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/k3s/server/logs/audit.log --audit-policy-file=/var/lib/rancher/k3s/server/audit.yaml --authorization-mode=Node,RBAC --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/k3s/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/k3s/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,PodSecurityPolicy,ServiceAccount --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/k3s/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/k3s/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/k3s/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.key --request-timeout=300s --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6444 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-account-lookup=true --service-account-signing-key-file=/var/lib/rancher/k3s/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.key"
+```
+
+### 1.2.12 Ensure that the admission control plugin AlwaysPullImages is set (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the --enable-admission-plugins parameter to include
+AlwaysPullImages.
+--enable-admission-plugins=...,AlwaysPullImages,...
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'enable-admission-plugins'
+```
+
+**Expected Result**:
+
+```console
+'--enable-admission-plugins' has 'AlwaysPullImages'
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:31:58 ip-172-31-3-32 k3s[45195]: time="2023-09-11T20:31:58Z" level=info msg="Running kube-apiserver --advertise-port=6443 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,k3s --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/k3s/server/logs/audit.log --audit-policy-file=/var/lib/rancher/k3s/server/audit.yaml --authorization-mode=Node,RBAC --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/k3s/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/k3s/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,PodSecurityPolicy,ServiceAccount --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/k3s/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/k3s/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/k3s/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.key --request-timeout=300s --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6444 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-account-lookup=true --service-account-signing-key-file=/var/lib/rancher/k3s/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.key"
+```
+
+### 1.2.13 Ensure that the admission control plugin SecurityContextDeny is set if PodSecurityPolicy is not used (Manual)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the --enable-admission-plugins parameter to include
+SecurityContextDeny, unless PodSecurityPolicy is already in place.
+--enable-admission-plugins=...,SecurityContextDeny,...
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'enable-admission-plugins'
+```
+
+**Expected Result**:
+
+```console
+'--enable-admission-plugins' has 'SecurityContextDeny' OR '--enable-admission-plugins' has 'PodSecurityPolicy'
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:31:58 ip-172-31-3-32 k3s[45195]: time="2023-09-11T20:31:58Z" level=info msg="Running kube-apiserver --advertise-port=6443 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,k3s --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/k3s/server/logs/audit.log --audit-policy-file=/var/lib/rancher/k3s/server/audit.yaml --authorization-mode=Node,RBAC --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/k3s/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/k3s/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,PodSecurityPolicy,ServiceAccount --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/k3s/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/k3s/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/k3s/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.key --request-timeout=300s --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6444 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-account-lookup=true --service-account-signing-key-file=/var/lib/rancher/k3s/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.key"
+```
+
+### 1.2.14 Ensure that the admission control plugin ServiceAccount is set (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the documentation and create ServiceAccount objects as per your environment.
+Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and ensure that the --disable-admission-plugins parameter is set to a
+value that does not include ServiceAccount.
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'ServiceAccount'
+```
+
+**Expected Result**:
+
+```console
+'--disable-admission-plugins' is present OR '--disable-admission-plugins' is not present
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:31:58 ip-172-31-3-32 k3s[45195]: time="2023-09-11T20:31:58Z" level=info msg="Running kube-apiserver --advertise-port=6443 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,k3s --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/k3s/server/logs/audit.log --audit-policy-file=/var/lib/rancher/k3s/server/audit.yaml --authorization-mode=Node,RBAC --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/k3s/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/k3s/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,PodSecurityPolicy,ServiceAccount --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/k3s/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/k3s/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/k3s/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.key --request-timeout=300s --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6444 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-account-lookup=true --service-account-signing-key-file=/var/lib/rancher/k3s/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.key"
+```
+
+### 1.2.15 Ensure that the admission control plugin NamespaceLifecycle is set (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the --disable-admission-plugins parameter to
+ensure it does not include NamespaceLifecycle.
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--disable-admission-plugins' is present OR '--disable-admission-plugins' is not present
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:31:58 ip-172-31-3-32 k3s[45195]: time="2023-09-11T20:31:58Z" level=info msg="Running kube-apiserver --advertise-port=6443 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,k3s --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/k3s/server/logs/audit.log --audit-policy-file=/var/lib/rancher/k3s/server/audit.yaml --authorization-mode=Node,RBAC --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/k3s/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/k3s/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,PodSecurityPolicy,ServiceAccount --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/k3s/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/k3s/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/k3s/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.key --request-timeout=300s --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6444 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-account-lookup=true --service-account-signing-key-file=/var/lib/rancher/k3s/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.key"
+```
+
+### 1.2.16 Ensure that the admission control plugin NodeRestriction is set (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the Kubernetes documentation and configure NodeRestriction plug-in on kubelets.
+Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the --enable-admission-plugins parameter to a
+value that includes NodeRestriction.
+--enable-admission-plugins=...,NodeRestriction,...
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'enable-admission-plugins'
+```
+
+**Expected Result**:
+
+```console
+'--enable-admission-plugins' has 'NodeRestriction'
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:31:58 ip-172-31-3-32 k3s[45195]: time="2023-09-11T20:31:58Z" level=info msg="Running kube-apiserver --advertise-port=6443 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,k3s --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/k3s/server/logs/audit.log --audit-policy-file=/var/lib/rancher/k3s/server/audit.yaml --authorization-mode=Node,RBAC --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/k3s/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/k3s/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,PodSecurityPolicy,ServiceAccount --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/k3s/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/k3s/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/k3s/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.key --request-timeout=300s --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6444 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-account-lookup=true --service-account-signing-key-file=/var/lib/rancher/k3s/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.key"
+```
+
+### 1.2.17 Ensure that the --secure-port argument is not set to 0 (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and either remove the --secure-port parameter or
+set it to a different (non-zero) desired port.
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'secure-port'
+```
+
+**Expected Result**:
+
+```console
+'--secure-port' is greater than 0 OR '--secure-port' is not present
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:31:58 ip-172-31-3-32 k3s[45195]: time="2023-09-11T20:31:58Z" level=info msg="Running kube-apiserver --advertise-port=6443 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,k3s --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/k3s/server/logs/audit.log --audit-policy-file=/var/lib/rancher/k3s/server/audit.yaml --authorization-mode=Node,RBAC --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/k3s/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/k3s/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,PodSecurityPolicy,ServiceAccount --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/k3s/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/k3s/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/k3s/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.key --request-timeout=300s --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6444 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-account-lookup=true --service-account-signing-key-file=/var/lib/rancher/k3s/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.key"
+```
+
+### 1.2.18 Ensure that the --profiling argument is set to false (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the below parameter.
+--profiling=false
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'profiling'
+```
+
+**Expected Result**:
+
+```console
+'--profiling' is equal to 'false'
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:31:58 ip-172-31-3-32 k3s[45195]: time="2023-09-11T20:31:58Z" level=info msg="Running kube-apiserver --advertise-port=6443 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,k3s --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/k3s/server/logs/audit.log --audit-policy-file=/var/lib/rancher/k3s/server/audit.yaml --authorization-mode=Node,RBAC --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/k3s/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/k3s/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,PodSecurityPolicy,ServiceAccount --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/k3s/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/k3s/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/k3s/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.key --request-timeout=300s --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6444 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-account-lookup=true --service-account-signing-key-file=/var/lib/rancher/k3s/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.key"
+```
+
+### 1.2.19 Ensure that the --audit-log-path argument is set (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the --audit-log-path parameter to a suitable path and
+file where you would like audit logs to be written, for example,
+--audit-log-path=/var/log/apiserver/audit.log
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'audit-log-path'
+```
+
+**Expected Result**:
+
+```console
+'--audit-log-path' is present
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:31:58 ip-172-31-3-32 k3s[45195]: time="2023-09-11T20:31:58Z" level=info msg="Running kube-apiserver --advertise-port=6443 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,k3s --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/k3s/server/logs/audit.log --audit-policy-file=/var/lib/rancher/k3s/server/audit.yaml --authorization-mode=Node,RBAC --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/k3s/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/k3s/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,PodSecurityPolicy,ServiceAccount --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/k3s/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/k3s/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/k3s/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.key --request-timeout=300s --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6444 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-account-lookup=true --service-account-signing-key-file=/var/lib/rancher/k3s/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.key"
+```
+
+### 1.2.20 Ensure that the --audit-log-maxage argument is set to 30 or as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the --audit-log-maxage parameter to 30
+or as an appropriate number of days, for example,
+--audit-log-maxage=30
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'audit-log-maxage'
+```
+
+**Expected Result**:
+
+```console
+'--audit-log-maxage' is greater or equal to 30
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:31:58 ip-172-31-3-32 k3s[45195]: time="2023-09-11T20:31:58Z" level=info msg="Running kube-apiserver --advertise-port=6443 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,k3s --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/k3s/server/logs/audit.log --audit-policy-file=/var/lib/rancher/k3s/server/audit.yaml --authorization-mode=Node,RBAC --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/k3s/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/k3s/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,PodSecurityPolicy,ServiceAccount --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/k3s/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/k3s/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/k3s/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.key --request-timeout=300s --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6444 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-account-lookup=true --service-account-signing-key-file=/var/lib/rancher/k3s/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.key"
+```
+
+### 1.2.21 Ensure that the --audit-log-maxbackup argument is set to 10 or as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the --audit-log-maxbackup parameter to 10 or to an appropriate
+value. For example,
+--audit-log-maxbackup=10
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'audit-log-maxbackup'
+```
+
+**Expected Result**:
+
+```console
+'--audit-log-maxbackup' is greater or equal to 10
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:31:58 ip-172-31-3-32 k3s[45195]: time="2023-09-11T20:31:58Z" level=info msg="Running kube-apiserver --advertise-port=6443 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,k3s --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/k3s/server/logs/audit.log --audit-policy-file=/var/lib/rancher/k3s/server/audit.yaml --authorization-mode=Node,RBAC --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/k3s/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/k3s/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,PodSecurityPolicy,ServiceAccount --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/k3s/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/k3s/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/k3s/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.key --request-timeout=300s --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6444 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-account-lookup=true --service-account-signing-key-file=/var/lib/rancher/k3s/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.key"
+```
+
+### 1.2.22 Ensure that the --audit-log-maxsize argument is set to 100 or as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the --audit-log-maxsize parameter to an appropriate size in MB.
+For example, to set it as 100 MB, --audit-log-maxsize=100
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'audit-log-maxsize'
+```
+
+**Expected Result**:
+
+```console
+'--audit-log-maxsize' is greater or equal to 100
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:31:58 ip-172-31-3-32 k3s[45195]: time="2023-09-11T20:31:58Z" level=info msg="Running kube-apiserver --advertise-port=6443 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,k3s --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/k3s/server/logs/audit.log --audit-policy-file=/var/lib/rancher/k3s/server/audit.yaml --authorization-mode=Node,RBAC --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/k3s/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/k3s/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,PodSecurityPolicy,ServiceAccount --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/k3s/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/k3s/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/k3s/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.key --request-timeout=300s --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6444 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-account-lookup=true --service-account-signing-key-file=/var/lib/rancher/k3s/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.key"
+```
+
+### 1.2.23 Ensure that the --request-timeout argument is set as appropriate (Manual)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+and set the below parameter as appropriate and if needed.
+For example, --request-timeout=300s
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'request-timeout'
+```
+
+**Expected Result**:
+
+```console
+'--request-timeout' is not present OR '--request-timeout' is present
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:31:58 ip-172-31-3-32 k3s[45195]: time="2023-09-11T20:31:58Z" level=info msg="Running kube-apiserver --advertise-port=6443 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,k3s --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/k3s/server/logs/audit.log --audit-policy-file=/var/lib/rancher/k3s/server/audit.yaml --authorization-mode=Node,RBAC --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/k3s/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/k3s/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,PodSecurityPolicy,ServiceAccount --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/k3s/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/k3s/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/k3s/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.key --request-timeout=300s --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6444 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-account-lookup=true --service-account-signing-key-file=/var/lib/rancher/k3s/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.key"
+```
+
+### 1.2.24 Ensure that the --service-account-lookup argument is set to true (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the below parameter.
+--service-account-lookup=true
+Alternatively, you can delete the --service-account-lookup parameter from this file so
+that the default takes effect.
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'service-account-lookup'
+```
+
+**Expected Result**:
+
+```console
+'--service-account-lookup' is not present OR '--service-account-lookup' is equal to 'true'
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:31:58 ip-172-31-3-32 k3s[45195]: time="2023-09-11T20:31:58Z" level=info msg="Running kube-apiserver --advertise-port=6443 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,k3s --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/k3s/server/logs/audit.log --audit-policy-file=/var/lib/rancher/k3s/server/audit.yaml --authorization-mode=Node,RBAC --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/k3s/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/k3s/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,PodSecurityPolicy,ServiceAccount --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/k3s/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/k3s/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/k3s/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.key --request-timeout=300s --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6444 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-account-lookup=true --service-account-signing-key-file=/var/lib/rancher/k3s/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.key"
+```
+
+### 1.2.25 Ensure that the --service-account-key-file argument is set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the --service-account-key-file parameter
+to the public key file for service accounts. For example,
+--service-account-key-file=
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'service-account-key-file'
+```
+
+**Expected Result**:
+
+```console
+'--service-account-key-file' is present
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:31:58 ip-172-31-3-32 k3s[45195]: time="2023-09-11T20:31:58Z" level=info msg="Running kube-apiserver --advertise-port=6443 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,k3s --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/k3s/server/logs/audit.log --audit-policy-file=/var/lib/rancher/k3s/server/audit.yaml --authorization-mode=Node,RBAC --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/k3s/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/k3s/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,PodSecurityPolicy,ServiceAccount --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/k3s/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/k3s/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/k3s/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.key --request-timeout=300s --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6444 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-account-lookup=true --service-account-signing-key-file=/var/lib/rancher/k3s/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.key"
+```
+
+### 1.2.26 Ensure that the --etcd-certfile and --etcd-keyfile arguments are set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the Kubernetes documentation and set up the TLS connection between the apiserver and etcd.
+Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the etcd certificate and key file parameters.
+--etcd-certfile=
+--etcd-keyfile=
+
+**Audit Script:** `check_for_k3s_etcd.sh`
+
+```bash
+#!/bin/bash
+
+# This script is used to ensure that k3s is actually running etcd (and not other databases like sqlite3)
+# before it checks the requirement
+set -eE
+
+handle_error() {
+ echo "false"
+}
+
+trap 'handle_error' ERR
+
+
+if [[ "$(journalctl -D /var/log/journal -u k3s | grep 'Managed etcd cluster initializing' | grep -v grep | wc -l)" -gt 0 ]]; then
+ case $1 in
+ "1.1.11")
+ echo $(stat -c %a /var/lib/rancher/k3s/server/db/etcd);;
+ "1.2.29")
+ echo $(journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'etcd-');;
+ "2.1")
+ echo $(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');;
+ "2.2")
+ echo $(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth');;
+ "2.3")
+ echo $(grep 'auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);;
+ "2.4")
+ echo $(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');;
+ "2.5")
+ echo $(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth');;
+ "2.6")
+ echo $(grep 'peer-auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);;
+ "2.7")
+ echo $(grep 'trusted-ca-file' /var/lib/rancher/k3s/server/db/etcd/config);;
+ esac
+else
+# If another database is running, return whatever is required to pass the scan
+ case $1 in
+ "1.1.11")
+ echo "700";;
+ "1.2.29")
+ echo "--etcd-certfile AND --etcd-keyfile";;
+ "2.1")
+ echo "cert-file AND key-file";;
+ "2.2")
+ echo "--client-cert-auth=true";;
+ "2.3")
+ echo "false";;
+ "2.4")
+ echo "peer-cert-file AND peer-key-file";;
+ "2.5")
+ echo "--client-cert-auth=true";;
+ "2.6")
+ echo "--peer-auto-tls=false";;
+ "2.7")
+ echo "--trusted-ca-file";;
+ esac
+fi
+
+```
+
+**Audit Execution:**
+
+```bash
+./check_for_k3s_etcd.sh 1.2.29
+```
+
+**Expected Result**:
+
+```console
+'--etcd-certfile' is present AND '--etcd-keyfile' is present
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:31:58 ip-172-31-3-32 k3s[45195]: time="2023-09-11T20:31:58Z" level=info msg="Running kube-apiserver --advertise-port=6443 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,k3s --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/k3s/server/logs/audit.log --audit-policy-file=/var/lib/rancher/k3s/server/audit.yaml --authorization-mode=Node,RBAC --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/k3s/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/k3s/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,PodSecurityPolicy,ServiceAccount --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/k3s/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/k3s/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/k3s/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.key --request-timeout=300s --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6444 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-account-lookup=true --service-account-signing-key-file=/var/lib/rancher/k3s/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.key"
+```
+
+### 1.2.27 Ensure that the --tls-cert-file and --tls-private-key-file arguments are set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the Kubernetes documentation and set up the TLS connection on the apiserver.
+Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the TLS certificate and private key file parameters.
+--tls-cert-file=
+--tls-private-key-file=
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep -A1 'Running kube-apiserver' | tail -n2
+```
+
+**Expected Result**:
+
+```console
+'--tls-cert-file' is present AND '--tls-private-key-file' is present
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:31:58 ip-172-31-3-32 k3s[45195]: time="2023-09-11T20:31:58Z" level=info msg="Running kube-apiserver --advertise-port=6443 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,k3s --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/k3s/server/logs/audit.log --audit-policy-file=/var/lib/rancher/k3s/server/audit.yaml --authorization-mode=Node,RBAC --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/k3s/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/k3s/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,PodSecurityPolicy,ServiceAccount --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/k3s/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/k3s/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/k3s/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.key --request-timeout=300s --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6444 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-account-lookup=true --service-account-signing-key-file=/var/lib/rancher/k3s/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.key" Sep 11 20:31:58 ip-172-31-3-32 k3s[45195]: time="2023-09-11T20:31:58Z" level=info msg="Running kube-scheduler --authentication-kubeconfig=/var/lib/rancher/k3s/server/cred/scheduler.kubeconfig --authorization-kubeconfig=/var/lib/rancher/k3s/server/cred/scheduler.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/kube-scheduler --kubeconfig=/var/lib/rancher/k3s/server/cred/scheduler.kubeconfig --profiling=false --secure-port=10259"
+```
+
+### 1.2.28 Ensure that the --client-ca-file argument is set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the Kubernetes documentation and set up the TLS connection on the apiserver.
+Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the client certificate authority file.
+--client-ca-file=
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'client-ca-file'
+```
+
+**Expected Result**:
+
+```console
+'--client-ca-file' is present
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:31:58 ip-172-31-3-32 k3s[45195]: time="2023-09-11T20:31:58Z" level=info msg="Running kube-apiserver --advertise-port=6443 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,k3s --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/k3s/server/logs/audit.log --audit-policy-file=/var/lib/rancher/k3s/server/audit.yaml --authorization-mode=Node,RBAC --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/k3s/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/k3s/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,PodSecurityPolicy,ServiceAccount --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/k3s/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/k3s/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/k3s/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.key --request-timeout=300s --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6444 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-account-lookup=true --service-account-signing-key-file=/var/lib/rancher/k3s/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.key"
+```
+
+### 1.2.29 Ensure that the --etcd-cafile argument is set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the Kubernetes documentation and set up the TLS connection between the apiserver and etcd.
+Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the etcd certificate authority file parameter.
+--etcd-cafile=
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'etcd-cafile'
+```
+
+**Expected Result**:
+
+```console
+'--etcd-cafile' is present
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:31:58 ip-172-31-3-32 k3s[45195]: time="2023-09-11T20:31:58Z" level=info msg="Running kube-apiserver --advertise-port=6443 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,k3s --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/k3s/server/logs/audit.log --audit-policy-file=/var/lib/rancher/k3s/server/audit.yaml --authorization-mode=Node,RBAC --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/k3s/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/k3s/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,PodSecurityPolicy,ServiceAccount --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/k3s/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/k3s/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/k3s/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.key --request-timeout=300s --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6444 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-account-lookup=true --service-account-signing-key-file=/var/lib/rancher/k3s/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.key"
+```
+
+### 1.2.30 Ensure that the --encryption-provider-config argument is set as appropriate (Manual)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the Kubernetes documentation and configure a EncryptionConfig file.
+Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the --encryption-provider-config parameter to the path of that file.
+For example, --encryption-provider-config=
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'encryption-provider-config'
+```
+
+**Expected Result**:
+
+```console
+'--encryption-provider-config' is present
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:31:58 ip-172-31-3-32 k3s[45195]: time="2023-09-11T20:31:58Z" level=info msg="Running kube-apiserver --advertise-port=6443 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,k3s --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/k3s/server/logs/audit.log --audit-policy-file=/var/lib/rancher/k3s/server/audit.yaml --authorization-mode=Node,RBAC --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/k3s/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/k3s/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,PodSecurityPolicy,ServiceAccount --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/k3s/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/k3s/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/k3s/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.key --request-timeout=300s --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6444 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-account-lookup=true --service-account-signing-key-file=/var/lib/rancher/k3s/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.key"
+```
+
+### 1.2.31 Ensure that encryption providers are appropriately configured (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Follow the Kubernetes documentation and configure a EncryptionConfig file.
+In this file, choose aescbc, kms or secretbox as the encryption provider.
+
+**Audit:**
+
+```bash
+grep aescbc /path/to/encryption-config.json
+```
+
+### 1.2.32 Ensure that the API Server only makes use of Strong Cryptographic Ciphers (Manual)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the below parameter.
+--tls-cipher-suites=TLS_AES_128_GCM_SHA256,TLS_AES_256_GCM_SHA384,TLS_CHACHA20_POLY1305_SHA256,
+TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
+TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
+TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256,
+TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
+TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,
+TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256,TLS_RSA_WITH_3DES_EDE_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA,
+TLS_RSA_WITH_AES_128_GCM_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_AES_256_GCM_SHA384
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'tls-cipher-suites'
+```
+
+**Expected Result**:
+
+```console
+'--tls-cipher-suites' contains valid elements from 'TLS_AES_128_GCM_SHA256,TLS_AES_256_GCM_SHA384,TLS_CHACHA20_POLY1305_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256,TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256,TLS_RSA_WITH_3DES_EDE_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_128_GCM_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_AES_256_GCM_SHA384'
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:31:58 ip-172-31-3-32 k3s[45195]: time="2023-09-11T20:31:58Z" level=info msg="Running kube-apiserver --advertise-port=6443 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,k3s --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/k3s/server/logs/audit.log --audit-policy-file=/var/lib/rancher/k3s/server/audit.yaml --authorization-mode=Node,RBAC --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/k3s/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/k3s/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,PodSecurityPolicy,ServiceAccount --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/k3s/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/k3s/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/k3s/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.key --request-timeout=300s --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6444 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-account-lookup=true --service-account-signing-key-file=/var/lib/rancher/k3s/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.key"
+```
+
+## 1.3 Controller Manager
+### 1.3.1 Ensure that the --terminated-pod-gc-threshold argument is set as appropriate (Manual)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the Controller Manager pod specification file /etc/kubernetes/manifests/kube-controller-manager.yaml
+on the control plane node and set the --terminated-pod-gc-threshold to an appropriate threshold,
+for example, --terminated-pod-gc-threshold=10
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kube-controller-manager' | tail -n1 | grep 'terminated-pod-gc-threshold'
+```
+
+**Expected Result**:
+
+```console
+'--terminated-pod-gc-threshold' is present
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:31:58 ip-172-31-3-32 k3s[45195]: time="2023-09-11T20:31:58Z" level=info msg="Running kube-controller-manager --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/k3s/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/k3s/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/k3s/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/k3s/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/k3s/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/k3s/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/k3s/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/k3s/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/k3s/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/k3s/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/k3s/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/k3s/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/k3s/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --terminated-pod-gc-threshold=10 --use-service-account-credentials=true"
+```
+
+### 1.3.2 Ensure that the --profiling argument is set to false (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the Controller Manager pod specification file /etc/kubernetes/manifests/kube-controller-manager.yaml
+on the control plane node and set the below parameter.
+--profiling=false
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kube-controller-manager' | tail -n1 | grep 'profiling'
+```
+
+**Expected Result**:
+
+```console
+'--profiling' is equal to 'false'
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:31:58 ip-172-31-3-32 k3s[45195]: time="2023-09-11T20:31:58Z" level=info msg="Running kube-controller-manager --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/k3s/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/k3s/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/k3s/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/k3s/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/k3s/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/k3s/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/k3s/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/k3s/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/k3s/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/k3s/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/k3s/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/k3s/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/k3s/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --terminated-pod-gc-threshold=10 --use-service-account-credentials=true"
+```
+
+### 1.3.3 Ensure that the --use-service-account-credentials argument is set to true (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the Controller Manager pod specification file /etc/kubernetes/manifests/kube-controller-manager.yaml
+on the control plane node to set the below parameter.
+--use-service-account-credentials=true
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kube-controller-manager' | tail -n1 | grep 'use-service-account-credentials'
+```
+
+**Expected Result**:
+
+```console
+'--use-service-account-credentials' is not equal to 'false'
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:31:58 ip-172-31-3-32 k3s[45195]: time="2023-09-11T20:31:58Z" level=info msg="Running kube-controller-manager --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/k3s/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/k3s/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/k3s/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/k3s/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/k3s/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/k3s/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/k3s/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/k3s/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/k3s/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/k3s/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/k3s/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/k3s/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/k3s/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --terminated-pod-gc-threshold=10 --use-service-account-credentials=true"
+```
+
+### 1.3.4 Ensure that the --service-account-private-key-file argument is set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the Controller Manager pod specification file /etc/kubernetes/manifests/kube-controller-manager.yaml
+on the control plane node and set the --service-account-private-key-file parameter
+to the private key file for service accounts.
+--service-account-private-key-file=
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kube-controller-manager' | tail -n1 | grep 'service-account-private-key-file'
+```
+
+**Expected Result**:
+
+```console
+'--service-account-private-key-file' is present
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:31:58 ip-172-31-3-32 k3s[45195]: time="2023-09-11T20:31:58Z" level=info msg="Running kube-controller-manager --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/k3s/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/k3s/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/k3s/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/k3s/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/k3s/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/k3s/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/k3s/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/k3s/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/k3s/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/k3s/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/k3s/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/k3s/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/k3s/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --terminated-pod-gc-threshold=10 --use-service-account-credentials=true"
+```
+
+### 1.3.5 Ensure that the --root-ca-file argument is set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the Controller Manager pod specification file /etc/kubernetes/manifests/kube-controller-manager.yaml
+on the control plane node and set the --root-ca-file parameter to the certificate bundle file`.
+--root-ca-file=
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kube-controller-manager' | tail -n1 | grep 'root-ca-file'
+```
+
+**Expected Result**:
+
+```console
+'--root-ca-file' is present
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:31:58 ip-172-31-3-32 k3s[45195]: time="2023-09-11T20:31:58Z" level=info msg="Running kube-controller-manager --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/k3s/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/k3s/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/k3s/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/k3s/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/k3s/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/k3s/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/k3s/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/k3s/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/k3s/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/k3s/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/k3s/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/k3s/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/k3s/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --terminated-pod-gc-threshold=10 --use-service-account-credentials=true"
+```
+
+### 1.3.6 Ensure that the RotateKubeletServerCertificate argument is set to true (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Edit the Controller Manager pod specification file /etc/kubernetes/manifests/kube-controller-manager.yaml
+on the control plane node and set the --feature-gates parameter to include RotateKubeletServerCertificate=true.
+--feature-gates=RotateKubeletServerCertificate=true
+
+### 1.3.7 Ensure that the --bind-address argument is set to 127.0.0.1 (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the Controller Manager pod specification file /etc/kubernetes/manifests/kube-controller-manager.yaml
+on the control plane node and ensure the correct value for the --bind-address parameter
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kube-controller-manager' | tail -n1 | grep 'bind-address'
+```
+
+**Expected Result**:
+
+```console
+'--bind-address' is equal to '127.0.0.1' OR '--bind-address' is not present
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:31:58 ip-172-31-3-32 k3s[45195]: time="2023-09-11T20:31:58Z" level=info msg="Running kube-controller-manager --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/k3s/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/k3s/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/k3s/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/k3s/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/k3s/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/k3s/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/k3s/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/k3s/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/k3s/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/k3s/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/k3s/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/k3s/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/k3s/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --terminated-pod-gc-threshold=10 --use-service-account-credentials=true"
+```
+
+## 1.4 Scheduler
+### 1.4.1 Ensure that the --profiling argument is set to false (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the Scheduler pod specification file /etc/kubernetes/manifests/kube-scheduler.yaml file
+on the control plane node and set the below parameter.
+--profiling=false
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kube-scheduler' | tail -n1
+```
+
+**Expected Result**:
+
+```console
+'--profiling' is equal to 'false'
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:31:58 ip-172-31-3-32 k3s[45195]: time="2023-09-11T20:31:58Z" level=info msg="Running kube-scheduler --authentication-kubeconfig=/var/lib/rancher/k3s/server/cred/scheduler.kubeconfig --authorization-kubeconfig=/var/lib/rancher/k3s/server/cred/scheduler.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/kube-scheduler --kubeconfig=/var/lib/rancher/k3s/server/cred/scheduler.kubeconfig --profiling=false --secure-port=10259"
+```
+
+### 1.4.2 Ensure that the --bind-address argument is set to 127.0.0.1 (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the Scheduler pod specification file /etc/kubernetes/manifests/kube-scheduler.yaml
+on the control plane node and ensure the correct value for the --bind-address parameter
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kube-scheduler' | tail -n1 | grep 'bind-address'
+```
+
+**Expected Result**:
+
+```console
+'--bind-address' is equal to '127.0.0.1' OR '--bind-address' is not present
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:31:58 ip-172-31-3-32 k3s[45195]: time="2023-09-11T20:31:58Z" level=info msg="Running kube-scheduler --authentication-kubeconfig=/var/lib/rancher/k3s/server/cred/scheduler.kubeconfig --authorization-kubeconfig=/var/lib/rancher/k3s/server/cred/scheduler.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/kube-scheduler --kubeconfig=/var/lib/rancher/k3s/server/cred/scheduler.kubeconfig --profiling=false --secure-port=10259"
+```
+
+## 2 Etcd Node Configuration
+### 2.1 Ensure that the --cert-file and --key-file arguments are set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the etcd service documentation and configure TLS encryption.
+Then, edit the etcd pod specification file /etc/kubernetes/manifests/etcd.yaml
+on the master node and set the below parameters.
+--cert-file=
+--key-file=
+
+**Audit Script:** `check_for_k3s_etcd.sh`
+
+```bash
+#!/bin/bash
+
+# This script is used to ensure that k3s is actually running etcd (and not other databases like sqlite3)
+# before it checks the requirement
+set -eE
+
+handle_error() {
+ echo "false"
+}
+
+trap 'handle_error' ERR
+
+
+if [[ "$(journalctl -D /var/log/journal -u k3s | grep 'Managed etcd cluster initializing' | grep -v grep | wc -l)" -gt 0 ]]; then
+ case $1 in
+ "1.1.11")
+ echo $(stat -c %a /var/lib/rancher/k3s/server/db/etcd);;
+ "1.2.29")
+ echo $(journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'etcd-');;
+ "2.1")
+ echo $(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');;
+ "2.2")
+ echo $(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth');;
+ "2.3")
+ echo $(grep 'auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);;
+ "2.4")
+ echo $(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');;
+ "2.5")
+ echo $(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth');;
+ "2.6")
+ echo $(grep 'peer-auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);;
+ "2.7")
+ echo $(grep 'trusted-ca-file' /var/lib/rancher/k3s/server/db/etcd/config);;
+ esac
+else
+# If another database is running, return whatever is required to pass the scan
+ case $1 in
+ "1.1.11")
+ echo "700";;
+ "1.2.29")
+ echo "--etcd-certfile AND --etcd-keyfile";;
+ "2.1")
+ echo "cert-file AND key-file";;
+ "2.2")
+ echo "--client-cert-auth=true";;
+ "2.3")
+ echo "false";;
+ "2.4")
+ echo "peer-cert-file AND peer-key-file";;
+ "2.5")
+ echo "--client-cert-auth=true";;
+ "2.6")
+ echo "--peer-auto-tls=false";;
+ "2.7")
+ echo "--trusted-ca-file";;
+ esac
+fi
+
+```
+
+**Audit Execution:**
+
+```bash
+./check_for_k3s_etcd.sh 2.1
+```
+
+**Expected Result**:
+
+```console
+'cert-file' is present AND 'key-file' is present
+```
+
+**Returned Value**:
+
+```console
+cert-file: /var/lib/rancher/k3s/server/tls/etcd/server-client.crt key-file: /var/lib/rancher/k3s/server/tls/etcd/server-client.key
+```
+
+### 2.2 Ensure that the --client-cert-auth argument is set to true (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the etcd pod specification file /var/lib/rancher/k3s/server/db/etcd/config on the master
+node and set the below parameter.
+--client-cert-auth="true"
+
+**Audit Script:** `check_for_k3s_etcd.sh`
+
+```bash
+#!/bin/bash
+
+# This script is used to ensure that k3s is actually running etcd (and not other databases like sqlite3)
+# before it checks the requirement
+set -eE
+
+handle_error() {
+ echo "false"
+}
+
+trap 'handle_error' ERR
+
+
+if [[ "$(journalctl -D /var/log/journal -u k3s | grep 'Managed etcd cluster initializing' | grep -v grep | wc -l)" -gt 0 ]]; then
+ case $1 in
+ "1.1.11")
+ echo $(stat -c %a /var/lib/rancher/k3s/server/db/etcd);;
+ "1.2.29")
+ echo $(journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'etcd-');;
+ "2.1")
+ echo $(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');;
+ "2.2")
+ echo $(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth');;
+ "2.3")
+ echo $(grep 'auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);;
+ "2.4")
+ echo $(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');;
+ "2.5")
+ echo $(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth');;
+ "2.6")
+ echo $(grep 'peer-auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);;
+ "2.7")
+ echo $(grep 'trusted-ca-file' /var/lib/rancher/k3s/server/db/etcd/config);;
+ esac
+else
+# If another database is running, return whatever is required to pass the scan
+ case $1 in
+ "1.1.11")
+ echo "700";;
+ "1.2.29")
+ echo "--etcd-certfile AND --etcd-keyfile";;
+ "2.1")
+ echo "cert-file AND key-file";;
+ "2.2")
+ echo "--client-cert-auth=true";;
+ "2.3")
+ echo "false";;
+ "2.4")
+ echo "peer-cert-file AND peer-key-file";;
+ "2.5")
+ echo "--client-cert-auth=true";;
+ "2.6")
+ echo "--peer-auto-tls=false";;
+ "2.7")
+ echo "--trusted-ca-file";;
+ esac
+fi
+
+```
+
+**Audit Execution:**
+
+```bash
+./check_for_k3s_etcd.sh 2.2
+```
+
+**Expected Result**:
+
+```console
+'--client-cert-auth' is present OR 'client-cert-auth' is equal to 'true'
+```
+
+**Returned Value**:
+
+```console
+client-cert-auth: true
+```
+
+### 2.3 Ensure that the --auto-tls argument is not set to true (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the etcd pod specification file /var/lib/rancher/k3s/server/db/etcd/config on the master
+node and either remove the --auto-tls parameter or set it to false.
+ --auto-tls=false
+
+**Audit Script:** `check_for_k3s_etcd.sh`
+
+```bash
+#!/bin/bash
+
+# This script is used to ensure that k3s is actually running etcd (and not other databases like sqlite3)
+# before it checks the requirement
+set -eE
+
+handle_error() {
+ echo "false"
+}
+
+trap 'handle_error' ERR
+
+
+if [[ "$(journalctl -D /var/log/journal -u k3s | grep 'Managed etcd cluster initializing' | grep -v grep | wc -l)" -gt 0 ]]; then
+ case $1 in
+ "1.1.11")
+ echo $(stat -c %a /var/lib/rancher/k3s/server/db/etcd);;
+ "1.2.29")
+ echo $(journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'etcd-');;
+ "2.1")
+ echo $(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');;
+ "2.2")
+ echo $(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth');;
+ "2.3")
+ echo $(grep 'auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);;
+ "2.4")
+ echo $(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');;
+ "2.5")
+ echo $(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth');;
+ "2.6")
+ echo $(grep 'peer-auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);;
+ "2.7")
+ echo $(grep 'trusted-ca-file' /var/lib/rancher/k3s/server/db/etcd/config);;
+ esac
+else
+# If another database is running, return whatever is required to pass the scan
+ case $1 in
+ "1.1.11")
+ echo "700";;
+ "1.2.29")
+ echo "--etcd-certfile AND --etcd-keyfile";;
+ "2.1")
+ echo "cert-file AND key-file";;
+ "2.2")
+ echo "--client-cert-auth=true";;
+ "2.3")
+ echo "false";;
+ "2.4")
+ echo "peer-cert-file AND peer-key-file";;
+ "2.5")
+ echo "--client-cert-auth=true";;
+ "2.6")
+ echo "--peer-auto-tls=false";;
+ "2.7")
+ echo "--trusted-ca-file";;
+ esac
+fi
+
+```
+
+**Audit Execution:**
+
+```bash
+./check_for_k3s_etcd.sh 2.3
+```
+
+**Expected Result**:
+
+```console
+'ETCD_AUTO_TLS' is not present OR 'ETCD_AUTO_TLS' is present
+```
+
+**Returned Value**:
+
+```console
+error: process ID list syntax error Usage: ps [options] Try 'ps --help ' or 'ps --help ' for additional help text. For more details see ps(1). cat: /proc//environ: No such file or directory
+```
+
+### 2.4 Ensure that the --peer-cert-file and --peer-key-file arguments are set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the etcd service documentation and configure peer TLS encryption as appropriate
+for your etcd cluster.
+Then, edit the etcd pod specification file /var/lib/rancher/k3s/server/db/etcd/config on the
+master node and set the below parameters.
+--peer-client-file=
+--peer-key-file=
+
+**Audit Script:** `check_for_k3s_etcd.sh`
+
+```bash
+#!/bin/bash
+
+# This script is used to ensure that k3s is actually running etcd (and not other databases like sqlite3)
+# before it checks the requirement
+set -eE
+
+handle_error() {
+ echo "false"
+}
+
+trap 'handle_error' ERR
+
+
+if [[ "$(journalctl -D /var/log/journal -u k3s | grep 'Managed etcd cluster initializing' | grep -v grep | wc -l)" -gt 0 ]]; then
+ case $1 in
+ "1.1.11")
+ echo $(stat -c %a /var/lib/rancher/k3s/server/db/etcd);;
+ "1.2.29")
+ echo $(journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'etcd-');;
+ "2.1")
+ echo $(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');;
+ "2.2")
+ echo $(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth');;
+ "2.3")
+ echo $(grep 'auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);;
+ "2.4")
+ echo $(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');;
+ "2.5")
+ echo $(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth');;
+ "2.6")
+ echo $(grep 'peer-auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);;
+ "2.7")
+ echo $(grep 'trusted-ca-file' /var/lib/rancher/k3s/server/db/etcd/config);;
+ esac
+else
+# If another database is running, return whatever is required to pass the scan
+ case $1 in
+ "1.1.11")
+ echo "700";;
+ "1.2.29")
+ echo "--etcd-certfile AND --etcd-keyfile";;
+ "2.1")
+ echo "cert-file AND key-file";;
+ "2.2")
+ echo "--client-cert-auth=true";;
+ "2.3")
+ echo "false";;
+ "2.4")
+ echo "peer-cert-file AND peer-key-file";;
+ "2.5")
+ echo "--client-cert-auth=true";;
+ "2.6")
+ echo "--peer-auto-tls=false";;
+ "2.7")
+ echo "--trusted-ca-file";;
+ esac
+fi
+
+```
+
+**Audit Execution:**
+
+```bash
+./check_for_k3s_etcd.sh 2.4
+```
+
+**Expected Result**:
+
+```console
+'cert-file' is present AND 'key-file' is present
+```
+
+**Returned Value**:
+
+```console
+cert-file: /var/lib/rancher/k3s/server/tls/etcd/peer-server-client.crt key-file: /var/lib/rancher/k3s/server/tls/etcd/peer-server-client.key
+```
+
+### 2.5 Ensure that the --peer-client-cert-auth argument is set to true (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the etcd pod specification file /var/lib/rancher/k3s/server/db/etcd/config on the master
+node and set the below parameter.
+--peer-client-cert-auth=true
+
+**Audit Script:** `check_for_k3s_etcd.sh`
+
+```bash
+#!/bin/bash
+
+# This script is used to ensure that k3s is actually running etcd (and not other databases like sqlite3)
+# before it checks the requirement
+set -eE
+
+handle_error() {
+ echo "false"
+}
+
+trap 'handle_error' ERR
+
+
+if [[ "$(journalctl -D /var/log/journal -u k3s | grep 'Managed etcd cluster initializing' | grep -v grep | wc -l)" -gt 0 ]]; then
+ case $1 in
+ "1.1.11")
+ echo $(stat -c %a /var/lib/rancher/k3s/server/db/etcd);;
+ "1.2.29")
+ echo $(journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'etcd-');;
+ "2.1")
+ echo $(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');;
+ "2.2")
+ echo $(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth');;
+ "2.3")
+ echo $(grep 'auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);;
+ "2.4")
+ echo $(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');;
+ "2.5")
+ echo $(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth');;
+ "2.6")
+ echo $(grep 'peer-auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);;
+ "2.7")
+ echo $(grep 'trusted-ca-file' /var/lib/rancher/k3s/server/db/etcd/config);;
+ esac
+else
+# If another database is running, return whatever is required to pass the scan
+ case $1 in
+ "1.1.11")
+ echo "700";;
+ "1.2.29")
+ echo "--etcd-certfile AND --etcd-keyfile";;
+ "2.1")
+ echo "cert-file AND key-file";;
+ "2.2")
+ echo "--client-cert-auth=true";;
+ "2.3")
+ echo "false";;
+ "2.4")
+ echo "peer-cert-file AND peer-key-file";;
+ "2.5")
+ echo "--client-cert-auth=true";;
+ "2.6")
+ echo "--peer-auto-tls=false";;
+ "2.7")
+ echo "--trusted-ca-file";;
+ esac
+fi
+
+```
+
+**Audit Execution:**
+
+```bash
+./check_for_k3s_etcd.sh 2.5
+```
+
+**Expected Result**:
+
+```console
+'--client-cert-auth' is present OR 'client-cert-auth' is equal to 'true'
+```
+
+**Returned Value**:
+
+```console
+client-cert-auth: true
+```
+
+### 2.6 Ensure that the --peer-auto-tls argument is not set to true (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the etcd pod specification file /var/lib/rancher/k3s/server/db/etcd/config on the master
+node and either remove the --peer-auto-tls parameter or set it to false.
+--peer-auto-tls=false
+
+**Audit Script:** `check_for_k3s_etcd.sh`
+
+```bash
+#!/bin/bash
+
+# This script is used to ensure that k3s is actually running etcd (and not other databases like sqlite3)
+# before it checks the requirement
+set -eE
+
+handle_error() {
+ echo "false"
+}
+
+trap 'handle_error' ERR
+
+
+if [[ "$(journalctl -D /var/log/journal -u k3s | grep 'Managed etcd cluster initializing' | grep -v grep | wc -l)" -gt 0 ]]; then
+ case $1 in
+ "1.1.11")
+ echo $(stat -c %a /var/lib/rancher/k3s/server/db/etcd);;
+ "1.2.29")
+ echo $(journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'etcd-');;
+ "2.1")
+ echo $(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');;
+ "2.2")
+ echo $(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth');;
+ "2.3")
+ echo $(grep 'auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);;
+ "2.4")
+ echo $(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');;
+ "2.5")
+ echo $(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth');;
+ "2.6")
+ echo $(grep 'peer-auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);;
+ "2.7")
+ echo $(grep 'trusted-ca-file' /var/lib/rancher/k3s/server/db/etcd/config);;
+ esac
+else
+# If another database is running, return whatever is required to pass the scan
+ case $1 in
+ "1.1.11")
+ echo "700";;
+ "1.2.29")
+ echo "--etcd-certfile AND --etcd-keyfile";;
+ "2.1")
+ echo "cert-file AND key-file";;
+ "2.2")
+ echo "--client-cert-auth=true";;
+ "2.3")
+ echo "false";;
+ "2.4")
+ echo "peer-cert-file AND peer-key-file";;
+ "2.5")
+ echo "--client-cert-auth=true";;
+ "2.6")
+ echo "--peer-auto-tls=false";;
+ "2.7")
+ echo "--trusted-ca-file";;
+ esac
+fi
+
+```
+
+**Audit Execution:**
+
+```bash
+./check_for_k3s_etcd.sh 2.6
+```
+
+**Expected Result**:
+
+```console
+'ETCD_PEER_AUTO_TLS' is not present OR 'ETCD_PEER_AUTO_TLS' is present
+```
+
+**Returned Value**:
+
+```console
+error: process ID list syntax error Usage: ps [options] Try 'ps --help ' or 'ps --help ' for additional help text. For more details see ps(1). cat: /proc//environ: No such file or directory
+```
+
+### 2.7 Ensure that a unique Certificate Authority is used for etcd (Manual)
+
+
+**Result:** pass
+
+**Remediation:**
+[Manual test]
+Follow the etcd documentation and create a dedicated certificate authority setup for the
+etcd service.
+Then, edit the etcd pod specification file /var/lib/rancher/k3s/server/db/etcd/config on the
+master node and set the below parameter.
+--trusted-ca-file=
+
+**Audit Script:** `check_for_k3s_etcd.sh`
+
+```bash
+#!/bin/bash
+
+# This script is used to ensure that k3s is actually running etcd (and not other databases like sqlite3)
+# before it checks the requirement
+set -eE
+
+handle_error() {
+ echo "false"
+}
+
+trap 'handle_error' ERR
+
+
+if [[ "$(journalctl -D /var/log/journal -u k3s | grep 'Managed etcd cluster initializing' | grep -v grep | wc -l)" -gt 0 ]]; then
+ case $1 in
+ "1.1.11")
+ echo $(stat -c %a /var/lib/rancher/k3s/server/db/etcd);;
+ "1.2.29")
+ echo $(journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'etcd-');;
+ "2.1")
+ echo $(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');;
+ "2.2")
+ echo $(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth');;
+ "2.3")
+ echo $(grep 'auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);;
+ "2.4")
+ echo $(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');;
+ "2.5")
+ echo $(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth');;
+ "2.6")
+ echo $(grep 'peer-auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);;
+ "2.7")
+ echo $(grep 'trusted-ca-file' /var/lib/rancher/k3s/server/db/etcd/config);;
+ esac
+else
+# If another database is running, return whatever is required to pass the scan
+ case $1 in
+ "1.1.11")
+ echo "700";;
+ "1.2.29")
+ echo "--etcd-certfile AND --etcd-keyfile";;
+ "2.1")
+ echo "cert-file AND key-file";;
+ "2.2")
+ echo "--client-cert-auth=true";;
+ "2.3")
+ echo "false";;
+ "2.4")
+ echo "peer-cert-file AND peer-key-file";;
+ "2.5")
+ echo "--client-cert-auth=true";;
+ "2.6")
+ echo "--peer-auto-tls=false";;
+ "2.7")
+ echo "--trusted-ca-file";;
+ esac
+fi
+
+```
+
+**Audit Execution:**
+
+```bash
+./check_for_k3s_etcd.sh 2.7
+```
+
+**Expected Result**:
+
+```console
+'trusted-ca-file' is present
+```
+
+**Returned Value**:
+
+```console
+trusted-ca-file: /var/lib/rancher/k3s/server/tls/etcd/server-ca.crt trusted-ca-file: /var/lib/rancher/k3s/server/tls/etcd/peer-ca.crt
+```
+
+## 3.1 Authentication and Authorization
+### 3.1.1 Client certificate authentication should not be used for users (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Alternative mechanisms provided by Kubernetes such as the use of OIDC should be
+implemented in place of client certificates.
+
+## 3.2 Logging
+### 3.2.1 Ensure that a minimal audit policy is created (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Create an audit policy file for your cluster.
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'audit-policy-file'
+```
+
+### 3.2.2 Ensure that the audit policy covers key security concerns (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Review the audit policy provided for the cluster and ensure that it covers
+at least the following areas,
+- Access to Secrets managed by the cluster. Care should be taken to only
+ log Metadata for requests to Secrets, ConfigMaps, and TokenReviews, in
+ order to avoid risk of logging sensitive data.
+- Modification of Pod and Deployment objects.
+- Use of `pods/exec`, `pods/portforward`, `pods/proxy` and `services/proxy`.
+For most requests, minimally logging at the Metadata level is recommended
+(the most basic level of logging).
+
+## 4.1 Worker Node Configuration Files
+### 4.1.1 Ensure that the kubelet service file permissions are set to 600 or more restrictive (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the each worker node.
+For example, chmod 600 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
+
+### 4.1.2 Ensure that the kubelet service file ownership is set to root:root (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the each worker node.
+For example,
+chown root:root /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
+
+### 4.1.3 If proxy kubeconfig file exists ensure permissions are set to 600 or more restrictive (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the each worker node.
+For example,
+chmod 600 /var/lib/rancher/k3s/agent/kubeproxy.kubeconfig
+
+**Audit:**
+
+```bash
+stat -c %a /var/lib/rancher/k3s/agent/kubeproxy.kubeconfig
+```
+
+**Expected Result**:
+
+```console
+'permissions' is present
+```
+
+**Returned Value**:
+
+```console
+600
+```
+
+### 4.1.4 If proxy kubeconfig file exists ensure ownership is set to root:root (Manual)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the each worker node.
+For example, chown root:root /var/lib/rancher/k3s/agent/kubeproxy.kubeconfig
+
+**Audit:**
+
+```bash
+stat -c %U:%G /var/lib/rancher/k3s/agent/kubeproxy.kubeconfig
+```
+
+**Expected Result**:
+
+```console
+'root:root' is present
+```
+
+**Returned Value**:
+
+```console
+root:root
+```
+
+### 4.1.5 Ensure that the --kubeconfig kubelet.conf file permissions are set to 600 or more restrictive (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the each worker node.
+For example,
+chmod 600 /var/lib/rancher/k3s/server/cred/admin.kubeconfig
+
+**Audit:**
+
+```bash
+stat -c %a /var/lib/rancher/k3s/agent/kubelet.kubeconfig
+```
+
+**Expected Result**:
+
+```console
+'600' is equal to '600'
+```
+
+**Returned Value**:
+
+```console
+600
+```
+
+### 4.1.6 Ensure that the --kubeconfig kubelet.conf file ownership is set to root:root (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the each worker node.
+For example,
+chown root:root /var/lib/rancher/k3s/server/cred/admin.kubeconfig
+
+**Audit:**
+
+```bash
+stat -c %U:%G /var/lib/rancher/k3s/agent/kubelet.kubeconfig
+```
+
+**Expected Result**:
+
+```console
+'root:root' is equal to 'root:root'
+```
+
+**Returned Value**:
+
+```console
+root:root
+```
+
+### 4.1.7 Ensure that the certificate authorities file permissions are set to 600 or more restrictive (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Run the following command to modify the file permissions of the
+--client-ca-file chmod 600
+
+**Audit:**
+
+```bash
+stat -c %a /var/lib/rancher/k3s/server/tls/server-ca.crt
+```
+
+**Expected Result**:
+
+```console
+'permissions' is present
+```
+
+**Returned Value**:
+
+```console
+644
+```
+
+### 4.1.8 Ensure that the client certificate authorities file ownership is set to root:root (Manual)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the following command to modify the ownership of the --client-ca-file.
+chown root:root
+
+**Audit:**
+
+```bash
+stat -c %U:%G /var/lib/rancher/k3s/server/tls/client-ca.crt
+```
+
+**Expected Result**:
+
+```console
+'root:root' is equal to 'root:root'
+```
+
+**Returned Value**:
+
+```console
+root:root
+```
+
+### 4.1.9 If the kubelet config.yaml configuration file is being used validate permissions set to 600 or more restrictive (Manual)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Run the following command (using the config file location identified in the Audit step)
+chmod 600 /var/lib/kubelet/config.yaml
+
+### 4.1.10 If the kubelet config.yaml configuration file is being used validate file ownership is set to root:root (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Run the following command (using the config file location identified in the Audit step)
+chown root:root /var/lib/kubelet/config.yaml
+
+## 4.2 Kubelet
+### 4.2.1 Ensure that the --anonymous-auth argument is set to false (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+If using a Kubelet config file, edit the file to set `authentication: anonymous: enabled` to
+`false`.
+If using executable arguments, edit the kubelet service file
+/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
+set the below parameter in KUBELET_SYSTEM_PODS_ARGS variable.
+`--anonymous-auth=false`
+Based on your system, restart the kubelet service. For example,
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+**Audit:**
+
+```bash
+/bin/sh -c 'if test $(journalctl -D /var/log/journal -u k3s | grep "Running kube-apiserver" | wc -l) -gt 0; then journalctl -D /var/log/journal -u k3s | grep "Running kube-apiserver" | tail -n1 | grep "anonymous-auth" | grep -v grep; else echo "--anonymous-auth=false"; fi'
+```
+
+**Expected Result**:
+
+```console
+'--anonymous-auth' is equal to 'false'
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:31:58 ip-172-31-3-32 k3s[45195]: time="2023-09-11T20:31:58Z" level=info msg="Running kube-apiserver --advertise-port=6443 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,k3s --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/k3s/server/logs/audit.log --audit-policy-file=/var/lib/rancher/k3s/server/audit.yaml --authorization-mode=Node,RBAC --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/k3s/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/k3s/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,PodSecurityPolicy,ServiceAccount --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/k3s/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/k3s/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/k3s/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.key --request-timeout=300s --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6444 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-account-lookup=true --service-account-signing-key-file=/var/lib/rancher/k3s/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.key"
+```
+
+### 4.2.2 Ensure that the --authorization-mode argument is not set to AlwaysAllow (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+If using a Kubelet config file, edit the file to set `authorization.mode` to Webhook. If
+using executable arguments, edit the kubelet service file
+/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
+set the below parameter in KUBELET_AUTHZ_ARGS variable.
+--authorization-mode=Webhook
+Based on your system, restart the kubelet service. For example,
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+**Audit:**
+
+```bash
+/bin/sh -c 'if test $(journalctl -D /var/log/journal -u k3s | grep "Running kube-apiserver" | wc -l) -gt 0; then journalctl -D /var/log/journal -u k3s | grep "Running kube-apiserver" | tail -n1 | grep "authorization-mode" | grep -v grep; else echo "--authorization-mode=Webhook"; fi'
+```
+
+**Expected Result**:
+
+```console
+'--authorization-mode' does not have 'AlwaysAllow'
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:31:58 ip-172-31-3-32 k3s[45195]: time="2023-09-11T20:31:58Z" level=info msg="Running kube-apiserver --advertise-port=6443 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,k3s --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/k3s/server/logs/audit.log --audit-policy-file=/var/lib/rancher/k3s/server/audit.yaml --authorization-mode=Node,RBAC --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/k3s/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/k3s/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,PodSecurityPolicy,ServiceAccount --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/k3s/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/k3s/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/k3s/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.key --request-timeout=300s --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6444 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-account-lookup=true --service-account-signing-key-file=/var/lib/rancher/k3s/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.key"
+```
+
+### 4.2.3 Ensure that the --client-ca-file argument is set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+If using a Kubelet config file, edit the file to set `authentication.x509.clientCAFile` to
+the location of the client CA file.
+If using command line arguments, edit the kubelet service file
+/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
+set the below parameter in KUBELET_AUTHZ_ARGS variable.
+--client-ca-file=
+Based on your system, restart the kubelet service. For example,
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+**Audit:**
+
+```bash
+/bin/sh -c 'if test $(journalctl -D /var/log/journal -u k3s | grep "Running kube-apiserver" | wc -l) -gt 0; then journalctl -D /var/log/journal -u k3s | grep "Running kube-apiserver" | tail -n1 | grep "client-ca-file" | grep -v grep; else echo "--client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt"; fi'
+```
+
+**Expected Result**:
+
+```console
+'--client-ca-file' is present
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:31:58 ip-172-31-3-32 k3s[45195]: time="2023-09-11T20:31:58Z" level=info msg="Running kube-apiserver --advertise-port=6443 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,k3s --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/k3s/server/logs/audit.log --audit-policy-file=/var/lib/rancher/k3s/server/audit.yaml --authorization-mode=Node,RBAC --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/k3s/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/k3s/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,PodSecurityPolicy,ServiceAccount --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/k3s/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/k3s/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/k3s/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.key --request-timeout=300s --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6444 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-account-lookup=true --service-account-signing-key-file=/var/lib/rancher/k3s/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.key"
+```
+
+### 4.2.4 Verify that the --read-only-port argument is set to 0 (Manual)
+
+
+**Result:** pass
+
+**Remediation:**
+If using a Kubelet config file, edit the file to set `readOnlyPort` to 0.
+If using command line arguments, edit the kubelet service file
+/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
+set the below parameter in KUBELET_SYSTEM_PODS_ARGS variable.
+--read-only-port=0
+Based on your system, restart the kubelet service. For example,
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kubelet' | tail -n1 | grep 'read-only-port'
+```
+
+**Expected Result**:
+
+```console
+'--read-only-port' is equal to '0' OR '--read-only-port' is not present
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:32:02 ip-172-31-3-32 k3s[45195]: time="2023-09-11T20:32:02Z" level=info msg="Running kubelet --address=0.0.0.0 --allowed-unsafe-sysctls=net.ipv4.ip_forward,net.ipv6.conf.all.forwarding --anonymous-auth=false --authentication-token-webhook=true --authorization-mode=Webhook --cgroup-driver=systemd --client-ca-file=/var/lib/rancher/k3s/agent/client-ca.crt --cloud-provider=external --cluster-dns=10.43.0.10 --cluster-domain=cluster.local --container-runtime-endpoint=unix:///run/k3s/containerd/containerd.sock --containerd=/run/k3s/containerd/containerd.sock --eviction-hard=imagefs.available<5%,nodefs.available<5% --eviction-minimum-reclaim=imagefs.available=10%,nodefs.available=10% --fail-swap-on=false --healthz-bind-address=127.0.0.1 --hostname-override=ip-172-31-3-32 --kubeconfig=/var/lib/rancher/k3s/agent/kubelet.kubeconfig --make-iptables-util-chains=true --node-labels=cattle.io/os=linux,rke.cattle.io/machine=cc5faddd-9c87-4a04-97c2-dcf4cbcbe10f --pod-infra-container-image=rancher/mirrored-pause:3.6 --pod-manifest-path=/var/lib/rancher/k3s/agent/pod-manifests --protect-kernel-defaults=true --read-only-port=0 --resolv-conf=/run/systemd/resolve/resolv.conf --serialize-image-pulls=false --tls-cert-file=/var/lib/rancher/k3s/agent/serving-kubelet.crt --tls-private-key-file=/var/lib/rancher/k3s/agent/serving-kubelet.key"
+```
+
+### 4.2.5 Ensure that the --streaming-connection-idle-timeout argument is not set to 0 (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+If using a Kubelet config file, edit the file to set `streamingConnectionIdleTimeout` to a
+value other than 0.
+If using command line arguments, edit the kubelet service file
+/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
+set the below parameter in KUBELET_SYSTEM_PODS_ARGS variable.
+--streaming-connection-idle-timeout=5m
+Based on your system, restart the kubelet service. For example,
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kubelet' | tail -n1 | grep 'streaming-connection-idle-timeout'
+```
+
+### 4.2.6 Ensure that the --protect-kernel-defaults argument is set to true (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+If using a Kubelet config file, edit the file to set `protectKernelDefaults` to `true`.
+If using command line arguments, edit the kubelet service file
+/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
+set the below parameter in KUBELET_SYSTEM_PODS_ARGS variable.
+--protect-kernel-defaults=true
+Based on your system, restart the kubelet service. For example:
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kubelet' | tail -n1 | grep 'protect-kernel-defaults'
+```
+
+**Expected Result**:
+
+```console
+'--protect-kernel-defaults' is equal to 'true'
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:32:02 ip-172-31-3-32 k3s[45195]: time="2023-09-11T20:32:02Z" level=info msg="Running kubelet --address=0.0.0.0 --allowed-unsafe-sysctls=net.ipv4.ip_forward,net.ipv6.conf.all.forwarding --anonymous-auth=false --authentication-token-webhook=true --authorization-mode=Webhook --cgroup-driver=systemd --client-ca-file=/var/lib/rancher/k3s/agent/client-ca.crt --cloud-provider=external --cluster-dns=10.43.0.10 --cluster-domain=cluster.local --container-runtime-endpoint=unix:///run/k3s/containerd/containerd.sock --containerd=/run/k3s/containerd/containerd.sock --eviction-hard=imagefs.available<5%,nodefs.available<5% --eviction-minimum-reclaim=imagefs.available=10%,nodefs.available=10% --fail-swap-on=false --healthz-bind-address=127.0.0.1 --hostname-override=ip-172-31-3-32 --kubeconfig=/var/lib/rancher/k3s/agent/kubelet.kubeconfig --make-iptables-util-chains=true --node-labels=cattle.io/os=linux,rke.cattle.io/machine=cc5faddd-9c87-4a04-97c2-dcf4cbcbe10f --pod-infra-container-image=rancher/mirrored-pause:3.6 --pod-manifest-path=/var/lib/rancher/k3s/agent/pod-manifests --protect-kernel-defaults=true --read-only-port=0 --resolv-conf=/run/systemd/resolve/resolv.conf --serialize-image-pulls=false --tls-cert-file=/var/lib/rancher/k3s/agent/serving-kubelet.crt --tls-private-key-file=/var/lib/rancher/k3s/agent/serving-kubelet.key"
+```
+
+### 4.2.7 Ensure that the --make-iptables-util-chains argument is set to true (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+If using a Kubelet config file, edit the file to set `makeIPTablesUtilChains` to `true`.
+If using command line arguments, edit the kubelet service file
+/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
+remove the --make-iptables-util-chains argument from the
+KUBELET_SYSTEM_PODS_ARGS variable.
+Based on your system, restart the kubelet service. For example:
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kubelet' | tail -n1 | grep 'make-iptables-util-chains'
+```
+
+**Expected Result**:
+
+```console
+'--make-iptables-util-chains' is equal to 'true' OR '--make-iptables-util-chains' is not present
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:32:02 ip-172-31-3-32 k3s[45195]: time="2023-09-11T20:32:02Z" level=info msg="Running kubelet --address=0.0.0.0 --allowed-unsafe-sysctls=net.ipv4.ip_forward,net.ipv6.conf.all.forwarding --anonymous-auth=false --authentication-token-webhook=true --authorization-mode=Webhook --cgroup-driver=systemd --client-ca-file=/var/lib/rancher/k3s/agent/client-ca.crt --cloud-provider=external --cluster-dns=10.43.0.10 --cluster-domain=cluster.local --container-runtime-endpoint=unix:///run/k3s/containerd/containerd.sock --containerd=/run/k3s/containerd/containerd.sock --eviction-hard=imagefs.available<5%,nodefs.available<5% --eviction-minimum-reclaim=imagefs.available=10%,nodefs.available=10% --fail-swap-on=false --healthz-bind-address=127.0.0.1 --hostname-override=ip-172-31-3-32 --kubeconfig=/var/lib/rancher/k3s/agent/kubelet.kubeconfig --make-iptables-util-chains=true --node-labels=cattle.io/os=linux,rke.cattle.io/machine=cc5faddd-9c87-4a04-97c2-dcf4cbcbe10f --pod-infra-container-image=rancher/mirrored-pause:3.6 --pod-manifest-path=/var/lib/rancher/k3s/agent/pod-manifests --protect-kernel-defaults=true --read-only-port=0 --resolv-conf=/run/systemd/resolve/resolv.conf --serialize-image-pulls=false --tls-cert-file=/var/lib/rancher/k3s/agent/serving-kubelet.crt --tls-private-key-file=/var/lib/rancher/k3s/agent/serving-kubelet.key"
+```
+
+### 4.2.8 Ensure that the --hostname-override argument is not set (Manual)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Edit the kubelet service file /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
+on each worker node and remove the --hostname-override argument from the
+KUBELET_SYSTEM_PODS_ARGS variable.
+Based on your system, restart the kubelet service. For example,
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+### 4.2.9 Ensure that the eventRecordQPS argument is set to a level which ensures appropriate event capture (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+If using a Kubelet config file, edit the file to set `eventRecordQPS` to an appropriate level.
+If using command line arguments, edit the kubelet service file
+/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
+set the below parameter in KUBELET_SYSTEM_PODS_ARGS variable.
+Based on your system, restart the kubelet service. For example,
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+**Audit:**
+
+```bash
+/bin/ps -fC containerd
+```
+
+**Audit Config:**
+
+```bash
+/bin/cat /var/lib/kubelet/config.yaml
+```
+
+**Expected Result**:
+
+```console
+'--event-qps' is present
+```
+
+**Returned Value**:
+
+```console
+UID PID PPID C STIME TTY TIME CMD root 410 1 0 Sep11 ? 00:01:50 /usr/bin/containerd root 45213 45195 3 Sep11 ? 00:45:15 containerd -c /var/lib/rancher/k3s/agent/etc/containerd/config.toml -a /run/k3s/containerd/containerd.sock --state /run/k3s/containerd --root /var/lib/rancher/k3s/agent/containerd
+```
+
+### 4.2.10 Ensure that the --tls-cert-file and --tls-private-key-file arguments are set as appropriate (Manual)
+
+
+**Result:** pass
+
+**Remediation:**
+If using a Kubelet config file, edit the file to set `tlsCertFile` to the location
+of the certificate file to use to identify this Kubelet, and `tlsPrivateKeyFile`
+to the location of the corresponding private key file.
+If using command line arguments, edit the kubelet service file
+/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
+set the below parameters in KUBELET_CERTIFICATE_ARGS variable.
+--tls-cert-file=
+--tls-private-key-file=
+Based on your system, restart the kubelet service. For example,
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kubelet' | tail -n1
+```
+
+**Expected Result**:
+
+```console
+'--tls-cert-file' is present AND '--tls-private-key-file' is present
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:32:02 ip-172-31-3-32 k3s[45195]: time="2023-09-11T20:32:02Z" level=info msg="Running kubelet --address=0.0.0.0 --allowed-unsafe-sysctls=net.ipv4.ip_forward,net.ipv6.conf.all.forwarding --anonymous-auth=false --authentication-token-webhook=true --authorization-mode=Webhook --cgroup-driver=systemd --client-ca-file=/var/lib/rancher/k3s/agent/client-ca.crt --cloud-provider=external --cluster-dns=10.43.0.10 --cluster-domain=cluster.local --container-runtime-endpoint=unix:///run/k3s/containerd/containerd.sock --containerd=/run/k3s/containerd/containerd.sock --eviction-hard=imagefs.available<5%,nodefs.available<5% --eviction-minimum-reclaim=imagefs.available=10%,nodefs.available=10% --fail-swap-on=false --healthz-bind-address=127.0.0.1 --hostname-override=ip-172-31-3-32 --kubeconfig=/var/lib/rancher/k3s/agent/kubelet.kubeconfig --make-iptables-util-chains=true --node-labels=cattle.io/os=linux,rke.cattle.io/machine=cc5faddd-9c87-4a04-97c2-dcf4cbcbe10f --pod-infra-container-image=rancher/mirrored-pause:3.6 --pod-manifest-path=/var/lib/rancher/k3s/agent/pod-manifests --protect-kernel-defaults=true --read-only-port=0 --resolv-conf=/run/systemd/resolve/resolv.conf --serialize-image-pulls=false --tls-cert-file=/var/lib/rancher/k3s/agent/serving-kubelet.crt --tls-private-key-file=/var/lib/rancher/k3s/agent/serving-kubelet.key"
+```
+
+### 4.2.11 Ensure that the --rotate-certificates argument is not set to false (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+If using a Kubelet config file, edit the file to add the line `rotateCertificates` to `true` or
+remove it altogether to use the default value.
+If using command line arguments, edit the kubelet service file
+/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
+remove --rotate-certificates=false argument from the KUBELET_CERTIFICATE_ARGS
+variable.
+Based on your system, restart the kubelet service. For example,
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+**Audit:**
+
+```bash
+/bin/ps -fC containerd
+```
+
+**Audit Config:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/kubelet/config.yaml; then /bin/cat /var/lib/kubelet/config.yaml; fi'
+```
+
+**Expected Result**:
+
+```console
+'--rotate-certificates' is present OR '--rotate-certificates' is not present
+```
+
+**Returned Value**:
+
+```console
+UID PID PPID C STIME TTY TIME CMD root 410 1 0 Sep11 ? 00:01:50 /usr/bin/containerd root 45213 45195 3 Sep11 ? 00:45:15 containerd -c /var/lib/rancher/k3s/agent/etc/containerd/config.toml -a /run/k3s/containerd/containerd.sock --state /run/k3s/containerd --root /var/lib/rancher/k3s/agent/containerd
+```
+
+### 4.2.12 Verify that the RotateKubeletServerCertificate argument is set to true (Manual)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Edit the kubelet service file /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
+on each worker node and set the below parameter in KUBELET_CERTIFICATE_ARGS variable.
+--feature-gates=RotateKubeletServerCertificate=true
+Based on your system, restart the kubelet service. For example:
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+### 4.2.13 Ensure that the Kubelet only makes use of Strong Cryptographic Ciphers (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+If using a Kubelet config file, edit the file to set `TLSCipherSuites` to
+TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256
+or to a subset of these values.
+If using executable arguments, edit the kubelet service file
+/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
+set the --tls-cipher-suites parameter as follows, or to a subset of these values.
+--tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256
+Based on your system, restart the kubelet service. For example:
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+**Audit:**
+
+```bash
+/bin/ps -fC containerd
+```
+
+**Audit Config:**
+
+```bash
+/bin/cat /var/lib/kubelet/config.yaml
+```
+
+**Expected Result**:
+
+```console
+'--tls-cipher-suites' is present
+```
+
+**Returned Value**:
+
+```console
+UID PID PPID C STIME TTY TIME CMD root 410 1 0 Sep11 ? 00:01:50 /usr/bin/containerd root 45213 45195 3 Sep11 ? 00:45:15 containerd -c /var/lib/rancher/k3s/agent/etc/containerd/config.toml -a /run/k3s/containerd/containerd.sock --state /run/k3s/containerd --root /var/lib/rancher/k3s/agent/containerd
+```
+
+## 5.1 RBAC and Service Accounts
+### 5.1.1 Ensure that the cluster-admin role is only used where required (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Identify all clusterrolebindings to the cluster-admin role. Check if they are used and
+if they need this role or if they could use a role with fewer privileges.
+Where possible, first bind users to a lower privileged role and then remove the
+clusterrolebinding to the cluster-admin role :
+kubectl delete clusterrolebinding [name]
+
+### 5.1.2 Minimize access to secrets (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Where possible, remove get, list and watch access to Secret objects in the cluster.
+
+### 5.1.3 Minimize wildcard use in Roles and ClusterRoles (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Where possible replace any use of wildcards in clusterroles and roles with specific
+objects or actions.
+
+### 5.1.4 Minimize access to create pods (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Where possible, remove create access to pod objects in the cluster.
+
+### 5.1.5 Ensure that default service accounts are not actively used. (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Create explicit service accounts wherever a Kubernetes workload requires specific access
+to the Kubernetes API server.
+Modify the configuration of each default service account to include this value
+automountServiceAccountToken: false
+
+### 5.1.6 Ensure that Service Account Tokens are only mounted where necessary (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Modify the definition of pods and service accounts which do not need to mount service
+account tokens to disable it.
+
+### 5.1.7 Avoid use of system:masters group (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Remove the system:masters group from all users in the cluster.
+
+### 5.1.8 Limit use of the Bind, Impersonate and Escalate permissions in the Kubernetes cluster (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Where possible, remove the impersonate, bind and escalate rights from subjects.
+
+## 5.2 Pod Security Standards
+### 5.2.1 Ensure that the cluster has at least one active policy control mechanism in place (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Ensure that either Pod Security Admission or an external policy control system is in place
+for every namespace which contains user workloads.
+
+### 5.2.2 Minimize the admission of privileged containers (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Add policies to each namespace in the cluster which has user workloads to restrict the
+admission of privileged containers.
+
+### 5.2.3 Minimize the admission of containers wishing to share the host process ID namespace (Automated)
+
+
+**Result:** warn
+
+**Remediation:**
+Add policies to each namespace in the cluster which has user workloads to restrict the
+admission of `hostPID` containers.
+
+### 5.2.4 Minimize the admission of containers wishing to share the host IPC namespace (Automated)
+
+
+**Result:** warn
+
+**Remediation:**
+Add policies to each namespace in the cluster which has user workloads to restrict the
+admission of `hostIPC` containers.
+
+### 5.2.5 Minimize the admission of containers wishing to share the host network namespace (Automated)
+
+
+**Result:** warn
+
+**Remediation:**
+Add policies to each namespace in the cluster which has user workloads to restrict the
+admission of `hostNetwork` containers.
+
+### 5.2.6 Minimize the admission of containers with allowPrivilegeEscalation (Automated)
+
+
+**Result:** warn
+
+**Remediation:**
+Add policies to each namespace in the cluster which has user workloads to restrict the
+admission of containers with `.spec.allowPrivilegeEscalation` set to `true`.
+
+### 5.2.7 Minimize the admission of root containers (Automated)
+
+
+**Result:** warn
+
+**Remediation:**
+Create a policy for each namespace in the cluster, ensuring that either `MustRunAsNonRoot`
+or `MustRunAs` with the range of UIDs not including 0, is set.
+
+### 5.2.8 Minimize the admission of containers with the NET_RAW capability (Automated)
+
+
+**Result:** warn
+
+**Remediation:**
+Add policies to each namespace in the cluster which has user workloads to restrict the
+admission of containers with the `NET_RAW` capability.
+
+### 5.2.9 Minimize the admission of containers with added capabilities (Automated)
+
+
+**Result:** warn
+
+**Remediation:**
+Ensure that `allowedCapabilities` is not present in policies for the cluster unless
+it is set to an empty array.
+
+### 5.2.10 Minimize the admission of containers with capabilities assigned (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Review the use of capabilites in applications running on your cluster. Where a namespace
+contains applicaions which do not require any Linux capabities to operate consider adding
+a PSP which forbids the admission of containers which do not drop all capabilities.
+
+### 5.2.11 Minimize the admission of Windows HostProcess containers (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Add policies to each namespace in the cluster which has user workloads to restrict the
+admission of containers that have `.securityContext.windowsOptions.hostProcess` set to `true`.
+
+### 5.2.12 Minimize the admission of HostPath volumes (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Add policies to each namespace in the cluster which has user workloads to restrict the
+admission of containers with `hostPath` volumes.
+
+### 5.2.13 Minimize the admission of containers which use HostPorts (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Add policies to each namespace in the cluster which has user workloads to restrict the
+admission of containers which use `hostPort` sections.
+
+## 5.3 Network Policies and CNI
+### 5.3.1 Ensure that the CNI in use supports NetworkPolicies (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+If the CNI plugin in use does not support network policies, consideration should be given to
+making use of a different plugin, or finding an alternate mechanism for restricting traffic
+in the Kubernetes cluster.
+
+### 5.3.2 Ensure that all Namespaces have NetworkPolicies defined (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Follow the documentation and create NetworkPolicy objects as you need them.
+
+## 5.4 Secrets Management
+### 5.4.1 Prefer using Secrets as files over Secrets as environment variables (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+If possible, rewrite application code to read Secrets from mounted secret files, rather than
+from environment variables.
+
+### 5.4.2 Consider external secret storage (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Refer to the Secrets management options offered by your cloud provider or a third-party
+secrets management solution.
+
+## 5.5 Extensible Admission Control
+### 5.5.1 Configure Image Provenance using ImagePolicyWebhook admission controller (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Follow the Kubernetes documentation and setup image provenance.
+
+## 5.7 General Policies
+### 5.7.1 Create administrative boundaries between resources using namespaces (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Follow the documentation and create namespaces for objects in your deployment as you need
+them.
+
+### 5.7.2 Ensure that the seccomp profile is set to docker/default in your Pod definitions (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Use `securityContext` to enable the docker/default seccomp profile in your pod definitions.
+An example is as below:
+ securityContext:
+ seccompProfile:
+ type: RuntimeDefault
+
+### 5.7.3 Apply SecurityContext to your Pods and Containers (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Follow the Kubernetes documentation and apply SecurityContexts to your Pods. For a
+suggested list of SecurityContexts, you may refer to the CIS Security Benchmark for Docker
+Containers.
+
+### 5.7.4 The default namespace should not be used (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Ensure that namespaces are created to allow for appropriate segregation of Kubernetes
+resources and that all new resources are created in a specific namespace.
+
diff --git a/docs/reference-guides/rancher-security/hardening-guides/k3s-hardening-guide/k3s-self-assessment-guide-with-cis-v1.7-k8s-v1.25-v1.26-v1.27.md b/docs/reference-guides/rancher-security/hardening-guides/k3s-hardening-guide/k3s-self-assessment-guide-with-cis-v1.7-k8s-v1.25-v1.26-v1.27.md
new file mode 100644
index 00000000000..e7373288b35
--- /dev/null
+++ b/docs/reference-guides/rancher-security/hardening-guides/k3s-hardening-guide/k3s-self-assessment-guide-with-cis-v1.7-k8s-v1.25-v1.26-v1.27.md
@@ -0,0 +1,3215 @@
+---
+title: K3s Self-Assessment Guide - CIS Benchmark v1.7 - K8s v1.25/v1.26/v1.27
+---
+
+
+
+
+
+This document is a companion to the [K3s Hardening Guide](../../../../pages-for-subheaders/k3s-hardening-guide.md), which provides prescriptive guidance on how to harden K3s clusters that are running in production and managed by Rancher. This benchmark guide helps you evaluate the security of a hardened cluster against each control in the CIS Kubernetes Benchmark.
+
+This guide corresponds to the following versions of Rancher, CIS Benchmarks, and Kubernetes:
+
+| Rancher Version | CIS Benchmark Version | Kubernetes Version |
+|-----------------|-----------------------|--------------------|
+| Rancher v2.7 | Benchmark v1.7 | Kubernetes v1.25/v1.26/v1.27 |
+
+This document is for Rancher operators, security teams, auditors and decision makers.
+
+For more information about each control, including detailed descriptions and remediations for failing tests, refer to the corresponding section of the CIS Kubernetes Benchmark v1.7. You can download the benchmark, after creating a free account, at [Center for Internet Security (CIS)](https://www.cisecurity.org/benchmark/kubernetes/).
+
+## Testing Methodology
+
+Each control in the CIS Kubernetes Benchmark was evaluated against a K3s cluster that was configured according to the accompanying hardening guide.
+
+Where control audits differ from the original CIS benchmark, the audit commands specific to K3s are provided for testing.
+
+These are the possible results for each control:
+
+- **Pass** - The K3s cluster passes the audit outlined in the benchmark.
+- **Not Applicable** - The control is not applicable to K3s because of how it is designed to operate. The remediation section explains why.
+- **Warn** - The control is manual in the CIS benchmark and it depends on the cluster's use-case or some other factor that must be determined by the cluster operator. These controls have been evaluated to ensure K3s doesn't prevent their implementation, but no further configuration or auditing of the cluster has been performed.
+
+This guide makes the assumption that K3s is running as a Systemd unit. Your installation may vary. Adjust the "audit" commands to fit your scenario.
+
+:::note
+
+This guide only covers `automated` (previously called `scored`) tests.
+
+:::
+
+### Controls
+
+
+## 1.1 Control Plane Node Configuration Files
+### 1.1.1 Ensure that the API server pod specification file permissions are set to 600 or more restrictive (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the
+control plane node.
+For example, chmod 600 /etc/kubernetes/manifests/kube-apiserver.yaml
+Not Applicable.
+
+### 1.1.2 Ensure that the API server pod specification file ownership is set to root:root (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example, chown root:root /etc/kubernetes/manifests/kube-apiserver.yaml
+Not Applicable.
+
+### 1.1.3 Ensure that the controller manager pod specification file permissions are set to 600 or more restrictive (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example, chmod 600 /etc/kubernetes/manifests/kube-controller-manager.yaml
+Not Applicable.
+
+### 1.1.4 Ensure that the controller manager pod specification file ownership is set to root:root (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example, chown root:root /etc/kubernetes/manifests/kube-controller-manager.yaml
+Not Applicable.
+
+### 1.1.5 Ensure that the scheduler pod specification file permissions are set to 600 or more restrictive (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example, chmod 600 /etc/kubernetes/manifests/kube-scheduler.yaml
+Not Applicable.
+
+### 1.1.6 Ensure that the scheduler pod specification file ownership is set to root:root (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example, chown root:root /etc/kubernetes/manifests/kube-scheduler.yaml
+Not Applicable.
+
+### 1.1.7 Ensure that the etcd pod specification file permissions are set to 600 or more restrictive (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example,
+chmod 600 /etc/kubernetes/manifests/etcd.yaml
+Not Applicable.
+
+### 1.1.8 Ensure that the etcd pod specification file ownership is set to root:root (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example,
+chown root:root /etc/kubernetes/manifests/etcd.yaml
+Not Applicable.
+
+### 1.1.9 Ensure that the Container Network Interface file permissions are set to 600 or more restrictive (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example, chmod 600
+Not Applicable.
+
+### 1.1.10 Ensure that the Container Network Interface file ownership is set to root:root (Manual)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example,
+chown root:root
+Not Applicable.
+
+### 1.1.11 Ensure that the etcd data directory permissions are set to 700 or more restrictive (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+On the etcd server node, get the etcd data directory, passed as an argument --data-dir,
+from the command 'ps -ef | grep etcd'.
+Run the below command (based on the etcd data directory found above). For example,
+chmod 700 /var/lib/etcd
+
+**Audit Script:** `check_for_k3s_etcd.sh`
+
+```bash
+#!/bin/bash
+
+# This script is used to ensure that k3s is actually running etcd (and not other databases like sqlite3)
+# before it checks the requirement
+set -eE
+
+handle_error() {
+ echo "false"
+}
+
+trap 'handle_error' ERR
+
+
+if [[ "$(journalctl -D /var/log/journal -u k3s | grep 'Managed etcd cluster initializing' | grep -v grep | wc -l)" -gt 0 ]]; then
+ case $1 in
+ "1.1.11")
+ echo $(stat -c %a /var/lib/rancher/k3s/server/db/etcd);;
+ "1.2.29")
+ echo $(journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'etcd-');;
+ "2.1")
+ echo $(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');;
+ "2.2")
+ echo $(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth');;
+ "2.3")
+ echo $(grep 'auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);;
+ "2.4")
+ echo $(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');;
+ "2.5")
+ echo $(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth');;
+ "2.6")
+ echo $(grep 'peer-auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);;
+ "2.7")
+ echo $(grep 'trusted-ca-file' /var/lib/rancher/k3s/server/db/etcd/config);;
+ esac
+else
+# If another database is running, return whatever is required to pass the scan
+ case $1 in
+ "1.1.11")
+ echo "700";;
+ "1.2.29")
+ echo "--etcd-certfile AND --etcd-keyfile";;
+ "2.1")
+ echo "cert-file AND key-file";;
+ "2.2")
+ echo "--client-cert-auth=true";;
+ "2.3")
+ echo "false";;
+ "2.4")
+ echo "peer-cert-file AND peer-key-file";;
+ "2.5")
+ echo "--client-cert-auth=true";;
+ "2.6")
+ echo "--peer-auto-tls=false";;
+ "2.7")
+ echo "--trusted-ca-file";;
+ esac
+fi
+
+```
+
+**Audit Execution:**
+
+```bash
+./check_for_k3s_etcd.sh 1.1.11
+```
+
+**Expected Result**:
+
+```console
+'700' is equal to '700'
+```
+
+**Returned Value**:
+
+```console
+700
+```
+
+### 1.1.12 Ensure that the etcd data directory ownership is set to etcd:etcd (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+On the etcd server node, get the etcd data directory, passed as an argument --data-dir,
+from the command 'ps -ef | grep etcd'.
+Run the below command (based on the etcd data directory found above).
+For example, chown etcd:etcd /var/lib/etcd
+Not Applicable.
+
+### 1.1.13 Ensure that the admin.conf file permissions are set to 600 or more restrictive (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example, chmod 600 /var/lib/rancher/k3s/server/cred/admin.kubeconfig
+
+### 1.1.14 Ensure that the admin.conf file ownership is set to root:root (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example, chown root:root /etc/kubernetes/admin.conf
+
+**Audit:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/rancher/k3s/server/cred/admin.kubeconfig; then stat -c %U:%G /var/lib/rancher/k3s/server/cred/admin.kubeconfig; fi'
+```
+
+**Expected Result**:
+
+```console
+'root:root' is equal to 'root:root'
+```
+
+**Returned Value**:
+
+```console
+root:root
+```
+
+### 1.1.15 Ensure that the scheduler.conf file permissions are set to 600 or more restrictive (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example,
+chmod 600 scheduler
+
+**Audit:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/rancher/k3s/server/cred/scheduler.kubeconfig; then stat -c permissions=%a /var/lib/rancher/k3s/server/cred/scheduler.kubeconfig; fi'
+```
+
+**Expected Result**:
+
+```console
+permissions has permissions 600, expected 600 or more restrictive
+```
+
+**Returned Value**:
+
+```console
+permissions=600
+```
+
+### 1.1.16 Ensure that the scheduler.conf file ownership is set to root:root (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example,
+chown root:root scheduler
+
+**Audit:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/rancher/k3s/server/cred/scheduler.kubeconfig; then stat -c %U:%G /var/lib/rancher/k3s/server/cred/scheduler.kubeconfig; fi'
+```
+
+**Expected Result**:
+
+```console
+'root:root' is present
+```
+
+**Returned Value**:
+
+```console
+root:root
+```
+
+### 1.1.17 Ensure that the controller-manager.conf file permissions are set to 600 or more restrictive (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example,
+chmod 600 controllermanager
+
+**Audit:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/rancher/k3s/server/cred/controller.kubeconfig; then stat -c permissions=%a /var/lib/rancher/k3s/server/cred/controller.kubeconfig; fi'
+```
+
+**Expected Result**:
+
+```console
+permissions has permissions 600, expected 600 or more restrictive
+```
+
+**Returned Value**:
+
+```console
+permissions=600
+```
+
+### 1.1.18 Ensure that the controller-manager.conf file ownership is set to root:root (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example,
+chown root:root controllermanager
+
+**Audit:**
+
+```bash
+stat -c %U:%G /var/lib/rancher/k3s/server/cred/controller.kubeconfig
+```
+
+**Expected Result**:
+
+```console
+'root:root' is equal to 'root:root'
+```
+
+**Returned Value**:
+
+```console
+root:root
+```
+
+### 1.1.19 Ensure that the Kubernetes PKI directory and file ownership is set to root:root (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example,
+chown -R root:root /var/lib/rancher/k3s/server/tls
+
+**Audit:**
+
+```bash
+stat -c %U:%G /var/lib/rancher/k3s/server/tls
+```
+
+**Expected Result**:
+
+```console
+'root:root' is present
+```
+
+**Returned Value**:
+
+```console
+root:root
+```
+
+### 1.1.20 Ensure that the Kubernetes PKI certificate file permissions are set to 600 or more restrictive (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example,
+chmod -R 600 /etc/kubernetes/pki/*.crt
+
+**Audit:**
+
+```bash
+stat -c %n %a /var/lib/rancher/k3s/server/tls/*.crt
+```
+
+### 1.1.21 Ensure that the Kubernetes PKI key file permissions are set to 600 (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example,
+chmod -R 600 /etc/kubernetes/pki/*.key
+
+**Audit:**
+
+```bash
+stat -c %n %a /var/lib/rancher/k3s/server/tls/*.key
+```
+
+## 1.2 API Server
+### 1.2.1 Ensure that the --anonymous-auth argument is set to false (Manual)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the below parameter.
+--anonymous-auth=false
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'anonymous-auth'
+```
+
+**Expected Result**:
+
+```console
+'--anonymous-auth' is equal to 'false'
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:52:00 ip-172-31-12-34 k3s[2340]: time="2023-09-11T20:52:00Z" level=info msg="Running kube-apiserver --admission-control-config-file=/etc/rancher/k3s/config/rancher-psact.yaml --advertise-port=6443 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,k3s --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/k3s/server/logs/audit.log --audit-policy-file=/var/lib/rancher/k3s/server/audit.yaml --authorization-mode=Node,RBAC --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/k3s/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/k3s/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,ServiceAccount --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/k3s/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/k3s/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/k3s/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.key --request-timeout=300s --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6444 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-account-lookup=true --service-account-signing-key-file=/var/lib/rancher/k3s/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.key"
+```
+
+### 1.2.2 Ensure that the --token-auth-file parameter is not set (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the documentation and configure alternate mechanisms for authentication. Then,
+edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and remove the --token-auth-file= parameter.
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep containerd | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--token-auth-file' is not present
+```
+
+**Returned Value**:
+
+```console
+root 527 1 0 Sep11 ? 00:01:28 /usr/bin/containerd root 663 1 0 Sep11 ? 00:00:08 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock root 2361 2340 3 Sep11 ? 00:40:19 containerd -c /var/lib/rancher/k3s/agent/etc/containerd/config.toml -a /run/k3s/containerd/containerd.sock --state /run/k3s/containerd --root /var/lib/rancher/k3s/agent/containerd root 3021 1 0 Sep11 ? 00:00:29 /var/lib/rancher/k3s/data/3cdacaf539fc388d8e542a8d643948e3c7bfa4a7e91b7521102325e0ce8581b6/bin/containerd-shim-runc-v2 -namespace k8s.io -id 4790d392966915d995e666002c56ed4cce6dd86f305ce2ee390547a1fcbf6c82 -address /run/k3s/containerd/containerd.sock root 3035 1 0 Sep11 ? 00:00:28 /var/lib/rancher/k3s/data/3cdacaf539fc388d8e542a8d643948e3c7bfa4a7e91b7521102325e0ce8581b6/bin/containerd-shim-runc-v2 -namespace k8s.io -id 9d73e6a160ccde6c7c7d4ba0df3b9f696e3de2ebfc0f19a1dcbdf13aea496427 -address /run/k3s/containerd/containerd.sock root 3235 1 0 Sep11 ? 00:00:31 /var/lib/rancher/k3s/data/3cdacaf539fc388d8e542a8d643948e3c7bfa4a7e91b7521102325e0ce8581b6/bin/containerd-shim-runc-v2 -namespace k8s.io -id 587f6221ee9f36c877231ada8d816a799dfda186332c33378d1eb16c72cdc87d -address /run/k3s/containerd/containerd.sock root 4435 1 0 Sep11 ? 00:00:28 /var/lib/rancher/k3s/data/3cdacaf539fc388d8e542a8d643948e3c7bfa4a7e91b7521102325e0ce8581b6/bin/containerd-shim-runc-v2 -namespace k8s.io -id a74c9ec7d99785c2f2d4e6826aa80c22eb8b38249e8f99679ece00a818e9b7b3 -address /run/k3s/containerd/containerd.sock root 4985 1 0 Sep11 ? 00:00:53 /var/lib/rancher/k3s/data/3cdacaf539fc388d8e542a8d643948e3c7bfa4a7e91b7521102325e0ce8581b6/bin/containerd-shim-runc-v2 -namespace k8s.io -id 5b0c9784dbe0fcbe8be10c857976e70ec84a208cb814e87b5ca085a02d434f8c -address /run/k3s/containerd/containerd.sock root 5056 1 0 Sep11 ? 00:00:28 /var/lib/rancher/k3s/data/3cdacaf539fc388d8e542a8d643948e3c7bfa4a7e91b7521102325e0ce8581b6/bin/containerd-shim-runc-v2 -namespace k8s.io -id f3231ff35f18056e74eda14907f296be15f7ea1c6ae5ab7904e27d4d18183301 -address /run/k3s/containerd/containerd.sock root 5868 1 0 Sep11 ? 00:00:27 /var/lib/rancher/k3s/data/3cdacaf539fc388d8e542a8d643948e3c7bfa4a7e91b7521102325e0ce8581b6/bin/containerd-shim-runc-v2 -namespace k8s.io -id 3e908c4d0b10df275bdef6f72fbcfa09517d11cf749236ad020364e14d77bc93 -address /run/k3s/containerd/containerd.sock root 6158 1 0 Sep11 ? 00:00:28 /var/lib/rancher/k3s/data/3cdacaf539fc388d8e542a8d643948e3c7bfa4a7e91b7521102325e0ce8581b6/bin/containerd-shim-runc-v2 -namespace k8s.io -id bec5780a5c73fa3154aa3b5ee26cdf23202db821205893e7e66ae17e6103e97b -address /run/k3s/containerd/containerd.sock root 7366 1 0 Sep11 ? 00:00:28 /var/lib/rancher/k3s/data/3cdacaf539fc388d8e542a8d643948e3c7bfa4a7e91b7521102325e0ce8581b6/bin/containerd-shim-runc-v2 -namespace k8s.io -id a81b78845bdcaef710314c93e5ea0d0617f37a8929472f7b570ab90c6667f57f -address /run/k3s/containerd/containerd.sock root 97274 1 0 16:13 ? 00:00:00 /var/lib/rancher/k3s/data/3cdacaf539fc388d8e542a8d643948e3c7bfa4a7e91b7521102325e0ce8581b6/bin/containerd-shim-runc-v2 -namespace k8s.io -id c90652c935d9e79af45b9a9ac2b4fe315e2a761a0525737fdb95c680123a164c -address /run/k3s/containerd/containerd.sock root 98309 1 0 16:16 ? 00:00:00 /var/lib/rancher/k3s/data/3cdacaf539fc388d8e542a8d643948e3c7bfa4a7e91b7521102325e0ce8581b6/bin/containerd-shim-runc-v2 -namespace k8s.io -id 431a2763636488efd7d104c228d41f4f2ecd8c06a7fc375d8977ab0d238936a8 -address /run/k3s/containerd/containerd.sock root 98493 1 0 16:16 ? 00:00:00 /var/lib/rancher/k3s/data/3cdacaf539fc388d8e542a8d643948e3c7bfa4a7e91b7521102325e0ce8581b6/bin/containerd-shim-runc-v2 -namespace k8s.io -id 5b480d2fa55c8cc0105ec1902887040c017f03d5b1eb6c73c24bb9d523ad9b37 -address /run/k3s/containerd/containerd.sock
+```
+
+### 1.2.3 Ensure that the --DenyServiceExternalIPs is not set (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and remove the `DenyServiceExternalIPs`
+from enabled admission plugins.
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep containerd | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--enable-admission-plugins' is present OR '--enable-admission-plugins' is not present
+```
+
+**Returned Value**:
+
+```console
+root 527 1 0 Sep11 ? 00:01:28 /usr/bin/containerd root 663 1 0 Sep11 ? 00:00:08 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock root 2361 2340 3 Sep11 ? 00:40:19 containerd -c /var/lib/rancher/k3s/agent/etc/containerd/config.toml -a /run/k3s/containerd/containerd.sock --state /run/k3s/containerd --root /var/lib/rancher/k3s/agent/containerd root 3021 1 0 Sep11 ? 00:00:29 /var/lib/rancher/k3s/data/3cdacaf539fc388d8e542a8d643948e3c7bfa4a7e91b7521102325e0ce8581b6/bin/containerd-shim-runc-v2 -namespace k8s.io -id 4790d392966915d995e666002c56ed4cce6dd86f305ce2ee390547a1fcbf6c82 -address /run/k3s/containerd/containerd.sock root 3035 1 0 Sep11 ? 00:00:28 /var/lib/rancher/k3s/data/3cdacaf539fc388d8e542a8d643948e3c7bfa4a7e91b7521102325e0ce8581b6/bin/containerd-shim-runc-v2 -namespace k8s.io -id 9d73e6a160ccde6c7c7d4ba0df3b9f696e3de2ebfc0f19a1dcbdf13aea496427 -address /run/k3s/containerd/containerd.sock root 3235 1 0 Sep11 ? 00:00:31 /var/lib/rancher/k3s/data/3cdacaf539fc388d8e542a8d643948e3c7bfa4a7e91b7521102325e0ce8581b6/bin/containerd-shim-runc-v2 -namespace k8s.io -id 587f6221ee9f36c877231ada8d816a799dfda186332c33378d1eb16c72cdc87d -address /run/k3s/containerd/containerd.sock root 4435 1 0 Sep11 ? 00:00:28 /var/lib/rancher/k3s/data/3cdacaf539fc388d8e542a8d643948e3c7bfa4a7e91b7521102325e0ce8581b6/bin/containerd-shim-runc-v2 -namespace k8s.io -id a74c9ec7d99785c2f2d4e6826aa80c22eb8b38249e8f99679ece00a818e9b7b3 -address /run/k3s/containerd/containerd.sock root 4985 1 0 Sep11 ? 00:00:53 /var/lib/rancher/k3s/data/3cdacaf539fc388d8e542a8d643948e3c7bfa4a7e91b7521102325e0ce8581b6/bin/containerd-shim-runc-v2 -namespace k8s.io -id 5b0c9784dbe0fcbe8be10c857976e70ec84a208cb814e87b5ca085a02d434f8c -address /run/k3s/containerd/containerd.sock root 5056 1 0 Sep11 ? 00:00:28 /var/lib/rancher/k3s/data/3cdacaf539fc388d8e542a8d643948e3c7bfa4a7e91b7521102325e0ce8581b6/bin/containerd-shim-runc-v2 -namespace k8s.io -id f3231ff35f18056e74eda14907f296be15f7ea1c6ae5ab7904e27d4d18183301 -address /run/k3s/containerd/containerd.sock root 5868 1 0 Sep11 ? 00:00:27 /var/lib/rancher/k3s/data/3cdacaf539fc388d8e542a8d643948e3c7bfa4a7e91b7521102325e0ce8581b6/bin/containerd-shim-runc-v2 -namespace k8s.io -id 3e908c4d0b10df275bdef6f72fbcfa09517d11cf749236ad020364e14d77bc93 -address /run/k3s/containerd/containerd.sock root 6158 1 0 Sep11 ? 00:00:28 /var/lib/rancher/k3s/data/3cdacaf539fc388d8e542a8d643948e3c7bfa4a7e91b7521102325e0ce8581b6/bin/containerd-shim-runc-v2 -namespace k8s.io -id bec5780a5c73fa3154aa3b5ee26cdf23202db821205893e7e66ae17e6103e97b -address /run/k3s/containerd/containerd.sock root 7366 1 0 Sep11 ? 00:00:28 /var/lib/rancher/k3s/data/3cdacaf539fc388d8e542a8d643948e3c7bfa4a7e91b7521102325e0ce8581b6/bin/containerd-shim-runc-v2 -namespace k8s.io -id a81b78845bdcaef710314c93e5ea0d0617f37a8929472f7b570ab90c6667f57f -address /run/k3s/containerd/containerd.sock root 97274 1 0 16:13 ? 00:00:00 /var/lib/rancher/k3s/data/3cdacaf539fc388d8e542a8d643948e3c7bfa4a7e91b7521102325e0ce8581b6/bin/containerd-shim-runc-v2 -namespace k8s.io -id c90652c935d9e79af45b9a9ac2b4fe315e2a761a0525737fdb95c680123a164c -address /run/k3s/containerd/containerd.sock root 98309 1 0 16:16 ? 00:00:00 /var/lib/rancher/k3s/data/3cdacaf539fc388d8e542a8d643948e3c7bfa4a7e91b7521102325e0ce8581b6/bin/containerd-shim-runc-v2 -namespace k8s.io -id 431a2763636488efd7d104c228d41f4f2ecd8c06a7fc375d8977ab0d238936a8 -address /run/k3s/containerd/containerd.sock root 98493 1 0 16:16 ? 00:00:00 /var/lib/rancher/k3s/data/3cdacaf539fc388d8e542a8d643948e3c7bfa4a7e91b7521102325e0ce8581b6/bin/containerd-shim-runc-v2 -namespace k8s.io -id 5b480d2fa55c8cc0105ec1902887040c017f03d5b1eb6c73c24bb9d523ad9b37 -address /run/k3s/containerd/containerd.sock
+```
+
+### 1.2.4 Ensure that the --kubelet-client-certificate and --kubelet-client-key arguments are set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the Kubernetes documentation and set up the TLS connection between the
+apiserver and kubelets. Then, edit API server pod specification file
+/etc/kubernetes/manifests/kube-apiserver.yaml on the control plane node and set the
+kubelet client certificate and key parameters as below.
+--kubelet-client-certificate=
+--kubelet-client-key=
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'kubelet-certificate-authority'
+```
+
+**Expected Result**:
+
+```console
+'--kubelet-client-certificate' is present AND '--kubelet-client-key' is present
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:52:00 ip-172-31-12-34 k3s[2340]: time="2023-09-11T20:52:00Z" level=info msg="Running kube-apiserver --admission-control-config-file=/etc/rancher/k3s/config/rancher-psact.yaml --advertise-port=6443 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,k3s --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/k3s/server/logs/audit.log --audit-policy-file=/var/lib/rancher/k3s/server/audit.yaml --authorization-mode=Node,RBAC --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/k3s/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/k3s/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,ServiceAccount --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/k3s/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/k3s/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/k3s/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.key --request-timeout=300s --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6444 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-account-lookup=true --service-account-signing-key-file=/var/lib/rancher/k3s/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.key"
+```
+
+### 1.2.5 Ensure that the --kubelet-certificate-authority argument is set as appropriate (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Follow the Kubernetes documentation and setup the TLS connection between
+the apiserver and kubelets. Then, edit the API server pod specification file
+/etc/kubernetes/manifests/kube-apiserver.yaml on the control plane node and set the
+--kubelet-certificate-authority parameter to the path to the cert file for the certificate authority.
+--kubelet-certificate-authority=
+Permissive - When generating serving certificates, functionality could break in conjunction with hostname overrides which are required for certain cloud providers.
+
+### 1.2.6 Ensure that the --authorization-mode argument is not set to AlwaysAllow (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the --authorization-mode parameter to values other than AlwaysAllow.
+One such example could be as below.
+--authorization-mode=RBAC
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'authorization-mode'
+```
+
+**Expected Result**:
+
+```console
+'--authorization-mode' does not have 'AlwaysAllow'
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:52:00 ip-172-31-12-34 k3s[2340]: time="2023-09-11T20:52:00Z" level=info msg="Running kube-apiserver --admission-control-config-file=/etc/rancher/k3s/config/rancher-psact.yaml --advertise-port=6443 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,k3s --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/k3s/server/logs/audit.log --audit-policy-file=/var/lib/rancher/k3s/server/audit.yaml --authorization-mode=Node,RBAC --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/k3s/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/k3s/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,ServiceAccount --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/k3s/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/k3s/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/k3s/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.key --request-timeout=300s --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6444 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-account-lookup=true --service-account-signing-key-file=/var/lib/rancher/k3s/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.key"
+```
+
+### 1.2.7 Ensure that the --authorization-mode argument includes Node (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the --authorization-mode parameter to a value that includes Node.
+--authorization-mode=Node,RBAC
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'authorization-mode'
+```
+
+**Expected Result**:
+
+```console
+'--authorization-mode' has 'Node'
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:52:00 ip-172-31-12-34 k3s[2340]: time="2023-09-11T20:52:00Z" level=info msg="Running kube-apiserver --admission-control-config-file=/etc/rancher/k3s/config/rancher-psact.yaml --advertise-port=6443 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,k3s --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/k3s/server/logs/audit.log --audit-policy-file=/var/lib/rancher/k3s/server/audit.yaml --authorization-mode=Node,RBAC --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/k3s/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/k3s/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,ServiceAccount --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/k3s/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/k3s/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/k3s/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.key --request-timeout=300s --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6444 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-account-lookup=true --service-account-signing-key-file=/var/lib/rancher/k3s/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.key"
+```
+
+### 1.2.8 Ensure that the --authorization-mode argument includes RBAC (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the --authorization-mode parameter to a value that includes RBAC,
+for example `--authorization-mode=Node,RBAC`.
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'authorization-mode'
+```
+
+**Expected Result**:
+
+```console
+'--authorization-mode' has 'RBAC'
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:52:00 ip-172-31-12-34 k3s[2340]: time="2023-09-11T20:52:00Z" level=info msg="Running kube-apiserver --admission-control-config-file=/etc/rancher/k3s/config/rancher-psact.yaml --advertise-port=6443 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,k3s --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/k3s/server/logs/audit.log --audit-policy-file=/var/lib/rancher/k3s/server/audit.yaml --authorization-mode=Node,RBAC --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/k3s/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/k3s/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,ServiceAccount --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/k3s/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/k3s/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/k3s/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.key --request-timeout=300s --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6444 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-account-lookup=true --service-account-signing-key-file=/var/lib/rancher/k3s/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.key"
+```
+
+### 1.2.9 Ensure that the admission control plugin EventRateLimit is set (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Follow the Kubernetes documentation and set the desired limits in a configuration file.
+Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+and set the below parameters.
+--enable-admission-plugins=...,EventRateLimit,...
+--admission-control-config-file=
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'enable-admission-plugins'
+```
+
+**Expected Result**:
+
+```console
+'--enable-admission-plugins' has 'EventRateLimit'
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:52:00 ip-172-31-12-34 k3s[2340]: time="2023-09-11T20:52:00Z" level=info msg="Running kube-apiserver --admission-control-config-file=/etc/rancher/k3s/config/rancher-psact.yaml --advertise-port=6443 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,k3s --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/k3s/server/logs/audit.log --audit-policy-file=/var/lib/rancher/k3s/server/audit.yaml --authorization-mode=Node,RBAC --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/k3s/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/k3s/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,ServiceAccount --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/k3s/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/k3s/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/k3s/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.key --request-timeout=300s --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6444 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-account-lookup=true --service-account-signing-key-file=/var/lib/rancher/k3s/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.key"
+```
+
+### 1.2.10 Ensure that the admission control plugin AlwaysAdmit is not set (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and either remove the --enable-admission-plugins parameter, or set it to a
+value that does not include AlwaysAdmit.
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'enable-admission-plugins'
+```
+
+**Expected Result**:
+
+```console
+'--enable-admission-plugins' does not have 'AlwaysAdmit' OR '--enable-admission-plugins' is not present
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:52:00 ip-172-31-12-34 k3s[2340]: time="2023-09-11T20:52:00Z" level=info msg="Running kube-apiserver --admission-control-config-file=/etc/rancher/k3s/config/rancher-psact.yaml --advertise-port=6443 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,k3s --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/k3s/server/logs/audit.log --audit-policy-file=/var/lib/rancher/k3s/server/audit.yaml --authorization-mode=Node,RBAC --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/k3s/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/k3s/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,ServiceAccount --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/k3s/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/k3s/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/k3s/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.key --request-timeout=300s --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6444 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-account-lookup=true --service-account-signing-key-file=/var/lib/rancher/k3s/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.key"
+```
+
+### 1.2.11 Ensure that the admission control plugin AlwaysPullImages is set (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the --enable-admission-plugins parameter to include
+AlwaysPullImages.
+--enable-admission-plugins=...,AlwaysPullImages,...
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep containerd | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--enable-admission-plugins' is present
+```
+
+**Returned Value**:
+
+```console
+root 527 1 0 Sep11 ? 00:01:28 /usr/bin/containerd root 663 1 0 Sep11 ? 00:00:08 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock root 2361 2340 3 Sep11 ? 00:40:19 containerd -c /var/lib/rancher/k3s/agent/etc/containerd/config.toml -a /run/k3s/containerd/containerd.sock --state /run/k3s/containerd --root /var/lib/rancher/k3s/agent/containerd root 3021 1 0 Sep11 ? 00:00:29 /var/lib/rancher/k3s/data/3cdacaf539fc388d8e542a8d643948e3c7bfa4a7e91b7521102325e0ce8581b6/bin/containerd-shim-runc-v2 -namespace k8s.io -id 4790d392966915d995e666002c56ed4cce6dd86f305ce2ee390547a1fcbf6c82 -address /run/k3s/containerd/containerd.sock root 3035 1 0 Sep11 ? 00:00:28 /var/lib/rancher/k3s/data/3cdacaf539fc388d8e542a8d643948e3c7bfa4a7e91b7521102325e0ce8581b6/bin/containerd-shim-runc-v2 -namespace k8s.io -id 9d73e6a160ccde6c7c7d4ba0df3b9f696e3de2ebfc0f19a1dcbdf13aea496427 -address /run/k3s/containerd/containerd.sock root 3235 1 0 Sep11 ? 00:00:31 /var/lib/rancher/k3s/data/3cdacaf539fc388d8e542a8d643948e3c7bfa4a7e91b7521102325e0ce8581b6/bin/containerd-shim-runc-v2 -namespace k8s.io -id 587f6221ee9f36c877231ada8d816a799dfda186332c33378d1eb16c72cdc87d -address /run/k3s/containerd/containerd.sock root 4435 1 0 Sep11 ? 00:00:28 /var/lib/rancher/k3s/data/3cdacaf539fc388d8e542a8d643948e3c7bfa4a7e91b7521102325e0ce8581b6/bin/containerd-shim-runc-v2 -namespace k8s.io -id a74c9ec7d99785c2f2d4e6826aa80c22eb8b38249e8f99679ece00a818e9b7b3 -address /run/k3s/containerd/containerd.sock root 4985 1 0 Sep11 ? 00:00:53 /var/lib/rancher/k3s/data/3cdacaf539fc388d8e542a8d643948e3c7bfa4a7e91b7521102325e0ce8581b6/bin/containerd-shim-runc-v2 -namespace k8s.io -id 5b0c9784dbe0fcbe8be10c857976e70ec84a208cb814e87b5ca085a02d434f8c -address /run/k3s/containerd/containerd.sock root 5056 1 0 Sep11 ? 00:00:28 /var/lib/rancher/k3s/data/3cdacaf539fc388d8e542a8d643948e3c7bfa4a7e91b7521102325e0ce8581b6/bin/containerd-shim-runc-v2 -namespace k8s.io -id f3231ff35f18056e74eda14907f296be15f7ea1c6ae5ab7904e27d4d18183301 -address /run/k3s/containerd/containerd.sock root 5868 1 0 Sep11 ? 00:00:27 /var/lib/rancher/k3s/data/3cdacaf539fc388d8e542a8d643948e3c7bfa4a7e91b7521102325e0ce8581b6/bin/containerd-shim-runc-v2 -namespace k8s.io -id 3e908c4d0b10df275bdef6f72fbcfa09517d11cf749236ad020364e14d77bc93 -address /run/k3s/containerd/containerd.sock root 6158 1 0 Sep11 ? 00:00:28 /var/lib/rancher/k3s/data/3cdacaf539fc388d8e542a8d643948e3c7bfa4a7e91b7521102325e0ce8581b6/bin/containerd-shim-runc-v2 -namespace k8s.io -id bec5780a5c73fa3154aa3b5ee26cdf23202db821205893e7e66ae17e6103e97b -address /run/k3s/containerd/containerd.sock root 7366 1 0 Sep11 ? 00:00:28 /var/lib/rancher/k3s/data/3cdacaf539fc388d8e542a8d643948e3c7bfa4a7e91b7521102325e0ce8581b6/bin/containerd-shim-runc-v2 -namespace k8s.io -id a81b78845bdcaef710314c93e5ea0d0617f37a8929472f7b570ab90c6667f57f -address /run/k3s/containerd/containerd.sock root 97274 1 0 16:13 ? 00:00:00 /var/lib/rancher/k3s/data/3cdacaf539fc388d8e542a8d643948e3c7bfa4a7e91b7521102325e0ce8581b6/bin/containerd-shim-runc-v2 -namespace k8s.io -id c90652c935d9e79af45b9a9ac2b4fe315e2a761a0525737fdb95c680123a164c -address /run/k3s/containerd/containerd.sock root 98309 1 0 16:16 ? 00:00:00 /var/lib/rancher/k3s/data/3cdacaf539fc388d8e542a8d643948e3c7bfa4a7e91b7521102325e0ce8581b6/bin/containerd-shim-runc-v2 -namespace k8s.io -id 431a2763636488efd7d104c228d41f4f2ecd8c06a7fc375d8977ab0d238936a8 -address /run/k3s/containerd/containerd.sock root 98493 1 0 16:16 ? 00:00:00 /var/lib/rancher/k3s/data/3cdacaf539fc388d8e542a8d643948e3c7bfa4a7e91b7521102325e0ce8581b6/bin/containerd-shim-runc-v2 -namespace k8s.io -id 5b480d2fa55c8cc0105ec1902887040c017f03d5b1eb6c73c24bb9d523ad9b37 -address /run/k3s/containerd/containerd.sock
+```
+
+### 1.2.12 Ensure that the admission control plugin SecurityContextDeny is set if PodSecurityPolicy is not used (Manual)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the --enable-admission-plugins parameter to include
+SecurityContextDeny, unless PodSecurityPolicy is already in place.
+--enable-admission-plugins=...,SecurityContextDeny,...
+Permissive - Enabling Pod Security Policy can cause applications to unexpectedly fail.
+
+### 1.2.13 Ensure that the admission control plugin ServiceAccount is set (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the documentation and create ServiceAccount objects as per your environment.
+Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and ensure that the --disable-admission-plugins parameter is set to a
+value that does not include ServiceAccount.
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--disable-admission-plugins' is present OR '--disable-admission-plugins' is not present
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:52:00 ip-172-31-12-34 k3s[2340]: time="2023-09-11T20:52:00Z" level=info msg="Running kube-apiserver --admission-control-config-file=/etc/rancher/k3s/config/rancher-psact.yaml --advertise-port=6443 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,k3s --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/k3s/server/logs/audit.log --audit-policy-file=/var/lib/rancher/k3s/server/audit.yaml --authorization-mode=Node,RBAC --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/k3s/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/k3s/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,ServiceAccount --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/k3s/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/k3s/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/k3s/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.key --request-timeout=300s --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6444 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-account-lookup=true --service-account-signing-key-file=/var/lib/rancher/k3s/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.key"
+```
+
+### 1.2.14 Ensure that the admission control plugin NamespaceLifecycle is set (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the --disable-admission-plugins parameter to
+ensure it does not include NamespaceLifecycle.
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--disable-admission-plugins' is present OR '--disable-admission-plugins' is not present
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:52:00 ip-172-31-12-34 k3s[2340]: time="2023-09-11T20:52:00Z" level=info msg="Running kube-apiserver --admission-control-config-file=/etc/rancher/k3s/config/rancher-psact.yaml --advertise-port=6443 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,k3s --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/k3s/server/logs/audit.log --audit-policy-file=/var/lib/rancher/k3s/server/audit.yaml --authorization-mode=Node,RBAC --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/k3s/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/k3s/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,ServiceAccount --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/k3s/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/k3s/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/k3s/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.key --request-timeout=300s --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6444 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-account-lookup=true --service-account-signing-key-file=/var/lib/rancher/k3s/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.key"
+```
+
+### 1.2.15 Ensure that the admission control plugin NodeRestriction is set (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the Kubernetes documentation and configure NodeRestriction plug-in on kubelets.
+Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the --enable-admission-plugins parameter to a
+value that includes NodeRestriction.
+--enable-admission-plugins=...,NodeRestriction,...
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'enable-admission-plugins'
+```
+
+**Expected Result**:
+
+```console
+'--enable-admission-plugins' has 'NodeRestriction'
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:52:00 ip-172-31-12-34 k3s[2340]: time="2023-09-11T20:52:00Z" level=info msg="Running kube-apiserver --admission-control-config-file=/etc/rancher/k3s/config/rancher-psact.yaml --advertise-port=6443 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,k3s --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/k3s/server/logs/audit.log --audit-policy-file=/var/lib/rancher/k3s/server/audit.yaml --authorization-mode=Node,RBAC --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/k3s/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/k3s/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,ServiceAccount --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/k3s/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/k3s/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/k3s/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.key --request-timeout=300s --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6444 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-account-lookup=true --service-account-signing-key-file=/var/lib/rancher/k3s/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.key"
+```
+
+### 1.2.16 Ensure that the --secure-port argument is not set to 0 - NoteThis recommendation is obsolete and will be deleted per the consensus process (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and either remove the --secure-port parameter or
+set it to a different (non-zero) desired port.
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'secure-port'
+```
+
+**Expected Result**:
+
+```console
+'--secure-port' is greater than 0 OR '--secure-port' is not present
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:52:00 ip-172-31-12-34 k3s[2340]: time="2023-09-11T20:52:00Z" level=info msg="Running kube-apiserver --admission-control-config-file=/etc/rancher/k3s/config/rancher-psact.yaml --advertise-port=6443 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,k3s --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/k3s/server/logs/audit.log --audit-policy-file=/var/lib/rancher/k3s/server/audit.yaml --authorization-mode=Node,RBAC --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/k3s/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/k3s/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,ServiceAccount --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/k3s/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/k3s/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/k3s/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.key --request-timeout=300s --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6444 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-account-lookup=true --service-account-signing-key-file=/var/lib/rancher/k3s/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.key"
+```
+
+### 1.2.17 Ensure that the --profiling argument is set to false (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the below parameter.
+--profiling=false
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'profiling'
+```
+
+**Expected Result**:
+
+```console
+'--profiling' is equal to 'false'
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:52:00 ip-172-31-12-34 k3s[2340]: time="2023-09-11T20:52:00Z" level=info msg="Running kube-apiserver --admission-control-config-file=/etc/rancher/k3s/config/rancher-psact.yaml --advertise-port=6443 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,k3s --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/k3s/server/logs/audit.log --audit-policy-file=/var/lib/rancher/k3s/server/audit.yaml --authorization-mode=Node,RBAC --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/k3s/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/k3s/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,ServiceAccount --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/k3s/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/k3s/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/k3s/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.key --request-timeout=300s --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6444 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-account-lookup=true --service-account-signing-key-file=/var/lib/rancher/k3s/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.key"
+```
+
+### 1.2.18 Ensure that the --audit-log-path argument is set (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the --audit-log-path parameter to a suitable path and
+file where you would like audit logs to be written, for example,
+--audit-log-path=/var/log/apiserver/audit.log
+Permissive.
+
+### 1.2.19 Ensure that the --audit-log-maxage argument is set to 30 or as appropriate (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the --audit-log-maxage parameter to 30
+or as an appropriate number of days, for example,
+--audit-log-maxage=30
+Permissive.
+
+### 1.2.20 Ensure that the --audit-log-maxbackup argument is set to 10 or as appropriate (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the --audit-log-maxbackup parameter to 10 or to an appropriate
+value. For example,
+--audit-log-maxbackup=10
+Permissive.
+
+### 1.2.21 Ensure that the --audit-log-maxsize argument is set to 100 or as appropriate (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the --audit-log-maxsize parameter to an appropriate size in MB.
+For example, to set it as 100 MB, --audit-log-maxsize=100
+Permissive.
+
+### 1.2.22 Ensure that the --request-timeout argument is set as appropriate (Manual)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+and set the below parameter as appropriate and if needed.
+For example, --request-timeout=300s
+Permissive.
+
+### 1.2.23 Ensure that the --service-account-lookup argument is set to true (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the below parameter.
+--service-account-lookup=true
+Alternatively, you can delete the --service-account-lookup parameter from this file so
+that the default takes effect.
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--service-account-lookup' is not present OR '--service-account-lookup' is equal to 'true'
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:52:00 ip-172-31-12-34 k3s[2340]: time="2023-09-11T20:52:00Z" level=info msg="Running kube-apiserver --admission-control-config-file=/etc/rancher/k3s/config/rancher-psact.yaml --advertise-port=6443 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,k3s --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/k3s/server/logs/audit.log --audit-policy-file=/var/lib/rancher/k3s/server/audit.yaml --authorization-mode=Node,RBAC --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/k3s/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/k3s/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,ServiceAccount --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/k3s/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/k3s/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/k3s/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.key --request-timeout=300s --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6444 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-account-lookup=true --service-account-signing-key-file=/var/lib/rancher/k3s/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.key"
+```
+
+### 1.2.24 Ensure that the --service-account-key-file argument is set as appropriate (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the --service-account-key-file parameter
+to the public key file for service accounts. For example,
+--service-account-key-file=
+
+### 1.2.25 Ensure that the --etcd-certfile and --etcd-keyfile arguments are set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the Kubernetes documentation and set up the TLS connection between the apiserver and etcd.
+Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the etcd certificate and key file parameters.
+--etcd-certfile=
+--etcd-keyfile=
+
+**Audit Script:** `check_for_k3s_etcd.sh`
+
+```bash
+#!/bin/bash
+
+# This script is used to ensure that k3s is actually running etcd (and not other databases like sqlite3)
+# before it checks the requirement
+set -eE
+
+handle_error() {
+ echo "false"
+}
+
+trap 'handle_error' ERR
+
+
+if [[ "$(journalctl -D /var/log/journal -u k3s | grep 'Managed etcd cluster initializing' | grep -v grep | wc -l)" -gt 0 ]]; then
+ case $1 in
+ "1.1.11")
+ echo $(stat -c %a /var/lib/rancher/k3s/server/db/etcd);;
+ "1.2.29")
+ echo $(journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'etcd-');;
+ "2.1")
+ echo $(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');;
+ "2.2")
+ echo $(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth');;
+ "2.3")
+ echo $(grep 'auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);;
+ "2.4")
+ echo $(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');;
+ "2.5")
+ echo $(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth');;
+ "2.6")
+ echo $(grep 'peer-auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);;
+ "2.7")
+ echo $(grep 'trusted-ca-file' /var/lib/rancher/k3s/server/db/etcd/config);;
+ esac
+else
+# If another database is running, return whatever is required to pass the scan
+ case $1 in
+ "1.1.11")
+ echo "700";;
+ "1.2.29")
+ echo "--etcd-certfile AND --etcd-keyfile";;
+ "2.1")
+ echo "cert-file AND key-file";;
+ "2.2")
+ echo "--client-cert-auth=true";;
+ "2.3")
+ echo "false";;
+ "2.4")
+ echo "peer-cert-file AND peer-key-file";;
+ "2.5")
+ echo "--client-cert-auth=true";;
+ "2.6")
+ echo "--peer-auto-tls=false";;
+ "2.7")
+ echo "--trusted-ca-file";;
+ esac
+fi
+
+```
+
+**Audit Execution:**
+
+```bash
+./check_for_k3s_etcd.sh 1.2.29
+```
+
+**Expected Result**:
+
+```console
+'--etcd-certfile' is present AND '--etcd-keyfile' is present
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:52:00 ip-172-31-12-34 k3s[2340]: time="2023-09-11T20:52:00Z" level=info msg="Running kube-apiserver --admission-control-config-file=/etc/rancher/k3s/config/rancher-psact.yaml --advertise-port=6443 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,k3s --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/k3s/server/logs/audit.log --audit-policy-file=/var/lib/rancher/k3s/server/audit.yaml --authorization-mode=Node,RBAC --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/k3s/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/k3s/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,ServiceAccount --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/k3s/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/k3s/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/k3s/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.key --request-timeout=300s --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6444 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-account-lookup=true --service-account-signing-key-file=/var/lib/rancher/k3s/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.key"
+```
+
+### 1.2.26 Ensure that the --tls-cert-file and --tls-private-key-file arguments are set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the Kubernetes documentation and set up the TLS connection on the apiserver.
+Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the TLS certificate and private key file parameters.
+--tls-cert-file=
+--tls-private-key-file=
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep -A1 'Running kube-apiserver' | tail -n2
+```
+
+**Expected Result**:
+
+```console
+'--tls-cert-file' is present AND '--tls-private-key-file' is present
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:52:00 ip-172-31-12-34 k3s[2340]: time="2023-09-11T20:52:00Z" level=info msg="Running kube-apiserver --admission-control-config-file=/etc/rancher/k3s/config/rancher-psact.yaml --advertise-port=6443 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,k3s --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/k3s/server/logs/audit.log --audit-policy-file=/var/lib/rancher/k3s/server/audit.yaml --authorization-mode=Node,RBAC --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/k3s/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/k3s/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,ServiceAccount --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/k3s/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/k3s/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/k3s/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.key --request-timeout=300s --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6444 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-account-lookup=true --service-account-signing-key-file=/var/lib/rancher/k3s/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.key" Sep 11 20:52:00 ip-172-31-12-34 k3s[2340]: time="2023-09-11T20:52:00Z" level=info msg="Running kube-scheduler --authentication-kubeconfig=/var/lib/rancher/k3s/server/cred/scheduler.kubeconfig --authorization-kubeconfig=/var/lib/rancher/k3s/server/cred/scheduler.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/kube-scheduler --kubeconfig=/var/lib/rancher/k3s/server/cred/scheduler.kubeconfig --profiling=false --secure-port=10259"
+```
+
+### 1.2.27 Ensure that the --client-ca-file argument is set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the Kubernetes documentation and set up the TLS connection on the apiserver.
+Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the client certificate authority file.
+--client-ca-file=
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'client-ca-file'
+```
+
+**Expected Result**:
+
+```console
+'--client-ca-file' is present
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:52:00 ip-172-31-12-34 k3s[2340]: time="2023-09-11T20:52:00Z" level=info msg="Running kube-apiserver --admission-control-config-file=/etc/rancher/k3s/config/rancher-psact.yaml --advertise-port=6443 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,k3s --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/k3s/server/logs/audit.log --audit-policy-file=/var/lib/rancher/k3s/server/audit.yaml --authorization-mode=Node,RBAC --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/k3s/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/k3s/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,ServiceAccount --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/k3s/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/k3s/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/k3s/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.key --request-timeout=300s --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6444 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-account-lookup=true --service-account-signing-key-file=/var/lib/rancher/k3s/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.key"
+```
+
+### 1.2.28 Ensure that the --etcd-cafile argument is set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the Kubernetes documentation and set up the TLS connection between the apiserver and etcd.
+Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the etcd certificate authority file parameter.
+--etcd-cafile=
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'etcd-cafile'
+```
+
+**Expected Result**:
+
+```console
+'--etcd-cafile' is present
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:52:00 ip-172-31-12-34 k3s[2340]: time="2023-09-11T20:52:00Z" level=info msg="Running kube-apiserver --admission-control-config-file=/etc/rancher/k3s/config/rancher-psact.yaml --advertise-port=6443 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,k3s --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/k3s/server/logs/audit.log --audit-policy-file=/var/lib/rancher/k3s/server/audit.yaml --authorization-mode=Node,RBAC --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/k3s/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/k3s/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,ServiceAccount --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/k3s/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/k3s/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/k3s/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.key --request-timeout=300s --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6444 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-account-lookup=true --service-account-signing-key-file=/var/lib/rancher/k3s/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.key"
+```
+
+### 1.2.29 Ensure that the --encryption-provider-config argument is set as appropriate (Manual)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Follow the Kubernetes documentation and configure a EncryptionConfig file.
+Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the --encryption-provider-config parameter to the path of that file.
+For example, --encryption-provider-config=
+Permissive - Enabling encryption changes how data can be recovered as data is encrypted.
+
+### 1.2.30 Ensure that encryption providers are appropriately configured (Manual)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Follow the Kubernetes documentation and configure a EncryptionConfig file.
+In this file, choose aescbc, kms or secretbox as the encryption provider.
+Permissive - Enabling encryption changes how data can be recovered as data is encrypted.
+
+### 1.2.32 Ensure that the API Server only makes use of Strong Cryptographic Ciphers (Manual)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the below parameter.
+--tls-cipher-suites=TLS_AES_128_GCM_SHA256,TLS_AES_256_GCM_SHA384,TLS_CHACHA20_POLY1305_SHA256,
+TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
+TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
+TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256,
+TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
+TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,
+TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256,TLS_RSA_WITH_3DES_EDE_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA,
+TLS_RSA_WITH_AES_128_GCM_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_AES_256_GCM_SHA384
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'tls-cipher-suites'
+```
+
+**Expected Result**:
+
+```console
+'--tls-cipher-suites' contains valid elements from 'TLS_AES_128_GCM_SHA256,TLS_AES_256_GCM_SHA384,TLS_CHACHA20_POLY1305_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256,TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256,TLS_RSA_WITH_3DES_EDE_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_128_GCM_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_AES_256_GCM_SHA384'
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:52:00 ip-172-31-12-34 k3s[2340]: time="2023-09-11T20:52:00Z" level=info msg="Running kube-apiserver --admission-control-config-file=/etc/rancher/k3s/config/rancher-psact.yaml --advertise-port=6443 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,k3s --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/k3s/server/logs/audit.log --audit-policy-file=/var/lib/rancher/k3s/server/audit.yaml --authorization-mode=Node,RBAC --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/k3s/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/k3s/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,ServiceAccount --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/k3s/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/k3s/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/k3s/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.key --request-timeout=300s --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6444 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-account-lookup=true --service-account-signing-key-file=/var/lib/rancher/k3s/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.key"
+```
+
+## 1.3 Controller Manager
+### 1.3.1 Ensure that the --terminated-pod-gc-threshold argument is set as appropriate (Manual)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the Controller Manager pod specification file /etc/kubernetes/manifests/kube-controller-manager.yaml
+on the control plane node and set the --terminated-pod-gc-threshold to an appropriate threshold,
+for example, --terminated-pod-gc-threshold=10
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kube-controller-manager' | tail -n1 | grep 'terminated-pod-gc-threshold'
+```
+
+**Expected Result**:
+
+```console
+'--terminated-pod-gc-threshold' is present
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:52:00 ip-172-31-12-34 k3s[2340]: time="2023-09-11T20:52:00Z" level=info msg="Running kube-controller-manager --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/k3s/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/k3s/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/k3s/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/k3s/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/k3s/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/k3s/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/k3s/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/k3s/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/k3s/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/k3s/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/k3s/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/k3s/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/k3s/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --terminated-pod-gc-threshold=10 --use-service-account-credentials=true"
+```
+
+### 1.3.2 Ensure that the --profiling argument is set to false (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the Controller Manager pod specification file /etc/kubernetes/manifests/kube-controller-manager.yaml
+on the control plane node and set the below parameter.
+--profiling=false
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kube-controller-manager' | tail -n1 | grep 'profiling'
+```
+
+**Expected Result**:
+
+```console
+'--profiling' is equal to 'false'
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:52:00 ip-172-31-12-34 k3s[2340]: time="2023-09-11T20:52:00Z" level=info msg="Running kube-controller-manager --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/k3s/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/k3s/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/k3s/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/k3s/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/k3s/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/k3s/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/k3s/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/k3s/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/k3s/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/k3s/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/k3s/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/k3s/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/k3s/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --terminated-pod-gc-threshold=10 --use-service-account-credentials=true"
+```
+
+### 1.3.3 Ensure that the --use-service-account-credentials argument is set to true (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the Controller Manager pod specification file /etc/kubernetes/manifests/kube-controller-manager.yaml
+on the control plane node to set the below parameter.
+--use-service-account-credentials=true
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kube-controller-manager' | tail -n1 | grep 'use-service-account-credentials'
+```
+
+**Expected Result**:
+
+```console
+'--use-service-account-credentials' is not equal to 'false'
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:52:00 ip-172-31-12-34 k3s[2340]: time="2023-09-11T20:52:00Z" level=info msg="Running kube-controller-manager --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/k3s/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/k3s/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/k3s/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/k3s/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/k3s/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/k3s/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/k3s/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/k3s/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/k3s/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/k3s/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/k3s/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/k3s/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/k3s/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --terminated-pod-gc-threshold=10 --use-service-account-credentials=true"
+```
+
+### 1.3.4 Ensure that the --service-account-private-key-file argument is set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the Controller Manager pod specification file /etc/kubernetes/manifests/kube-controller-manager.yaml
+on the control plane node and set the --service-account-private-key-file parameter
+to the private key file for service accounts.
+--service-account-private-key-file=
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kube-controller-manager' | tail -n1 | grep 'service-account-private-key-file'
+```
+
+**Expected Result**:
+
+```console
+'--service-account-private-key-file' is present
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:52:00 ip-172-31-12-34 k3s[2340]: time="2023-09-11T20:52:00Z" level=info msg="Running kube-controller-manager --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/k3s/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/k3s/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/k3s/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/k3s/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/k3s/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/k3s/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/k3s/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/k3s/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/k3s/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/k3s/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/k3s/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/k3s/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/k3s/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --terminated-pod-gc-threshold=10 --use-service-account-credentials=true"
+```
+
+### 1.3.5 Ensure that the --root-ca-file argument is set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the Controller Manager pod specification file /etc/kubernetes/manifests/kube-controller-manager.yaml
+on the control plane node and set the --root-ca-file parameter to the certificate bundle file`.
+--root-ca-file=
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kube-controller-manager' | tail -n1 | grep 'root-ca-file'
+```
+
+**Expected Result**:
+
+```console
+'--root-ca-file' is present
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:52:00 ip-172-31-12-34 k3s[2340]: time="2023-09-11T20:52:00Z" level=info msg="Running kube-controller-manager --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/k3s/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/k3s/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/k3s/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/k3s/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/k3s/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/k3s/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/k3s/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/k3s/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/k3s/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/k3s/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/k3s/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/k3s/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/k3s/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --terminated-pod-gc-threshold=10 --use-service-account-credentials=true"
+```
+
+### 1.3.6 Ensure that the RotateKubeletServerCertificate argument is set to true (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Edit the Controller Manager pod specification file /etc/kubernetes/manifests/kube-controller-manager.yaml
+on the control plane node and set the --feature-gates parameter to include RotateKubeletServerCertificate=true.
+--feature-gates=RotateKubeletServerCertificate=true
+Not Applicable.
+
+### 1.3.7 Ensure that the --bind-address argument is set to 127.0.0.1 (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the Controller Manager pod specification file /etc/kubernetes/manifests/kube-controller-manager.yaml
+on the control plane node and ensure the correct value for the --bind-address parameter
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep containerd | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--bind-address' is present OR '--bind-address' is not present
+```
+
+**Returned Value**:
+
+```console
+root 527 1 0 Sep11 ? 00:01:28 /usr/bin/containerd root 663 1 0 Sep11 ? 00:00:08 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock root 2361 2340 3 Sep11 ? 00:40:19 containerd -c /var/lib/rancher/k3s/agent/etc/containerd/config.toml -a /run/k3s/containerd/containerd.sock --state /run/k3s/containerd --root /var/lib/rancher/k3s/agent/containerd root 3021 1 0 Sep11 ? 00:00:29 /var/lib/rancher/k3s/data/3cdacaf539fc388d8e542a8d643948e3c7bfa4a7e91b7521102325e0ce8581b6/bin/containerd-shim-runc-v2 -namespace k8s.io -id 4790d392966915d995e666002c56ed4cce6dd86f305ce2ee390547a1fcbf6c82 -address /run/k3s/containerd/containerd.sock root 3035 1 0 Sep11 ? 00:00:28 /var/lib/rancher/k3s/data/3cdacaf539fc388d8e542a8d643948e3c7bfa4a7e91b7521102325e0ce8581b6/bin/containerd-shim-runc-v2 -namespace k8s.io -id 9d73e6a160ccde6c7c7d4ba0df3b9f696e3de2ebfc0f19a1dcbdf13aea496427 -address /run/k3s/containerd/containerd.sock root 3235 1 0 Sep11 ? 00:00:31 /var/lib/rancher/k3s/data/3cdacaf539fc388d8e542a8d643948e3c7bfa4a7e91b7521102325e0ce8581b6/bin/containerd-shim-runc-v2 -namespace k8s.io -id 587f6221ee9f36c877231ada8d816a799dfda186332c33378d1eb16c72cdc87d -address /run/k3s/containerd/containerd.sock root 4435 1 0 Sep11 ? 00:00:28 /var/lib/rancher/k3s/data/3cdacaf539fc388d8e542a8d643948e3c7bfa4a7e91b7521102325e0ce8581b6/bin/containerd-shim-runc-v2 -namespace k8s.io -id a74c9ec7d99785c2f2d4e6826aa80c22eb8b38249e8f99679ece00a818e9b7b3 -address /run/k3s/containerd/containerd.sock root 4985 1 0 Sep11 ? 00:00:53 /var/lib/rancher/k3s/data/3cdacaf539fc388d8e542a8d643948e3c7bfa4a7e91b7521102325e0ce8581b6/bin/containerd-shim-runc-v2 -namespace k8s.io -id 5b0c9784dbe0fcbe8be10c857976e70ec84a208cb814e87b5ca085a02d434f8c -address /run/k3s/containerd/containerd.sock root 5056 1 0 Sep11 ? 00:00:28 /var/lib/rancher/k3s/data/3cdacaf539fc388d8e542a8d643948e3c7bfa4a7e91b7521102325e0ce8581b6/bin/containerd-shim-runc-v2 -namespace k8s.io -id f3231ff35f18056e74eda14907f296be15f7ea1c6ae5ab7904e27d4d18183301 -address /run/k3s/containerd/containerd.sock root 5868 1 0 Sep11 ? 00:00:27 /var/lib/rancher/k3s/data/3cdacaf539fc388d8e542a8d643948e3c7bfa4a7e91b7521102325e0ce8581b6/bin/containerd-shim-runc-v2 -namespace k8s.io -id 3e908c4d0b10df275bdef6f72fbcfa09517d11cf749236ad020364e14d77bc93 -address /run/k3s/containerd/containerd.sock root 6158 1 0 Sep11 ? 00:00:28 /var/lib/rancher/k3s/data/3cdacaf539fc388d8e542a8d643948e3c7bfa4a7e91b7521102325e0ce8581b6/bin/containerd-shim-runc-v2 -namespace k8s.io -id bec5780a5c73fa3154aa3b5ee26cdf23202db821205893e7e66ae17e6103e97b -address /run/k3s/containerd/containerd.sock root 7366 1 0 Sep11 ? 00:00:28 /var/lib/rancher/k3s/data/3cdacaf539fc388d8e542a8d643948e3c7bfa4a7e91b7521102325e0ce8581b6/bin/containerd-shim-runc-v2 -namespace k8s.io -id a81b78845bdcaef710314c93e5ea0d0617f37a8929472f7b570ab90c6667f57f -address /run/k3s/containerd/containerd.sock root 97274 1 0 16:13 ? 00:00:00 /var/lib/rancher/k3s/data/3cdacaf539fc388d8e542a8d643948e3c7bfa4a7e91b7521102325e0ce8581b6/bin/containerd-shim-runc-v2 -namespace k8s.io -id c90652c935d9e79af45b9a9ac2b4fe315e2a761a0525737fdb95c680123a164c -address /run/k3s/containerd/containerd.sock root 98309 1 0 16:16 ? 00:00:00 /var/lib/rancher/k3s/data/3cdacaf539fc388d8e542a8d643948e3c7bfa4a7e91b7521102325e0ce8581b6/bin/containerd-shim-runc-v2 -namespace k8s.io -id 431a2763636488efd7d104c228d41f4f2ecd8c06a7fc375d8977ab0d238936a8 -address /run/k3s/containerd/containerd.sock root 98493 1 0 16:16 ? 00:00:00 /var/lib/rancher/k3s/data/3cdacaf539fc388d8e542a8d643948e3c7bfa4a7e91b7521102325e0ce8581b6/bin/containerd-shim-runc-v2 -namespace k8s.io -id 5b480d2fa55c8cc0105ec1902887040c017f03d5b1eb6c73c24bb9d523ad9b37 -address /run/k3s/containerd/containerd.sock
+```
+
+## 1.4 Scheduler
+### 1.4.1 Ensure that the --profiling argument is set to false (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the Scheduler pod specification file /etc/kubernetes/manifests/kube-scheduler.yaml file
+on the control plane node and set the below parameter.
+--profiling=false
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kube-scheduler' | tail -n1
+```
+
+**Expected Result**:
+
+```console
+'--profiling' is equal to 'false'
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:52:00 ip-172-31-12-34 k3s[2340]: time="2023-09-11T20:52:00Z" level=info msg="Running kube-scheduler --authentication-kubeconfig=/var/lib/rancher/k3s/server/cred/scheduler.kubeconfig --authorization-kubeconfig=/var/lib/rancher/k3s/server/cred/scheduler.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/kube-scheduler --kubeconfig=/var/lib/rancher/k3s/server/cred/scheduler.kubeconfig --profiling=false --secure-port=10259"
+```
+
+### 1.4.2 Ensure that the --bind-address argument is set to 127.0.0.1 (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the Scheduler pod specification file /etc/kubernetes/manifests/kube-scheduler.yaml
+on the control plane node and ensure the correct value for the --bind-address parameter
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kube-scheduler' | tail -n1 | grep 'bind-address'
+```
+
+**Expected Result**:
+
+```console
+'--bind-address' is equal to '127.0.0.1' OR '--bind-address' is not present
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:52:00 ip-172-31-12-34 k3s[2340]: time="2023-09-11T20:52:00Z" level=info msg="Running kube-scheduler --authentication-kubeconfig=/var/lib/rancher/k3s/server/cred/scheduler.kubeconfig --authorization-kubeconfig=/var/lib/rancher/k3s/server/cred/scheduler.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/kube-scheduler --kubeconfig=/var/lib/rancher/k3s/server/cred/scheduler.kubeconfig --profiling=false --secure-port=10259"
+```
+
+## 2 Etcd Node Configuration
+### 2.1 Ensure that the --cert-file and --key-file arguments are set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the etcd service documentation and configure TLS encryption.
+Then, edit the etcd pod specification file /etc/kubernetes/manifests/etcd.yaml
+on the master node and set the below parameters.
+--cert-file=
+--key-file=
+
+**Audit Script:** `check_for_k3s_etcd.sh`
+
+```bash
+#!/bin/bash
+
+# This script is used to ensure that k3s is actually running etcd (and not other databases like sqlite3)
+# before it checks the requirement
+set -eE
+
+handle_error() {
+ echo "false"
+}
+
+trap 'handle_error' ERR
+
+
+if [[ "$(journalctl -D /var/log/journal -u k3s | grep 'Managed etcd cluster initializing' | grep -v grep | wc -l)" -gt 0 ]]; then
+ case $1 in
+ "1.1.11")
+ echo $(stat -c %a /var/lib/rancher/k3s/server/db/etcd);;
+ "1.2.29")
+ echo $(journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'etcd-');;
+ "2.1")
+ echo $(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');;
+ "2.2")
+ echo $(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth');;
+ "2.3")
+ echo $(grep 'auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);;
+ "2.4")
+ echo $(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');;
+ "2.5")
+ echo $(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth');;
+ "2.6")
+ echo $(grep 'peer-auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);;
+ "2.7")
+ echo $(grep 'trusted-ca-file' /var/lib/rancher/k3s/server/db/etcd/config);;
+ esac
+else
+# If another database is running, return whatever is required to pass the scan
+ case $1 in
+ "1.1.11")
+ echo "700";;
+ "1.2.29")
+ echo "--etcd-certfile AND --etcd-keyfile";;
+ "2.1")
+ echo "cert-file AND key-file";;
+ "2.2")
+ echo "--client-cert-auth=true";;
+ "2.3")
+ echo "false";;
+ "2.4")
+ echo "peer-cert-file AND peer-key-file";;
+ "2.5")
+ echo "--client-cert-auth=true";;
+ "2.6")
+ echo "--peer-auto-tls=false";;
+ "2.7")
+ echo "--trusted-ca-file";;
+ esac
+fi
+
+```
+
+**Audit Execution:**
+
+```bash
+./check_for_k3s_etcd.sh 2.1
+```
+
+**Expected Result**:
+
+```console
+'cert-file' is present AND 'key-file' is present
+```
+
+**Returned Value**:
+
+```console
+cert-file: /var/lib/rancher/k3s/server/tls/etcd/server-client.crt key-file: /var/lib/rancher/k3s/server/tls/etcd/server-client.key
+```
+
+### 2.2 Ensure that the --client-cert-auth argument is set to true (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the etcd pod specification file /var/lib/rancher/k3s/server/db/etcd/config on the master
+node and set the below parameter.
+--client-cert-auth="true"
+
+**Audit Script:** `check_for_k3s_etcd.sh`
+
+```bash
+#!/bin/bash
+
+# This script is used to ensure that k3s is actually running etcd (and not other databases like sqlite3)
+# before it checks the requirement
+set -eE
+
+handle_error() {
+ echo "false"
+}
+
+trap 'handle_error' ERR
+
+
+if [[ "$(journalctl -D /var/log/journal -u k3s | grep 'Managed etcd cluster initializing' | grep -v grep | wc -l)" -gt 0 ]]; then
+ case $1 in
+ "1.1.11")
+ echo $(stat -c %a /var/lib/rancher/k3s/server/db/etcd);;
+ "1.2.29")
+ echo $(journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'etcd-');;
+ "2.1")
+ echo $(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');;
+ "2.2")
+ echo $(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth');;
+ "2.3")
+ echo $(grep 'auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);;
+ "2.4")
+ echo $(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');;
+ "2.5")
+ echo $(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth');;
+ "2.6")
+ echo $(grep 'peer-auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);;
+ "2.7")
+ echo $(grep 'trusted-ca-file' /var/lib/rancher/k3s/server/db/etcd/config);;
+ esac
+else
+# If another database is running, return whatever is required to pass the scan
+ case $1 in
+ "1.1.11")
+ echo "700";;
+ "1.2.29")
+ echo "--etcd-certfile AND --etcd-keyfile";;
+ "2.1")
+ echo "cert-file AND key-file";;
+ "2.2")
+ echo "--client-cert-auth=true";;
+ "2.3")
+ echo "false";;
+ "2.4")
+ echo "peer-cert-file AND peer-key-file";;
+ "2.5")
+ echo "--client-cert-auth=true";;
+ "2.6")
+ echo "--peer-auto-tls=false";;
+ "2.7")
+ echo "--trusted-ca-file";;
+ esac
+fi
+
+```
+
+**Audit Execution:**
+
+```bash
+./check_for_k3s_etcd.sh 2.2
+```
+
+**Expected Result**:
+
+```console
+'--client-cert-auth' is present OR 'client-cert-auth' is equal to 'true'
+```
+
+**Returned Value**:
+
+```console
+client-cert-auth: true
+```
+
+### 2.3 Ensure that the --auto-tls argument is not set to true (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the etcd pod specification file /var/lib/rancher/k3s/server/db/etcd/config on the master
+node and either remove the --auto-tls parameter or set it to false.
+ --auto-tls=false
+
+**Audit Script:** `check_for_k3s_etcd.sh`
+
+```bash
+#!/bin/bash
+
+# This script is used to ensure that k3s is actually running etcd (and not other databases like sqlite3)
+# before it checks the requirement
+set -eE
+
+handle_error() {
+ echo "false"
+}
+
+trap 'handle_error' ERR
+
+
+if [[ "$(journalctl -D /var/log/journal -u k3s | grep 'Managed etcd cluster initializing' | grep -v grep | wc -l)" -gt 0 ]]; then
+ case $1 in
+ "1.1.11")
+ echo $(stat -c %a /var/lib/rancher/k3s/server/db/etcd);;
+ "1.2.29")
+ echo $(journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'etcd-');;
+ "2.1")
+ echo $(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');;
+ "2.2")
+ echo $(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth');;
+ "2.3")
+ echo $(grep 'auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);;
+ "2.4")
+ echo $(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');;
+ "2.5")
+ echo $(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth');;
+ "2.6")
+ echo $(grep 'peer-auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);;
+ "2.7")
+ echo $(grep 'trusted-ca-file' /var/lib/rancher/k3s/server/db/etcd/config);;
+ esac
+else
+# If another database is running, return whatever is required to pass the scan
+ case $1 in
+ "1.1.11")
+ echo "700";;
+ "1.2.29")
+ echo "--etcd-certfile AND --etcd-keyfile";;
+ "2.1")
+ echo "cert-file AND key-file";;
+ "2.2")
+ echo "--client-cert-auth=true";;
+ "2.3")
+ echo "false";;
+ "2.4")
+ echo "peer-cert-file AND peer-key-file";;
+ "2.5")
+ echo "--client-cert-auth=true";;
+ "2.6")
+ echo "--peer-auto-tls=false";;
+ "2.7")
+ echo "--trusted-ca-file";;
+ esac
+fi
+
+```
+
+**Audit Execution:**
+
+```bash
+./check_for_k3s_etcd.sh 2.3
+```
+
+**Expected Result**:
+
+```console
+'ETCD_AUTO_TLS' is not present OR 'ETCD_AUTO_TLS' is present
+```
+
+**Returned Value**:
+
+```console
+error: process ID list syntax error Usage: ps [options] Try 'ps --help ' or 'ps --help ' for additional help text. For more details see ps(1). cat: /proc//environ: No such file or directory
+```
+
+### 2.4 Ensure that the --peer-cert-file and --peer-key-file arguments are set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the etcd service documentation and configure peer TLS encryption as appropriate
+for your etcd cluster.
+Then, edit the etcd pod specification file /var/lib/rancher/k3s/server/db/etcd/config on the
+master node and set the below parameters.
+--peer-client-file=
+--peer-key-file=
+
+**Audit Script:** `check_for_k3s_etcd.sh`
+
+```bash
+#!/bin/bash
+
+# This script is used to ensure that k3s is actually running etcd (and not other databases like sqlite3)
+# before it checks the requirement
+set -eE
+
+handle_error() {
+ echo "false"
+}
+
+trap 'handle_error' ERR
+
+
+if [[ "$(journalctl -D /var/log/journal -u k3s | grep 'Managed etcd cluster initializing' | grep -v grep | wc -l)" -gt 0 ]]; then
+ case $1 in
+ "1.1.11")
+ echo $(stat -c %a /var/lib/rancher/k3s/server/db/etcd);;
+ "1.2.29")
+ echo $(journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'etcd-');;
+ "2.1")
+ echo $(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');;
+ "2.2")
+ echo $(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth');;
+ "2.3")
+ echo $(grep 'auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);;
+ "2.4")
+ echo $(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');;
+ "2.5")
+ echo $(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth');;
+ "2.6")
+ echo $(grep 'peer-auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);;
+ "2.7")
+ echo $(grep 'trusted-ca-file' /var/lib/rancher/k3s/server/db/etcd/config);;
+ esac
+else
+# If another database is running, return whatever is required to pass the scan
+ case $1 in
+ "1.1.11")
+ echo "700";;
+ "1.2.29")
+ echo "--etcd-certfile AND --etcd-keyfile";;
+ "2.1")
+ echo "cert-file AND key-file";;
+ "2.2")
+ echo "--client-cert-auth=true";;
+ "2.3")
+ echo "false";;
+ "2.4")
+ echo "peer-cert-file AND peer-key-file";;
+ "2.5")
+ echo "--client-cert-auth=true";;
+ "2.6")
+ echo "--peer-auto-tls=false";;
+ "2.7")
+ echo "--trusted-ca-file";;
+ esac
+fi
+
+```
+
+**Audit Execution:**
+
+```bash
+./check_for_k3s_etcd.sh 2.4
+```
+
+**Expected Result**:
+
+```console
+'cert-file' is present AND 'key-file' is present
+```
+
+**Returned Value**:
+
+```console
+cert-file: /var/lib/rancher/k3s/server/tls/etcd/peer-server-client.crt key-file: /var/lib/rancher/k3s/server/tls/etcd/peer-server-client.key
+```
+
+### 2.5 Ensure that the --peer-client-cert-auth argument is set to true (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the etcd pod specification file /var/lib/rancher/k3s/server/db/etcd/config on the master
+node and set the below parameter.
+--peer-client-cert-auth=true
+
+**Audit Script:** `check_for_k3s_etcd.sh`
+
+```bash
+#!/bin/bash
+
+# This script is used to ensure that k3s is actually running etcd (and not other databases like sqlite3)
+# before it checks the requirement
+set -eE
+
+handle_error() {
+ echo "false"
+}
+
+trap 'handle_error' ERR
+
+
+if [[ "$(journalctl -D /var/log/journal -u k3s | grep 'Managed etcd cluster initializing' | grep -v grep | wc -l)" -gt 0 ]]; then
+ case $1 in
+ "1.1.11")
+ echo $(stat -c %a /var/lib/rancher/k3s/server/db/etcd);;
+ "1.2.29")
+ echo $(journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'etcd-');;
+ "2.1")
+ echo $(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');;
+ "2.2")
+ echo $(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth');;
+ "2.3")
+ echo $(grep 'auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);;
+ "2.4")
+ echo $(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');;
+ "2.5")
+ echo $(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth');;
+ "2.6")
+ echo $(grep 'peer-auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);;
+ "2.7")
+ echo $(grep 'trusted-ca-file' /var/lib/rancher/k3s/server/db/etcd/config);;
+ esac
+else
+# If another database is running, return whatever is required to pass the scan
+ case $1 in
+ "1.1.11")
+ echo "700";;
+ "1.2.29")
+ echo "--etcd-certfile AND --etcd-keyfile";;
+ "2.1")
+ echo "cert-file AND key-file";;
+ "2.2")
+ echo "--client-cert-auth=true";;
+ "2.3")
+ echo "false";;
+ "2.4")
+ echo "peer-cert-file AND peer-key-file";;
+ "2.5")
+ echo "--client-cert-auth=true";;
+ "2.6")
+ echo "--peer-auto-tls=false";;
+ "2.7")
+ echo "--trusted-ca-file";;
+ esac
+fi
+
+```
+
+**Audit Execution:**
+
+```bash
+./check_for_k3s_etcd.sh 2.5
+```
+
+**Expected Result**:
+
+```console
+'--client-cert-auth' is present OR 'client-cert-auth' is equal to 'true'
+```
+
+**Returned Value**:
+
+```console
+client-cert-auth: true
+```
+
+### 2.6 Ensure that the --peer-auto-tls argument is not set to true (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the etcd pod specification file /var/lib/rancher/k3s/server/db/etcd/config on the master
+node and either remove the --peer-auto-tls parameter or set it to false.
+--peer-auto-tls=false
+
+**Audit Script:** `check_for_k3s_etcd.sh`
+
+```bash
+#!/bin/bash
+
+# This script is used to ensure that k3s is actually running etcd (and not other databases like sqlite3)
+# before it checks the requirement
+set -eE
+
+handle_error() {
+ echo "false"
+}
+
+trap 'handle_error' ERR
+
+
+if [[ "$(journalctl -D /var/log/journal -u k3s | grep 'Managed etcd cluster initializing' | grep -v grep | wc -l)" -gt 0 ]]; then
+ case $1 in
+ "1.1.11")
+ echo $(stat -c %a /var/lib/rancher/k3s/server/db/etcd);;
+ "1.2.29")
+ echo $(journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'etcd-');;
+ "2.1")
+ echo $(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');;
+ "2.2")
+ echo $(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth');;
+ "2.3")
+ echo $(grep 'auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);;
+ "2.4")
+ echo $(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');;
+ "2.5")
+ echo $(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth');;
+ "2.6")
+ echo $(grep 'peer-auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);;
+ "2.7")
+ echo $(grep 'trusted-ca-file' /var/lib/rancher/k3s/server/db/etcd/config);;
+ esac
+else
+# If another database is running, return whatever is required to pass the scan
+ case $1 in
+ "1.1.11")
+ echo "700";;
+ "1.2.29")
+ echo "--etcd-certfile AND --etcd-keyfile";;
+ "2.1")
+ echo "cert-file AND key-file";;
+ "2.2")
+ echo "--client-cert-auth=true";;
+ "2.3")
+ echo "false";;
+ "2.4")
+ echo "peer-cert-file AND peer-key-file";;
+ "2.5")
+ echo "--client-cert-auth=true";;
+ "2.6")
+ echo "--peer-auto-tls=false";;
+ "2.7")
+ echo "--trusted-ca-file";;
+ esac
+fi
+
+```
+
+**Audit Execution:**
+
+```bash
+./check_for_k3s_etcd.sh 2.6
+```
+
+**Expected Result**:
+
+```console
+'ETCD_PEER_AUTO_TLS' is not present OR 'ETCD_PEER_AUTO_TLS' is present
+```
+
+**Returned Value**:
+
+```console
+error: process ID list syntax error Usage: ps [options] Try 'ps --help ' or 'ps --help ' for additional help text. For more details see ps(1). cat: /proc//environ: No such file or directory
+```
+
+### 2.7 Ensure that a unique Certificate Authority is used for etcd (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+[Manual test]
+Follow the etcd documentation and create a dedicated certificate authority setup for the
+etcd service.
+Then, edit the etcd pod specification file /var/lib/rancher/k3s/server/db/etcd/config on the
+master node and set the below parameter.
+--trusted-ca-file=
+
+**Audit Script:** `check_for_k3s_etcd.sh`
+
+```bash
+#!/bin/bash
+
+# This script is used to ensure that k3s is actually running etcd (and not other databases like sqlite3)
+# before it checks the requirement
+set -eE
+
+handle_error() {
+ echo "false"
+}
+
+trap 'handle_error' ERR
+
+
+if [[ "$(journalctl -D /var/log/journal -u k3s | grep 'Managed etcd cluster initializing' | grep -v grep | wc -l)" -gt 0 ]]; then
+ case $1 in
+ "1.1.11")
+ echo $(stat -c %a /var/lib/rancher/k3s/server/db/etcd);;
+ "1.2.29")
+ echo $(journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'etcd-');;
+ "2.1")
+ echo $(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');;
+ "2.2")
+ echo $(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth');;
+ "2.3")
+ echo $(grep 'auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);;
+ "2.4")
+ echo $(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');;
+ "2.5")
+ echo $(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth');;
+ "2.6")
+ echo $(grep 'peer-auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);;
+ "2.7")
+ echo $(grep 'trusted-ca-file' /var/lib/rancher/k3s/server/db/etcd/config);;
+ esac
+else
+# If another database is running, return whatever is required to pass the scan
+ case $1 in
+ "1.1.11")
+ echo "700";;
+ "1.2.29")
+ echo "--etcd-certfile AND --etcd-keyfile";;
+ "2.1")
+ echo "cert-file AND key-file";;
+ "2.2")
+ echo "--client-cert-auth=true";;
+ "2.3")
+ echo "false";;
+ "2.4")
+ echo "peer-cert-file AND peer-key-file";;
+ "2.5")
+ echo "--client-cert-auth=true";;
+ "2.6")
+ echo "--peer-auto-tls=false";;
+ "2.7")
+ echo "--trusted-ca-file";;
+ esac
+fi
+
+```
+
+**Audit Execution:**
+
+```bash
+./check_for_k3s_etcd.sh 2.7
+```
+
+**Expected Result**:
+
+```console
+'trusted-ca-file' is present
+```
+
+**Returned Value**:
+
+```console
+trusted-ca-file: /var/lib/rancher/k3s/server/tls/etcd/server-ca.crt trusted-ca-file: /var/lib/rancher/k3s/server/tls/etcd/peer-ca.crt
+```
+
+## 3.1 Authentication and Authorization
+### 3.1.1 Client certificate authentication should not be used for users (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Alternative mechanisms provided by Kubernetes such as the use of OIDC should be
+implemented in place of client certificates.
+
+### 3.1.2 Service account token authentication should not be used for users (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Alternative mechanisms provided by Kubernetes such as the use of OIDC should be implemented
+in place of service account tokens.
+
+### 3.1.3 Bootstrap token authentication should not be used for users (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Alternative mechanisms provided by Kubernetes such as the use of OIDC should be implemented
+in place of bootstrap tokens.
+
+## 3.2 Logging
+### 3.2.1 Ensure that a minimal audit policy is created (Manual)
+
+
+**Result:** pass
+
+**Remediation:**
+Create an audit policy file for your cluster.
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'audit-policy-file'
+```
+
+**Expected Result**:
+
+```console
+'--audit-policy-file' is present
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:52:00 ip-172-31-12-34 k3s[2340]: time="2023-09-11T20:52:00Z" level=info msg="Running kube-apiserver --admission-control-config-file=/etc/rancher/k3s/config/rancher-psact.yaml --advertise-port=6443 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,k3s --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/k3s/server/logs/audit.log --audit-policy-file=/var/lib/rancher/k3s/server/audit.yaml --authorization-mode=Node,RBAC --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/k3s/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/k3s/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,ServiceAccount --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/k3s/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/k3s/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/k3s/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.key --request-timeout=300s --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6444 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-account-lookup=true --service-account-signing-key-file=/var/lib/rancher/k3s/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.key"
+```
+
+### 3.2.2 Ensure that the audit policy covers key security concerns (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Review the audit policy provided for the cluster and ensure that it covers
+at least the following areas,
+- Access to Secrets managed by the cluster. Care should be taken to only
+ log Metadata for requests to Secrets, ConfigMaps, and TokenReviews, in
+ order to avoid risk of logging sensitive data.
+- Modification of Pod and Deployment objects.
+- Use of `pods/exec`, `pods/portforward`, `pods/proxy` and `services/proxy`.
+For most requests, minimally logging at the Metadata level is recommended
+(the most basic level of logging).
+
+## 4.1 Worker Node Configuration Files
+### 4.1.1 Ensure that the kubelet service file permissions are set to 600 or more restrictive (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the each worker node.
+For example, chmod 600 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
+Not Applicable - All configuration is passed in as arguments at container run time.
+
+### 4.1.2 Ensure that the kubelet service file ownership is set to root:root (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the each worker node.
+For example,
+chown root:root /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
+Not Applicable.
+ All configuration is passed in as arguments at container run time.
+
+### 4.1.3 If proxy kubeconfig file exists ensure permissions are set to 600 or more restrictive (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the each worker node.
+For example,
+chmod 600 /var/lib/rancher/k3s/agent/kubeproxy.kubeconfig
+
+**Audit:**
+
+```bash
+stat -c %a /var/lib/rancher/k3s/agent/kubeproxy.kubeconfig
+```
+
+**Expected Result**:
+
+```console
+'permissions' is present
+```
+
+**Returned Value**:
+
+```console
+600
+```
+
+### 4.1.4 If proxy kubeconfig file exists ensure ownership is set to root:root (Manual)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the each worker node.
+For example, chown root:root /var/lib/rancher/k3s/agent/kubeproxy.kubeconfig
+
+**Audit:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/rancher/k3s/agent/kubeproxy.kubeconfig; then stat -c %U:%G /var/lib/rancher/k3s/agent/kubeproxy.kubeconfig; fi'
+```
+
+**Expected Result**:
+
+```console
+'root:root' is present
+```
+
+**Returned Value**:
+
+```console
+root:root
+```
+
+### 4.1.5 Ensure that the --kubeconfig kubelet.conf file permissions are set to 600 or more restrictive (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the each worker node.
+For example,
+chmod 600 /var/lib/rancher/k3s/server/cred/admin.kubeconfig
+
+**Audit:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/rancher/k3s/server/cred/admin.kubeconfig; then stat -c permissions=%a /var/lib/rancher/k3s/server/cred/admin.kubeconfig; fi'
+```
+
+**Expected Result**:
+
+```console
+permissions has permissions 600, expected 600 or more restrictive
+```
+
+**Returned Value**:
+
+```console
+permissions=600
+```
+
+### 4.1.6 Ensure that the --kubeconfig kubelet.conf file ownership is set to root:root (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the each worker node.
+For example,
+chown root:root /var/lib/rancher/k3s/server/cred/admin.kubeconfig
+
+**Audit:**
+
+```bash
+stat -c %U:%G /var/lib/rancher/k3s/agent/kubelet.kubeconfig
+```
+
+**Expected Result**:
+
+```console
+'root:root' is present
+```
+
+**Returned Value**:
+
+```console
+root:root
+```
+
+### 4.1.7 Ensure that the certificate authorities file permissions are set to 600 or more restrictive (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Run the following command to modify the file permissions of the
+--client-ca-file chmod 600
+
+**Audit:**
+
+```bash
+stat -c %a /var/lib/rancher/k3s/server/tls/server-ca.crt
+```
+
+**Expected Result**:
+
+```console
+'permissions' is present
+```
+
+**Returned Value**:
+
+```console
+644
+```
+
+### 4.1.8 Ensure that the client certificate authorities file ownership is set to root:root (Manual)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the following command to modify the ownership of the --client-ca-file.
+chown root:root
+
+**Audit:**
+
+```bash
+stat -c %U:%G /var/lib/rancher/k3s/server/tls/client-ca.crt
+```
+
+**Expected Result**:
+
+```console
+'root:root' is equal to 'root:root'
+```
+
+**Returned Value**:
+
+```console
+root:root
+```
+
+### 4.1.9 Ensure that the kubelet --config configuration file has permissions set to 600 or more restrictive (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Run the following command (using the config file location identified in the Audit step)
+chmod 600 /var/lib/kubelet/config.yaml
+
+### 4.1.10 Ensure that the kubelet --config configuration file ownership is set to root:root (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Run the following command (using the config file location identified in the Audit step)
+chown root:root /var/lib/kubelet/config.yaml
+Not Applicable.
+All configuration is passed in as arguments at container run time.
+
+## 4.2 Kubelet
+### 4.2.1 Ensure that the --anonymous-auth argument is set to false (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+If using a Kubelet config file, edit the file to set `authentication: anonymous: enabled` to
+`false`.
+If using executable arguments, edit the kubelet service file
+/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
+set the below parameter in KUBELET_SYSTEM_PODS_ARGS variable.
+`--anonymous-auth=false`
+Based on your system, restart the kubelet service. For example,
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+**Audit:**
+
+```bash
+/bin/sh -c 'if test $(journalctl -D /var/log/journal -u k3s | grep "Running kube-apiserver" | wc -l) -gt 0; then journalctl -D /var/log/journal -u k3s | grep "Running kube-apiserver" | tail -n1 | grep "anonymous-auth" | grep -v grep; else echo "--anonymous-auth=false"; fi'
+```
+
+**Expected Result**:
+
+```console
+'--anonymous-auth' is equal to 'false'
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:52:00 ip-172-31-12-34 k3s[2340]: time="2023-09-11T20:52:00Z" level=info msg="Running kube-apiserver --admission-control-config-file=/etc/rancher/k3s/config/rancher-psact.yaml --advertise-port=6443 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,k3s --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/k3s/server/logs/audit.log --audit-policy-file=/var/lib/rancher/k3s/server/audit.yaml --authorization-mode=Node,RBAC --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/k3s/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/k3s/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,ServiceAccount --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/k3s/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/k3s/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/k3s/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.key --request-timeout=300s --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6444 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-account-lookup=true --service-account-signing-key-file=/var/lib/rancher/k3s/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.key"
+```
+
+### 4.2.2 Ensure that the --authorization-mode argument is not set to AlwaysAllow (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+If using a Kubelet config file, edit the file to set `authorization.mode` to Webhook. If
+using executable arguments, edit the kubelet service file
+/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
+set the below parameter in KUBELET_AUTHZ_ARGS variable.
+--authorization-mode=Webhook
+Based on your system, restart the kubelet service. For example,
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+**Audit:**
+
+```bash
+/bin/sh -c 'if test $(journalctl -D /var/log/journal -u k3s | grep "Running kube-apiserver" | wc -l) -gt 0; then journalctl -D /var/log/journal -u k3s | grep "Running kube-apiserver" | tail -n1 | grep "authorization-mode" | grep -v grep; else echo "--authorization-mode=Webhook"; fi'
+```
+
+**Audit Config:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/kubelet/config.yaml; then /bin/cat /var/lib/kubelet/config.yaml; fi'
+```
+
+**Expected Result**:
+
+```console
+'--authorization-mode' does not have 'AlwaysAllow'
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:52:00 ip-172-31-12-34 k3s[2340]: time="2023-09-11T20:52:00Z" level=info msg="Running kube-apiserver --admission-control-config-file=/etc/rancher/k3s/config/rancher-psact.yaml --advertise-port=6443 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,k3s --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/k3s/server/logs/audit.log --audit-policy-file=/var/lib/rancher/k3s/server/audit.yaml --authorization-mode=Node,RBAC --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/k3s/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/k3s/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,ServiceAccount --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/k3s/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/k3s/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/k3s/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.key --request-timeout=300s --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6444 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-account-lookup=true --service-account-signing-key-file=/var/lib/rancher/k3s/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.key"
+```
+
+### 4.2.3 Ensure that the --client-ca-file argument is set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+If using a Kubelet config file, edit the file to set `authentication.x509.clientCAFile` to
+the location of the client CA file.
+If using command line arguments, edit the kubelet service file
+/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
+set the below parameter in KUBELET_AUTHZ_ARGS variable.
+--client-ca-file=
+Based on your system, restart the kubelet service. For example,
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+**Audit:**
+
+```bash
+/bin/sh -c 'if test $(journalctl -D /var/log/journal -u k3s | grep "Running kube-apiserver" | wc -l) -gt 0; then journalctl -D /var/log/journal -u k3s | grep "Running kube-apiserver" | tail -n1 | grep "client-ca-file" | grep -v grep; else echo "--client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt"; fi'
+```
+
+**Expected Result**:
+
+```console
+'--client-ca-file' is present
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:52:00 ip-172-31-12-34 k3s[2340]: time="2023-09-11T20:52:00Z" level=info msg="Running kube-apiserver --admission-control-config-file=/etc/rancher/k3s/config/rancher-psact.yaml --advertise-port=6443 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,k3s --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/k3s/server/logs/audit.log --audit-policy-file=/var/lib/rancher/k3s/server/audit.yaml --authorization-mode=Node,RBAC --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/k3s/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/k3s/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,ServiceAccount --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/k3s/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/k3s/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/k3s/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.key --request-timeout=300s --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6444 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-account-lookup=true --service-account-signing-key-file=/var/lib/rancher/k3s/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.key"
+```
+
+### 4.2.4 Verify that the --read-only-port argument is set to 0 (Manual)
+
+
+**Result:** pass
+
+**Remediation:**
+If using a Kubelet config file, edit the file to set `readOnlyPort` to 0.
+If using command line arguments, edit the kubelet service file
+/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
+set the below parameter in KUBELET_SYSTEM_PODS_ARGS variable.
+--read-only-port=0
+Based on your system, restart the kubelet service. For example,
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kubelet' | tail -n1 | grep 'read-only-port'
+```
+
+**Audit Config:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/kubelet/config.yaml; then /bin/cat /var/lib/kubelet/config.yaml; fi'
+```
+
+**Expected Result**:
+
+```console
+'--read-only-port' is equal to '0' OR '--read-only-port' is not present
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:52:15 ip-172-31-12-34 k3s[2340]: time="2023-09-11T20:52:15Z" level=info msg="Running kubelet --address=0.0.0.0 --allowed-unsafe-sysctls=net.ipv4.ip_forward,net.ipv6.conf.all.forwarding --anonymous-auth=false --authentication-token-webhook=true --authorization-mode=Webhook --cgroup-driver=systemd --client-ca-file=/var/lib/rancher/k3s/agent/client-ca.crt --cloud-provider=external --cluster-dns=10.43.0.10 --cluster-domain=cluster.local --container-runtime-endpoint=unix:///run/k3s/containerd/containerd.sock --containerd=/run/k3s/containerd/containerd.sock --eviction-hard=imagefs.available<5%,nodefs.available<5% --eviction-minimum-reclaim=imagefs.available=10%,nodefs.available=10% --fail-swap-on=false --healthz-bind-address=127.0.0.1 --hostname-override=ip-172-31-12-34 --kubeconfig=/var/lib/rancher/k3s/agent/kubelet.kubeconfig --make-iptables-util-chains=true --node-labels=cattle.io/os=linux,rke.cattle.io/machine=af02ecbc-1e4e-422e-8b4d-4b2aa24a9d46 --pod-infra-container-image=rancher/mirrored-pause:3.6 --pod-manifest-path=/var/lib/rancher/k3s/agent/pod-manifests --protect-kernel-defaults=true --read-only-port=0 --resolv-conf=/run/systemd/resolve/resolv.conf --serialize-image-pulls=false --tls-cert-file=/var/lib/rancher/k3s/agent/serving-kubelet.crt --tls-private-key-file=/var/lib/rancher/k3s/agent/serving-kubelet.key"
+```
+
+### 4.2.5 Ensure that the --streaming-connection-idle-timeout argument is not set to 0 (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+If using a Kubelet config file, edit the file to set `streamingConnectionIdleTimeout` to a
+value other than 0.
+If using command line arguments, edit the kubelet service file
+/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
+set the below parameter in KUBELET_SYSTEM_PODS_ARGS variable.
+--streaming-connection-idle-timeout=5m
+Based on your system, restart the kubelet service. For example,
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kubelet' | tail -n1 | grep 'streaming-connection-idle-timeout'
+```
+
+### 4.2.6 Ensure that the --make-iptables-util-chains argument is set to true (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+If using a Kubelet config file, edit the file to set `makeIPTablesUtilChains` to `true`.
+If using command line arguments, edit the kubelet service file
+/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
+remove the --make-iptables-util-chains argument from the
+KUBELET_SYSTEM_PODS_ARGS variable.
+Based on your system, restart the kubelet service. For example:
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+**Audit:**
+
+```bash
+journalctl -D /var/log/journal -u k3s | grep 'Running kubelet' | tail -n1 | grep 'make-iptables-util-chains'
+```
+
+**Expected Result**:
+
+```console
+'--make-iptables-util-chains' is equal to 'true' OR '--make-iptables-util-chains' is not present
+```
+
+**Returned Value**:
+
+```console
+Sep 11 20:52:15 ip-172-31-12-34 k3s[2340]: time="2023-09-11T20:52:15Z" level=info msg="Running kubelet --address=0.0.0.0 --allowed-unsafe-sysctls=net.ipv4.ip_forward,net.ipv6.conf.all.forwarding --anonymous-auth=false --authentication-token-webhook=true --authorization-mode=Webhook --cgroup-driver=systemd --client-ca-file=/var/lib/rancher/k3s/agent/client-ca.crt --cloud-provider=external --cluster-dns=10.43.0.10 --cluster-domain=cluster.local --container-runtime-endpoint=unix:///run/k3s/containerd/containerd.sock --containerd=/run/k3s/containerd/containerd.sock --eviction-hard=imagefs.available<5%,nodefs.available<5% --eviction-minimum-reclaim=imagefs.available=10%,nodefs.available=10% --fail-swap-on=false --healthz-bind-address=127.0.0.1 --hostname-override=ip-172-31-12-34 --kubeconfig=/var/lib/rancher/k3s/agent/kubelet.kubeconfig --make-iptables-util-chains=true --node-labels=cattle.io/os=linux,rke.cattle.io/machine=af02ecbc-1e4e-422e-8b4d-4b2aa24a9d46 --pod-infra-container-image=rancher/mirrored-pause:3.6 --pod-manifest-path=/var/lib/rancher/k3s/agent/pod-manifests --protect-kernel-defaults=true --read-only-port=0 --resolv-conf=/run/systemd/resolve/resolv.conf --serialize-image-pulls=false --tls-cert-file=/var/lib/rancher/k3s/agent/serving-kubelet.crt --tls-private-key-file=/var/lib/rancher/k3s/agent/serving-kubelet.key"
+```
+
+### 4.2.7 Ensure that the --hostname-override argument is not set (Manual)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Edit the kubelet service file /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
+on each worker node and remove the --hostname-override argument from the
+KUBELET_SYSTEM_PODS_ARGS variable.
+Based on your system, restart the kubelet service. For example,
+systemctl daemon-reload
+systemctl restart kubelet.service
+Not Applicable.
+
+### 4.2.8 Ensure that the eventRecordQPS argument is set to a level which ensures appropriate event capture (Manual)
+
+
+**Result:** pass
+
+**Remediation:**
+If using a Kubelet config file, edit the file to set `eventRecordQPS` to an appropriate level.
+If using command line arguments, edit the kubelet service file
+/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
+set the below parameter in KUBELET_SYSTEM_PODS_ARGS variable.
+Based on your system, restart the kubelet service. For example,
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+**Audit:**
+
+```bash
+/bin/ps -fC containerd
+```
+
+**Audit Config:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/kubelet/config.yaml; then /bin/cat /var/lib/kubelet/config.yaml; fi'
+```
+
+**Expected Result**:
+
+```console
+'--event-qps' is present OR '--event-qps' is not present
+```
+
+**Returned Value**:
+
+```console
+UID PID PPID C STIME TTY TIME CMD root 527 1 0 Sep11 ? 00:01:28 /usr/bin/containerd root 2361 2340 3 Sep11 ? 00:40:19 containerd -c /var/lib/rancher/k3s/agent/etc/containerd/config.toml -a /run/k3s/containerd/containerd.sock --state /run/k3s/containerd --root /var/lib/rancher/k3s/agent/containerd
+```
+
+### 4.2.9 Ensure that the --tls-cert-file and --tls-private-key-file arguments are set as appropriate (Manual)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+If using a Kubelet config file, edit the file to set `tlsCertFile` to the location
+of the certificate file to use to identify this Kubelet, and `tlsPrivateKeyFile`
+to the location of the corresponding private key file.
+If using command line arguments, edit the kubelet service file
+/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
+set the below parameters in KUBELET_CERTIFICATE_ARGS variable.
+--tls-cert-file=
+--tls-private-key-file=
+Based on your system, restart the kubelet service. For example,
+systemctl daemon-reload
+systemctl restart kubelet.service
+Permissive - When generating serving certificates, functionality could break in conjunction with hostname overrides which are required for certain cloud providers.
+
+### 4.2.10 Ensure that the --rotate-certificates argument is not set to false (Manual)
+
+
+**Result:** pass
+
+**Remediation:**
+If using a Kubelet config file, edit the file to add the line `rotateCertificates` to `true` or
+remove it altogether to use the default value.
+If using command line arguments, edit the kubelet service file
+/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
+remove --rotate-certificates=false argument from the KUBELET_CERTIFICATE_ARGS
+variable.
+Based on your system, restart the kubelet service. For example,
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+**Audit:**
+
+```bash
+/bin/ps -fC containerd
+```
+
+**Audit Config:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/kubelet/config.yaml; then /bin/cat /var/lib/kubelet/config.yaml; fi'
+```
+
+**Expected Result**:
+
+```console
+'--rotate-certificates' is present OR '--rotate-certificates' is not present
+```
+
+**Returned Value**:
+
+```console
+UID PID PPID C STIME TTY TIME CMD root 527 1 0 Sep11 ? 00:01:28 /usr/bin/containerd root 2361 2340 3 Sep11 ? 00:40:19 containerd -c /var/lib/rancher/k3s/agent/etc/containerd/config.toml -a /run/k3s/containerd/containerd.sock --state /run/k3s/containerd --root /var/lib/rancher/k3s/agent/containerd
+```
+
+### 4.2.11 Verify that the RotateKubeletServerCertificate argument is set to true (Manual)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the kubelet service file /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
+on each worker node and set the below parameter in KUBELET_CERTIFICATE_ARGS variable.
+--feature-gates=RotateKubeletServerCertificate=true
+Based on your system, restart the kubelet service. For example:
+systemctl daemon-reload
+systemctl restart kubelet.service
+Not Applicable.
+
+**Audit:**
+
+```bash
+/bin/ps -fC containerd
+```
+
+**Audit Config:**
+
+```bash
+/bin/cat /var/lib/kubelet/config.yaml
+```
+
+**Expected Result**:
+
+```console
+'RotateKubeletServerCertificate' is present OR 'RotateKubeletServerCertificate' is not present
+```
+
+**Returned Value**:
+
+```console
+UID PID PPID C STIME TTY TIME CMD root 527 1 0 Sep11 ? 00:01:28 /usr/bin/containerd root 2361 2340 3 Sep11 ? 00:40:19 containerd -c /var/lib/rancher/k3s/agent/etc/containerd/config.toml -a /run/k3s/containerd/containerd.sock --state /run/k3s/containerd --root /var/lib/rancher/k3s/agent/containerd
+```
+
+### 4.2.12 Ensure that the Kubelet only makes use of Strong Cryptographic Ciphers (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+If using a Kubelet config file, edit the file to set `TLSCipherSuites` to
+TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256
+or to a subset of these values.
+If using executable arguments, edit the kubelet service file
+/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
+set the --tls-cipher-suites parameter as follows, or to a subset of these values.
+--tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256
+Based on your system, restart the kubelet service. For example:
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+**Audit:**
+
+```bash
+/bin/ps -fC containerd
+```
+
+**Audit Config:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/kubelet/config.yaml; then /bin/cat /var/lib/kubelet/config.yaml; fi'
+```
+
+**Expected Result**:
+
+```console
+'--tls-cipher-suites' is present
+```
+
+**Returned Value**:
+
+```console
+UID PID PPID C STIME TTY TIME CMD root 527 1 0 Sep11 ? 00:01:28 /usr/bin/containerd root 2361 2340 3 Sep11 ? 00:40:19 containerd -c /var/lib/rancher/k3s/agent/etc/containerd/config.toml -a /run/k3s/containerd/containerd.sock --state /run/k3s/containerd --root /var/lib/rancher/k3s/agent/containerd
+```
+
+### 4.2.13 Ensure that a limit is set on pod PIDs (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Decide on an appropriate level for this parameter and set it,
+either via the --pod-max-pids command line parameter or the PodPidsLimit configuration file setting.
+
+**Audit:**
+
+```bash
+/bin/ps -fC containerd
+```
+
+**Audit Config:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/kubelet/config.yaml; then /bin/cat /var/lib/kubelet/config.yaml; fi'
+```
+
+**Expected Result**:
+
+```console
+'--pod-max-pids' is present
+```
+
+**Returned Value**:
+
+```console
+UID PID PPID C STIME TTY TIME CMD root 527 1 0 Sep11 ? 00:01:28 /usr/bin/containerd root 2361 2340 3 Sep11 ? 00:40:19 containerd -c /var/lib/rancher/k3s/agent/etc/containerd/config.toml -a /run/k3s/containerd/containerd.sock --state /run/k3s/containerd --root /var/lib/rancher/k3s/agent/containerd
+```
+
+## 5.1 RBAC and Service Accounts
+### 5.1.1 Ensure that the cluster-admin role is only used where required (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Identify all clusterrolebindings to the cluster-admin role. Check if they are used and
+if they need this role or if they could use a role with fewer privileges.
+Where possible, first bind users to a lower privileged role and then remove the
+clusterrolebinding to the cluster-admin role :
+kubectl delete clusterrolebinding [name]
+
+### 5.1.2 Minimize access to secrets (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Where possible, remove get, list and watch access to Secret objects in the cluster.
+
+### 5.1.3 Minimize wildcard use in Roles and ClusterRoles (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Where possible replace any use of wildcards in clusterroles and roles with specific
+objects or actions.
+
+### 5.1.4 Minimize access to create pods (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Where possible, remove create access to pod objects in the cluster.
+
+### 5.1.5 Ensure that default service accounts are not actively used. (Manual)
+
+
+**Result:** pass
+
+**Remediation:**
+Create explicit service accounts wherever a Kubernetes workload requires specific access
+to the Kubernetes API server.
+Modify the configuration of each default service account to include this value
+automountServiceAccountToken: false
+
+**Audit Script:** `check_for_default_sa.sh`
+
+```bash
+#!/bin/bash
+
+set -eE
+
+handle_error() {
+ echo "false"
+}
+
+trap 'handle_error' ERR
+
+count_sa=$(kubectl get serviceaccounts --all-namespaces -o json | jq -r '.items[] | select(.metadata.name=="default") | select((.automountServiceAccountToken == null) or (.automountServiceAccountToken == true))' | jq .metadata.namespace | wc -l)
+if [[ ${count_sa} -gt 0 ]]; then
+ echo "false"
+ exit
+fi
+
+for ns in $(kubectl get ns --no-headers -o custom-columns=":metadata.name")
+do
+ for result in $(kubectl get clusterrolebinding,rolebinding -n $ns -o json | jq -r '.items[] | select((.subjects[]?.kind=="ServiceAccount" and .subjects[]?.name=="default") or (.subjects[]?.kind=="Group" and .subjects[]?.name=="system:serviceaccounts"))' | jq -r '"\(.roleRef.kind),\(.roleRef.name)"')
+ do
+ read kind name <<<$(IFS=","; echo $result)
+ resource_count=$(kubectl get $kind $name -n $ns -o json | jq -r '.rules[] | select(.resources[]? != "podsecuritypolicies")' | wc -l)
+ if [[ ${resource_count} -gt 0 ]]; then
+ echo "false"
+ exit
+ fi
+ done
+done
+
+
+echo "true"
+
+```
+
+**Audit Execution:**
+
+```bash
+./check_for_default_sa.sh
+```
+
+**Expected Result**:
+
+```console
+'true' is equal to 'true'
+```
+
+**Returned Value**:
+
+```console
+true
+```
+
+### 5.1.6 Ensure that Service Account Tokens are only mounted where necessary (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Modify the definition of pods and service accounts which do not need to mount service
+account tokens to disable it.
+
+### 5.1.7 Avoid use of system:masters group (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Remove the system:masters group from all users in the cluster.
+
+### 5.1.8 Limit use of the Bind, Impersonate and Escalate permissions in the Kubernetes cluster (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Where possible, remove the impersonate, bind and escalate rights from subjects.
+
+### 5.1.9 Minimize access to create persistent volumes (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Where possible, remove create access to PersistentVolume objects in the cluster.
+
+### 5.1.10 Minimize access to the proxy sub-resource of nodes (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Where possible, remove access to the proxy sub-resource of node objects.
+
+### 5.1.11 Minimize access to the approval sub-resource of certificatesigningrequests objects (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Where possible, remove access to the approval sub-resource of certificatesigningrequest objects.
+
+### 5.1.12 Minimize access to webhook configuration objects (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Where possible, remove access to the validatingwebhookconfigurations or mutatingwebhookconfigurations objects
+
+### 5.1.13 Minimize access to the service account token creation (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Where possible, remove access to the token sub-resource of serviceaccount objects.
+
+## 5.2 Pod Security Standards
+### 5.2.1 Ensure that the cluster has at least one active policy control mechanism in place (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Ensure that either Pod Security Admission or an external policy control system is in place
+for every namespace which contains user workloads.
+
+### 5.2.2 Minimize the admission of privileged containers (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Add policies to each namespace in the cluster which has user workloads to restrict the
+admission of privileged containers.
+
+### 5.2.3 Minimize the admission of containers wishing to share the host process ID namespace (Automated)
+
+
+**Result:** warn
+
+**Remediation:**
+Add policies to each namespace in the cluster which has user workloads to restrict the
+admission of `hostPID` containers.
+
+### 5.2.4 Minimize the admission of containers wishing to share the host IPC namespace (Automated)
+
+
+**Result:** warn
+
+**Remediation:**
+Add policies to each namespace in the cluster which has user workloads to restrict the
+admission of `hostIPC` containers.
+
+### 5.2.5 Minimize the admission of containers wishing to share the host network namespace (Automated)
+
+
+**Result:** warn
+
+**Remediation:**
+Add policies to each namespace in the cluster which has user workloads to restrict the
+admission of `hostNetwork` containers.
+
+### 5.2.6 Minimize the admission of containers with allowPrivilegeEscalation (Automated)
+
+
+**Result:** warn
+
+**Remediation:**
+Add policies to each namespace in the cluster which has user workloads to restrict the
+admission of containers with `.spec.allowPrivilegeEscalation` set to `true`.
+
+### 5.2.7 Minimize the admission of root containers (Automated)
+
+
+**Result:** warn
+
+**Remediation:**
+Create a policy for each namespace in the cluster, ensuring that either `MustRunAsNonRoot`
+or `MustRunAs` with the range of UIDs not including 0, is set.
+
+### 5.2.8 Minimize the admission of containers with the NET_RAW capability (Automated)
+
+
+**Result:** warn
+
+**Remediation:**
+Add policies to each namespace in the cluster which has user workloads to restrict the
+admission of containers with the `NET_RAW` capability.
+
+### 5.2.9 Minimize the admission of containers with added capabilities (Automated)
+
+
+**Result:** warn
+
+**Remediation:**
+Ensure that `allowedCapabilities` is not present in policies for the cluster unless
+it is set to an empty array.
+
+### 5.2.10 Minimize the admission of containers with capabilities assigned (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Review the use of capabilites in applications running on your cluster. Where a namespace
+contains applicaions which do not require any Linux capabities to operate consider adding
+a PSP which forbids the admission of containers which do not drop all capabilities.
+
+### 5.2.11 Minimize the admission of Windows HostProcess containers (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Add policies to each namespace in the cluster which has user workloads to restrict the
+admission of containers that have `.securityContext.windowsOptions.hostProcess` set to `true`.
+
+### 5.2.12 Minimize the admission of HostPath volumes (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Add policies to each namespace in the cluster which has user workloads to restrict the
+admission of containers with `hostPath` volumes.
+
+### 5.2.13 Minimize the admission of containers which use HostPorts (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Add policies to each namespace in the cluster which has user workloads to restrict the
+admission of containers which use `hostPort` sections.
+
+## 5.3 Network Policies and CNI
+### 5.3.1 Ensure that the CNI in use supports NetworkPolicies (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+If the CNI plugin in use does not support network policies, consideration should be given to
+making use of a different plugin, or finding an alternate mechanism for restricting traffic
+in the Kubernetes cluster.
+
+### 5.3.2 Ensure that all Namespaces have NetworkPolicies defined (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Follow the documentation and create NetworkPolicy objects as you need them.
+
+## 5.4 Secrets Management
+### 5.4.1 Prefer using Secrets as files over Secrets as environment variables (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+If possible, rewrite application code to read Secrets from mounted secret files, rather than
+from environment variables.
+
+### 5.4.2 Consider external secret storage (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Refer to the Secrets management options offered by your cloud provider or a third-party
+secrets management solution.
+
+## 5.5 Extensible Admission Control
+### 5.5.1 Configure Image Provenance using ImagePolicyWebhook admission controller (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Follow the Kubernetes documentation and setup image provenance.
+
+## 5.7 General Policies
+### 5.7.1 Create administrative boundaries between resources using namespaces (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Follow the documentation and create namespaces for objects in your deployment as you need
+them.
+
+### 5.7.2 Ensure that the seccomp profile is set to docker/default in your Pod definitions (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Use `securityContext` to enable the docker/default seccomp profile in your pod definitions.
+An example is as below:
+ securityContext:
+ seccompProfile:
+ type: RuntimeDefault
+
+### 5.7.3 Apply SecurityContext to your Pods and Containers (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Follow the Kubernetes documentation and apply SecurityContexts to your Pods. For a
+suggested list of SecurityContexts, you may refer to the CIS Security Benchmark for Docker
+Containers.
+
+### 5.7.4 The default namespace should not be used (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Ensure that namespaces are created to allow for appropriate segregation of Kubernetes
+resources and that all new resources are created in a specific namespace.
+
diff --git a/docs/reference-guides/rancher-security/hardening-guides/rke1-hardening-guide/rke1-self-assessment-guide-with-cis-v1.24-k8s-v1.24.md b/docs/reference-guides/rancher-security/hardening-guides/rke1-hardening-guide/rke1-self-assessment-guide-with-cis-v1.24-k8s-v1.24.md
new file mode 100644
index 00000000000..5f3c20fb37f
--- /dev/null
+++ b/docs/reference-guides/rancher-security/hardening-guides/rke1-hardening-guide/rke1-self-assessment-guide-with-cis-v1.24-k8s-v1.24.md
@@ -0,0 +1,3047 @@
+---
+title: RKE Self-Assessment Guide - CIS Benchmark v1.24 - K8s v1.24
+---
+
+
+
+
+
+This document is a companion to the [RKE Hardening Guide](../../../../pages-for-subheaders/rke1-hardening-guide.md), which provides prescriptive guidance on how to harden RKE clusters that are running in production and managed by Rancher. This benchmark guide helps you evaluate the security of a hardened cluster against each control in the CIS Kubernetes Benchmark.
+
+
+This guide corresponds to the following versions of Rancher, CIS Benchmarks, and Kubernetes:
+
+| Rancher Version | CIS Benchmark Version | Kubernetes Version |
+|-----------------|-----------------------|--------------------|
+| Rancher v2.7 | Benchmark v1.24 | Kubernetes v1.24 |
+
+This guide walks through the various controls and provide updated example commands to audit compliance in Rancher created clusters. Because Rancher and RKE install Kubernetes services as Docker containers, many of the control verification checks in the CIS Kubernetes Benchmark don't apply. These checks will return a result of `Not Applicable`.
+
+This document is for Rancher operators, security teams, auditors and decision makers.
+
+For more information about each control, including detailed descriptions and remediations for failing tests, refer to the corresponding section of the CIS Kubernetes Benchmark v1.24. You can download the benchmark, after creating a free account, at [Center for Internet Security (CIS)](https://www.cisecurity.org/benchmark/kubernetes/).
+
+## Testing Methodology
+
+Rancher and RKE install Kubernetes services via Docker containers. Configuration is defined by arguments passed to the container at the time of initialization, not via configuration files.
+
+Where control audits differ from the original CIS benchmark, the audit commands specific to Rancher are provided for testing. When performing the tests, you will need access to the command line on the hosts of all RKE nodes. The commands also make use of the [kubectl](https://kubernetes.io/docs/tasks/tools/) (with a valid configuration file) and [jq](https://stedolan.github.io/jq/) tools, which are required in the testing and evaluation of test results.
+
+:::note
+
+This guide only covers `automated` (previously called `scored`) tests.
+
+:::
+
+### Controls
+
+## 1.1 Control Plane Node Configuration Files
+### 1.1.1 Ensure that the API server pod specification file permissions are set to 644 or more restrictive (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Cluster provisioned by RKE doesn't require or maintain a configuration file for kube-apiserver.
+All configuration is passed in as arguments at container run time.
+
+### 1.1.2 Ensure that the API server pod specification file ownership is set to root:root (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Cluster provisioned by RKE doesn't require or maintain a configuration file for kube-apiserver.
+All configuration is passed in as arguments at container run time.
+
+### 1.1.3 Ensure that the controller manager pod specification file permissions are set to 600 or more restrictive (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Cluster provisioned by RKE doesn't require or maintain a configuration file for controller-manager.
+All configuration is passed in as arguments at container run time.
+
+### 1.1.4 Ensure that the controller manager pod specification file ownership is set to root:root (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Cluster provisioned by RKE doesn't require or maintain a configuration file for controller-manager.
+All configuration is passed in as arguments at container run time.
+
+### 1.1.5 Ensure that the scheduler pod specification file permissions are set to 600 or more restrictive (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Cluster provisioned by RKE doesn't require or maintain a configuration file for scheduler.
+All configuration is passed in as arguments at container run time.
+
+### 1.1.6 Ensure that the scheduler pod specification file ownership is set to root:root (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Cluster provisioned by RKE doesn't require or maintain a configuration file for scheduler.
+All configuration is passed in as arguments at container run time.
+
+### 1.1.7 Ensure that the etcd pod specification file permissions are set to 600 or more restrictive (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Cluster provisioned by RKE doesn't require or maintain a configuration file for etcd.
+All configuration is passed in as arguments at container run time.
+
+### 1.1.8 Ensure that the etcd pod specification file ownership is set to root:root (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Cluster provisioned by RKE doesn't require or maintain a configuration file for etcd.
+All configuration is passed in as arguments at container run time.
+
+### 1.1.9 Ensure that the Container Network Interface file permissions are set to 600 or more restrictive (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example, chmod 600
+
+**Audit:**
+
+```bash
+ps -fC ${kubeletbin:-kubelet} | grep -- --cni-conf-dir || echo "/etc/cni/net.d" | sed 's%.*cni-conf-dir[= ]\([^ ]*\).*%\1%' | xargs -I{} find {} -mindepth 1 | xargs --no-run-if-empty stat -c permissions=%a find /var/lib/cni/networks -type f 2> /dev/null | xargs --no-run-if-empty stat -c permissions=%a
+```
+
+**Expected Result**:
+
+```console
+permissions has permissions 644, expected 600 or more restrictive
+```
+
+**Returned Value**:
+
+```console
+permissions=600 permissions=644
+```
+
+### 1.1.10 Ensure that the Container Network Interface file ownership is set to root:root (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example,
+chown root:root
+
+**Audit:**
+
+```bash
+ps -fC ${kubeletbin:-kubelet} | grep -- --cni-conf-dir || echo "/etc/cni/net.d" | sed 's%.*cni-conf-dir[= ]\([^ ]*\).*%\1%' | xargs -I{} find {} -mindepth 1 | xargs --no-run-if-empty stat -c %U:%G find /var/lib/cni/networks -type f 2> /dev/null | xargs --no-run-if-empty stat -c %U:%G
+```
+
+**Expected Result**:
+
+```console
+'root:root' is present
+```
+
+**Returned Value**:
+
+```console
+root:root root:root
+```
+
+### 1.1.11 Ensure that the etcd data directory permissions are set to 700 or more restrictive (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+On the etcd server node, get the etcd data directory, passed as an argument --data-dir,
+from the command 'ps -ef | grep etcd'.
+Run the below command (based on the etcd data directory found above). For example,
+chmod 700 /var/lib/etcd
+
+**Audit:**
+
+```bash
+stat -c %a /node/var/lib/etcd
+```
+
+**Expected Result**:
+
+```console
+'700' is equal to '700'
+```
+
+**Returned Value**:
+
+```console
+700
+```
+
+### 1.1.12 Ensure that the etcd data directory ownership is set to etcd:etcd (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+On the etcd server node, get the etcd data directory, passed as an argument --data-dir,
+from the command 'ps -ef | grep etcd'.
+Run the below command (based on the etcd data directory found above).
+For example, chown etcd:etcd /var/lib/etcd
+
+### 1.1.13 Ensure that the admin.conf file permissions are set to 600 or more restrictive (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Cluster provisioned by RKE does not store the kubernetes default kubeconfig credentials file on the nodes.
+
+### 1.1.14 Ensure that the admin.conf file ownership is set to root:root (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Cluster provisioned by RKE does not store the kubernetes default kubeconfig credentials file on the nodes.
+
+### 1.1.15 Ensure that the scheduler.conf file permissions are set to 600 or more restrictive (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Cluster provisioned by RKE doesn't require or maintain a configuration file for scheduler.
+All configuration is passed in as arguments at container run time.
+
+### 1.1.16 Ensure that the scheduler.conf file ownership is set to root:root (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Cluster provisioned by RKE doesn't require or maintain a configuration file for scheduler.
+All configuration is passed in as arguments at container run time.
+
+### 1.1.17 Ensure that the controller-manager.conf file permissions are set to 600 or more restrictive (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Cluster provisioned by RKE doesn't require or maintain a configuration file for controller-manager.
+All configuration is passed in as arguments at container run time.
+
+### 1.1.18 Ensure that the controller-manager.conf file ownership is set to root:root (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Cluster provisioned by RKE doesn't require or maintain a configuration file for controller-manager.
+All configuration is passed in as arguments at container run time.
+
+### 1.1.19 Ensure that the Kubernetes PKI directory and file ownership is set to root:root (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the master node.
+For example,
+chown -R root:root /etc/kubernetes/pki/
+
+**Audit Script:** `check_files_owner_in_dir.sh`
+
+```bash
+#!/usr/bin/env bash
+
+# This script is used to ensure the owner is set to root:root for
+# the given directory and all the files in it
+#
+# inputs:
+# $1 = /full/path/to/directory
+#
+# outputs:
+# true/false
+
+INPUT_DIR=$1
+
+if [[ "${INPUT_DIR}" == "" ]]; then
+ echo "false"
+ exit
+fi
+
+if [[ $(stat -c %U:%G ${INPUT_DIR}) != "root:root" ]]; then
+ echo "false"
+ exit
+fi
+
+statInfoLines=$(stat -c "%n %U:%G" ${INPUT_DIR}/*)
+while read -r statInfoLine; do
+ f=$(echo ${statInfoLine} | cut -d' ' -f1)
+ p=$(echo ${statInfoLine} | cut -d' ' -f2)
+
+ if [[ $(basename "$f" .pem) == "kube-etcd-"* ]]; then
+ if [[ "$p" != "root:root" && "$p" != "etcd:etcd" ]]; then
+ echo "false"
+ exit
+ fi
+ else
+ if [[ "$p" != "root:root" ]]; then
+ echo "false"
+ exit
+ fi
+ fi
+done <<< "${statInfoLines}"
+
+
+echo "true"
+exit
+
+```
+
+**Audit Execution:**
+
+```bash
+./check_files_owner_in_dir.sh /node/etc/kubernetes/ssl
+```
+
+**Expected Result**:
+
+```console
+'true' is equal to 'true'
+```
+
+**Returned Value**:
+
+```console
+true
+```
+
+### 1.1.20 Ensure that the Kubernetes PKI certificate file permissions are set to 600 or more restrictive (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example,
+find /node/etc/kubernetes/ssl/ -name '*.pem' ! -name '*key.pem' -exec chmod -R 600 {} +
+
+**Audit:**
+
+```bash
+find /node/etc/kubernetes/ssl/ -name '*.pem' ! -name '*key.pem' | xargs stat -c permissions=%a
+```
+
+**Expected Result**:
+
+```console
+permissions has permissions 644, expected 600 or more restrictive
+```
+
+**Returned Value**:
+
+```console
+permissions=600 permissions=600 permissions=600 permissions=600 permissions=600 permissions=644 permissions=600 permissions=600 permissions=600 permissions=600 permissions=600
+```
+
+### 1.1.21 Ensure that the Kubernetes PKI key file permissions are set to 600 (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example,
+chmod -R 600 /etc/kubernetes/ssl/*key.pem
+
+**Audit Script:** `check_files_permissions.sh`
+
+```bash
+#!/usr/bin/env bash
+
+# This script is used to ensure the file permissions are set to 644 or
+# more restrictive for all files in a given directory or a wildcard
+# selection of files
+#
+# inputs:
+# $1 = /full/path/to/directory or /path/to/fileswithpattern
+# ex: !(*key).pem
+#
+# $2 (optional) = permission (ex: 600)
+#
+# outputs:
+# true/false
+
+# Turn on "extended glob" for use of '!' in wildcard
+shopt -s extglob
+
+# Turn off history to avoid surprises when using '!'
+set -H
+
+USER_INPUT=$1
+
+if [[ "${USER_INPUT}" == "" ]]; then
+ echo "false"
+ exit
+fi
+
+
+if [[ -d ${USER_INPUT} ]]; then
+ PATTERN="${USER_INPUT}/*"
+else
+ PATTERN="${USER_INPUT}"
+fi
+
+PERMISSION=""
+if [[ "$2" != "" ]]; then
+ PERMISSION=$2
+fi
+
+FILES_PERMISSIONS=$(stat -c %n\ %a ${PATTERN})
+
+while read -r fileInfo; do
+ p=$(echo ${fileInfo} | cut -d' ' -f2)
+
+ if [[ "${PERMISSION}" != "" ]]; then
+ if [[ "$p" != "${PERMISSION}" ]]; then
+ echo "false"
+ exit
+ fi
+ else
+ if [[ "$p" != "644" && "$p" != "640" && "$p" != "600" ]]; then
+ echo "false"
+ exit
+ fi
+ fi
+done <<< "${FILES_PERMISSIONS}"
+
+
+echo "true"
+exit
+
+```
+
+**Audit Execution:**
+
+```bash
+./check_files_permissions.sh '/node/etc/kubernetes/ssl/*key.pem'
+```
+
+**Expected Result**:
+
+```console
+'true' is equal to 'true'
+```
+
+**Returned Value**:
+
+```console
+true
+```
+
+## 1.2 API Server
+### 1.2.1 Ensure that the --anonymous-auth argument is set to false (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the below parameter.
+--anonymous-auth=false
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--anonymous-auth' is equal to 'false'
+```
+
+**Returned Value**:
+
+```console
+root 3528 3509 7 Sep11 ? 01:24:09 kube-apiserver --service-cluster-ip-range=10.43.0.0/16 --anonymous-auth=false --profiling=false --advertise-address=172.31.7.100 --audit-log-maxsize=100 --cloud-provider= --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --etcd-prefix=/registry --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --storage-backend=etcd3 --service-node-port-range=30000-32767 --bind-address=0.0.0.0 --api-audiences=unknown --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --runtime-config=policy/v1beta1/podsecuritypolicy=true --allow-privileged=true --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --service-account-issuer=rke --requestheader-allowed-names=kube-apiserver-proxy-client --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-format=json --authorization-mode=Node,RBAC --etcd-servers=https://172.31.7.100:2379 --service-account-lookup=true --secure-port=6443 --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --audit-log-maxage=30 --admission-control-config-file=/etc/kubernetes/admission.yaml --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --audit-log-maxbackup=10 --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --authentication-token-webhook-cache-ttl=5s
+```
+
+### 1.2.2 Ensure that the --token-auth-file parameter is not set (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the documentation and configure alternate mechanisms for authentication. Then,
+edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and remove the --token-auth-file= parameter.
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--token-auth-file' is not present
+```
+
+**Returned Value**:
+
+```console
+root 3528 3509 7 Sep11 ? 01:24:09 kube-apiserver --service-cluster-ip-range=10.43.0.0/16 --anonymous-auth=false --profiling=false --advertise-address=172.31.7.100 --audit-log-maxsize=100 --cloud-provider= --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --etcd-prefix=/registry --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --storage-backend=etcd3 --service-node-port-range=30000-32767 --bind-address=0.0.0.0 --api-audiences=unknown --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --runtime-config=policy/v1beta1/podsecuritypolicy=true --allow-privileged=true --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --service-account-issuer=rke --requestheader-allowed-names=kube-apiserver-proxy-client --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-format=json --authorization-mode=Node,RBAC --etcd-servers=https://172.31.7.100:2379 --service-account-lookup=true --secure-port=6443 --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --audit-log-maxage=30 --admission-control-config-file=/etc/kubernetes/admission.yaml --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --audit-log-maxbackup=10 --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --authentication-token-webhook-cache-ttl=5s
+```
+
+### 1.2.3 Ensure that the --DenyServiceExternalIPs is not set (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and remove the `DenyServiceExternalIPs`
+from enabled admission plugins.
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--enable-admission-plugins' does not have 'DenyServiceExternalIPs' OR '--enable-admission-plugins' is not present
+```
+
+**Returned Value**:
+
+```console
+root 3528 3509 7 Sep11 ? 01:24:09 kube-apiserver --service-cluster-ip-range=10.43.0.0/16 --anonymous-auth=false --profiling=false --advertise-address=172.31.7.100 --audit-log-maxsize=100 --cloud-provider= --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --etcd-prefix=/registry --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --storage-backend=etcd3 --service-node-port-range=30000-32767 --bind-address=0.0.0.0 --api-audiences=unknown --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --runtime-config=policy/v1beta1/podsecuritypolicy=true --allow-privileged=true --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --service-account-issuer=rke --requestheader-allowed-names=kube-apiserver-proxy-client --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-format=json --authorization-mode=Node,RBAC --etcd-servers=https://172.31.7.100:2379 --service-account-lookup=true --secure-port=6443 --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --audit-log-maxage=30 --admission-control-config-file=/etc/kubernetes/admission.yaml --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --audit-log-maxbackup=10 --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --authentication-token-webhook-cache-ttl=5s
+```
+
+### 1.2.4 Ensure that the --kubelet-https argument is set to true (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and remove the --kubelet-https parameter.
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--kubelet-https' is present OR '--kubelet-https' is not present
+```
+
+**Returned Value**:
+
+```console
+root 3528 3509 7 Sep11 ? 01:24:09 kube-apiserver --service-cluster-ip-range=10.43.0.0/16 --anonymous-auth=false --profiling=false --advertise-address=172.31.7.100 --audit-log-maxsize=100 --cloud-provider= --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --etcd-prefix=/registry --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --storage-backend=etcd3 --service-node-port-range=30000-32767 --bind-address=0.0.0.0 --api-audiences=unknown --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --runtime-config=policy/v1beta1/podsecuritypolicy=true --allow-privileged=true --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --service-account-issuer=rke --requestheader-allowed-names=kube-apiserver-proxy-client --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-format=json --authorization-mode=Node,RBAC --etcd-servers=https://172.31.7.100:2379 --service-account-lookup=true --secure-port=6443 --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --audit-log-maxage=30 --admission-control-config-file=/etc/kubernetes/admission.yaml --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --audit-log-maxbackup=10 --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --authentication-token-webhook-cache-ttl=5s
+```
+
+### 1.2.5 Ensure that the --kubelet-client-certificate and --kubelet-client-key arguments are set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the Kubernetes documentation and set up the TLS connection between the
+apiserver and kubelets. Then, edit API server pod specification file
+/etc/kubernetes/manifests/kube-apiserver.yaml on the control plane node and set the
+kubelet client certificate and key parameters as below.
+--kubelet-client-certificate=
+--kubelet-client-key=
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--kubelet-client-certificate' is present AND '--kubelet-client-key' is present
+```
+
+**Returned Value**:
+
+```console
+root 3528 3509 7 Sep11 ? 01:24:09 kube-apiserver --service-cluster-ip-range=10.43.0.0/16 --anonymous-auth=false --profiling=false --advertise-address=172.31.7.100 --audit-log-maxsize=100 --cloud-provider= --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --etcd-prefix=/registry --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --storage-backend=etcd3 --service-node-port-range=30000-32767 --bind-address=0.0.0.0 --api-audiences=unknown --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --runtime-config=policy/v1beta1/podsecuritypolicy=true --allow-privileged=true --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --service-account-issuer=rke --requestheader-allowed-names=kube-apiserver-proxy-client --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-format=json --authorization-mode=Node,RBAC --etcd-servers=https://172.31.7.100:2379 --service-account-lookup=true --secure-port=6443 --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --audit-log-maxage=30 --admission-control-config-file=/etc/kubernetes/admission.yaml --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --audit-log-maxbackup=10 --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --authentication-token-webhook-cache-ttl=5s
+```
+
+### 1.2.6 Ensure that the --kubelet-certificate-authority argument is set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the Kubernetes documentation and setup the TLS connection between
+the apiserver and kubelets. Then, edit the API server pod specification file
+/etc/kubernetes/manifests/kube-apiserver.yaml on the control plane node and set the
+--kubelet-certificate-authority parameter to the path to the cert file for the certificate authority.
+--kubelet-certificate-authority=
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--kubelet-certificate-authority' is present
+```
+
+**Returned Value**:
+
+```console
+root 3528 3509 7 Sep11 ? 01:24:09 kube-apiserver --service-cluster-ip-range=10.43.0.0/16 --anonymous-auth=false --profiling=false --advertise-address=172.31.7.100 --audit-log-maxsize=100 --cloud-provider= --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --etcd-prefix=/registry --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --storage-backend=etcd3 --service-node-port-range=30000-32767 --bind-address=0.0.0.0 --api-audiences=unknown --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --runtime-config=policy/v1beta1/podsecuritypolicy=true --allow-privileged=true --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --service-account-issuer=rke --requestheader-allowed-names=kube-apiserver-proxy-client --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-format=json --authorization-mode=Node,RBAC --etcd-servers=https://172.31.7.100:2379 --service-account-lookup=true --secure-port=6443 --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --audit-log-maxage=30 --admission-control-config-file=/etc/kubernetes/admission.yaml --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --audit-log-maxbackup=10 --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --authentication-token-webhook-cache-ttl=5s
+```
+
+### 1.2.7 Ensure that the --authorization-mode argument is not set to AlwaysAllow (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the --authorization-mode parameter to values other than AlwaysAllow.
+One such example could be as below.
+--authorization-mode=RBAC
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--authorization-mode' does not have 'AlwaysAllow'
+```
+
+**Returned Value**:
+
+```console
+root 3528 3509 7 Sep11 ? 01:24:09 kube-apiserver --service-cluster-ip-range=10.43.0.0/16 --anonymous-auth=false --profiling=false --advertise-address=172.31.7.100 --audit-log-maxsize=100 --cloud-provider= --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --etcd-prefix=/registry --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --storage-backend=etcd3 --service-node-port-range=30000-32767 --bind-address=0.0.0.0 --api-audiences=unknown --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --runtime-config=policy/v1beta1/podsecuritypolicy=true --allow-privileged=true --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --service-account-issuer=rke --requestheader-allowed-names=kube-apiserver-proxy-client --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-format=json --authorization-mode=Node,RBAC --etcd-servers=https://172.31.7.100:2379 --service-account-lookup=true --secure-port=6443 --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --audit-log-maxage=30 --admission-control-config-file=/etc/kubernetes/admission.yaml --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --audit-log-maxbackup=10 --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --authentication-token-webhook-cache-ttl=5s
+```
+
+### 1.2.8 Ensure that the --authorization-mode argument includes Node (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the --authorization-mode parameter to a value that includes Node.
+--authorization-mode=Node,RBAC
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--authorization-mode' has 'Node'
+```
+
+**Returned Value**:
+
+```console
+root 3528 3509 7 Sep11 ? 01:24:09 kube-apiserver --service-cluster-ip-range=10.43.0.0/16 --anonymous-auth=false --profiling=false --advertise-address=172.31.7.100 --audit-log-maxsize=100 --cloud-provider= --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --etcd-prefix=/registry --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --storage-backend=etcd3 --service-node-port-range=30000-32767 --bind-address=0.0.0.0 --api-audiences=unknown --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --runtime-config=policy/v1beta1/podsecuritypolicy=true --allow-privileged=true --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --service-account-issuer=rke --requestheader-allowed-names=kube-apiserver-proxy-client --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-format=json --authorization-mode=Node,RBAC --etcd-servers=https://172.31.7.100:2379 --service-account-lookup=true --secure-port=6443 --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --audit-log-maxage=30 --admission-control-config-file=/etc/kubernetes/admission.yaml --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --audit-log-maxbackup=10 --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --authentication-token-webhook-cache-ttl=5s
+```
+
+### 1.2.9 Ensure that the --authorization-mode argument includes RBAC (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the --authorization-mode parameter to a value that includes RBAC,
+for example `--authorization-mode=Node,RBAC`.
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--authorization-mode' has 'RBAC'
+```
+
+**Returned Value**:
+
+```console
+root 3528 3509 7 Sep11 ? 01:24:09 kube-apiserver --service-cluster-ip-range=10.43.0.0/16 --anonymous-auth=false --profiling=false --advertise-address=172.31.7.100 --audit-log-maxsize=100 --cloud-provider= --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --etcd-prefix=/registry --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --storage-backend=etcd3 --service-node-port-range=30000-32767 --bind-address=0.0.0.0 --api-audiences=unknown --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --runtime-config=policy/v1beta1/podsecuritypolicy=true --allow-privileged=true --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --service-account-issuer=rke --requestheader-allowed-names=kube-apiserver-proxy-client --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-format=json --authorization-mode=Node,RBAC --etcd-servers=https://172.31.7.100:2379 --service-account-lookup=true --secure-port=6443 --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --audit-log-maxage=30 --admission-control-config-file=/etc/kubernetes/admission.yaml --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --audit-log-maxbackup=10 --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --authentication-token-webhook-cache-ttl=5s
+```
+
+### 1.2.10 Ensure that the admission control plugin EventRateLimit is set (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the Kubernetes documentation and set the desired limits in a configuration file.
+Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+and set the below parameters.
+--enable-admission-plugins=...,EventRateLimit,...
+--admission-control-config-file=
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--enable-admission-plugins' has 'EventRateLimit'
+```
+
+**Returned Value**:
+
+```console
+root 3528 3509 7 Sep11 ? 01:24:09 kube-apiserver --service-cluster-ip-range=10.43.0.0/16 --anonymous-auth=false --profiling=false --advertise-address=172.31.7.100 --audit-log-maxsize=100 --cloud-provider= --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --etcd-prefix=/registry --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --storage-backend=etcd3 --service-node-port-range=30000-32767 --bind-address=0.0.0.0 --api-audiences=unknown --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --runtime-config=policy/v1beta1/podsecuritypolicy=true --allow-privileged=true --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --service-account-issuer=rke --requestheader-allowed-names=kube-apiserver-proxy-client --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-format=json --authorization-mode=Node,RBAC --etcd-servers=https://172.31.7.100:2379 --service-account-lookup=true --secure-port=6443 --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --audit-log-maxage=30 --admission-control-config-file=/etc/kubernetes/admission.yaml --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --audit-log-maxbackup=10 --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --authentication-token-webhook-cache-ttl=5s
+```
+
+### 1.2.11 Ensure that the admission control plugin AlwaysAdmit is not set (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and either remove the --enable-admission-plugins parameter, or set it to a
+value that does not include AlwaysAdmit.
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--enable-admission-plugins' does not have 'AlwaysAdmit' OR '--enable-admission-plugins' is not present
+```
+
+**Returned Value**:
+
+```console
+root 3528 3509 7 Sep11 ? 01:24:09 kube-apiserver --service-cluster-ip-range=10.43.0.0/16 --anonymous-auth=false --profiling=false --advertise-address=172.31.7.100 --audit-log-maxsize=100 --cloud-provider= --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --etcd-prefix=/registry --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --storage-backend=etcd3 --service-node-port-range=30000-32767 --bind-address=0.0.0.0 --api-audiences=unknown --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --runtime-config=policy/v1beta1/podsecuritypolicy=true --allow-privileged=true --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --service-account-issuer=rke --requestheader-allowed-names=kube-apiserver-proxy-client --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-format=json --authorization-mode=Node,RBAC --etcd-servers=https://172.31.7.100:2379 --service-account-lookup=true --secure-port=6443 --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --audit-log-maxage=30 --admission-control-config-file=/etc/kubernetes/admission.yaml --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --audit-log-maxbackup=10 --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --authentication-token-webhook-cache-ttl=5s
+```
+
+### 1.2.12 Ensure that the admission control plugin AlwaysPullImages is set (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the --enable-admission-plugins parameter to include
+AlwaysPullImages.
+--enable-admission-plugins=...,AlwaysPullImages,...
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--enable-admission-plugins' has 'AlwaysPullImages'
+```
+
+**Returned Value**:
+
+```console
+root 3528 3509 7 Sep11 ? 01:24:09 kube-apiserver --service-cluster-ip-range=10.43.0.0/16 --anonymous-auth=false --profiling=false --advertise-address=172.31.7.100 --audit-log-maxsize=100 --cloud-provider= --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --etcd-prefix=/registry --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --storage-backend=etcd3 --service-node-port-range=30000-32767 --bind-address=0.0.0.0 --api-audiences=unknown --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --runtime-config=policy/v1beta1/podsecuritypolicy=true --allow-privileged=true --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --service-account-issuer=rke --requestheader-allowed-names=kube-apiserver-proxy-client --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-format=json --authorization-mode=Node,RBAC --etcd-servers=https://172.31.7.100:2379 --service-account-lookup=true --secure-port=6443 --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --audit-log-maxage=30 --admission-control-config-file=/etc/kubernetes/admission.yaml --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --audit-log-maxbackup=10 --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --authentication-token-webhook-cache-ttl=5s
+```
+
+### 1.2.13 Ensure that the admission control plugin SecurityContextDeny is set if PodSecurityPolicy is not used (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the --enable-admission-plugins parameter to include
+SecurityContextDeny, unless PodSecurityPolicy is already in place.
+--enable-admission-plugins=...,SecurityContextDeny,...
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+### 1.2.14 Ensure that the admission control plugin ServiceAccount is set (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the documentation and create ServiceAccount objects as per your environment.
+Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and ensure that the --disable-admission-plugins parameter is set to a
+value that does not include ServiceAccount.
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--disable-admission-plugins' is present OR '--disable-admission-plugins' is not present
+```
+
+**Returned Value**:
+
+```console
+root 3528 3509 7 Sep11 ? 01:24:09 kube-apiserver --service-cluster-ip-range=10.43.0.0/16 --anonymous-auth=false --profiling=false --advertise-address=172.31.7.100 --audit-log-maxsize=100 --cloud-provider= --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --etcd-prefix=/registry --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --storage-backend=etcd3 --service-node-port-range=30000-32767 --bind-address=0.0.0.0 --api-audiences=unknown --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --runtime-config=policy/v1beta1/podsecuritypolicy=true --allow-privileged=true --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --service-account-issuer=rke --requestheader-allowed-names=kube-apiserver-proxy-client --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-format=json --authorization-mode=Node,RBAC --etcd-servers=https://172.31.7.100:2379 --service-account-lookup=true --secure-port=6443 --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --audit-log-maxage=30 --admission-control-config-file=/etc/kubernetes/admission.yaml --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --audit-log-maxbackup=10 --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --authentication-token-webhook-cache-ttl=5s
+```
+
+### 1.2.15 Ensure that the admission control plugin NamespaceLifecycle is set (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the --disable-admission-plugins parameter to
+ensure it does not include NamespaceLifecycle.
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--disable-admission-plugins' is present OR '--disable-admission-plugins' is not present
+```
+
+**Returned Value**:
+
+```console
+root 3528 3509 7 Sep11 ? 01:24:09 kube-apiserver --service-cluster-ip-range=10.43.0.0/16 --anonymous-auth=false --profiling=false --advertise-address=172.31.7.100 --audit-log-maxsize=100 --cloud-provider= --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --etcd-prefix=/registry --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --storage-backend=etcd3 --service-node-port-range=30000-32767 --bind-address=0.0.0.0 --api-audiences=unknown --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --runtime-config=policy/v1beta1/podsecuritypolicy=true --allow-privileged=true --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --service-account-issuer=rke --requestheader-allowed-names=kube-apiserver-proxy-client --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-format=json --authorization-mode=Node,RBAC --etcd-servers=https://172.31.7.100:2379 --service-account-lookup=true --secure-port=6443 --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --audit-log-maxage=30 --admission-control-config-file=/etc/kubernetes/admission.yaml --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --audit-log-maxbackup=10 --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --authentication-token-webhook-cache-ttl=5s
+```
+
+### 1.2.16 Ensure that the admission control plugin NodeRestriction is set (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the Kubernetes documentation and configure NodeRestriction plug-in on kubelets.
+Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the --enable-admission-plugins parameter to a
+value that includes NodeRestriction.
+--enable-admission-plugins=...,NodeRestriction,...
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--enable-admission-plugins' has 'NodeRestriction'
+```
+
+**Returned Value**:
+
+```console
+root 3528 3509 7 Sep11 ? 01:24:09 kube-apiserver --service-cluster-ip-range=10.43.0.0/16 --anonymous-auth=false --profiling=false --advertise-address=172.31.7.100 --audit-log-maxsize=100 --cloud-provider= --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --etcd-prefix=/registry --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --storage-backend=etcd3 --service-node-port-range=30000-32767 --bind-address=0.0.0.0 --api-audiences=unknown --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --runtime-config=policy/v1beta1/podsecuritypolicy=true --allow-privileged=true --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --service-account-issuer=rke --requestheader-allowed-names=kube-apiserver-proxy-client --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-format=json --authorization-mode=Node,RBAC --etcd-servers=https://172.31.7.100:2379 --service-account-lookup=true --secure-port=6443 --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --audit-log-maxage=30 --admission-control-config-file=/etc/kubernetes/admission.yaml --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --audit-log-maxbackup=10 --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --authentication-token-webhook-cache-ttl=5s
+```
+
+### 1.2.17 Ensure that the --secure-port argument is not set to 0 (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and either remove the --secure-port parameter or
+set it to a different (non-zero) desired port.
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--secure-port' is greater than 0 OR '--secure-port' is not present
+```
+
+**Returned Value**:
+
+```console
+root 3528 3509 7 Sep11 ? 01:24:09 kube-apiserver --service-cluster-ip-range=10.43.0.0/16 --anonymous-auth=false --profiling=false --advertise-address=172.31.7.100 --audit-log-maxsize=100 --cloud-provider= --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --etcd-prefix=/registry --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --storage-backend=etcd3 --service-node-port-range=30000-32767 --bind-address=0.0.0.0 --api-audiences=unknown --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --runtime-config=policy/v1beta1/podsecuritypolicy=true --allow-privileged=true --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --service-account-issuer=rke --requestheader-allowed-names=kube-apiserver-proxy-client --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-format=json --authorization-mode=Node,RBAC --etcd-servers=https://172.31.7.100:2379 --service-account-lookup=true --secure-port=6443 --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --audit-log-maxage=30 --admission-control-config-file=/etc/kubernetes/admission.yaml --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --audit-log-maxbackup=10 --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --authentication-token-webhook-cache-ttl=5s
+```
+
+### 1.2.18 Ensure that the --profiling argument is set to false (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the below parameter.
+--profiling=false
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--profiling' is equal to 'false'
+```
+
+**Returned Value**:
+
+```console
+root 3528 3509 7 Sep11 ? 01:24:09 kube-apiserver --service-cluster-ip-range=10.43.0.0/16 --anonymous-auth=false --profiling=false --advertise-address=172.31.7.100 --audit-log-maxsize=100 --cloud-provider= --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --etcd-prefix=/registry --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --storage-backend=etcd3 --service-node-port-range=30000-32767 --bind-address=0.0.0.0 --api-audiences=unknown --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --runtime-config=policy/v1beta1/podsecuritypolicy=true --allow-privileged=true --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --service-account-issuer=rke --requestheader-allowed-names=kube-apiserver-proxy-client --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-format=json --authorization-mode=Node,RBAC --etcd-servers=https://172.31.7.100:2379 --service-account-lookup=true --secure-port=6443 --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --audit-log-maxage=30 --admission-control-config-file=/etc/kubernetes/admission.yaml --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --audit-log-maxbackup=10 --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --authentication-token-webhook-cache-ttl=5s
+```
+
+### 1.2.19 Ensure that the --audit-log-path argument is set (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the --audit-log-path parameter to a suitable path and
+file where you would like audit logs to be written, for example,
+--audit-log-path=/var/log/apiserver/audit.log
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--audit-log-path' is present
+```
+
+**Returned Value**:
+
+```console
+root 3528 3509 7 Sep11 ? 01:24:09 kube-apiserver --service-cluster-ip-range=10.43.0.0/16 --anonymous-auth=false --profiling=false --advertise-address=172.31.7.100 --audit-log-maxsize=100 --cloud-provider= --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --etcd-prefix=/registry --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --storage-backend=etcd3 --service-node-port-range=30000-32767 --bind-address=0.0.0.0 --api-audiences=unknown --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --runtime-config=policy/v1beta1/podsecuritypolicy=true --allow-privileged=true --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --service-account-issuer=rke --requestheader-allowed-names=kube-apiserver-proxy-client --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-format=json --authorization-mode=Node,RBAC --etcd-servers=https://172.31.7.100:2379 --service-account-lookup=true --secure-port=6443 --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --audit-log-maxage=30 --admission-control-config-file=/etc/kubernetes/admission.yaml --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --audit-log-maxbackup=10 --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --authentication-token-webhook-cache-ttl=5s
+```
+
+### 1.2.20 Ensure that the --audit-log-maxage argument is set to 30 or as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the --audit-log-maxage parameter to 30
+or as an appropriate number of days, for example,
+--audit-log-maxage=30
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--audit-log-maxage' is greater or equal to 30
+```
+
+**Returned Value**:
+
+```console
+root 3528 3509 7 Sep11 ? 01:24:09 kube-apiserver --service-cluster-ip-range=10.43.0.0/16 --anonymous-auth=false --profiling=false --advertise-address=172.31.7.100 --audit-log-maxsize=100 --cloud-provider= --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --etcd-prefix=/registry --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --storage-backend=etcd3 --service-node-port-range=30000-32767 --bind-address=0.0.0.0 --api-audiences=unknown --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --runtime-config=policy/v1beta1/podsecuritypolicy=true --allow-privileged=true --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --service-account-issuer=rke --requestheader-allowed-names=kube-apiserver-proxy-client --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-format=json --authorization-mode=Node,RBAC --etcd-servers=https://172.31.7.100:2379 --service-account-lookup=true --secure-port=6443 --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --audit-log-maxage=30 --admission-control-config-file=/etc/kubernetes/admission.yaml --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --audit-log-maxbackup=10 --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --authentication-token-webhook-cache-ttl=5s
+```
+
+### 1.2.21 Ensure that the --audit-log-maxbackup argument is set to 10 or as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the --audit-log-maxbackup parameter to 10 or to an appropriate
+value. For example,
+--audit-log-maxbackup=10
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--audit-log-maxbackup' is greater or equal to 10
+```
+
+**Returned Value**:
+
+```console
+root 3528 3509 7 Sep11 ? 01:24:09 kube-apiserver --service-cluster-ip-range=10.43.0.0/16 --anonymous-auth=false --profiling=false --advertise-address=172.31.7.100 --audit-log-maxsize=100 --cloud-provider= --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --etcd-prefix=/registry --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --storage-backend=etcd3 --service-node-port-range=30000-32767 --bind-address=0.0.0.0 --api-audiences=unknown --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --runtime-config=policy/v1beta1/podsecuritypolicy=true --allow-privileged=true --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --service-account-issuer=rke --requestheader-allowed-names=kube-apiserver-proxy-client --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-format=json --authorization-mode=Node,RBAC --etcd-servers=https://172.31.7.100:2379 --service-account-lookup=true --secure-port=6443 --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --audit-log-maxage=30 --admission-control-config-file=/etc/kubernetes/admission.yaml --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --audit-log-maxbackup=10 --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --authentication-token-webhook-cache-ttl=5s
+```
+
+### 1.2.22 Ensure that the --audit-log-maxsize argument is set to 100 or as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the --audit-log-maxsize parameter to an appropriate size in MB.
+For example, to set it as 100 MB, --audit-log-maxsize=100
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--audit-log-maxsize' is greater or equal to 100
+```
+
+**Returned Value**:
+
+```console
+root 3528 3509 7 Sep11 ? 01:24:09 kube-apiserver --service-cluster-ip-range=10.43.0.0/16 --anonymous-auth=false --profiling=false --advertise-address=172.31.7.100 --audit-log-maxsize=100 --cloud-provider= --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --etcd-prefix=/registry --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --storage-backend=etcd3 --service-node-port-range=30000-32767 --bind-address=0.0.0.0 --api-audiences=unknown --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --runtime-config=policy/v1beta1/podsecuritypolicy=true --allow-privileged=true --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --service-account-issuer=rke --requestheader-allowed-names=kube-apiserver-proxy-client --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-format=json --authorization-mode=Node,RBAC --etcd-servers=https://172.31.7.100:2379 --service-account-lookup=true --secure-port=6443 --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --audit-log-maxage=30 --admission-control-config-file=/etc/kubernetes/admission.yaml --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --audit-log-maxbackup=10 --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --authentication-token-webhook-cache-ttl=5s
+```
+
+### 1.2.24 Ensure that the --service-account-lookup argument is set to true (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the below parameter.
+--service-account-lookup=true
+Alternatively, you can delete the --service-account-lookup parameter from this file so
+that the default takes effect.
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--service-account-lookup' is not present OR '--service-account-lookup' is equal to 'true'
+```
+
+**Returned Value**:
+
+```console
+root 3528 3509 7 Sep11 ? 01:24:09 kube-apiserver --service-cluster-ip-range=10.43.0.0/16 --anonymous-auth=false --profiling=false --advertise-address=172.31.7.100 --audit-log-maxsize=100 --cloud-provider= --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --etcd-prefix=/registry --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --storage-backend=etcd3 --service-node-port-range=30000-32767 --bind-address=0.0.0.0 --api-audiences=unknown --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --runtime-config=policy/v1beta1/podsecuritypolicy=true --allow-privileged=true --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --service-account-issuer=rke --requestheader-allowed-names=kube-apiserver-proxy-client --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-format=json --authorization-mode=Node,RBAC --etcd-servers=https://172.31.7.100:2379 --service-account-lookup=true --secure-port=6443 --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --audit-log-maxage=30 --admission-control-config-file=/etc/kubernetes/admission.yaml --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --audit-log-maxbackup=10 --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --authentication-token-webhook-cache-ttl=5s
+```
+
+### 1.2.25 Ensure that the --request-timeout argument is set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the --service-account-key-file parameter
+to the public key file for service accounts. For example,
+--service-account-key-file=
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--service-account-key-file' is present
+```
+
+**Returned Value**:
+
+```console
+root 3528 3509 7 Sep11 ? 01:24:09 kube-apiserver --service-cluster-ip-range=10.43.0.0/16 --anonymous-auth=false --profiling=false --advertise-address=172.31.7.100 --audit-log-maxsize=100 --cloud-provider= --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --etcd-prefix=/registry --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --storage-backend=etcd3 --service-node-port-range=30000-32767 --bind-address=0.0.0.0 --api-audiences=unknown --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --runtime-config=policy/v1beta1/podsecuritypolicy=true --allow-privileged=true --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --service-account-issuer=rke --requestheader-allowed-names=kube-apiserver-proxy-client --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-format=json --authorization-mode=Node,RBAC --etcd-servers=https://172.31.7.100:2379 --service-account-lookup=true --secure-port=6443 --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --audit-log-maxage=30 --admission-control-config-file=/etc/kubernetes/admission.yaml --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --audit-log-maxbackup=10 --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --authentication-token-webhook-cache-ttl=5s
+```
+
+### 1.2.26 Ensure that the --etcd-certfile and --etcd-keyfile arguments are set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the Kubernetes documentation and set up the TLS connection between the apiserver and etcd.
+Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the etcd certificate and key file parameters.
+--etcd-certfile=
+--etcd-keyfile=
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--etcd-certfile' is present AND '--etcd-keyfile' is present
+```
+
+**Returned Value**:
+
+```console
+root 3528 3509 7 Sep11 ? 01:24:09 kube-apiserver --service-cluster-ip-range=10.43.0.0/16 --anonymous-auth=false --profiling=false --advertise-address=172.31.7.100 --audit-log-maxsize=100 --cloud-provider= --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --etcd-prefix=/registry --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --storage-backend=etcd3 --service-node-port-range=30000-32767 --bind-address=0.0.0.0 --api-audiences=unknown --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --runtime-config=policy/v1beta1/podsecuritypolicy=true --allow-privileged=true --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --service-account-issuer=rke --requestheader-allowed-names=kube-apiserver-proxy-client --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-format=json --authorization-mode=Node,RBAC --etcd-servers=https://172.31.7.100:2379 --service-account-lookup=true --secure-port=6443 --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --audit-log-maxage=30 --admission-control-config-file=/etc/kubernetes/admission.yaml --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --audit-log-maxbackup=10 --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --authentication-token-webhook-cache-ttl=5s
+```
+
+### 1.2.27 Ensure that the --tls-cert-file and --tls-private-key-file arguments are set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the Kubernetes documentation and set up the TLS connection on the apiserver.
+Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the TLS certificate and private key file parameters.
+--tls-cert-file=
+--tls-private-key-file=
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--tls-cert-file' is present AND '--tls-private-key-file' is present
+```
+
+**Returned Value**:
+
+```console
+root 3528 3509 7 Sep11 ? 01:24:09 kube-apiserver --service-cluster-ip-range=10.43.0.0/16 --anonymous-auth=false --profiling=false --advertise-address=172.31.7.100 --audit-log-maxsize=100 --cloud-provider= --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --etcd-prefix=/registry --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --storage-backend=etcd3 --service-node-port-range=30000-32767 --bind-address=0.0.0.0 --api-audiences=unknown --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --runtime-config=policy/v1beta1/podsecuritypolicy=true --allow-privileged=true --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --service-account-issuer=rke --requestheader-allowed-names=kube-apiserver-proxy-client --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-format=json --authorization-mode=Node,RBAC --etcd-servers=https://172.31.7.100:2379 --service-account-lookup=true --secure-port=6443 --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --audit-log-maxage=30 --admission-control-config-file=/etc/kubernetes/admission.yaml --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --audit-log-maxbackup=10 --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --authentication-token-webhook-cache-ttl=5s
+```
+
+### 1.2.28 Ensure that the --client-ca-file argument is set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the Kubernetes documentation and set up the TLS connection on the apiserver.
+Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the client certificate authority file.
+--client-ca-file=
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--client-ca-file' is present
+```
+
+**Returned Value**:
+
+```console
+root 3528 3509 7 Sep11 ? 01:24:09 kube-apiserver --service-cluster-ip-range=10.43.0.0/16 --anonymous-auth=false --profiling=false --advertise-address=172.31.7.100 --audit-log-maxsize=100 --cloud-provider= --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --etcd-prefix=/registry --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --storage-backend=etcd3 --service-node-port-range=30000-32767 --bind-address=0.0.0.0 --api-audiences=unknown --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --runtime-config=policy/v1beta1/podsecuritypolicy=true --allow-privileged=true --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --service-account-issuer=rke --requestheader-allowed-names=kube-apiserver-proxy-client --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-format=json --authorization-mode=Node,RBAC --etcd-servers=https://172.31.7.100:2379 --service-account-lookup=true --secure-port=6443 --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --audit-log-maxage=30 --admission-control-config-file=/etc/kubernetes/admission.yaml --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --audit-log-maxbackup=10 --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --authentication-token-webhook-cache-ttl=5s
+```
+
+### 1.2.29 Ensure that the --etcd-cafile argument is set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the Kubernetes documentation and set up the TLS connection between the apiserver and etcd.
+Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the etcd certificate authority file parameter.
+--etcd-cafile=
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--etcd-cafile' is present
+```
+
+**Returned Value**:
+
+```console
+root 3528 3509 7 Sep11 ? 01:24:09 kube-apiserver --service-cluster-ip-range=10.43.0.0/16 --anonymous-auth=false --profiling=false --advertise-address=172.31.7.100 --audit-log-maxsize=100 --cloud-provider= --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --etcd-prefix=/registry --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --storage-backend=etcd3 --service-node-port-range=30000-32767 --bind-address=0.0.0.0 --api-audiences=unknown --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --runtime-config=policy/v1beta1/podsecuritypolicy=true --allow-privileged=true --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --service-account-issuer=rke --requestheader-allowed-names=kube-apiserver-proxy-client --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-format=json --authorization-mode=Node,RBAC --etcd-servers=https://172.31.7.100:2379 --service-account-lookup=true --secure-port=6443 --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --audit-log-maxage=30 --admission-control-config-file=/etc/kubernetes/admission.yaml --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --audit-log-maxbackup=10 --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --authentication-token-webhook-cache-ttl=5s
+```
+
+### 1.2.30 Ensure that the --encryption-provider-config argument is set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the Kubernetes documentation and configure a EncryptionConfig file.
+Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the --encryption-provider-config parameter to the path of that file.
+For example, --encryption-provider-config=
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--encryption-provider-config' is present
+```
+
+**Returned Value**:
+
+```console
+root 3528 3509 7 Sep11 ? 01:24:09 kube-apiserver --service-cluster-ip-range=10.43.0.0/16 --anonymous-auth=false --profiling=false --advertise-address=172.31.7.100 --audit-log-maxsize=100 --cloud-provider= --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --etcd-prefix=/registry --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --storage-backend=etcd3 --service-node-port-range=30000-32767 --bind-address=0.0.0.0 --api-audiences=unknown --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --runtime-config=policy/v1beta1/podsecuritypolicy=true --allow-privileged=true --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --service-account-issuer=rke --requestheader-allowed-names=kube-apiserver-proxy-client --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-format=json --authorization-mode=Node,RBAC --etcd-servers=https://172.31.7.100:2379 --service-account-lookup=true --secure-port=6443 --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --audit-log-maxage=30 --admission-control-config-file=/etc/kubernetes/admission.yaml --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --audit-log-maxbackup=10 --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --authentication-token-webhook-cache-ttl=5s
+```
+
+### 1.2.31 Ensure that encryption providers are appropriately configured (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the Kubernetes documentation and configure a EncryptionConfig file.
+In this file, choose aescbc, kms or secretbox as the encryption provider.
+
+**Audit Script:** `check_encryption_provider_config.sh`
+
+```bash
+#!/usr/bin/env bash
+
+# This script is used to check the encrption provider config is set to aesbc
+#
+# outputs:
+# true/false
+
+# TODO: Figure out the file location from the kube-apiserver commandline args
+ENCRYPTION_CONFIG_FILE="/node/etc/kubernetes/ssl/encryption.yaml"
+
+if [[ ! -f "${ENCRYPTION_CONFIG_FILE}" ]]; then
+ echo "false"
+ exit
+fi
+
+for provider in "$@"
+do
+ if grep "$provider" "${ENCRYPTION_CONFIG_FILE}"; then
+ echo "true"
+ exit
+ fi
+done
+
+echo "false"
+exit
+
+```
+
+**Audit Execution:**
+
+```bash
+./check_encryption_provider_config.sh aescbc
+```
+
+**Expected Result**:
+
+```console
+'true' is equal to 'true'
+```
+
+**Returned Value**:
+
+```console
+- aescbc: true
+```
+
+### 1.2.32 Ensure that the API Server only makes use of Strong Cryptographic Ciphers (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the below parameter.
+--tls-cipher-suites=TLS_AES_128_GCM_SHA256,TLS_AES_256_GCM_SHA384,TLS_CHACHA20_POLY1305_SHA256,
+TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
+TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
+TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256,
+TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
+TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,
+TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256,TLS_RSA_WITH_3DES_EDE_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA,
+TLS_RSA_WITH_AES_128_GCM_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_AES_256_GCM_SHA384
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--tls-cipher-suites' contains valid elements from 'TLS_AES_128_GCM_SHA256,TLS_AES_256_GCM_SHA384,TLS_CHACHA20_POLY1305_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256,TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256,TLS_RSA_WITH_3DES_EDE_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_128_GCM_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_AES_256_GCM_SHA384'
+```
+
+**Returned Value**:
+
+```console
+root 3528 3509 7 Sep11 ? 01:24:09 kube-apiserver --service-cluster-ip-range=10.43.0.0/16 --anonymous-auth=false --profiling=false --advertise-address=172.31.7.100 --audit-log-maxsize=100 --cloud-provider= --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --etcd-prefix=/registry --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --storage-backend=etcd3 --service-node-port-range=30000-32767 --bind-address=0.0.0.0 --api-audiences=unknown --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --runtime-config=policy/v1beta1/podsecuritypolicy=true --allow-privileged=true --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --service-account-issuer=rke --requestheader-allowed-names=kube-apiserver-proxy-client --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-format=json --authorization-mode=Node,RBAC --etcd-servers=https://172.31.7.100:2379 --service-account-lookup=true --secure-port=6443 --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --audit-log-maxage=30 --admission-control-config-file=/etc/kubernetes/admission.yaml --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --audit-log-maxbackup=10 --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --authentication-token-webhook-cache-ttl=5s
+```
+
+## 1.3 Controller Manager
+### 1.3.1 Ensure that the --terminated-pod-gc-threshold argument is set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the Controller Manager pod specification file /etc/kubernetes/manifests/kube-controller-manager.yaml
+on the control plane node and set the --terminated-pod-gc-threshold to an appropriate threshold,
+for example, --terminated-pod-gc-threshold=10
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-controller-manager | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--terminated-pod-gc-threshold' is present
+```
+
+**Returned Value**:
+
+```console
+root 3690 3671 1 Sep11 ? 00:20:42 kube-controller-manager --service-cluster-ip-range=10.43.0.0/16 --configure-cloud-routes=false --enable-hostpath-provisioner=false --terminated-pod-gc-threshold=1000 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 --service-account-private-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --v=2 --pod-eviction-timeout=5m0s --authorization-kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --cloud-provider= --cluster-cidr=10.42.0.0/16 --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --root-ca-file=/etc/kubernetes/ssl/kube-ca.pem --allocate-node-cidrs=true --authentication-kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --feature-gates=RotateKubeletServerCertificate=true --leader-elect=true --profiling=false --node-monitor-grace-period=40s --allow-untagged-cloud=true --use-service-account-credentials=true
+```
+
+### 1.3.2 Ensure that the --profiling argument is set to false (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the Controller Manager pod specification file /etc/kubernetes/manifests/kube-controller-manager.yaml
+on the control plane node and set the below parameter.
+--profiling=false
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-controller-manager | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--profiling' is equal to 'false'
+```
+
+**Returned Value**:
+
+```console
+root 3690 3671 1 Sep11 ? 00:20:42 kube-controller-manager --service-cluster-ip-range=10.43.0.0/16 --configure-cloud-routes=false --enable-hostpath-provisioner=false --terminated-pod-gc-threshold=1000 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 --service-account-private-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --v=2 --pod-eviction-timeout=5m0s --authorization-kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --cloud-provider= --cluster-cidr=10.42.0.0/16 --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --root-ca-file=/etc/kubernetes/ssl/kube-ca.pem --allocate-node-cidrs=true --authentication-kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --feature-gates=RotateKubeletServerCertificate=true --leader-elect=true --profiling=false --node-monitor-grace-period=40s --allow-untagged-cloud=true --use-service-account-credentials=true
+```
+
+### 1.3.3 Ensure that the --use-service-account-credentials argument is set to true (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the Controller Manager pod specification file /etc/kubernetes/manifests/kube-controller-manager.yaml
+on the control plane node to set the below parameter.
+--use-service-account-credentials=true
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-controller-manager | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--use-service-account-credentials' is not equal to 'false'
+```
+
+**Returned Value**:
+
+```console
+root 3690 3671 1 Sep11 ? 00:20:42 kube-controller-manager --service-cluster-ip-range=10.43.0.0/16 --configure-cloud-routes=false --enable-hostpath-provisioner=false --terminated-pod-gc-threshold=1000 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 --service-account-private-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --v=2 --pod-eviction-timeout=5m0s --authorization-kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --cloud-provider= --cluster-cidr=10.42.0.0/16 --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --root-ca-file=/etc/kubernetes/ssl/kube-ca.pem --allocate-node-cidrs=true --authentication-kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --feature-gates=RotateKubeletServerCertificate=true --leader-elect=true --profiling=false --node-monitor-grace-period=40s --allow-untagged-cloud=true --use-service-account-credentials=true
+```
+
+### 1.3.4 Ensure that the --service-account-private-key-file argument is set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the Controller Manager pod specification file /etc/kubernetes/manifests/kube-controller-manager.yaml
+on the control plane node and set the --service-account-private-key-file parameter
+to the private key file for service accounts.
+--service-account-private-key-file=
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-controller-manager | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--service-account-private-key-file' is present
+```
+
+**Returned Value**:
+
+```console
+root 3690 3671 1 Sep11 ? 00:20:42 kube-controller-manager --service-cluster-ip-range=10.43.0.0/16 --configure-cloud-routes=false --enable-hostpath-provisioner=false --terminated-pod-gc-threshold=1000 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 --service-account-private-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --v=2 --pod-eviction-timeout=5m0s --authorization-kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --cloud-provider= --cluster-cidr=10.42.0.0/16 --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --root-ca-file=/etc/kubernetes/ssl/kube-ca.pem --allocate-node-cidrs=true --authentication-kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --feature-gates=RotateKubeletServerCertificate=true --leader-elect=true --profiling=false --node-monitor-grace-period=40s --allow-untagged-cloud=true --use-service-account-credentials=true
+```
+
+### 1.3.5 Ensure that the --root-ca-file argument is set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the Controller Manager pod specification file /etc/kubernetes/manifests/kube-controller-manager.yaml
+on the control plane node and set the --root-ca-file parameter to the certificate bundle file`.
+--root-ca-file=
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-controller-manager | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--root-ca-file' is present
+```
+
+**Returned Value**:
+
+```console
+root 3690 3671 1 Sep11 ? 00:20:42 kube-controller-manager --service-cluster-ip-range=10.43.0.0/16 --configure-cloud-routes=false --enable-hostpath-provisioner=false --terminated-pod-gc-threshold=1000 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 --service-account-private-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --v=2 --pod-eviction-timeout=5m0s --authorization-kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --cloud-provider= --cluster-cidr=10.42.0.0/16 --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --root-ca-file=/etc/kubernetes/ssl/kube-ca.pem --allocate-node-cidrs=true --authentication-kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --feature-gates=RotateKubeletServerCertificate=true --leader-elect=true --profiling=false --node-monitor-grace-period=40s --allow-untagged-cloud=true --use-service-account-credentials=true
+```
+
+### 1.3.6 Ensure that the RotateKubeletServerCertificate argument is set to true (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Edit the Controller Manager pod specification file /etc/kubernetes/manifests/kube-controller-manager.yaml
+on the control plane node and set the --feature-gates parameter to include RotateKubeletServerCertificate=true.
+--feature-gates=RotateKubeletServerCertificate=true
+
+Cluster provisioned by RKE handles certificate rotation directly through RKE.
+
+### 1.3.7 Ensure that the --bind-address argument is set to 127.0.0.1 (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the Controller Manager pod specification file /etc/kubernetes/manifests/kube-controller-manager.yaml
+on the control plane node and ensure the correct value for the --bind-address parameter
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-controller-manager | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--bind-address' is present OR '--bind-address' is not present
+```
+
+**Returned Value**:
+
+```console
+root 3690 3671 1 Sep11 ? 00:20:42 kube-controller-manager --service-cluster-ip-range=10.43.0.0/16 --configure-cloud-routes=false --enable-hostpath-provisioner=false --terminated-pod-gc-threshold=1000 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 --service-account-private-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --v=2 --pod-eviction-timeout=5m0s --authorization-kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --cloud-provider= --cluster-cidr=10.42.0.0/16 --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --root-ca-file=/etc/kubernetes/ssl/kube-ca.pem --allocate-node-cidrs=true --authentication-kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --feature-gates=RotateKubeletServerCertificate=true --leader-elect=true --profiling=false --node-monitor-grace-period=40s --allow-untagged-cloud=true --use-service-account-credentials=true
+```
+
+## 1.4 Scheduler
+### 1.4.1 Ensure that the --profiling argument is set to false (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the Scheduler pod specification file /etc/kubernetes/manifests/kube-scheduler.yaml file
+on the control plane node and set the below parameter.
+--profiling=false
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-scheduler | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--profiling' is equal to 'false'
+```
+
+**Returned Value**:
+
+```console
+root 3859 3838 0 Sep11 ? 00:03:44 kube-scheduler --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-scheduler.yaml --leader-elect=true --profiling=false --v=2 --authentication-kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-scheduler.yaml --authorization-kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-scheduler.yaml --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256
+```
+
+### 1.4.2 Ensure that the --bind-address argument is set to 127.0.0.1 (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the Scheduler pod specification file /etc/kubernetes/manifests/kube-scheduler.yaml
+on the control plane node and ensure the correct value for the --bind-address parameter
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-scheduler | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--bind-address' is present OR '--bind-address' is not present
+```
+
+**Returned Value**:
+
+```console
+root 3859 3838 0 Sep11 ? 00:03:44 kube-scheduler --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-scheduler.yaml --leader-elect=true --profiling=false --v=2 --authentication-kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-scheduler.yaml --authorization-kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-scheduler.yaml --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256
+```
+
+## 2 Etcd Node Configuration
+### 2.1 Ensure that the --cert-file and --key-file arguments are set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the etcd service documentation and configure TLS encryption.
+Then, edit the etcd pod specification file /etc/kubernetes/manifests/etcd.yaml
+on the master node and set the below parameters.
+--cert-file=
+--key-file=
+
+**Audit:**
+
+```bash
+/bin/ps -ef | /bin/grep etcd | /bin/grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--cert-file' is present AND '--key-file' is present
+```
+
+**Returned Value**:
+
+```console
+etcd 3369 3348 2 Sep11 ? 00:26:05 /usr/local/bin/etcd --peer-client-cert-auth=true --initial-cluster-token=etcd-cluster-1 --initial-cluster=etcd-ip-172-31-7-100=https://172.31.7.100:2380 --cert-file=/etc/kubernetes/ssl/kube-etcd-172-31-7-100.pem --peer-cert-file=/etc/kubernetes/ssl/kube-etcd-172-31-7-100.pem --peer-key-file=/etc/kubernetes/ssl/kube-etcd-172-31-7-100-key.pem --client-cert-auth=true --election-timeout=5000 --name=etcd-ip-172-31-7-100 --listen-client-urls=https://0.0.0.0:2379 --trusted-ca-file=/etc/kubernetes/ssl/kube-ca.pem --peer-trusted-ca-file=/etc/kubernetes/ssl/kube-ca.pem --data-dir=/var/lib/rancher/etcd/ --initial-cluster-state=new --advertise-client-urls=https://172.31.7.100:2379 --heartbeat-interval=500 --initial-advertise-peer-urls=https://172.31.7.100:2380 --listen-peer-urls=https://0.0.0.0:2380 --key-file=/etc/kubernetes/ssl/kube-etcd-172-31-7-100-key.pem --cipher-suites=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 root 3528 3509 7 Sep11 ? 01:24:08 kube-apiserver --service-cluster-ip-range=10.43.0.0/16 --anonymous-auth=false --profiling=false --advertise-address=172.31.7.100 --audit-log-maxsize=100 --cloud-provider= --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --etcd-prefix=/registry --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --storage-backend=etcd3 --service-node-port-range=30000-32767 --bind-address=0.0.0.0 --api-audiences=unknown --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --runtime-config=policy/v1beta1/podsecuritypolicy=true --allow-privileged=true --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --service-account-issuer=rke --requestheader-allowed-names=kube-apiserver-proxy-client --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-format=json --authorization-mode=Node,RBAC --etcd-servers=https://172.31.7.100:2379 --service-account-lookup=true --secure-port=6443 --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --audit-log-maxage=30 --admission-control-config-file=/etc/kubernetes/admission.yaml --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --audit-log-maxbackup=10 --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --authentication-token-webhook-cache-ttl=5s root 1057543 1057522 5 16:15 ? 00:00:00 kube-bench run --targets etcd --scored --nosummary --noremediations --v=0 --config-dir=/etc/kube-bench/cfg --benchmark rke-cis-1.24-hardened --json --log_dir /tmp/sonobuoy/logs --outputfile /tmp/sonobuoy/etcd.json
+```
+
+### 2.2 Ensure that the --client-cert-auth argument is set to true (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the etcd pod specification file /etc/kubernetes/manifests/etcd.yaml on the master
+node and set the below parameter.
+--client-cert-auth="true"
+
+**Audit:**
+
+```bash
+/bin/ps -ef | /bin/grep etcd | /bin/grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--client-cert-auth' is equal to 'true'
+```
+
+**Returned Value**:
+
+```console
+etcd 3369 3348 2 Sep11 ? 00:26:05 /usr/local/bin/etcd --peer-client-cert-auth=true --initial-cluster-token=etcd-cluster-1 --initial-cluster=etcd-ip-172-31-7-100=https://172.31.7.100:2380 --cert-file=/etc/kubernetes/ssl/kube-etcd-172-31-7-100.pem --peer-cert-file=/etc/kubernetes/ssl/kube-etcd-172-31-7-100.pem --peer-key-file=/etc/kubernetes/ssl/kube-etcd-172-31-7-100-key.pem --client-cert-auth=true --election-timeout=5000 --name=etcd-ip-172-31-7-100 --listen-client-urls=https://0.0.0.0:2379 --trusted-ca-file=/etc/kubernetes/ssl/kube-ca.pem --peer-trusted-ca-file=/etc/kubernetes/ssl/kube-ca.pem --data-dir=/var/lib/rancher/etcd/ --initial-cluster-state=new --advertise-client-urls=https://172.31.7.100:2379 --heartbeat-interval=500 --initial-advertise-peer-urls=https://172.31.7.100:2380 --listen-peer-urls=https://0.0.0.0:2380 --key-file=/etc/kubernetes/ssl/kube-etcd-172-31-7-100-key.pem --cipher-suites=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 root 3528 3509 7 Sep11 ? 01:24:08 kube-apiserver --service-cluster-ip-range=10.43.0.0/16 --anonymous-auth=false --profiling=false --advertise-address=172.31.7.100 --audit-log-maxsize=100 --cloud-provider= --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --etcd-prefix=/registry --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --storage-backend=etcd3 --service-node-port-range=30000-32767 --bind-address=0.0.0.0 --api-audiences=unknown --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --runtime-config=policy/v1beta1/podsecuritypolicy=true --allow-privileged=true --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --service-account-issuer=rke --requestheader-allowed-names=kube-apiserver-proxy-client --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-format=json --authorization-mode=Node,RBAC --etcd-servers=https://172.31.7.100:2379 --service-account-lookup=true --secure-port=6443 --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --audit-log-maxage=30 --admission-control-config-file=/etc/kubernetes/admission.yaml --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --audit-log-maxbackup=10 --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --authentication-token-webhook-cache-ttl=5s root 1057543 1057522 4 16:15 ? 00:00:00 kube-bench run --targets etcd --scored --nosummary --noremediations --v=0 --config-dir=/etc/kube-bench/cfg --benchmark rke-cis-1.24-hardened --json --log_dir /tmp/sonobuoy/logs --outputfile /tmp/sonobuoy/etcd.json
+```
+
+### 2.3 Ensure that the --auto-tls argument is not set to true (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the etcd pod specification file /etc/kubernetes/manifests/etcd.yaml on the master
+node and either remove the --auto-tls parameter or set it to false.
+ --auto-tls=false
+
+**Audit:**
+
+```bash
+/bin/ps -ef | /bin/grep etcd | /bin/grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'ETCD_AUTO_TLS' is not present OR 'ETCD_AUTO_TLS' is present
+```
+
+**Returned Value**:
+
+```console
+PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin HOSTNAME=ip-172-31-7-100 ETCDCTL_API=3 ETCDCTL_CACERT=/etc/kubernetes/ssl/kube-ca.pem ETCDCTL_CERT=/etc/kubernetes/ssl/kube-etcd-172-31-7-100.pem ETCDCTL_KEY=/etc/kubernetes/ssl/kube-etcd-172-31-7-100-key.pem ETCDCTL_ENDPOINTS=https://127.0.0.1:2379 ETCD_UNSUPPORTED_ARCH=x86_64 HOME=/
+```
+
+### 2.4 Ensure that the --peer-cert-file and --peer-key-file arguments are set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the etcd service documentation and configure peer TLS encryption as appropriate
+for your etcd cluster.
+Then, edit the etcd pod specification file /etc/kubernetes/manifests/etcd.yaml on the
+master node and set the below parameters.
+--peer-client-file=
+--peer-key-file=
+
+**Audit:**
+
+```bash
+/bin/ps -ef | /bin/grep etcd | /bin/grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--peer-cert-file' is present AND '--peer-key-file' is present
+```
+
+**Returned Value**:
+
+```console
+etcd 3369 3348 2 Sep11 ? 00:26:05 /usr/local/bin/etcd --peer-client-cert-auth=true --initial-cluster-token=etcd-cluster-1 --initial-cluster=etcd-ip-172-31-7-100=https://172.31.7.100:2380 --cert-file=/etc/kubernetes/ssl/kube-etcd-172-31-7-100.pem --peer-cert-file=/etc/kubernetes/ssl/kube-etcd-172-31-7-100.pem --peer-key-file=/etc/kubernetes/ssl/kube-etcd-172-31-7-100-key.pem --client-cert-auth=true --election-timeout=5000 --name=etcd-ip-172-31-7-100 --listen-client-urls=https://0.0.0.0:2379 --trusted-ca-file=/etc/kubernetes/ssl/kube-ca.pem --peer-trusted-ca-file=/etc/kubernetes/ssl/kube-ca.pem --data-dir=/var/lib/rancher/etcd/ --initial-cluster-state=new --advertise-client-urls=https://172.31.7.100:2379 --heartbeat-interval=500 --initial-advertise-peer-urls=https://172.31.7.100:2380 --listen-peer-urls=https://0.0.0.0:2380 --key-file=/etc/kubernetes/ssl/kube-etcd-172-31-7-100-key.pem --cipher-suites=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 root 3528 3509 7 Sep11 ? 01:24:09 kube-apiserver --service-cluster-ip-range=10.43.0.0/16 --anonymous-auth=false --profiling=false --advertise-address=172.31.7.100 --audit-log-maxsize=100 --cloud-provider= --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --etcd-prefix=/registry --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --storage-backend=etcd3 --service-node-port-range=30000-32767 --bind-address=0.0.0.0 --api-audiences=unknown --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --runtime-config=policy/v1beta1/podsecuritypolicy=true --allow-privileged=true --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --service-account-issuer=rke --requestheader-allowed-names=kube-apiserver-proxy-client --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-format=json --authorization-mode=Node,RBAC --etcd-servers=https://172.31.7.100:2379 --service-account-lookup=true --secure-port=6443 --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --audit-log-maxage=30 --admission-control-config-file=/etc/kubernetes/admission.yaml --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --audit-log-maxbackup=10 --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --authentication-token-webhook-cache-ttl=5s root 1057543 1057522 2 16:15 ? 00:00:00 kube-bench run --targets etcd --scored --nosummary --noremediations --v=0 --config-dir=/etc/kube-bench/cfg --benchmark rke-cis-1.24-hardened --json --log_dir /tmp/sonobuoy/logs --outputfile /tmp/sonobuoy/etcd.json
+```
+
+### 2.5 Ensure that the --peer-client-cert-auth argument is set to true (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the etcd pod specification file /etc/kubernetes/manifests/etcd.yaml on the master
+node and set the below parameter.
+--peer-client-cert-auth=true
+
+**Audit:**
+
+```bash
+/bin/ps -ef | /bin/grep etcd | /bin/grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--peer-client-cert-auth' is equal to 'true'
+```
+
+**Returned Value**:
+
+```console
+etcd 3369 3348 2 Sep11 ? 00:26:05 /usr/local/bin/etcd --peer-client-cert-auth=true --initial-cluster-token=etcd-cluster-1 --initial-cluster=etcd-ip-172-31-7-100=https://172.31.7.100:2380 --cert-file=/etc/kubernetes/ssl/kube-etcd-172-31-7-100.pem --peer-cert-file=/etc/kubernetes/ssl/kube-etcd-172-31-7-100.pem --peer-key-file=/etc/kubernetes/ssl/kube-etcd-172-31-7-100-key.pem --client-cert-auth=true --election-timeout=5000 --name=etcd-ip-172-31-7-100 --listen-client-urls=https://0.0.0.0:2379 --trusted-ca-file=/etc/kubernetes/ssl/kube-ca.pem --peer-trusted-ca-file=/etc/kubernetes/ssl/kube-ca.pem --data-dir=/var/lib/rancher/etcd/ --initial-cluster-state=new --advertise-client-urls=https://172.31.7.100:2379 --heartbeat-interval=500 --initial-advertise-peer-urls=https://172.31.7.100:2380 --listen-peer-urls=https://0.0.0.0:2380 --key-file=/etc/kubernetes/ssl/kube-etcd-172-31-7-100-key.pem --cipher-suites=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 root 3528 3509 7 Sep11 ? 01:24:09 kube-apiserver --service-cluster-ip-range=10.43.0.0/16 --anonymous-auth=false --profiling=false --advertise-address=172.31.7.100 --audit-log-maxsize=100 --cloud-provider= --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --etcd-prefix=/registry --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --storage-backend=etcd3 --service-node-port-range=30000-32767 --bind-address=0.0.0.0 --api-audiences=unknown --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --runtime-config=policy/v1beta1/podsecuritypolicy=true --allow-privileged=true --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --service-account-issuer=rke --requestheader-allowed-names=kube-apiserver-proxy-client --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-format=json --authorization-mode=Node,RBAC --etcd-servers=https://172.31.7.100:2379 --service-account-lookup=true --secure-port=6443 --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --audit-log-maxage=30 --admission-control-config-file=/etc/kubernetes/admission.yaml --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --audit-log-maxbackup=10 --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --authentication-token-webhook-cache-ttl=5s root 1057543 1057522 2 16:15 ? 00:00:00 kube-bench run --targets etcd --scored --nosummary --noremediations --v=0 --config-dir=/etc/kube-bench/cfg --benchmark rke-cis-1.24-hardened --json --log_dir /tmp/sonobuoy/logs --outputfile /tmp/sonobuoy/etcd.json
+```
+
+### 2.6 Ensure that the --peer-auto-tls argument is not set to true (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the etcd pod specification file /etc/kubernetes/manifests/etcd.yaml on the master
+node and either remove the --peer-auto-tls parameter or set it to false.
+--peer-auto-tls=false
+
+**Audit:**
+
+```bash
+/bin/ps -ef | /bin/grep etcd | /bin/grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'ETCD_PEER_AUTO_TLS' is not present OR 'ETCD_PEER_AUTO_TLS' is present
+```
+
+**Returned Value**:
+
+```console
+PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin HOSTNAME=ip-172-31-7-100 ETCDCTL_API=3 ETCDCTL_CACERT=/etc/kubernetes/ssl/kube-ca.pem ETCDCTL_CERT=/etc/kubernetes/ssl/kube-etcd-172-31-7-100.pem ETCDCTL_KEY=/etc/kubernetes/ssl/kube-etcd-172-31-7-100-key.pem ETCDCTL_ENDPOINTS=https://127.0.0.1:2379 ETCD_UNSUPPORTED_ARCH=x86_64 HOME=/
+```
+
+### 2.7 Ensure that a unique Certificate Authority is used for etcd (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+[Manual test]
+Follow the etcd documentation and create a dedicated certificate authority setup for the
+etcd service.
+Then, edit the etcd pod specification file /etc/kubernetes/manifests/etcd.yaml on the
+master node and set the below parameter.
+--trusted-ca-file=
+
+**Audit:**
+
+```bash
+/bin/ps -ef | /bin/grep etcd | /bin/grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--trusted-ca-file' is present
+```
+
+**Returned Value**:
+
+```console
+etcd 3369 3348 2 Sep11 ? 00:26:05 /usr/local/bin/etcd --peer-client-cert-auth=true --initial-cluster-token=etcd-cluster-1 --initial-cluster=etcd-ip-172-31-7-100=https://172.31.7.100:2380 --cert-file=/etc/kubernetes/ssl/kube-etcd-172-31-7-100.pem --peer-cert-file=/etc/kubernetes/ssl/kube-etcd-172-31-7-100.pem --peer-key-file=/etc/kubernetes/ssl/kube-etcd-172-31-7-100-key.pem --client-cert-auth=true --election-timeout=5000 --name=etcd-ip-172-31-7-100 --listen-client-urls=https://0.0.0.0:2379 --trusted-ca-file=/etc/kubernetes/ssl/kube-ca.pem --peer-trusted-ca-file=/etc/kubernetes/ssl/kube-ca.pem --data-dir=/var/lib/rancher/etcd/ --initial-cluster-state=new --advertise-client-urls=https://172.31.7.100:2379 --heartbeat-interval=500 --initial-advertise-peer-urls=https://172.31.7.100:2380 --listen-peer-urls=https://0.0.0.0:2380 --key-file=/etc/kubernetes/ssl/kube-etcd-172-31-7-100-key.pem --cipher-suites=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 root 3528 3509 7 Sep11 ? 01:24:09 kube-apiserver --service-cluster-ip-range=10.43.0.0/16 --anonymous-auth=false --profiling=false --advertise-address=172.31.7.100 --audit-log-maxsize=100 --cloud-provider= --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --etcd-prefix=/registry --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --storage-backend=etcd3 --service-node-port-range=30000-32767 --bind-address=0.0.0.0 --api-audiences=unknown --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --runtime-config=policy/v1beta1/podsecuritypolicy=true --allow-privileged=true --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --service-account-issuer=rke --requestheader-allowed-names=kube-apiserver-proxy-client --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-format=json --authorization-mode=Node,RBAC --etcd-servers=https://172.31.7.100:2379 --service-account-lookup=true --secure-port=6443 --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --audit-log-maxage=30 --admission-control-config-file=/etc/kubernetes/admission.yaml --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --audit-log-maxbackup=10 --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --authentication-token-webhook-cache-ttl=5s root 1057543 1057522 2 16:15 ? 00:00:00 kube-bench run --targets etcd --scored --nosummary --noremediations --v=0 --config-dir=/etc/kube-bench/cfg --benchmark rke-cis-1.24-hardened --json --log_dir /tmp/sonobuoy/logs --outputfile /tmp/sonobuoy/etcd.json
+```
+
+## 3.1 Authentication and Authorization
+### 3.1.1 Client certificate authentication should not be used for users (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Alternative mechanisms provided by Kubernetes such as the use of OIDC should be
+implemented in place of client certificates.
+
+## 3.2 Logging
+### 3.2.1 Ensure that a minimal audit policy is created (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Create an audit policy file for your cluster.
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--audit-policy-file' is present
+```
+
+**Returned Value**:
+
+```console
+root 3528 3509 7 Sep11 ? 01:24:10 kube-apiserver --service-cluster-ip-range=10.43.0.0/16 --anonymous-auth=false --profiling=false --advertise-address=172.31.7.100 --audit-log-maxsize=100 --cloud-provider= --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --etcd-prefix=/registry --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --storage-backend=etcd3 --service-node-port-range=30000-32767 --bind-address=0.0.0.0 --api-audiences=unknown --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --runtime-config=policy/v1beta1/podsecuritypolicy=true --allow-privileged=true --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --service-account-issuer=rke --requestheader-allowed-names=kube-apiserver-proxy-client --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-format=json --authorization-mode=Node,RBAC --etcd-servers=https://172.31.7.100:2379 --service-account-lookup=true --secure-port=6443 --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --audit-log-maxage=30 --admission-control-config-file=/etc/kubernetes/admission.yaml --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --audit-log-maxbackup=10 --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --authentication-token-webhook-cache-ttl=5s
+```
+
+### 3.2.2 Ensure that the audit policy covers key security concerns (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Review the audit policy provided for the cluster and ensure that it covers
+at least the following areas,
+- Access to Secrets managed by the cluster. Care should be taken to only
+ log Metadata for requests to Secrets, ConfigMaps, and TokenReviews, in
+ order to avoid risk of logging sensitive data.
+- Modification of Pod and Deployment objects.
+- Use of `pods/exec`, `pods/portforward`, `pods/proxy` and `services/proxy`.
+For most requests, minimally logging at the Metadata level is recommended
+(the most basic level of logging).
+
+## 4.1 Worker Node Configuration Files
+### 4.1.1 Ensure that the kubelet service file permissions are set to 600 or more restrictive (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Cluster provisioned by RKE doesn’t require or maintain a configuration file for the kubelet service.
+All configuration is passed in as arguments at container run time.
+
+### 4.1.2 Ensure that the kubelet service file ownership is set to root:root (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Cluster provisioned by RKE doesn’t require or maintain a configuration file for the kubelet service.
+All configuration is passed in as arguments at container run time.
+
+### 4.1.3 If proxy kubeconfig file exists ensure permissions are set to 600 or more restrictive (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the each worker node.
+For example,
+chmod 600 /node/etc/kubernetes/ssl/kubecfg-kube-proxy.yaml
+
+**Audit:**
+
+```bash
+/bin/sh -c 'if test -e /node/etc/kubernetes/ssl/kubecfg-kube-proxy.yaml; then stat -c permissions=%a /node/etc/kubernetes/ssl/kubecfg-kube-proxy.yaml; fi'
+```
+
+**Expected Result**:
+
+```console
+permissions has permissions 600, expected 600 or more restrictive
+```
+
+**Returned Value**:
+
+```console
+permissions=600
+```
+
+### 4.1.4 If proxy kubeconfig file exists ensure ownership is set to root:root (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the each worker node.
+For example, chown root:root /node/etc/kubernetes/ssl/kubecfg-kube-proxy.yaml
+
+**Audit:**
+
+```bash
+/bin/sh -c 'if test -e /node/etc/kubernetes/ssl/kubecfg-kube-proxy.yaml; then stat -c %U:%G /node/etc/kubernetes/ssl/kubecfg-kube-proxy.yaml; fi'
+```
+
+**Expected Result**:
+
+```console
+'root:root' is present
+```
+
+**Returned Value**:
+
+```console
+root:root
+```
+
+### 4.1.5 Ensure that the --kubeconfig kubelet.conf file permissions are set to 600 or more restrictive (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the each worker node.
+For example,
+chmod 600 /node/etc/kubernetes/ssl/kubecfg-kube-node.yaml
+
+**Audit:**
+
+```bash
+/bin/sh -c 'if test -e /node/etc/kubernetes/ssl/kubecfg-kube-node.yaml; then stat -c permissions=%a /node/etc/kubernetes/ssl/kubecfg-kube-node.yaml; fi'
+```
+
+**Expected Result**:
+
+```console
+permissions has permissions 600, expected 600 or more restrictive
+```
+
+**Returned Value**:
+
+```console
+permissions=600
+```
+
+### 4.1.6 Ensure that the --kubeconfig kubelet.conf file ownership is set to root:root (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the each worker node.
+For example,
+chown root:root /node/etc/kubernetes/ssl/kubecfg-kube-node.yaml
+
+**Audit:**
+
+```bash
+/bin/sh -c 'if test -e /node/etc/kubernetes/ssl/kubecfg-kube-node.yaml; then stat -c %U:%G /node/etc/kubernetes/ssl/kubecfg-kube-node.yaml; fi'
+```
+
+**Expected Result**:
+
+```console
+'root:root' is equal to 'root:root'
+```
+
+**Returned Value**:
+
+```console
+root:root
+```
+
+### 4.1.7 Ensure that the certificate authorities file permissions are set to 600 or more restrictive (Automated)
+
+
+**Result:** fail
+
+**Remediation:**
+Run the following command to modify the file permissions of the
+--client-ca-file chmod 600
+
+**Audit:**
+
+```bash
+stat -c permissions=%a /node/etc/kubernetes/ssl/kube-ca.pem
+```
+
+**Expected Result**:
+
+```console
+permissions has permissions 644, expected 600 or more restrictive
+```
+
+**Returned Value**:
+
+```console
+permissions=644
+```
+
+### 4.1.8 Ensure that the client certificate authorities file ownership is set to root:root (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the following command to modify the ownership of the --client-ca-file.
+chown root:root
+
+**Audit:**
+
+```bash
+stat -c %U:%G /node/etc/kubernetes/ssl/kube-ca.pem
+```
+
+**Expected Result**:
+
+```console
+'root:root' is equal to 'root:root'
+```
+
+**Returned Value**:
+
+```console
+root:root
+```
+
+### 4.1.9 If the kubelet config.yaml configuration file is being used validate permissions set to 600 or more restrictive (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Run the following command (using the config file location identified in the Audit step)
+chmod 600 /var/lib/kubelet/config.yaml
+
+Clusters provisioned by RKE doesn’t require or maintain a configuration file for the kubelet.
+All configuration is passed in as arguments at container run time.
+
+### 4.1.10 If the kubelet config.yaml configuration file is being used validate file ownership is set to root:root (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Run the following command (using the config file location identified in the Audit step)
+chown root:root /var/lib/kubelet/config.yaml
+
+Clusters provisioned by RKE doesn’t require or maintain a configuration file for the kubelet.
+All configuration is passed in as arguments at container run time.
+
+## 4.2 Kubelet
+### 4.2.1 Ensure that the --anonymous-auth argument is set to false (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+If using a Kubelet config file, edit the file to set `authentication: anonymous: enabled` to
+`false`.
+If using executable arguments, edit the kubelet service file
+/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
+set the below parameter in KUBELET_SYSTEM_PODS_ARGS variable.
+`--anonymous-auth=false`
+Based on your system, restart the kubelet service. For example,
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+**Audit:**
+
+```bash
+/bin/ps -fC kubelet
+```
+
+**Audit Config:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/kubelet/config.yaml; then /bin/cat /var/lib/kubelet/config.yaml; fi'
+```
+
+**Expected Result**:
+
+```console
+'--anonymous-auth' is equal to 'false'
+```
+
+**Returned Value**:
+
+```console
+UID PID PPID C STIME TTY TIME CMD root 4429 4031 3 Sep11 ? 00:38:25 kubelet --read-only-port=0 --event-qps=0 --root-dir=/var/lib/kubelet --pod-infra-container-image=rancher/mirrored-pause:3.7 --tls-private-key-file=/etc/kubernetes/ssl/kube-kubelet-172-31-7-100-key.pem --container-runtime-endpoint=unix:///var/run/cri-dockerd.sock --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 --volume-plugin-dir=/var/lib/kubelet/volumeplugins --cloud-provider= --address=0.0.0.0 --protect-kernel-defaults=true --hostname-override=ip-172-31-7-100 --resolv-conf=/etc/resolv.conf --cluster-dns=10.43.0.10 --cluster-domain=cluster.local --tls-cert-file=/etc/kubernetes/ssl/kube-kubelet-172-31-7-100.pem --make-iptables-util-chains=true --feature-gates=RotateKubeletServerCertificate=true --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-node.yaml --container-runtime=remote --v=2 --anonymous-auth=false --authentication-token-webhook=true --fail-swap-on=false --cgroups-per-qos=True --authorization-mode=Webhook --streaming-connection-idle-timeout=30m --cgroup-driver=cgroupfs --resolv-conf=/run/systemd/resolve/resolv.conf
+```
+
+### 4.2.2 Ensure that the --authorization-mode argument is not set to AlwaysAllow (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+If using a Kubelet config file, edit the file to set `authorization.mode` to Webhook. If
+using executable arguments, edit the kubelet service file
+/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
+set the below parameter in KUBELET_AUTHZ_ARGS variable.
+--authorization-mode=Webhook
+Based on your system, restart the kubelet service. For example,
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+**Audit:**
+
+```bash
+/bin/ps -fC kubelet
+```
+
+**Audit Config:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/kubelet/config.yaml; then /bin/cat /var/lib/kubelet/config.yaml; fi'
+```
+
+**Expected Result**:
+
+```console
+'--authorization-mode' does not have 'AlwaysAllow'
+```
+
+**Returned Value**:
+
+```console
+UID PID PPID C STIME TTY TIME CMD root 4429 4031 3 Sep11 ? 00:38:25 kubelet --read-only-port=0 --event-qps=0 --root-dir=/var/lib/kubelet --pod-infra-container-image=rancher/mirrored-pause:3.7 --tls-private-key-file=/etc/kubernetes/ssl/kube-kubelet-172-31-7-100-key.pem --container-runtime-endpoint=unix:///var/run/cri-dockerd.sock --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 --volume-plugin-dir=/var/lib/kubelet/volumeplugins --cloud-provider= --address=0.0.0.0 --protect-kernel-defaults=true --hostname-override=ip-172-31-7-100 --resolv-conf=/etc/resolv.conf --cluster-dns=10.43.0.10 --cluster-domain=cluster.local --tls-cert-file=/etc/kubernetes/ssl/kube-kubelet-172-31-7-100.pem --make-iptables-util-chains=true --feature-gates=RotateKubeletServerCertificate=true --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-node.yaml --container-runtime=remote --v=2 --anonymous-auth=false --authentication-token-webhook=true --fail-swap-on=false --cgroups-per-qos=True --authorization-mode=Webhook --streaming-connection-idle-timeout=30m --cgroup-driver=cgroupfs --resolv-conf=/run/systemd/resolve/resolv.conf
+```
+
+### 4.2.3 Ensure that the --client-ca-file argument is set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+If using a Kubelet config file, edit the file to set `authentication.x509.clientCAFile` to
+the location of the client CA file.
+If using command line arguments, edit the kubelet service file
+/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
+set the below parameter in KUBELET_AUTHZ_ARGS variable.
+--client-ca-file=
+Based on your system, restart the kubelet service. For example,
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+**Audit:**
+
+```bash
+/bin/ps -fC kubelet
+```
+
+**Audit Config:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/kubelet/config.yaml; then /bin/cat /var/lib/kubelet/config.yaml; fi'
+```
+
+**Expected Result**:
+
+```console
+'--client-ca-file' is present
+```
+
+**Returned Value**:
+
+```console
+UID PID PPID C STIME TTY TIME CMD root 4429 4031 3 Sep11 ? 00:38:25 kubelet --read-only-port=0 --event-qps=0 --root-dir=/var/lib/kubelet --pod-infra-container-image=rancher/mirrored-pause:3.7 --tls-private-key-file=/etc/kubernetes/ssl/kube-kubelet-172-31-7-100-key.pem --container-runtime-endpoint=unix:///var/run/cri-dockerd.sock --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 --volume-plugin-dir=/var/lib/kubelet/volumeplugins --cloud-provider= --address=0.0.0.0 --protect-kernel-defaults=true --hostname-override=ip-172-31-7-100 --resolv-conf=/etc/resolv.conf --cluster-dns=10.43.0.10 --cluster-domain=cluster.local --tls-cert-file=/etc/kubernetes/ssl/kube-kubelet-172-31-7-100.pem --make-iptables-util-chains=true --feature-gates=RotateKubeletServerCertificate=true --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-node.yaml --container-runtime=remote --v=2 --anonymous-auth=false --authentication-token-webhook=true --fail-swap-on=false --cgroups-per-qos=True --authorization-mode=Webhook --streaming-connection-idle-timeout=30m --cgroup-driver=cgroupfs --resolv-conf=/run/systemd/resolve/resolv.conf
+```
+
+### 4.2.4 Verify that the --read-only-port argument is set to 0 (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+If using a Kubelet config file, edit the file to set `readOnlyPort` to 0.
+If using command line arguments, edit the kubelet service file
+/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
+set the below parameter in KUBELET_SYSTEM_PODS_ARGS variable.
+--read-only-port=0
+Based on your system, restart the kubelet service. For example,
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+**Audit:**
+
+```bash
+/bin/ps -fC kubelet
+```
+
+**Audit Config:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/kubelet/config.yaml; then /bin/cat /var/lib/kubelet/config.yaml; fi'
+```
+
+**Expected Result**:
+
+```console
+'--read-only-port' is equal to '0' OR '--read-only-port' is not present
+```
+
+**Returned Value**:
+
+```console
+UID PID PPID C STIME TTY TIME CMD root 4429 4031 3 Sep11 ? 00:38:25 kubelet --read-only-port=0 --event-qps=0 --root-dir=/var/lib/kubelet --pod-infra-container-image=rancher/mirrored-pause:3.7 --tls-private-key-file=/etc/kubernetes/ssl/kube-kubelet-172-31-7-100-key.pem --container-runtime-endpoint=unix:///var/run/cri-dockerd.sock --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 --volume-plugin-dir=/var/lib/kubelet/volumeplugins --cloud-provider= --address=0.0.0.0 --protect-kernel-defaults=true --hostname-override=ip-172-31-7-100 --resolv-conf=/etc/resolv.conf --cluster-dns=10.43.0.10 --cluster-domain=cluster.local --tls-cert-file=/etc/kubernetes/ssl/kube-kubelet-172-31-7-100.pem --make-iptables-util-chains=true --feature-gates=RotateKubeletServerCertificate=true --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-node.yaml --container-runtime=remote --v=2 --anonymous-auth=false --authentication-token-webhook=true --fail-swap-on=false --cgroups-per-qos=True --authorization-mode=Webhook --streaming-connection-idle-timeout=30m --cgroup-driver=cgroupfs --resolv-conf=/run/systemd/resolve/resolv.conf
+```
+
+### 4.2.5 Ensure that the --streaming-connection-idle-timeout argument is not set to 0 (Manual)
+
+
+**Result:** pass
+
+**Remediation:**
+If using a Kubelet config file, edit the file to set `streamingConnectionIdleTimeout` to a
+value other than 0.
+If using command line arguments, edit the kubelet service file
+/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
+set the below parameter in KUBELET_SYSTEM_PODS_ARGS variable.
+--streaming-connection-idle-timeout=5m
+Based on your system, restart the kubelet service. For example,
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+**Audit:**
+
+```bash
+/bin/ps -fC kubelet
+```
+
+**Audit Config:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/kubelet/config.yaml; then /bin/cat /var/lib/kubelet/config.yaml; fi'
+```
+
+**Expected Result**:
+
+```console
+'--streaming-connection-idle-timeout' is not equal to '0' OR '--streaming-connection-idle-timeout' is not present
+```
+
+**Returned Value**:
+
+```console
+UID PID PPID C STIME TTY TIME CMD root 4429 4031 3 Sep11 ? 00:38:25 kubelet --read-only-port=0 --event-qps=0 --root-dir=/var/lib/kubelet --pod-infra-container-image=rancher/mirrored-pause:3.7 --tls-private-key-file=/etc/kubernetes/ssl/kube-kubelet-172-31-7-100-key.pem --container-runtime-endpoint=unix:///var/run/cri-dockerd.sock --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 --volume-plugin-dir=/var/lib/kubelet/volumeplugins --cloud-provider= --address=0.0.0.0 --protect-kernel-defaults=true --hostname-override=ip-172-31-7-100 --resolv-conf=/etc/resolv.conf --cluster-dns=10.43.0.10 --cluster-domain=cluster.local --tls-cert-file=/etc/kubernetes/ssl/kube-kubelet-172-31-7-100.pem --make-iptables-util-chains=true --feature-gates=RotateKubeletServerCertificate=true --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-node.yaml --container-runtime=remote --v=2 --anonymous-auth=false --authentication-token-webhook=true --fail-swap-on=false --cgroups-per-qos=True --authorization-mode=Webhook --streaming-connection-idle-timeout=30m --cgroup-driver=cgroupfs --resolv-conf=/run/systemd/resolve/resolv.conf
+```
+
+### 4.2.6 Ensure that the --protect-kernel-defaults argument is set to true (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+If using a Kubelet config file, edit the file to set `protectKernelDefaults` to `true`.
+If using command line arguments, edit the kubelet service file
+/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
+set the below parameter in KUBELET_SYSTEM_PODS_ARGS variable.
+--protect-kernel-defaults=true
+Based on your system, restart the kubelet service. For example:
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+**Audit:**
+
+```bash
+/bin/ps -fC kubelet
+```
+
+**Audit Config:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/kubelet/config.yaml; then /bin/cat /var/lib/kubelet/config.yaml; fi'
+```
+
+**Expected Result**:
+
+```console
+'--protect-kernel-defaults' is equal to 'true'
+```
+
+**Returned Value**:
+
+```console
+UID PID PPID C STIME TTY TIME CMD root 4429 4031 3 Sep11 ? 00:38:25 kubelet --read-only-port=0 --event-qps=0 --root-dir=/var/lib/kubelet --pod-infra-container-image=rancher/mirrored-pause:3.7 --tls-private-key-file=/etc/kubernetes/ssl/kube-kubelet-172-31-7-100-key.pem --container-runtime-endpoint=unix:///var/run/cri-dockerd.sock --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 --volume-plugin-dir=/var/lib/kubelet/volumeplugins --cloud-provider= --address=0.0.0.0 --protect-kernel-defaults=true --hostname-override=ip-172-31-7-100 --resolv-conf=/etc/resolv.conf --cluster-dns=10.43.0.10 --cluster-domain=cluster.local --tls-cert-file=/etc/kubernetes/ssl/kube-kubelet-172-31-7-100.pem --make-iptables-util-chains=true --feature-gates=RotateKubeletServerCertificate=true --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-node.yaml --container-runtime=remote --v=2 --anonymous-auth=false --authentication-token-webhook=true --fail-swap-on=false --cgroups-per-qos=True --authorization-mode=Webhook --streaming-connection-idle-timeout=30m --cgroup-driver=cgroupfs --resolv-conf=/run/systemd/resolve/resolv.conf
+```
+
+### 4.2.7 Ensure that the --make-iptables-util-chains argument is set to true (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+If using a Kubelet config file, edit the file to set `makeIPTablesUtilChains` to `true`.
+If using command line arguments, edit the kubelet service file
+/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
+remove the --make-iptables-util-chains argument from the
+KUBELET_SYSTEM_PODS_ARGS variable.
+Based on your system, restart the kubelet service. For example:
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+**Audit:**
+
+```bash
+/bin/ps -fC kubelet
+```
+
+**Audit Config:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/kubelet/config.yaml; then /bin/cat /var/lib/kubelet/config.yaml; fi'
+```
+
+**Expected Result**:
+
+```console
+'--make-iptables-util-chains' is equal to 'true' OR '--make-iptables-util-chains' is not present
+```
+
+**Returned Value**:
+
+```console
+UID PID PPID C STIME TTY TIME CMD root 4429 4031 3 Sep11 ? 00:38:25 kubelet --read-only-port=0 --event-qps=0 --root-dir=/var/lib/kubelet --pod-infra-container-image=rancher/mirrored-pause:3.7 --tls-private-key-file=/etc/kubernetes/ssl/kube-kubelet-172-31-7-100-key.pem --container-runtime-endpoint=unix:///var/run/cri-dockerd.sock --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 --volume-plugin-dir=/var/lib/kubelet/volumeplugins --cloud-provider= --address=0.0.0.0 --protect-kernel-defaults=true --hostname-override=ip-172-31-7-100 --resolv-conf=/etc/resolv.conf --cluster-dns=10.43.0.10 --cluster-domain=cluster.local --tls-cert-file=/etc/kubernetes/ssl/kube-kubelet-172-31-7-100.pem --make-iptables-util-chains=true --feature-gates=RotateKubeletServerCertificate=true --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-node.yaml --container-runtime=remote --v=2 --anonymous-auth=false --authentication-token-webhook=true --fail-swap-on=false --cgroups-per-qos=True --authorization-mode=Webhook --streaming-connection-idle-timeout=30m --cgroup-driver=cgroupfs --resolv-conf=/run/systemd/resolve/resolv.conf
+```
+
+### 4.2.8 Ensure that the --hostname-override argument is not set (Manual)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Edit the kubelet service file /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
+on each worker node and remove the --hostname-override argument from the
+KUBELET_SYSTEM_PODS_ARGS variable.
+Based on your system, restart the kubelet service. For example,
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+Clusters provisioned by RKE set the --hostname-override to avoid any hostname configuration errors
+
+### 4.2.9 Ensure that the eventRecordQPS argument is set to a level which ensures appropriate event capture (Manual)
+
+
+**Result:** pass
+
+**Remediation:**
+If using a Kubelet config file, edit the file to set `eventRecordQPS` to an appropriate level.
+If using command line arguments, edit the kubelet service file
+/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
+set the below parameter in KUBELET_SYSTEM_PODS_ARGS variable.
+Based on your system, restart the kubelet service. For example,
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+**Audit:**
+
+```bash
+/bin/ps -fC kubelet
+```
+
+**Audit Config:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/kubelet/config.yaml; then /bin/cat /var/lib/kubelet/config.yaml; fi'
+```
+
+**Expected Result**:
+
+```console
+'--event-qps' is equal to '0'
+```
+
+**Returned Value**:
+
+```console
+UID PID PPID C STIME TTY TIME CMD root 4429 4031 3 Sep11 ? 00:38:25 kubelet --read-only-port=0 --event-qps=0 --root-dir=/var/lib/kubelet --pod-infra-container-image=rancher/mirrored-pause:3.7 --tls-private-key-file=/etc/kubernetes/ssl/kube-kubelet-172-31-7-100-key.pem --container-runtime-endpoint=unix:///var/run/cri-dockerd.sock --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 --volume-plugin-dir=/var/lib/kubelet/volumeplugins --cloud-provider= --address=0.0.0.0 --protect-kernel-defaults=true --hostname-override=ip-172-31-7-100 --resolv-conf=/etc/resolv.conf --cluster-dns=10.43.0.10 --cluster-domain=cluster.local --tls-cert-file=/etc/kubernetes/ssl/kube-kubelet-172-31-7-100.pem --make-iptables-util-chains=true --feature-gates=RotateKubeletServerCertificate=true --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-node.yaml --container-runtime=remote --v=2 --anonymous-auth=false --authentication-token-webhook=true --fail-swap-on=false --cgroups-per-qos=True --authorization-mode=Webhook --streaming-connection-idle-timeout=30m --cgroup-driver=cgroupfs --resolv-conf=/run/systemd/resolve/resolv.conf
+```
+
+### 4.2.10 Ensure that the --tls-cert-file and --tls-private-key-file arguments are set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+If using a Kubelet config file, edit the file to set `tlsCertFile` to the location
+of the certificate file to use to identify this Kubelet, and `tlsPrivateKeyFile`
+to the location of the corresponding private key file.
+If using command line arguments, edit the kubelet service file
+/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
+set the below parameters in KUBELET_CERTIFICATE_ARGS variable.
+--tls-cert-file=
+--tls-private-key-file=
+Based on your system, restart the kubelet service. For example,
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+**Audit:**
+
+```bash
+/bin/ps -fC kubelet
+```
+
+**Audit Config:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/kubelet/config.yaml; then /bin/cat /var/lib/kubelet/config.yaml; fi'
+```
+
+**Expected Result**:
+
+```console
+'--tls-cert-file' is present AND '--tls-private-key-file' is present
+```
+
+**Returned Value**:
+
+```console
+UID PID PPID C STIME TTY TIME CMD root 4429 4031 3 Sep11 ? 00:38:25 kubelet --read-only-port=0 --event-qps=0 --root-dir=/var/lib/kubelet --pod-infra-container-image=rancher/mirrored-pause:3.7 --tls-private-key-file=/etc/kubernetes/ssl/kube-kubelet-172-31-7-100-key.pem --container-runtime-endpoint=unix:///var/run/cri-dockerd.sock --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 --volume-plugin-dir=/var/lib/kubelet/volumeplugins --cloud-provider= --address=0.0.0.0 --protect-kernel-defaults=true --hostname-override=ip-172-31-7-100 --resolv-conf=/etc/resolv.conf --cluster-dns=10.43.0.10 --cluster-domain=cluster.local --tls-cert-file=/etc/kubernetes/ssl/kube-kubelet-172-31-7-100.pem --make-iptables-util-chains=true --feature-gates=RotateKubeletServerCertificate=true --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-node.yaml --container-runtime=remote --v=2 --anonymous-auth=false --authentication-token-webhook=true --fail-swap-on=false --cgroups-per-qos=True --authorization-mode=Webhook --streaming-connection-idle-timeout=30m --cgroup-driver=cgroupfs --resolv-conf=/run/systemd/resolve/resolv.conf
+```
+
+### 4.2.11 Ensure that the --rotate-certificates argument is not set to false (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+If using a Kubelet config file, edit the file to add the line `rotateCertificates` to `true` or
+remove it altogether to use the default value.
+If using command line arguments, edit the kubelet service file
+/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
+remove --rotate-certificates=false argument from the KUBELET_CERTIFICATE_ARGS
+variable.
+Based on your system, restart the kubelet service. For example,
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+**Audit:**
+
+```bash
+/bin/ps -fC kubelet
+```
+
+**Audit Config:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/kubelet/config.yaml; then /bin/cat /var/lib/kubelet/config.yaml; fi'
+```
+
+**Expected Result**:
+
+```console
+'--rotate-certificates' is present OR '--rotate-certificates' is not present
+```
+
+**Returned Value**:
+
+```console
+UID PID PPID C STIME TTY TIME CMD root 4429 4031 3 Sep11 ? 00:38:25 kubelet --read-only-port=0 --event-qps=0 --root-dir=/var/lib/kubelet --pod-infra-container-image=rancher/mirrored-pause:3.7 --tls-private-key-file=/etc/kubernetes/ssl/kube-kubelet-172-31-7-100-key.pem --container-runtime-endpoint=unix:///var/run/cri-dockerd.sock --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 --volume-plugin-dir=/var/lib/kubelet/volumeplugins --cloud-provider= --address=0.0.0.0 --protect-kernel-defaults=true --hostname-override=ip-172-31-7-100 --resolv-conf=/etc/resolv.conf --cluster-dns=10.43.0.10 --cluster-domain=cluster.local --tls-cert-file=/etc/kubernetes/ssl/kube-kubelet-172-31-7-100.pem --make-iptables-util-chains=true --feature-gates=RotateKubeletServerCertificate=true --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-node.yaml --container-runtime=remote --v=2 --anonymous-auth=false --authentication-token-webhook=true --fail-swap-on=false --cgroups-per-qos=True --authorization-mode=Webhook --streaming-connection-idle-timeout=30m --cgroup-driver=cgroupfs --resolv-conf=/run/systemd/resolve/resolv.conf
+```
+
+### 4.2.12 Verify that the RotateKubeletServerCertificate argument is set to true (Manual)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Edit the kubelet service file /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
+on each worker node and set the below parameter in KUBELET_CERTIFICATE_ARGS variable.
+--feature-gates=RotateKubeletServerCertificate=true
+Based on your system, restart the kubelet service. For example:
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+Clusters provisioned by RKE handles certificate rotation directly through RKE.
+
+**Audit Config:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/kubelet/config.yaml; then /bin/cat /var/lib/kubelet/config.yaml; fi'
+```
+
+### 4.2.13 Ensure that the Kubelet only makes use of Strong Cryptographic Ciphers (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+If using a Kubelet config file, edit the file to set `TLSCipherSuites` to
+TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256
+or to a subset of these values.
+If using executable arguments, edit the kubelet service file
+/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
+set the --tls-cipher-suites parameter as follows, or to a subset of these values.
+--tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256
+Based on your system, restart the kubelet service. For example:
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+**Audit:**
+
+```bash
+/bin/ps -fC kubelet
+```
+
+**Audit Config:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/kubelet/config.yaml; then /bin/cat /var/lib/kubelet/config.yaml; fi'
+```
+
+**Expected Result**:
+
+```console
+'--tls-cipher-suites' contains valid elements from 'TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256'
+```
+
+**Returned Value**:
+
+```console
+UID PID PPID C STIME TTY TIME CMD root 4429 4031 3 Sep11 ? 00:38:25 kubelet --read-only-port=0 --event-qps=0 --root-dir=/var/lib/kubelet --pod-infra-container-image=rancher/mirrored-pause:3.7 --tls-private-key-file=/etc/kubernetes/ssl/kube-kubelet-172-31-7-100-key.pem --container-runtime-endpoint=unix:///var/run/cri-dockerd.sock --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 --volume-plugin-dir=/var/lib/kubelet/volumeplugins --cloud-provider= --address=0.0.0.0 --protect-kernel-defaults=true --hostname-override=ip-172-31-7-100 --resolv-conf=/etc/resolv.conf --cluster-dns=10.43.0.10 --cluster-domain=cluster.local --tls-cert-file=/etc/kubernetes/ssl/kube-kubelet-172-31-7-100.pem --make-iptables-util-chains=true --feature-gates=RotateKubeletServerCertificate=true --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-node.yaml --container-runtime=remote --v=2 --anonymous-auth=false --authentication-token-webhook=true --fail-swap-on=false --cgroups-per-qos=True --authorization-mode=Webhook --streaming-connection-idle-timeout=30m --cgroup-driver=cgroupfs --resolv-conf=/run/systemd/resolve/resolv.conf
+```
+
+## 5.1 RBAC and Service Accounts
+### 5.1.1 Ensure that the cluster-admin role is only used where required (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Identify all clusterrolebindings to the cluster-admin role. Check if they are used and
+if they need this role or if they could use a role with fewer privileges.
+Where possible, first bind users to a lower privileged role and then remove the
+clusterrolebinding to the cluster-admin role :
+kubectl delete clusterrolebinding [name]
+
+### 5.1.2 Minimize access to secrets (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Where possible, remove get, list and watch access to Secret objects in the cluster.
+
+### 5.1.3 Minimize wildcard use in Roles and ClusterRoles (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Where possible replace any use of wildcards in clusterroles and roles with specific
+objects or actions.
+
+### 5.1.4 Minimize access to create pods (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Where possible, remove create access to pod objects in the cluster.
+
+### 5.1.5 Ensure that default service accounts are not actively used. (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Create explicit service accounts wherever a Kubernetes workload requires specific access
+to the Kubernetes API server.
+Modify the configuration of each default service account to include this value
+automountServiceAccountToken: false
+
+**Audit Script:** `check_for_default_sa.sh`
+
+```bash
+#!/bin/bash
+
+set -eE
+
+handle_error() {
+ echo "false"
+}
+
+trap 'handle_error' ERR
+
+count_sa=$(kubectl get serviceaccounts --all-namespaces -o json | jq -r '.items[] | select(.metadata.name=="default") | select((.automountServiceAccountToken == null) or (.automountServiceAccountToken == true))' | jq .metadata.namespace | wc -l)
+if [[ ${count_sa} -gt 0 ]]; then
+ echo "false"
+ exit
+fi
+
+for ns in $(kubectl get ns --no-headers -o custom-columns=":metadata.name")
+do
+ for result in $(kubectl get clusterrolebinding,rolebinding -n $ns -o json | jq -r '.items[] | select((.subjects[]?.kind=="ServiceAccount" and .subjects[]?.name=="default") or (.subjects[]?.kind=="Group" and .subjects[]?.name=="system:serviceaccounts"))' | jq -r '"\(.roleRef.kind),\(.roleRef.name)"')
+ do
+ read kind name <<<$(IFS=","; echo $result)
+ resource_count=$(kubectl get $kind $name -n $ns -o json | jq -r '.rules[] | select(.resources[]? != "podsecuritypolicies")' | wc -l)
+ if [[ ${resource_count} -gt 0 ]]; then
+ echo "false"
+ exit
+ fi
+ done
+done
+
+
+echo "true"
+
+```
+
+**Audit Execution:**
+
+```bash
+./check_for_default_sa.sh
+```
+
+**Expected Result**:
+
+```console
+'true' is equal to 'true'
+```
+
+**Returned Value**:
+
+```console
+Error from server (Forbidden): roles.rbac.authorization.k8s.io "default-psp-role" is forbidden: User "system:serviceaccount:cis-operator-system:cis-serviceaccount" cannot get resource "roles" in API group "rbac.authorization.k8s.io" in the namespace "ingress-nginx" Error from server (Forbidden): roles.rbac.authorization.k8s.io "default-psp-role" is forbidden: User "system:serviceaccount:cis-operator-system:cis-serviceaccount" cannot get resource "roles" in API group "rbac.authorization.k8s.io" in the namespace "ingress-nginx" Error from server (Forbidden): roles.rbac.authorization.k8s.io "default-psp-role" is forbidden: User "system:serviceaccount:cis-operator-system:cis-serviceaccount" cannot get resource "roles" in API group "rbac.authorization.k8s.io" in the namespace "ingress-nginx" Error from server (Forbidden): roles.rbac.authorization.k8s.io "default-psp-role" is forbidden: User "system:serviceaccount:cis-operator-system:cis-serviceaccount" cannot get resource "roles" in API group "rbac.authorization.k8s.io" in the namespace "ingress-nginx" Error from server (Forbidden): roles.rbac.authorization.k8s.io "default-psp-role" is forbidden: User "system:serviceaccount:cis-operator-system:cis-serviceaccount" cannot get resource "roles" in API group "rbac.authorization.k8s.io" in the namespace "kube-system" Error from server (Forbidden): roles.rbac.authorization.k8s.io "default-psp-role" is forbidden: User "system:serviceaccount:cis-operator-system:cis-serviceaccount" cannot get resource "roles" in API group "rbac.authorization.k8s.io" in the namespace "kube-system" Error from server (Forbidden): roles.rbac.authorization.k8s.io "default-psp-role" is forbidden: User "system:serviceaccount:cis-operator-system:cis-serviceaccount" cannot get resource "roles" in API group "rbac.authorization.k8s.io" in the namespace "kube-system" Error from server (Forbidden): roles.rbac.authorization.k8s.io "default-psp-role" is forbidden: User "system:serviceaccount:cis-operator-system:cis-serviceaccount" cannot get resource "roles" in API group "rbac.authorization.k8s.io" in the namespace "kube-system" true
+```
+
+### 5.1.6 Ensure that Service Account Tokens are only mounted where necessary (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Modify the definition of pods and service accounts which do not need to mount service
+account tokens to disable it.
+
+### 5.1.7 Avoid use of system:masters group (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Remove the system:masters group from all users in the cluster.
+
+### 5.1.8 Limit use of the Bind, Impersonate and Escalate permissions in the Kubernetes cluster (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Where possible, remove the impersonate, bind and escalate rights from subjects.
+
+## 5.2 Pod Security Standards
+### 5.2.1 Ensure that the cluster has at least one active policy control mechanism in place (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Ensure that either Pod Security Admission or an external policy control system is in place
+for every namespace which contains user workloads.
+
+### 5.2.2 Minimize the admission of privileged containers (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Add policies to each namespace in the cluster which has user workloads to restrict the
+admission of privileged containers.
+
+### 5.2.3 Minimize the admission of containers wishing to share the host process ID namespace (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Add policies to each namespace in the cluster which has user workloads to restrict the
+admission of `hostPID` containers.
+
+**Audit:**
+
+```bash
+kubectl get psp -o json | jq .items[] | jq -r 'select((.spec.hostPID == null) or (.spec.hostPID == false))' | jq .metadata.name | wc -l | xargs -I {} echo '--count={}'
+```
+
+**Expected Result**:
+
+```console
+'count' is greater than 0
+```
+
+**Returned Value**:
+
+```console
+Warning: policy/v1beta1 PodSecurityPolicy is deprecated in v1.21+, unavailable in v1.25+ --count=1
+```
+
+### 5.2.4 Minimize the admission of containers wishing to share the host IPC namespace (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Add policies to each namespace in the cluster which has user workloads to restrict the
+admission of `hostIPC` containers.
+
+**Audit:**
+
+```bash
+kubectl get psp -o json | jq .items[] | jq -r 'select((.spec.hostIPC == null) or (.spec.hostIPC == false))' | jq .metadata.name | wc -l | xargs -I {} echo '--count={}'
+```
+
+**Expected Result**:
+
+```console
+'count' is greater than 0
+```
+
+**Returned Value**:
+
+```console
+Warning: policy/v1beta1 PodSecurityPolicy is deprecated in v1.21+, unavailable in v1.25+ --count=1
+```
+
+### 5.2.5 Minimize the admission of containers wishing to share the host network namespace (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Add policies to each namespace in the cluster which has user workloads to restrict the
+admission of `hostNetwork` containers.
+
+**Audit:**
+
+```bash
+kubectl get psp -o json | jq .items[] | jq -r 'select((.spec.hostNetwork == null) or (.spec.hostNetwork == false))' | jq .metadata.name | wc -l | xargs -I {} echo '--count={}'
+```
+
+**Expected Result**:
+
+```console
+'count' is greater than 0
+```
+
+**Returned Value**:
+
+```console
+Warning: policy/v1beta1 PodSecurityPolicy is deprecated in v1.21+, unavailable in v1.25+ --count=1
+```
+
+### 5.2.6 Minimize the admission of containers with allowPrivilegeEscalation (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Add policies to each namespace in the cluster which has user workloads to restrict the
+admission of containers with `.spec.allowPrivilegeEscalation` set to `true`.
+
+**Audit:**
+
+```bash
+kubectl get psp -o json | jq .items[] | jq -r 'select((.spec.allowPrivilegeEscalation == null) or (.spec.allowPrivilegeEscalation == false))' | jq .metadata.name | wc -l | xargs -I {} echo '--count={}'
+```
+
+**Expected Result**:
+
+```console
+'count' is greater than 0
+```
+
+**Returned Value**:
+
+```console
+Warning: policy/v1beta1 PodSecurityPolicy is deprecated in v1.21+, unavailable in v1.25+ --count=1
+```
+
+### 5.2.7 Minimize the admission of root containers (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Create a policy for each namespace in the cluster, ensuring that either `MustRunAsNonRoot`
+or `MustRunAs` with the range of UIDs not including 0, is set.
+
+### 5.2.8 Minimize the admission of containers with the NET_RAW capability (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Add policies to each namespace in the cluster which has user workloads to restrict the
+admission of containers with the `NET_RAW` capability.
+
+### 5.2.9 Minimize the admission of containers with added capabilities (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Ensure that `allowedCapabilities` is not present in policies for the cluster unless
+it is set to an empty array.
+
+### 5.2.10 Minimize the admission of containers with capabilities assigned (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Review the use of capabilites in applications running on your cluster. Where a namespace
+contains applicaions which do not require any Linux capabities to operate consider adding
+a PSP which forbids the admission of containers which do not drop all capabilities.
+
+### 5.2.11 Minimize the admission of Windows HostProcess containers (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Add policies to each namespace in the cluster which has user workloads to restrict the
+admission of containers that have `.securityContext.windowsOptions.hostProcess` set to `true`.
+
+### 5.2.12 Minimize the admission of HostPath volumes (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Add policies to each namespace in the cluster which has user workloads to restrict the
+admission of containers with `hostPath` volumes.
+
+### 5.2.13 Minimize the admission of containers which use HostPorts (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Add policies to each namespace in the cluster which has user workloads to restrict the
+admission of containers which use `hostPort` sections.
+
+## 5.3 Network Policies and CNI
+### 5.3.1 Ensure that the CNI in use supports NetworkPolicies (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+If the CNI plugin in use does not support network policies, consideration should be given to
+making use of a different plugin, or finding an alternate mechanism for restricting traffic
+in the Kubernetes cluster.
+
+### 5.3.2 Ensure that all Namespaces have NetworkPolicies defined (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the documentation and create NetworkPolicy objects as you need them.
+
+**Audit Script:** `check_for_network_policies.sh`
+
+```bash
+#!/bin/bash
+
+set -eE
+
+handle_error() {
+ echo "false"
+}
+
+trap 'handle_error' ERR
+
+for namespace in $(kubectl get namespaces --all-namespaces -o json | jq -r '.items[].metadata.name'); do
+ policy_count=$(kubectl get networkpolicy -n ${namespace} -o json | jq '.items | length')
+ if [[ ${policy_count} -eq 0 ]]; then
+ echo "false"
+ exit
+ fi
+done
+
+echo "true"
+
+```
+
+**Audit Execution:**
+
+```bash
+./check_for_network_policies.sh
+```
+
+**Expected Result**:
+
+```console
+'true' is equal to 'true'
+```
+
+**Returned Value**:
+
+```console
+true
+```
+
+## 5.4 Secrets Management
+### 5.4.1 Prefer using Secrets as files over Secrets as environment variables (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+If possible, rewrite application code to read Secrets from mounted secret files, rather than
+from environment variables.
+
+### 5.4.2 Consider external secret storage (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Refer to the Secrets management options offered by your cloud provider or a third-party
+secrets management solution.
+
+## 5.5 Extensible Admission Control
+### 5.5.1 Configure Image Provenance using ImagePolicyWebhook admission controller (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Follow the Kubernetes documentation and setup image provenance.
+
+## 5.7 General Policies
+### 5.7.1 Create administrative boundaries between resources using namespaces (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Follow the documentation and create namespaces for objects in your deployment as you need
+them.
+
+### 5.7.2 Ensure that the seccomp profile is set to docker/default in your Pod definitions (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Use `securityContext` to enable the docker/default seccomp profile in your pod definitions.
+An example is as below:
+ securityContext:
+ seccompProfile:
+ type: RuntimeDefault
+
+### 5.7.3 Apply SecurityContext to your Pods and Containers (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Follow the Kubernetes documentation and apply SecurityContexts to your Pods. For a
+suggested list of SecurityContexts, you may refer to the CIS Security Benchmark for Docker
+Containers.
+
+### 5.7.4 The default namespace should not be used (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Ensure that namespaces are created to allow for appropriate segregation of Kubernetes
+resources and that all new resources are created in a specific namespace.
+
+**Audit Script:** `check_for_default_ns.sh`
+
+```bash
+#!/bin/bash
+
+set -eE
+
+handle_error() {
+ echo "false"
+}
+
+trap 'handle_error' ERR
+
+count=$(kubectl get all -n default -o json | jq .items[] | jq -r 'select((.metadata.name!="kubernetes"))' | jq .metadata.name | wc -l)
+if [[ ${count} -gt 0 ]]; then
+ echo "false"
+ exit
+fi
+
+echo "true"
+
+
+```
+
+**Audit Execution:**
+
+```bash
+./check_for_default_ns.sh
+```
+
+**Expected Result**:
+
+```console
+'true' is equal to 'true'
+```
+
+**Returned Value**:
+
+```console
+true
+```
+
diff --git a/docs/reference-guides/rancher-security/hardening-guides/rke1-hardening-guide/rke1-self-assessment-guide-with-cis-v1.7-k8s-v1.25-v1.26-v1.27.md b/docs/reference-guides/rancher-security/hardening-guides/rke1-hardening-guide/rke1-self-assessment-guide-with-cis-v1.7-k8s-v1.25-v1.26-v1.27.md
new file mode 100644
index 00000000000..9fe9ca2045f
--- /dev/null
+++ b/docs/reference-guides/rancher-security/hardening-guides/rke1-hardening-guide/rke1-self-assessment-guide-with-cis-v1.7-k8s-v1.25-v1.26-v1.27.md
@@ -0,0 +1,2863 @@
+---
+title: RKE Self-Assessment Guide - CIS Benchmark v1.7 - K8s v1.25/v1.26/v1.27
+---
+
+
+
+
+
+This document is a companion to the [RKE Hardening Guide](../../../../pages-for-subheaders/rke1-hardening-guide.md), which provides prescriptive guidance on how to harden RKE clusters that are running in production and managed by Rancher. This benchmark guide helps you evaluate the security of a hardened cluster against each control in the CIS Kubernetes Benchmark.
+
+
+This guide corresponds to the following versions of Rancher, CIS Benchmarks, and Kubernetes:
+
+| Rancher Version | CIS Benchmark Version | Kubernetes Version |
+|-----------------|-----------------------|--------------------|
+| Rancher v2.7 | Benchmark v1.7 | Kubernetes v1.25/v1.26/v1.27 |
+
+This guide walks through the various controls and provide updated example commands to audit compliance in Rancher created clusters. Because Rancher and RKE install Kubernetes services as Docker containers, many of the control verification checks in the CIS Kubernetes Benchmark don't apply. These checks will return a result of `Not Applicable`.
+
+This document is for Rancher operators, security teams, auditors and decision makers.
+
+For more information about each control, including detailed descriptions and remediations for failing tests, refer to the corresponding section of the CIS Kubernetes Benchmark v1.7. You can download the benchmark, after creating a free account, at [Center for Internet Security (CIS)](https://www.cisecurity.org/benchmark/kubernetes/).
+
+## Testing Methodology
+
+Rancher and RKE install Kubernetes services via Docker containers. Configuration is defined by arguments passed to the container at the time of initialization, not via configuration files.
+
+Where control audits differ from the original CIS benchmark, the audit commands specific to Rancher are provided for testing. When performing the tests, you will need access to the command line on the hosts of all RKE nodes. The commands also make use of the [kubectl](https://kubernetes.io/docs/tasks/tools/) (with a valid configuration file) and [jq](https://stedolan.github.io/jq/) tools, which are required in the testing and evaluation of test results.
+
+:::note
+
+This guide only covers `automated` (previously called `scored`) tests.
+
+:::
+
+### Controls
+
+## 1.1 Control Plane Node Configuration Files
+### 1.1.1 Ensure that the API server pod specification file permissions are set to 600 or more restrictive (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the
+control plane node.
+For example, chmod 600 /etc/kubernetes/manifests/kube-apiserver.yaml
+Not Applicable - Cluster provisioned by RKE doesn't require or maintain a configuration file for kube-apiserver.
+All configuration is passed in as arguments at container run time.
+
+### 1.1.2 Ensure that the API server pod specification file ownership is set to root:root (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example, chown root:root /etc/kubernetes/manifests/kube-apiserver.yaml
+Not Applicable - Cluster provisioned by RKE doesn't require or maintain a configuration file for kube-apiserver.
+All configuration is passed in as arguments at container run time.
+
+### 1.1.3 Ensure that the controller manager pod specification file permissions are set to 600 or more restrictive (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example, chmod 600 /etc/kubernetes/manifests/kube-controller-manager.yaml
+Not Applicable - Cluster provisioned by RKE doesn't require or maintain a configuration file for kube-apiserver.
+All configuration is passed in as arguments at container run time.
+
+### 1.1.4 Ensure that the controller manager pod specification file ownership is set to root:root (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example, chown root:root /etc/kubernetes/manifests/kube-controller-manager.yaml
+Not Applicable - Cluster provisioned by RKE doesn't require or maintain a configuration file for kube-apiserver.
+All configuration is passed in as arguments at container run time.
+
+### 1.1.5 Ensure that the scheduler pod specification file permissions are set to 600 or more restrictive (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example, chmod 600 /etc/kubernetes/manifests/kube-scheduler.yaml
+Not Applicable - Cluster provisioned by RKE doesn't require or maintain a configuration file for kube-apiserver.
+All configuration is passed in as arguments at container run time.
+
+### 1.1.6 Ensure that the scheduler pod specification file ownership is set to root:root (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example, chown root:root /etc/kubernetes/manifests/kube-scheduler.yaml
+Not Applicable - Cluster provisioned by RKE doesn't require or maintain a configuration file for kube-apiserver.
+All configuration is passed in as arguments at container run time.
+
+### 1.1.7 Ensure that the etcd pod specification file permissions are set to 600 or more restrictive (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example,
+chmod 600 /etc/kubernetes/manifests/etcd.yaml
+Not Applicable - Cluster provisioned by RKE doesn't require or maintain a configuration file for kube-apiserver.
+All configuration is passed in as arguments at container run time.
+
+### 1.1.8 Ensure that the etcd pod specification file ownership is set to root:root (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example,
+chown root:root /etc/kubernetes/manifests/etcd.yaml
+Not Applicable - Cluster provisioned by RKE doesn't require or maintain a configuration file for kube-apiserver.
+All configuration is passed in as arguments at container run time.
+
+### 1.1.9 Ensure that the Container Network Interface file permissions are set to 600 or more restrictive (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example, chmod 600
+
+**Audit:**
+
+```bash
+ps -ef | grep kubelet | grep -- --cni-conf-dir | sed 's%.*cni-conf-dir[= ]\([^ ]*\).*%\1%' | xargs -I{} find {} -mindepth 1 | xargs --no-run-if-empty stat -c permissions=%a find /var/lib/cni/networks -type f 2> /dev/null | xargs --no-run-if-empty stat -c permissions=%a
+```
+
+**Expected Result**:
+
+```console
+'permissions' is present
+```
+
+### 1.1.10 Ensure that the Container Network Interface file ownership is set to root:root (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example,
+chown root:root
+
+**Audit:**
+
+```bash
+ps -ef | grep kubelet | grep -- --cni-conf-dir | sed 's%.*cni-conf-dir[= ]\([^ ]*\).*%\1%' | xargs -I{} find {} -mindepth 1 | xargs --no-run-if-empty stat -c %U:%G find /var/lib/cni/networks -type f 2> /dev/null | xargs --no-run-if-empty stat -c %U:%G
+```
+
+**Expected Result**:
+
+```console
+'root:root' is present
+```
+
+### 1.1.11 Ensure that the etcd data directory permissions are set to 700 or more restrictive (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+On the etcd server node, get the etcd data directory, passed as an argument --data-dir,
+from the command 'ps -ef | grep etcd'.
+Run the below command (based on the etcd data directory found above). For example,
+chmod 700 /var/lib/etcd
+
+**Audit:**
+
+```bash
+stat -c %a /node/var/lib/etcd
+```
+
+**Expected Result**:
+
+```console
+'700' is equal to '700'
+```
+
+**Returned Value**:
+
+```console
+700
+```
+
+### 1.1.12 Ensure that the etcd data directory ownership is set to etcd:etcd (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+On the etcd server node, get the etcd data directory, passed as an argument --data-dir,
+from the command 'ps -ef | grep etcd'.
+Run the below command (based on the etcd data directory found above).
+For example, chown etcd:etcd /var/lib/etcd
+
+**Audit:**
+
+```bash
+stat -c %U:%G /node/var/lib/etcd
+```
+
+**Expected Result**:
+
+```console
+'etcd:etcd' is present
+```
+
+**Returned Value**:
+
+```console
+etcd:etcd
+```
+
+### 1.1.13 Ensure that the admin.conf file permissions are set to 600 or more restrictive (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example, chmod 600 /etc/kubernetes/admin.conf
+Not Applicable - Cluster provisioned by RKE does not store the kubernetes default kubeconfig credentials file on the nodes.
+
+### 1.1.14 Ensure that the admin.conf file ownership is set to root:root (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example, chown root:root /etc/kubernetes/admin.conf
+Not Applicable - Cluster provisioned by RKE does not store the kubernetes default kubeconfig credentials file on the nodes.
+
+### 1.1.15 Ensure that the scheduler.conf file permissions are set to 600 or more restrictive (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example,
+chmod 600 scheduler
+Not Applicable - Cluster provisioned by RKE doesn't require or maintain a configuration file for scheduler.
+All configuration is passed in as arguments at container run time.
+
+### 1.1.16 Ensure that the scheduler.conf file ownership is set to root:root (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example,
+chown root:root scheduler
+Not Applicable - Cluster provisioned by RKE doesn't require or maintain a configuration file for scheduler.
+All configuration is passed in as arguments at container run time.
+
+### 1.1.17 Ensure that the controller-manager.conf file permissions are set to 600 or more restrictive (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example,
+chmod 600 controllermanager
+Not Applicable - Cluster provisioned by RKE doesn't require or maintain a configuration file for controller-manager.
+All configuration is passed in as arguments at container run time.
+
+### 1.1.18 Ensure that the controller-manager.conf file ownership is set to root:root (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example,
+chown root:root controllermanager
+Not Applicable - Cluster provisioned by RKE doesn't require or maintain a configuration file for controller-manager.
+All configuration is passed in as arguments at container run time.
+
+### 1.1.19 Ensure that the Kubernetes PKI directory and file ownership is set to root:root (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example,
+chown -R root:root /etc/kubernetes/pki/
+
+**Audit Script:** `check_files_owner_in_dir.sh`
+
+```bash
+#!/usr/bin/env bash
+
+# This script is used to ensure the owner is set to root:root for
+# the given directory and all the files in it
+#
+# inputs:
+# $1 = /full/path/to/directory
+#
+# outputs:
+# true/false
+
+INPUT_DIR=$1
+
+if [[ "${INPUT_DIR}" == "" ]]; then
+ echo "false"
+ exit
+fi
+
+if [[ $(stat -c %U:%G ${INPUT_DIR}) != "root:root" ]]; then
+ echo "false"
+ exit
+fi
+
+statInfoLines=$(stat -c "%n %U:%G" ${INPUT_DIR}/*)
+while read -r statInfoLine; do
+ f=$(echo ${statInfoLine} | cut -d' ' -f1)
+ p=$(echo ${statInfoLine} | cut -d' ' -f2)
+
+ if [[ $(basename "$f" .pem) == "kube-etcd-"* ]]; then
+ if [[ "$p" != "root:root" && "$p" != "etcd:etcd" ]]; then
+ echo "false"
+ exit
+ fi
+ else
+ if [[ "$p" != "root:root" ]]; then
+ echo "false"
+ exit
+ fi
+ fi
+done <<< "${statInfoLines}"
+
+
+echo "true"
+exit
+
+```
+
+**Audit Execution:**
+
+```bash
+./check_files_owner_in_dir.sh /node/etc/kubernetes/ssl
+```
+
+**Expected Result**:
+
+```console
+'true' is equal to 'true'
+```
+
+**Returned Value**:
+
+```console
+true
+```
+
+### 1.1.20 Ensure that the Kubernetes PKI certificate file permissions are set to 600 or more restrictive (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example,
+find /node/etc/kubernetes/ssl/ -name '*.pem' ! -name '*key.pem' -exec chmod -R 600 {} +
+
+**Audit:**
+
+```bash
+find /node/etc/kubernetes/ssl/ -name '*.pem' ! -name '*key.pem' | xargs stat -c permissions=%a
+```
+
+**Expected Result**:
+
+```console
+permissions has permissions 644, expected 600 or more restrictive
+```
+
+**Returned Value**:
+
+```console
+permissions=600 permissions=600 permissions=600 permissions=600 permissions=600 permissions=644 permissions=600 permissions=600 permissions=600 permissions=600 permissions=600
+```
+
+### 1.1.21 Ensure that the Kubernetes PKI key file permissions are set to 600 (Manual)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example,
+find /node/etc/kubernetes/ssl/ -name '*key.pem' -exec chmod -R 600 {} +
+
+**Audit:**
+
+```bash
+find /node/etc/kubernetes/ssl/ -name '*key.pem' | xargs stat -c permissions=%a
+```
+
+**Expected Result**:
+
+```console
+permissions has permissions 600, expected 600 or more restrictive
+```
+
+**Returned Value**:
+
+```console
+permissions=600 permissions=600 permissions=600 permissions=600 permissions=600 permissions=600 permissions=600 permissions=600 permissions=600 permissions=600 permissions=600
+```
+
+## 1.2 API Server
+### 1.2.1 Ensure that the --anonymous-auth argument is set to false (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the below parameter.
+--anonymous-auth=false
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--anonymous-auth' is equal to 'false'
+```
+
+**Returned Value**:
+
+```console
+root 4018 3998 5 Sep11 ? 01:03:21 kube-apiserver --advertise-address=172.31.4.224 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --requestheader-allowed-names=kube-apiserver-proxy-client --service-cluster-ip-range=10.43.0.0/16 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,EventRateLimit --requestheader-extra-headers-prefix=X-Remote-Extra- --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --storage-backend=etcd3 --anonymous-auth=false --bind-address=0.0.0.0 --cloud-provider= --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --profiling=false --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --runtime-config=authorization.k8s.io/v1beta1=true --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --service-account-lookup=true --etcd-servers=https://172.31.4.224:2379 --api-audiences=unknown --requestheader-group-headers=X-Remote-Group --service-account-issuer=rke --audit-log-maxsize=100 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --secure-port=6443 --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --authorization-mode=Node,RBAC --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-maxage=30 --audit-log-format=json --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-cache-ttl=5s --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --requestheader-username-headers=X-Remote-User --allow-privileged=true --audit-policy-file=/etc/kubernetes/audit-policy.yaml
+```
+
+### 1.2.2 Ensure that the --token-auth-file parameter is not set (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the documentation and configure alternate mechanisms for authentication. Then,
+edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and remove the --token-auth-file= parameter.
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--token-auth-file' is not present
+```
+
+**Returned Value**:
+
+```console
+root 4018 3998 5 Sep11 ? 01:03:21 kube-apiserver --advertise-address=172.31.4.224 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --requestheader-allowed-names=kube-apiserver-proxy-client --service-cluster-ip-range=10.43.0.0/16 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,EventRateLimit --requestheader-extra-headers-prefix=X-Remote-Extra- --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --storage-backend=etcd3 --anonymous-auth=false --bind-address=0.0.0.0 --cloud-provider= --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --profiling=false --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --runtime-config=authorization.k8s.io/v1beta1=true --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --service-account-lookup=true --etcd-servers=https://172.31.4.224:2379 --api-audiences=unknown --requestheader-group-headers=X-Remote-Group --service-account-issuer=rke --audit-log-maxsize=100 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --secure-port=6443 --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --authorization-mode=Node,RBAC --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-maxage=30 --audit-log-format=json --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-cache-ttl=5s --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --requestheader-username-headers=X-Remote-User --allow-privileged=true --audit-policy-file=/etc/kubernetes/audit-policy.yaml
+```
+
+### 1.2.3 Ensure that the --DenyServiceExternalIPs is not set (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and remove the `DenyServiceExternalIPs`
+from enabled admission plugins.
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--enable-admission-plugins' does not have 'DenyServiceExternalIPs' OR '--enable-admission-plugins' is not present
+```
+
+**Returned Value**:
+
+```console
+root 4018 3998 5 Sep11 ? 01:03:21 kube-apiserver --advertise-address=172.31.4.224 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --requestheader-allowed-names=kube-apiserver-proxy-client --service-cluster-ip-range=10.43.0.0/16 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,EventRateLimit --requestheader-extra-headers-prefix=X-Remote-Extra- --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --storage-backend=etcd3 --anonymous-auth=false --bind-address=0.0.0.0 --cloud-provider= --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --profiling=false --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --runtime-config=authorization.k8s.io/v1beta1=true --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --service-account-lookup=true --etcd-servers=https://172.31.4.224:2379 --api-audiences=unknown --requestheader-group-headers=X-Remote-Group --service-account-issuer=rke --audit-log-maxsize=100 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --secure-port=6443 --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --authorization-mode=Node,RBAC --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-maxage=30 --audit-log-format=json --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-cache-ttl=5s --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --requestheader-username-headers=X-Remote-User --allow-privileged=true --audit-policy-file=/etc/kubernetes/audit-policy.yaml
+```
+
+### 1.2.4 Ensure that the --kubelet-client-certificate and --kubelet-client-key arguments are set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the Kubernetes documentation and set up the TLS connection between the
+apiserver and kubelets. Then, edit API server pod specification file
+/etc/kubernetes/manifests/kube-apiserver.yaml on the control plane node and set the
+kubelet client certificate and key parameters as below.
+--kubelet-client-certificate=
+--kubelet-client-key=
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--kubelet-client-certificate' is present AND '--kubelet-client-key' is present
+```
+
+**Returned Value**:
+
+```console
+root 4018 3998 5 Sep11 ? 01:03:21 kube-apiserver --advertise-address=172.31.4.224 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --requestheader-allowed-names=kube-apiserver-proxy-client --service-cluster-ip-range=10.43.0.0/16 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,EventRateLimit --requestheader-extra-headers-prefix=X-Remote-Extra- --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --storage-backend=etcd3 --anonymous-auth=false --bind-address=0.0.0.0 --cloud-provider= --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --profiling=false --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --runtime-config=authorization.k8s.io/v1beta1=true --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --service-account-lookup=true --etcd-servers=https://172.31.4.224:2379 --api-audiences=unknown --requestheader-group-headers=X-Remote-Group --service-account-issuer=rke --audit-log-maxsize=100 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --secure-port=6443 --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --authorization-mode=Node,RBAC --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-maxage=30 --audit-log-format=json --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-cache-ttl=5s --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --requestheader-username-headers=X-Remote-User --allow-privileged=true --audit-policy-file=/etc/kubernetes/audit-policy.yaml
+```
+
+### 1.2.5 Ensure that the --kubelet-certificate-authority argument is set as appropriate (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Follow the Kubernetes documentation and setup the TLS connection between
+the apiserver and kubelets. Then, edit the API server pod specification file
+/etc/kubernetes/manifests/kube-apiserver.yaml on the control plane node and set the
+--kubelet-certificate-authority parameter to the path to the cert file for the certificate authority.
+--kubelet-certificate-authority=
+When generating serving certificates, functionality could break in conjunction with hostname overrides which are required for certain cloud providers.
+
+### 1.2.6 Ensure that the --authorization-mode argument is not set to AlwaysAllow (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the --authorization-mode parameter to values other than AlwaysAllow.
+One such example could be as below.
+--authorization-mode=RBAC
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--authorization-mode' does not have 'AlwaysAllow'
+```
+
+**Returned Value**:
+
+```console
+root 4018 3998 5 Sep11 ? 01:03:21 kube-apiserver --advertise-address=172.31.4.224 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --requestheader-allowed-names=kube-apiserver-proxy-client --service-cluster-ip-range=10.43.0.0/16 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,EventRateLimit --requestheader-extra-headers-prefix=X-Remote-Extra- --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --storage-backend=etcd3 --anonymous-auth=false --bind-address=0.0.0.0 --cloud-provider= --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --profiling=false --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --runtime-config=authorization.k8s.io/v1beta1=true --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --service-account-lookup=true --etcd-servers=https://172.31.4.224:2379 --api-audiences=unknown --requestheader-group-headers=X-Remote-Group --service-account-issuer=rke --audit-log-maxsize=100 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --secure-port=6443 --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --authorization-mode=Node,RBAC --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-maxage=30 --audit-log-format=json --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-cache-ttl=5s --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --requestheader-username-headers=X-Remote-User --allow-privileged=true --audit-policy-file=/etc/kubernetes/audit-policy.yaml
+```
+
+### 1.2.7 Ensure that the --authorization-mode argument includes Node (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the --authorization-mode parameter to a value that includes Node.
+--authorization-mode=Node,RBAC
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--authorization-mode' has 'Node'
+```
+
+**Returned Value**:
+
+```console
+root 4018 3998 5 Sep11 ? 01:03:21 kube-apiserver --advertise-address=172.31.4.224 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --requestheader-allowed-names=kube-apiserver-proxy-client --service-cluster-ip-range=10.43.0.0/16 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,EventRateLimit --requestheader-extra-headers-prefix=X-Remote-Extra- --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --storage-backend=etcd3 --anonymous-auth=false --bind-address=0.0.0.0 --cloud-provider= --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --profiling=false --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --runtime-config=authorization.k8s.io/v1beta1=true --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --service-account-lookup=true --etcd-servers=https://172.31.4.224:2379 --api-audiences=unknown --requestheader-group-headers=X-Remote-Group --service-account-issuer=rke --audit-log-maxsize=100 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --secure-port=6443 --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --authorization-mode=Node,RBAC --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-maxage=30 --audit-log-format=json --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-cache-ttl=5s --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --requestheader-username-headers=X-Remote-User --allow-privileged=true --audit-policy-file=/etc/kubernetes/audit-policy.yaml
+```
+
+### 1.2.8 Ensure that the --authorization-mode argument includes RBAC (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the --authorization-mode parameter to a value that includes RBAC,
+for example `--authorization-mode=Node,RBAC`.
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--authorization-mode' has 'RBAC'
+```
+
+**Returned Value**:
+
+```console
+root 4018 3998 5 Sep11 ? 01:03:21 kube-apiserver --advertise-address=172.31.4.224 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --requestheader-allowed-names=kube-apiserver-proxy-client --service-cluster-ip-range=10.43.0.0/16 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,EventRateLimit --requestheader-extra-headers-prefix=X-Remote-Extra- --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --storage-backend=etcd3 --anonymous-auth=false --bind-address=0.0.0.0 --cloud-provider= --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --profiling=false --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --runtime-config=authorization.k8s.io/v1beta1=true --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --service-account-lookup=true --etcd-servers=https://172.31.4.224:2379 --api-audiences=unknown --requestheader-group-headers=X-Remote-Group --service-account-issuer=rke --audit-log-maxsize=100 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --secure-port=6443 --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --authorization-mode=Node,RBAC --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-maxage=30 --audit-log-format=json --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-cache-ttl=5s --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --requestheader-username-headers=X-Remote-User --allow-privileged=true --audit-policy-file=/etc/kubernetes/audit-policy.yaml
+```
+
+### 1.2.9 Ensure that the admission control plugin EventRateLimit is set (Manual)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the Kubernetes documentation and set the desired limits in a configuration file.
+Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+and set the below parameters.
+--enable-admission-plugins=...,EventRateLimit,...
+--admission-control-config-file=
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--enable-admission-plugins' has 'EventRateLimit'
+```
+
+**Returned Value**:
+
+```console
+root 4018 3998 5 Sep11 ? 01:03:22 kube-apiserver --advertise-address=172.31.4.224 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --requestheader-allowed-names=kube-apiserver-proxy-client --service-cluster-ip-range=10.43.0.0/16 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,EventRateLimit --requestheader-extra-headers-prefix=X-Remote-Extra- --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --storage-backend=etcd3 --anonymous-auth=false --bind-address=0.0.0.0 --cloud-provider= --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --profiling=false --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --runtime-config=authorization.k8s.io/v1beta1=true --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --service-account-lookup=true --etcd-servers=https://172.31.4.224:2379 --api-audiences=unknown --requestheader-group-headers=X-Remote-Group --service-account-issuer=rke --audit-log-maxsize=100 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --secure-port=6443 --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --authorization-mode=Node,RBAC --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-maxage=30 --audit-log-format=json --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-cache-ttl=5s --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --requestheader-username-headers=X-Remote-User --allow-privileged=true --audit-policy-file=/etc/kubernetes/audit-policy.yaml
+```
+
+### 1.2.10 Ensure that the admission control plugin AlwaysAdmit is not set (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and either remove the --enable-admission-plugins parameter, or set it to a
+value that does not include AlwaysAdmit.
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--enable-admission-plugins' does not have 'AlwaysAdmit' OR '--enable-admission-plugins' is not present
+```
+
+**Returned Value**:
+
+```console
+root 4018 3998 5 Sep11 ? 01:03:22 kube-apiserver --advertise-address=172.31.4.224 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --requestheader-allowed-names=kube-apiserver-proxy-client --service-cluster-ip-range=10.43.0.0/16 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,EventRateLimit --requestheader-extra-headers-prefix=X-Remote-Extra- --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --storage-backend=etcd3 --anonymous-auth=false --bind-address=0.0.0.0 --cloud-provider= --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --profiling=false --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --runtime-config=authorization.k8s.io/v1beta1=true --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --service-account-lookup=true --etcd-servers=https://172.31.4.224:2379 --api-audiences=unknown --requestheader-group-headers=X-Remote-Group --service-account-issuer=rke --audit-log-maxsize=100 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --secure-port=6443 --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --authorization-mode=Node,RBAC --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-maxage=30 --audit-log-format=json --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-cache-ttl=5s --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --requestheader-username-headers=X-Remote-User --allow-privileged=true --audit-policy-file=/etc/kubernetes/audit-policy.yaml
+```
+
+### 1.2.11 Ensure that the admission control plugin AlwaysPullImages is set (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the --enable-admission-plugins parameter to include
+AlwaysPullImages.
+--enable-admission-plugins=...,AlwaysPullImages,...
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--enable-admission-plugins' has 'AlwaysPullImages'
+```
+
+**Returned Value**:
+
+```console
+root 4018 3998 5 Sep11 ? 01:03:22 kube-apiserver --advertise-address=172.31.4.224 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --requestheader-allowed-names=kube-apiserver-proxy-client --service-cluster-ip-range=10.43.0.0/16 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,EventRateLimit --requestheader-extra-headers-prefix=X-Remote-Extra- --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --storage-backend=etcd3 --anonymous-auth=false --bind-address=0.0.0.0 --cloud-provider= --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --profiling=false --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --runtime-config=authorization.k8s.io/v1beta1=true --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --service-account-lookup=true --etcd-servers=https://172.31.4.224:2379 --api-audiences=unknown --requestheader-group-headers=X-Remote-Group --service-account-issuer=rke --audit-log-maxsize=100 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --secure-port=6443 --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --authorization-mode=Node,RBAC --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-maxage=30 --audit-log-format=json --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-cache-ttl=5s --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --requestheader-username-headers=X-Remote-User --allow-privileged=true --audit-policy-file=/etc/kubernetes/audit-policy.yaml
+```
+
+### 1.2.12 Ensure that the admission control plugin SecurityContextDeny is set if PodSecurityPolicy is not used (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the --enable-admission-plugins parameter to include
+SecurityContextDeny, unless PodSecurityPolicy is already in place.
+--enable-admission-plugins=...,SecurityContextDeny,...
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--enable-admission-plugins' has 'SecurityContextDeny' OR '--enable-admission-plugins' has 'PodSecurityPolicy'
+```
+
+**Returned Value**:
+
+```console
+root 4018 3998 5 Sep11 ? 01:03:22 kube-apiserver --advertise-address=172.31.4.224 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --requestheader-allowed-names=kube-apiserver-proxy-client --service-cluster-ip-range=10.43.0.0/16 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,EventRateLimit --requestheader-extra-headers-prefix=X-Remote-Extra- --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --storage-backend=etcd3 --anonymous-auth=false --bind-address=0.0.0.0 --cloud-provider= --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --profiling=false --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --runtime-config=authorization.k8s.io/v1beta1=true --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --service-account-lookup=true --etcd-servers=https://172.31.4.224:2379 --api-audiences=unknown --requestheader-group-headers=X-Remote-Group --service-account-issuer=rke --audit-log-maxsize=100 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --secure-port=6443 --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --authorization-mode=Node,RBAC --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-maxage=30 --audit-log-format=json --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-cache-ttl=5s --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --requestheader-username-headers=X-Remote-User --allow-privileged=true --audit-policy-file=/etc/kubernetes/audit-policy.yaml
+```
+
+### 1.2.13 Ensure that the admission control plugin ServiceAccount is set (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the documentation and create ServiceAccount objects as per your environment.
+Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and ensure that the --disable-admission-plugins parameter is set to a
+value that does not include ServiceAccount.
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--disable-admission-plugins' is present OR '--disable-admission-plugins' is not present
+```
+
+**Returned Value**:
+
+```console
+root 4018 3998 5 Sep11 ? 01:03:22 kube-apiserver --advertise-address=172.31.4.224 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --requestheader-allowed-names=kube-apiserver-proxy-client --service-cluster-ip-range=10.43.0.0/16 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,EventRateLimit --requestheader-extra-headers-prefix=X-Remote-Extra- --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --storage-backend=etcd3 --anonymous-auth=false --bind-address=0.0.0.0 --cloud-provider= --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --profiling=false --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --runtime-config=authorization.k8s.io/v1beta1=true --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --service-account-lookup=true --etcd-servers=https://172.31.4.224:2379 --api-audiences=unknown --requestheader-group-headers=X-Remote-Group --service-account-issuer=rke --audit-log-maxsize=100 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --secure-port=6443 --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --authorization-mode=Node,RBAC --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-maxage=30 --audit-log-format=json --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-cache-ttl=5s --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --requestheader-username-headers=X-Remote-User --allow-privileged=true --audit-policy-file=/etc/kubernetes/audit-policy.yaml
+```
+
+### 1.2.14 Ensure that the admission control plugin NamespaceLifecycle is set (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the --disable-admission-plugins parameter to
+ensure it does not include NamespaceLifecycle.
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--disable-admission-plugins' is present OR '--disable-admission-plugins' is not present
+```
+
+**Returned Value**:
+
+```console
+root 4018 3998 5 Sep11 ? 01:03:22 kube-apiserver --advertise-address=172.31.4.224 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --requestheader-allowed-names=kube-apiserver-proxy-client --service-cluster-ip-range=10.43.0.0/16 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,EventRateLimit --requestheader-extra-headers-prefix=X-Remote-Extra- --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --storage-backend=etcd3 --anonymous-auth=false --bind-address=0.0.0.0 --cloud-provider= --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --profiling=false --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --runtime-config=authorization.k8s.io/v1beta1=true --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --service-account-lookup=true --etcd-servers=https://172.31.4.224:2379 --api-audiences=unknown --requestheader-group-headers=X-Remote-Group --service-account-issuer=rke --audit-log-maxsize=100 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --secure-port=6443 --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --authorization-mode=Node,RBAC --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-maxage=30 --audit-log-format=json --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-cache-ttl=5s --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --requestheader-username-headers=X-Remote-User --allow-privileged=true --audit-policy-file=/etc/kubernetes/audit-policy.yaml
+```
+
+### 1.2.15 Ensure that the admission control plugin NodeRestriction is set (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the Kubernetes documentation and configure NodeRestriction plug-in on kubelets.
+Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the --enable-admission-plugins parameter to a
+value that includes NodeRestriction.
+--enable-admission-plugins=...,NodeRestriction,...
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--enable-admission-plugins' has 'NodeRestriction'
+```
+
+**Returned Value**:
+
+```console
+root 4018 3998 5 Sep11 ? 01:03:22 kube-apiserver --advertise-address=172.31.4.224 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --requestheader-allowed-names=kube-apiserver-proxy-client --service-cluster-ip-range=10.43.0.0/16 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,EventRateLimit --requestheader-extra-headers-prefix=X-Remote-Extra- --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --storage-backend=etcd3 --anonymous-auth=false --bind-address=0.0.0.0 --cloud-provider= --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --profiling=false --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --runtime-config=authorization.k8s.io/v1beta1=true --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --service-account-lookup=true --etcd-servers=https://172.31.4.224:2379 --api-audiences=unknown --requestheader-group-headers=X-Remote-Group --service-account-issuer=rke --audit-log-maxsize=100 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --secure-port=6443 --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --authorization-mode=Node,RBAC --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-maxage=30 --audit-log-format=json --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-cache-ttl=5s --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --requestheader-username-headers=X-Remote-User --allow-privileged=true --audit-policy-file=/etc/kubernetes/audit-policy.yaml
+```
+
+### 1.2.16 Ensure that the --secure-port argument is not set to 0 - NoteThis recommendation is obsolete and will be deleted per the consensus process (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and either remove the --secure-port parameter or
+set it to a different (non-zero) desired port.
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--secure-port' is greater than 0 OR '--secure-port' is not present
+```
+
+**Returned Value**:
+
+```console
+root 4018 3998 5 Sep11 ? 01:03:22 kube-apiserver --advertise-address=172.31.4.224 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --requestheader-allowed-names=kube-apiserver-proxy-client --service-cluster-ip-range=10.43.0.0/16 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,EventRateLimit --requestheader-extra-headers-prefix=X-Remote-Extra- --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --storage-backend=etcd3 --anonymous-auth=false --bind-address=0.0.0.0 --cloud-provider= --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --profiling=false --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --runtime-config=authorization.k8s.io/v1beta1=true --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --service-account-lookup=true --etcd-servers=https://172.31.4.224:2379 --api-audiences=unknown --requestheader-group-headers=X-Remote-Group --service-account-issuer=rke --audit-log-maxsize=100 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --secure-port=6443 --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --authorization-mode=Node,RBAC --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-maxage=30 --audit-log-format=json --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-cache-ttl=5s --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --requestheader-username-headers=X-Remote-User --allow-privileged=true --audit-policy-file=/etc/kubernetes/audit-policy.yaml
+```
+
+### 1.2.17 Ensure that the --profiling argument is set to false (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the below parameter.
+--profiling=false
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--profiling' is equal to 'false'
+```
+
+**Returned Value**:
+
+```console
+root 4018 3998 5 Sep11 ? 01:03:22 kube-apiserver --advertise-address=172.31.4.224 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --requestheader-allowed-names=kube-apiserver-proxy-client --service-cluster-ip-range=10.43.0.0/16 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,EventRateLimit --requestheader-extra-headers-prefix=X-Remote-Extra- --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --storage-backend=etcd3 --anonymous-auth=false --bind-address=0.0.0.0 --cloud-provider= --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --profiling=false --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --runtime-config=authorization.k8s.io/v1beta1=true --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --service-account-lookup=true --etcd-servers=https://172.31.4.224:2379 --api-audiences=unknown --requestheader-group-headers=X-Remote-Group --service-account-issuer=rke --audit-log-maxsize=100 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --secure-port=6443 --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --authorization-mode=Node,RBAC --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-maxage=30 --audit-log-format=json --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-cache-ttl=5s --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --requestheader-username-headers=X-Remote-User --allow-privileged=true --audit-policy-file=/etc/kubernetes/audit-policy.yaml
+```
+
+### 1.2.18 Ensure that the --audit-log-path argument is set (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the --audit-log-path parameter to a suitable path and
+file where you would like audit logs to be written, for example,
+--audit-log-path=/var/log/apiserver/audit.log
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--audit-log-path' is present
+```
+
+**Returned Value**:
+
+```console
+root 4018 3998 5 Sep11 ? 01:03:22 kube-apiserver --advertise-address=172.31.4.224 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --requestheader-allowed-names=kube-apiserver-proxy-client --service-cluster-ip-range=10.43.0.0/16 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,EventRateLimit --requestheader-extra-headers-prefix=X-Remote-Extra- --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --storage-backend=etcd3 --anonymous-auth=false --bind-address=0.0.0.0 --cloud-provider= --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --profiling=false --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --runtime-config=authorization.k8s.io/v1beta1=true --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --service-account-lookup=true --etcd-servers=https://172.31.4.224:2379 --api-audiences=unknown --requestheader-group-headers=X-Remote-Group --service-account-issuer=rke --audit-log-maxsize=100 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --secure-port=6443 --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --authorization-mode=Node,RBAC --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-maxage=30 --audit-log-format=json --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-cache-ttl=5s --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --requestheader-username-headers=X-Remote-User --allow-privileged=true --audit-policy-file=/etc/kubernetes/audit-policy.yaml
+```
+
+### 1.2.19 Ensure that the --audit-log-maxage argument is set to 30 or as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the --audit-log-maxage parameter to 30
+or as an appropriate number of days, for example,
+--audit-log-maxage=30
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--audit-log-maxage' is greater or equal to 30
+```
+
+**Returned Value**:
+
+```console
+root 4018 3998 5 Sep11 ? 01:03:22 kube-apiserver --advertise-address=172.31.4.224 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --requestheader-allowed-names=kube-apiserver-proxy-client --service-cluster-ip-range=10.43.0.0/16 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,EventRateLimit --requestheader-extra-headers-prefix=X-Remote-Extra- --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --storage-backend=etcd3 --anonymous-auth=false --bind-address=0.0.0.0 --cloud-provider= --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --profiling=false --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --runtime-config=authorization.k8s.io/v1beta1=true --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --service-account-lookup=true --etcd-servers=https://172.31.4.224:2379 --api-audiences=unknown --requestheader-group-headers=X-Remote-Group --service-account-issuer=rke --audit-log-maxsize=100 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --secure-port=6443 --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --authorization-mode=Node,RBAC --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-maxage=30 --audit-log-format=json --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-cache-ttl=5s --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --requestheader-username-headers=X-Remote-User --allow-privileged=true --audit-policy-file=/etc/kubernetes/audit-policy.yaml
+```
+
+### 1.2.20 Ensure that the --audit-log-maxbackup argument is set to 10 or as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the --audit-log-maxbackup parameter to 10 or to an appropriate
+value. For example,
+--audit-log-maxbackup=10
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--audit-log-maxbackup' is greater or equal to 10
+```
+
+**Returned Value**:
+
+```console
+root 4018 3998 5 Sep11 ? 01:03:22 kube-apiserver --advertise-address=172.31.4.224 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --requestheader-allowed-names=kube-apiserver-proxy-client --service-cluster-ip-range=10.43.0.0/16 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,EventRateLimit --requestheader-extra-headers-prefix=X-Remote-Extra- --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --storage-backend=etcd3 --anonymous-auth=false --bind-address=0.0.0.0 --cloud-provider= --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --profiling=false --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --runtime-config=authorization.k8s.io/v1beta1=true --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --service-account-lookup=true --etcd-servers=https://172.31.4.224:2379 --api-audiences=unknown --requestheader-group-headers=X-Remote-Group --service-account-issuer=rke --audit-log-maxsize=100 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --secure-port=6443 --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --authorization-mode=Node,RBAC --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-maxage=30 --audit-log-format=json --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-cache-ttl=5s --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --requestheader-username-headers=X-Remote-User --allow-privileged=true --audit-policy-file=/etc/kubernetes/audit-policy.yaml
+```
+
+### 1.2.21 Ensure that the --audit-log-maxsize argument is set to 100 or as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the --audit-log-maxsize parameter to an appropriate size in MB.
+For example, to set it as 100 MB, --audit-log-maxsize=100
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--audit-log-maxsize' is greater or equal to 100
+```
+
+**Returned Value**:
+
+```console
+root 4018 3998 5 Sep11 ? 01:03:22 kube-apiserver --advertise-address=172.31.4.224 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --requestheader-allowed-names=kube-apiserver-proxy-client --service-cluster-ip-range=10.43.0.0/16 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,EventRateLimit --requestheader-extra-headers-prefix=X-Remote-Extra- --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --storage-backend=etcd3 --anonymous-auth=false --bind-address=0.0.0.0 --cloud-provider= --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --profiling=false --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --runtime-config=authorization.k8s.io/v1beta1=true --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --service-account-lookup=true --etcd-servers=https://172.31.4.224:2379 --api-audiences=unknown --requestheader-group-headers=X-Remote-Group --service-account-issuer=rke --audit-log-maxsize=100 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --secure-port=6443 --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --authorization-mode=Node,RBAC --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-maxage=30 --audit-log-format=json --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-cache-ttl=5s --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --requestheader-username-headers=X-Remote-User --allow-privileged=true --audit-policy-file=/etc/kubernetes/audit-policy.yaml
+```
+
+### 1.2.22 Ensure that the --request-timeout argument is set as appropriate (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+and set the below parameter as appropriate and if needed.
+For example, --request-timeout=300s
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+### 1.2.23 Ensure that the --service-account-lookup argument is set to true (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the below parameter.
+--service-account-lookup=true
+Alternatively, you can delete the --service-account-lookup parameter from this file so
+that the default takes effect.
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--service-account-lookup' is not present OR '--service-account-lookup' is equal to 'true'
+```
+
+**Returned Value**:
+
+```console
+root 4018 3998 5 Sep11 ? 01:03:22 kube-apiserver --advertise-address=172.31.4.224 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --requestheader-allowed-names=kube-apiserver-proxy-client --service-cluster-ip-range=10.43.0.0/16 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,EventRateLimit --requestheader-extra-headers-prefix=X-Remote-Extra- --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --storage-backend=etcd3 --anonymous-auth=false --bind-address=0.0.0.0 --cloud-provider= --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --profiling=false --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --runtime-config=authorization.k8s.io/v1beta1=true --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --service-account-lookup=true --etcd-servers=https://172.31.4.224:2379 --api-audiences=unknown --requestheader-group-headers=X-Remote-Group --service-account-issuer=rke --audit-log-maxsize=100 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --secure-port=6443 --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --authorization-mode=Node,RBAC --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-maxage=30 --audit-log-format=json --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-cache-ttl=5s --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --requestheader-username-headers=X-Remote-User --allow-privileged=true --audit-policy-file=/etc/kubernetes/audit-policy.yaml
+```
+
+### 1.2.24 Ensure that the --service-account-key-file argument is set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the --service-account-key-file parameter
+to the public key file for service accounts. For example,
+--service-account-key-file=
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--service-account-key-file' is present
+```
+
+**Returned Value**:
+
+```console
+root 4018 3998 5 Sep11 ? 01:03:22 kube-apiserver --advertise-address=172.31.4.224 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --requestheader-allowed-names=kube-apiserver-proxy-client --service-cluster-ip-range=10.43.0.0/16 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,EventRateLimit --requestheader-extra-headers-prefix=X-Remote-Extra- --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --storage-backend=etcd3 --anonymous-auth=false --bind-address=0.0.0.0 --cloud-provider= --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --profiling=false --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --runtime-config=authorization.k8s.io/v1beta1=true --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --service-account-lookup=true --etcd-servers=https://172.31.4.224:2379 --api-audiences=unknown --requestheader-group-headers=X-Remote-Group --service-account-issuer=rke --audit-log-maxsize=100 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --secure-port=6443 --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --authorization-mode=Node,RBAC --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-maxage=30 --audit-log-format=json --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-cache-ttl=5s --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --requestheader-username-headers=X-Remote-User --allow-privileged=true --audit-policy-file=/etc/kubernetes/audit-policy.yaml
+```
+
+### 1.2.25 Ensure that the --etcd-certfile and --etcd-keyfile arguments are set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the Kubernetes documentation and set up the TLS connection between the apiserver and etcd.
+Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the etcd certificate and key file parameters.
+--etcd-certfile=
+--etcd-keyfile=
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--etcd-certfile' is present AND '--etcd-keyfile' is present
+```
+
+**Returned Value**:
+
+```console
+root 4018 3998 5 Sep11 ? 01:03:22 kube-apiserver --advertise-address=172.31.4.224 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --requestheader-allowed-names=kube-apiserver-proxy-client --service-cluster-ip-range=10.43.0.0/16 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,EventRateLimit --requestheader-extra-headers-prefix=X-Remote-Extra- --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --storage-backend=etcd3 --anonymous-auth=false --bind-address=0.0.0.0 --cloud-provider= --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --profiling=false --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --runtime-config=authorization.k8s.io/v1beta1=true --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --service-account-lookup=true --etcd-servers=https://172.31.4.224:2379 --api-audiences=unknown --requestheader-group-headers=X-Remote-Group --service-account-issuer=rke --audit-log-maxsize=100 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --secure-port=6443 --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --authorization-mode=Node,RBAC --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-maxage=30 --audit-log-format=json --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-cache-ttl=5s --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --requestheader-username-headers=X-Remote-User --allow-privileged=true --audit-policy-file=/etc/kubernetes/audit-policy.yaml
+```
+
+### 1.2.26 Ensure that the --tls-cert-file and --tls-private-key-file arguments are set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the Kubernetes documentation and set up the TLS connection on the apiserver.
+Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the TLS certificate and private key file parameters.
+--tls-cert-file=
+--tls-private-key-file=
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--tls-cert-file' is present AND '--tls-private-key-file' is present
+```
+
+**Returned Value**:
+
+```console
+root 4018 3998 5 Sep11 ? 01:03:22 kube-apiserver --advertise-address=172.31.4.224 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --requestheader-allowed-names=kube-apiserver-proxy-client --service-cluster-ip-range=10.43.0.0/16 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,EventRateLimit --requestheader-extra-headers-prefix=X-Remote-Extra- --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --storage-backend=etcd3 --anonymous-auth=false --bind-address=0.0.0.0 --cloud-provider= --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --profiling=false --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --runtime-config=authorization.k8s.io/v1beta1=true --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --service-account-lookup=true --etcd-servers=https://172.31.4.224:2379 --api-audiences=unknown --requestheader-group-headers=X-Remote-Group --service-account-issuer=rke --audit-log-maxsize=100 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --secure-port=6443 --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --authorization-mode=Node,RBAC --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-maxage=30 --audit-log-format=json --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-cache-ttl=5s --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --requestheader-username-headers=X-Remote-User --allow-privileged=true --audit-policy-file=/etc/kubernetes/audit-policy.yaml
+```
+
+### 1.2.27 Ensure that the --client-ca-file argument is set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the Kubernetes documentation and set up the TLS connection on the apiserver.
+Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the client certificate authority file.
+--client-ca-file=
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--client-ca-file' is present
+```
+
+**Returned Value**:
+
+```console
+root 4018 3998 5 Sep11 ? 01:03:22 kube-apiserver --advertise-address=172.31.4.224 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --requestheader-allowed-names=kube-apiserver-proxy-client --service-cluster-ip-range=10.43.0.0/16 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,EventRateLimit --requestheader-extra-headers-prefix=X-Remote-Extra- --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --storage-backend=etcd3 --anonymous-auth=false --bind-address=0.0.0.0 --cloud-provider= --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --profiling=false --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --runtime-config=authorization.k8s.io/v1beta1=true --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --service-account-lookup=true --etcd-servers=https://172.31.4.224:2379 --api-audiences=unknown --requestheader-group-headers=X-Remote-Group --service-account-issuer=rke --audit-log-maxsize=100 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --secure-port=6443 --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --authorization-mode=Node,RBAC --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-maxage=30 --audit-log-format=json --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-cache-ttl=5s --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --requestheader-username-headers=X-Remote-User --allow-privileged=true --audit-policy-file=/etc/kubernetes/audit-policy.yaml
+```
+
+### 1.2.28 Ensure that the --etcd-cafile argument is set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the Kubernetes documentation and set up the TLS connection between the apiserver and etcd.
+Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the etcd certificate authority file parameter.
+--etcd-cafile=
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--etcd-cafile' is present
+```
+
+**Returned Value**:
+
+```console
+root 4018 3998 5 Sep11 ? 01:03:22 kube-apiserver --advertise-address=172.31.4.224 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --requestheader-allowed-names=kube-apiserver-proxy-client --service-cluster-ip-range=10.43.0.0/16 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,EventRateLimit --requestheader-extra-headers-prefix=X-Remote-Extra- --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --storage-backend=etcd3 --anonymous-auth=false --bind-address=0.0.0.0 --cloud-provider= --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --profiling=false --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --runtime-config=authorization.k8s.io/v1beta1=true --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --service-account-lookup=true --etcd-servers=https://172.31.4.224:2379 --api-audiences=unknown --requestheader-group-headers=X-Remote-Group --service-account-issuer=rke --audit-log-maxsize=100 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --secure-port=6443 --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --authorization-mode=Node,RBAC --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-maxage=30 --audit-log-format=json --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-cache-ttl=5s --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --requestheader-username-headers=X-Remote-User --allow-privileged=true --audit-policy-file=/etc/kubernetes/audit-policy.yaml
+```
+
+### 1.2.29 Ensure that the --encryption-provider-config argument is set as appropriate (Manual)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the Kubernetes documentation and configure a EncryptionConfig file.
+Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the --encryption-provider-config parameter to the path of that file.
+For example, --encryption-provider-config=
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--encryption-provider-config' is present
+```
+
+**Returned Value**:
+
+```console
+root 4018 3998 5 Sep11 ? 01:03:22 kube-apiserver --advertise-address=172.31.4.224 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --requestheader-allowed-names=kube-apiserver-proxy-client --service-cluster-ip-range=10.43.0.0/16 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,EventRateLimit --requestheader-extra-headers-prefix=X-Remote-Extra- --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --storage-backend=etcd3 --anonymous-auth=false --bind-address=0.0.0.0 --cloud-provider= --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --profiling=false --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --runtime-config=authorization.k8s.io/v1beta1=true --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --service-account-lookup=true --etcd-servers=https://172.31.4.224:2379 --api-audiences=unknown --requestheader-group-headers=X-Remote-Group --service-account-issuer=rke --audit-log-maxsize=100 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --secure-port=6443 --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --authorization-mode=Node,RBAC --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-maxage=30 --audit-log-format=json --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-cache-ttl=5s --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --requestheader-username-headers=X-Remote-User --allow-privileged=true --audit-policy-file=/etc/kubernetes/audit-policy.yaml
+```
+
+### 1.2.30 Ensure that encryption providers are appropriately configured (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Follow the Kubernetes documentation and configure a EncryptionConfig file.
+In this file, choose aescbc, kms or secretbox as the encryption provider.
+
+**Audit:**
+
+```bash
+ENCRYPTION_PROVIDER_CONFIG=$(ps -ef | grep kube-apiserver | grep -- --encryption-provider-config | sed 's%.*encryption-provider-config[= ]\([^ ]*\).*%\1%') if test -e $ENCRYPTION_PROVIDER_CONFIG; then grep -A1 'providers:' $ENCRYPTION_PROVIDER_CONFIG | tail -n1 | grep -o "[A-Za-z]*" | sed 's/^/provider=/'; fi
+```
+
+**Expected Result**:
+
+```console
+'provider' is present
+```
+
+### 1.2.31 Ensure that the API Server only makes use of Strong Cryptographic Ciphers (Manual)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the below parameter.
+--tls-cipher-suites=TLS_AES_128_GCM_SHA256,TLS_AES_256_GCM_SHA384,TLS_CHACHA20_POLY1305_SHA256,
+TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
+TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
+TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256,
+TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
+TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,
+TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256,TLS_RSA_WITH_3DES_EDE_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA,
+TLS_RSA_WITH_AES_128_GCM_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_AES_256_GCM_SHA384
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--tls-cipher-suites' contains valid elements from 'TLS_AES_128_GCM_SHA256,TLS_AES_256_GCM_SHA384,TLS_CHACHA20_POLY1305_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256,TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256,TLS_RSA_WITH_3DES_EDE_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_128_GCM_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_AES_256_GCM_SHA384'
+```
+
+**Returned Value**:
+
+```console
+root 4018 3998 5 Sep11 ? 01:03:22 kube-apiserver --advertise-address=172.31.4.224 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --requestheader-allowed-names=kube-apiserver-proxy-client --service-cluster-ip-range=10.43.0.0/16 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,EventRateLimit --requestheader-extra-headers-prefix=X-Remote-Extra- --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --storage-backend=etcd3 --anonymous-auth=false --bind-address=0.0.0.0 --cloud-provider= --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --profiling=false --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --runtime-config=authorization.k8s.io/v1beta1=true --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --service-account-lookup=true --etcd-servers=https://172.31.4.224:2379 --api-audiences=unknown --requestheader-group-headers=X-Remote-Group --service-account-issuer=rke --audit-log-maxsize=100 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --secure-port=6443 --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --authorization-mode=Node,RBAC --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-maxage=30 --audit-log-format=json --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-cache-ttl=5s --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --requestheader-username-headers=X-Remote-User --allow-privileged=true --audit-policy-file=/etc/kubernetes/audit-policy.yaml
+```
+
+## 1.3 Controller Manager
+### 1.3.1 Ensure that the --terminated-pod-gc-threshold argument is set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the Controller Manager pod specification file /etc/kubernetes/manifests/kube-controller-manager.yaml
+on the control plane node and set the --terminated-pod-gc-threshold to an appropriate threshold,
+for example, --terminated-pod-gc-threshold=10
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-controller-manager | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--terminated-pod-gc-threshold' is present
+```
+
+**Returned Value**:
+
+```console
+root 4184 4163 1 Sep11 ? 00:20:06 kube-controller-manager --configure-cloud-routes=false --authentication-kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 --allocate-node-cidrs=true --enable-hostpath-provisioner=false --pod-eviction-timeout=5m0s --terminated-pod-gc-threshold=1000 --authorization-kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --service-cluster-ip-range=10.43.0.0/16 --cluster-cidr=10.42.0.0/16 --root-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-private-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --node-monitor-grace-period=40s --v=2 --profiling=false --cloud-provider= --allow-untagged-cloud=true --leader-elect=true --feature-gates=RotateKubeletServerCertificate=true --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --use-service-account-credentials=true
+```
+
+### 1.3.2 Ensure that the --profiling argument is set to false (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the Controller Manager pod specification file /etc/kubernetes/manifests/kube-controller-manager.yaml
+on the control plane node and set the below parameter.
+--profiling=false
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-controller-manager | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--profiling' is equal to 'false'
+```
+
+**Returned Value**:
+
+```console
+root 4184 4163 1 Sep11 ? 00:20:06 kube-controller-manager --configure-cloud-routes=false --authentication-kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 --allocate-node-cidrs=true --enable-hostpath-provisioner=false --pod-eviction-timeout=5m0s --terminated-pod-gc-threshold=1000 --authorization-kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --service-cluster-ip-range=10.43.0.0/16 --cluster-cidr=10.42.0.0/16 --root-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-private-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --node-monitor-grace-period=40s --v=2 --profiling=false --cloud-provider= --allow-untagged-cloud=true --leader-elect=true --feature-gates=RotateKubeletServerCertificate=true --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --use-service-account-credentials=true
+```
+
+### 1.3.3 Ensure that the --use-service-account-credentials argument is set to true (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the Controller Manager pod specification file /etc/kubernetes/manifests/kube-controller-manager.yaml
+on the control plane node to set the below parameter.
+--use-service-account-credentials=true
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-controller-manager | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--use-service-account-credentials' is not equal to 'false'
+```
+
+**Returned Value**:
+
+```console
+root 4184 4163 1 Sep11 ? 00:20:06 kube-controller-manager --configure-cloud-routes=false --authentication-kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 --allocate-node-cidrs=true --enable-hostpath-provisioner=false --pod-eviction-timeout=5m0s --terminated-pod-gc-threshold=1000 --authorization-kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --service-cluster-ip-range=10.43.0.0/16 --cluster-cidr=10.42.0.0/16 --root-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-private-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --node-monitor-grace-period=40s --v=2 --profiling=false --cloud-provider= --allow-untagged-cloud=true --leader-elect=true --feature-gates=RotateKubeletServerCertificate=true --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --use-service-account-credentials=true
+```
+
+### 1.3.4 Ensure that the --service-account-private-key-file argument is set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the Controller Manager pod specification file /etc/kubernetes/manifests/kube-controller-manager.yaml
+on the control plane node and set the --service-account-private-key-file parameter
+to the private key file for service accounts.
+--service-account-private-key-file=
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-controller-manager | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--service-account-private-key-file' is present
+```
+
+**Returned Value**:
+
+```console
+root 4184 4163 1 Sep11 ? 00:20:06 kube-controller-manager --configure-cloud-routes=false --authentication-kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 --allocate-node-cidrs=true --enable-hostpath-provisioner=false --pod-eviction-timeout=5m0s --terminated-pod-gc-threshold=1000 --authorization-kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --service-cluster-ip-range=10.43.0.0/16 --cluster-cidr=10.42.0.0/16 --root-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-private-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --node-monitor-grace-period=40s --v=2 --profiling=false --cloud-provider= --allow-untagged-cloud=true --leader-elect=true --feature-gates=RotateKubeletServerCertificate=true --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --use-service-account-credentials=true
+```
+
+### 1.3.5 Ensure that the --root-ca-file argument is set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the Controller Manager pod specification file /etc/kubernetes/manifests/kube-controller-manager.yaml
+on the control plane node and set the --root-ca-file parameter to the certificate bundle file`.
+--root-ca-file=
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-controller-manager | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--root-ca-file' is present
+```
+
+**Returned Value**:
+
+```console
+root 4184 4163 1 Sep11 ? 00:20:06 kube-controller-manager --configure-cloud-routes=false --authentication-kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 --allocate-node-cidrs=true --enable-hostpath-provisioner=false --pod-eviction-timeout=5m0s --terminated-pod-gc-threshold=1000 --authorization-kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --service-cluster-ip-range=10.43.0.0/16 --cluster-cidr=10.42.0.0/16 --root-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-private-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --node-monitor-grace-period=40s --v=2 --profiling=false --cloud-provider= --allow-untagged-cloud=true --leader-elect=true --feature-gates=RotateKubeletServerCertificate=true --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --use-service-account-credentials=true
+```
+
+### 1.3.6 Ensure that the RotateKubeletServerCertificate argument is set to true (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Edit the Controller Manager pod specification file /etc/kubernetes/manifests/kube-controller-manager.yaml
+on the control plane node and set the --feature-gates parameter to include RotateKubeletServerCertificate=true.
+--feature-gates=RotateKubeletServerCertificate=true
+Cluster provisioned by RKE handles certificate rotation directly through RKE.
+
+### 1.3.7 Ensure that the --bind-address argument is set to 127.0.0.1 (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the Controller Manager pod specification file /etc/kubernetes/manifests/kube-controller-manager.yaml
+on the control plane node and ensure the correct value for the --bind-address parameter
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-controller-manager | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--bind-address' is present OR '--bind-address' is not present
+```
+
+**Returned Value**:
+
+```console
+root 4184 4163 1 Sep11 ? 00:20:06 kube-controller-manager --configure-cloud-routes=false --authentication-kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 --allocate-node-cidrs=true --enable-hostpath-provisioner=false --pod-eviction-timeout=5m0s --terminated-pod-gc-threshold=1000 --authorization-kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --service-cluster-ip-range=10.43.0.0/16 --cluster-cidr=10.42.0.0/16 --root-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-private-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --node-monitor-grace-period=40s --v=2 --profiling=false --cloud-provider= --allow-untagged-cloud=true --leader-elect=true --feature-gates=RotateKubeletServerCertificate=true --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --use-service-account-credentials=true
+```
+
+## 1.4 Scheduler
+### 1.4.1 Ensure that the --profiling argument is set to false (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the Scheduler pod specification file /etc/kubernetes/manifests/kube-scheduler.yaml file
+on the control plane node and set the below parameter.
+--profiling=false
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-scheduler | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--profiling' is equal to 'false'
+```
+
+**Returned Value**:
+
+```console
+root 4339 4318 0 Sep11 ? 00:03:28 kube-scheduler --authentication-kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-scheduler.yaml --authorization-kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-scheduler.yaml --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-scheduler.yaml --profiling=false --v=2 --leader-elect=true
+```
+
+### 1.4.2 Ensure that the --bind-address argument is set to 127.0.0.1 (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the Scheduler pod specification file /etc/kubernetes/manifests/kube-scheduler.yaml
+on the control plane node and ensure the correct value for the --bind-address parameter
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-scheduler | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--bind-address' is present OR '--bind-address' is not present
+```
+
+**Returned Value**:
+
+```console
+root 4339 4318 0 Sep11 ? 00:03:28 kube-scheduler --authentication-kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-scheduler.yaml --authorization-kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-scheduler.yaml --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-scheduler.yaml --profiling=false --v=2 --leader-elect=true
+```
+
+## 2 Etcd Node Configuration
+### 2.1 Ensure that the --cert-file and --key-file arguments are set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the etcd service documentation and configure TLS encryption.
+Then, edit the etcd pod specification file /etc/kubernetes/manifests/etcd.yaml
+on the master node and set the below parameters.
+--cert-file=
+--key-file=
+
+**Audit:**
+
+```bash
+/bin/ps -ef | /bin/grep etcd | /bin/grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--cert-file' is present AND '--key-file' is present
+```
+
+**Returned Value**:
+
+```console
+etcd 3847 3824 2 Sep11 ? 00:29:36 /usr/local/bin/etcd --peer-client-cert-auth=true --initial-advertise-peer-urls=https://172.31.4.224:2380 --initial-cluster=etcd-ip-172-31-4-224=https://172.31.4.224:2380 --initial-cluster-state=new --trusted-ca-file=/etc/kubernetes/ssl/kube-ca.pem --client-cert-auth=true --heartbeat-interval=500 --listen-client-urls=https://0.0.0.0:2379 --peer-trusted-ca-file=/etc/kubernetes/ssl/kube-ca.pem --listen-peer-urls=https://0.0.0.0:2380 --cert-file=/etc/kubernetes/ssl/kube-etcd-172-31-4-224.pem --key-file=/etc/kubernetes/ssl/kube-etcd-172-31-4-224-key.pem --peer-cert-file=/etc/kubernetes/ssl/kube-etcd-172-31-4-224.pem --peer-key-file=/etc/kubernetes/ssl/kube-etcd-172-31-4-224-key.pem --data-dir=/var/lib/rancher/etcd/ --initial-cluster-token=etcd-cluster-1 --name=etcd-ip-172-31-4-224 --advertise-client-urls=https://172.31.4.224:2379 --cipher-suites=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 --election-timeout=5000 root 4018 3998 5 Sep11 ? 01:03:21 kube-apiserver --advertise-address=172.31.4.224 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --requestheader-allowed-names=kube-apiserver-proxy-client --service-cluster-ip-range=10.43.0.0/16 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,EventRateLimit --requestheader-extra-headers-prefix=X-Remote-Extra- --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --storage-backend=etcd3 --anonymous-auth=false --bind-address=0.0.0.0 --cloud-provider= --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --profiling=false --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --runtime-config=authorization.k8s.io/v1beta1=true --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --service-account-lookup=true --etcd-servers=https://172.31.4.224:2379 --api-audiences=unknown --requestheader-group-headers=X-Remote-Group --service-account-issuer=rke --audit-log-maxsize=100 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --secure-port=6443 --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --authorization-mode=Node,RBAC --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-maxage=30 --audit-log-format=json --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-cache-ttl=5s --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --requestheader-username-headers=X-Remote-User --allow-privileged=true --audit-policy-file=/etc/kubernetes/audit-policy.yaml root 1034677 1034607 2 16:16 ? 00:00:00 kube-bench run --targets etcd --scored --nosummary --noremediations --v=0 --config-dir=/etc/kube-bench/cfg --benchmark rke-cis-1.7-hardened --json --log_dir /tmp/sonobuoy/logs --outputfile /tmp/sonobuoy/etcd.json
+```
+
+### 2.2 Ensure that the --client-cert-auth argument is set to true (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the etcd pod specification file /etc/kubernetes/manifests/etcd.yaml on the master
+node and set the below parameter.
+--client-cert-auth="true"
+
+**Audit:**
+
+```bash
+/bin/ps -ef | /bin/grep etcd | /bin/grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--client-cert-auth' is equal to 'true'
+```
+
+**Returned Value**:
+
+```console
+etcd 3847 3824 2 Sep11 ? 00:29:36 /usr/local/bin/etcd --peer-client-cert-auth=true --initial-advertise-peer-urls=https://172.31.4.224:2380 --initial-cluster=etcd-ip-172-31-4-224=https://172.31.4.224:2380 --initial-cluster-state=new --trusted-ca-file=/etc/kubernetes/ssl/kube-ca.pem --client-cert-auth=true --heartbeat-interval=500 --listen-client-urls=https://0.0.0.0:2379 --peer-trusted-ca-file=/etc/kubernetes/ssl/kube-ca.pem --listen-peer-urls=https://0.0.0.0:2380 --cert-file=/etc/kubernetes/ssl/kube-etcd-172-31-4-224.pem --key-file=/etc/kubernetes/ssl/kube-etcd-172-31-4-224-key.pem --peer-cert-file=/etc/kubernetes/ssl/kube-etcd-172-31-4-224.pem --peer-key-file=/etc/kubernetes/ssl/kube-etcd-172-31-4-224-key.pem --data-dir=/var/lib/rancher/etcd/ --initial-cluster-token=etcd-cluster-1 --name=etcd-ip-172-31-4-224 --advertise-client-urls=https://172.31.4.224:2379 --cipher-suites=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 --election-timeout=5000 root 4018 3998 5 Sep11 ? 01:03:21 kube-apiserver --advertise-address=172.31.4.224 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --requestheader-allowed-names=kube-apiserver-proxy-client --service-cluster-ip-range=10.43.0.0/16 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,EventRateLimit --requestheader-extra-headers-prefix=X-Remote-Extra- --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --storage-backend=etcd3 --anonymous-auth=false --bind-address=0.0.0.0 --cloud-provider= --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --profiling=false --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --runtime-config=authorization.k8s.io/v1beta1=true --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --service-account-lookup=true --etcd-servers=https://172.31.4.224:2379 --api-audiences=unknown --requestheader-group-headers=X-Remote-Group --service-account-issuer=rke --audit-log-maxsize=100 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --secure-port=6443 --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --authorization-mode=Node,RBAC --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-maxage=30 --audit-log-format=json --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-cache-ttl=5s --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --requestheader-username-headers=X-Remote-User --allow-privileged=true --audit-policy-file=/etc/kubernetes/audit-policy.yaml root 1034677 1034607 1 16:16 ? 00:00:00 kube-bench run --targets etcd --scored --nosummary --noremediations --v=0 --config-dir=/etc/kube-bench/cfg --benchmark rke-cis-1.7-hardened --json --log_dir /tmp/sonobuoy/logs --outputfile /tmp/sonobuoy/etcd.json
+```
+
+### 2.3 Ensure that the --auto-tls argument is not set to true (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the etcd pod specification file /etc/kubernetes/manifests/etcd.yaml on the master
+node and either remove the --auto-tls parameter or set it to false.
+ --auto-tls=false
+
+**Audit:**
+
+```bash
+/bin/ps -ef | /bin/grep etcd | /bin/grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'ETCD_AUTO_TLS' is not present OR 'ETCD_AUTO_TLS' is present
+```
+
+**Returned Value**:
+
+```console
+PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin HOSTNAME=ip-172-31-4-224 ETCDCTL_API=3 ETCDCTL_CACERT=/etc/kubernetes/ssl/kube-ca.pem ETCDCTL_CERT=/etc/kubernetes/ssl/kube-etcd-172-31-4-224.pem ETCDCTL_KEY=/etc/kubernetes/ssl/kube-etcd-172-31-4-224-key.pem ETCDCTL_ENDPOINTS=https://127.0.0.1:2379 ETCD_UNSUPPORTED_ARCH=x86_64 HOME=/
+```
+
+### 2.4 Ensure that the --peer-cert-file and --peer-key-file arguments are set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the etcd service documentation and configure peer TLS encryption as appropriate
+for your etcd cluster.
+Then, edit the etcd pod specification file /etc/kubernetes/manifests/etcd.yaml on the
+master node and set the below parameters.
+--peer-client-file=
+--peer-key-file=
+
+**Audit:**
+
+```bash
+/bin/ps -ef | /bin/grep etcd | /bin/grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--peer-cert-file' is present AND '--peer-key-file' is present
+```
+
+**Returned Value**:
+
+```console
+etcd 3847 3824 2 Sep11 ? 00:29:36 /usr/local/bin/etcd --peer-client-cert-auth=true --initial-advertise-peer-urls=https://172.31.4.224:2380 --initial-cluster=etcd-ip-172-31-4-224=https://172.31.4.224:2380 --initial-cluster-state=new --trusted-ca-file=/etc/kubernetes/ssl/kube-ca.pem --client-cert-auth=true --heartbeat-interval=500 --listen-client-urls=https://0.0.0.0:2379 --peer-trusted-ca-file=/etc/kubernetes/ssl/kube-ca.pem --listen-peer-urls=https://0.0.0.0:2380 --cert-file=/etc/kubernetes/ssl/kube-etcd-172-31-4-224.pem --key-file=/etc/kubernetes/ssl/kube-etcd-172-31-4-224-key.pem --peer-cert-file=/etc/kubernetes/ssl/kube-etcd-172-31-4-224.pem --peer-key-file=/etc/kubernetes/ssl/kube-etcd-172-31-4-224-key.pem --data-dir=/var/lib/rancher/etcd/ --initial-cluster-token=etcd-cluster-1 --name=etcd-ip-172-31-4-224 --advertise-client-urls=https://172.31.4.224:2379 --cipher-suites=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 --election-timeout=5000 root 4018 3998 5 Sep11 ? 01:03:21 kube-apiserver --advertise-address=172.31.4.224 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --requestheader-allowed-names=kube-apiserver-proxy-client --service-cluster-ip-range=10.43.0.0/16 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,EventRateLimit --requestheader-extra-headers-prefix=X-Remote-Extra- --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --storage-backend=etcd3 --anonymous-auth=false --bind-address=0.0.0.0 --cloud-provider= --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --profiling=false --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --runtime-config=authorization.k8s.io/v1beta1=true --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --service-account-lookup=true --etcd-servers=https://172.31.4.224:2379 --api-audiences=unknown --requestheader-group-headers=X-Remote-Group --service-account-issuer=rke --audit-log-maxsize=100 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --secure-port=6443 --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --authorization-mode=Node,RBAC --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-maxage=30 --audit-log-format=json --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-cache-ttl=5s --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --requestheader-username-headers=X-Remote-User --allow-privileged=true --audit-policy-file=/etc/kubernetes/audit-policy.yaml root 1034677 1034607 2 16:16 ? 00:00:00 kube-bench run --targets etcd --scored --nosummary --noremediations --v=0 --config-dir=/etc/kube-bench/cfg --benchmark rke-cis-1.7-hardened --json --log_dir /tmp/sonobuoy/logs --outputfile /tmp/sonobuoy/etcd.json
+```
+
+### 2.5 Ensure that the --peer-client-cert-auth argument is set to true (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the etcd pod specification file /etc/kubernetes/manifests/etcd.yaml on the master
+node and set the below parameter.
+--peer-client-cert-auth=true
+
+**Audit:**
+
+```bash
+/bin/ps -ef | /bin/grep etcd | /bin/grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--peer-client-cert-auth' is equal to 'true'
+```
+
+**Returned Value**:
+
+```console
+etcd 3847 3824 2 Sep11 ? 00:29:36 /usr/local/bin/etcd --peer-client-cert-auth=true --initial-advertise-peer-urls=https://172.31.4.224:2380 --initial-cluster=etcd-ip-172-31-4-224=https://172.31.4.224:2380 --initial-cluster-state=new --trusted-ca-file=/etc/kubernetes/ssl/kube-ca.pem --client-cert-auth=true --heartbeat-interval=500 --listen-client-urls=https://0.0.0.0:2379 --peer-trusted-ca-file=/etc/kubernetes/ssl/kube-ca.pem --listen-peer-urls=https://0.0.0.0:2380 --cert-file=/etc/kubernetes/ssl/kube-etcd-172-31-4-224.pem --key-file=/etc/kubernetes/ssl/kube-etcd-172-31-4-224-key.pem --peer-cert-file=/etc/kubernetes/ssl/kube-etcd-172-31-4-224.pem --peer-key-file=/etc/kubernetes/ssl/kube-etcd-172-31-4-224-key.pem --data-dir=/var/lib/rancher/etcd/ --initial-cluster-token=etcd-cluster-1 --name=etcd-ip-172-31-4-224 --advertise-client-urls=https://172.31.4.224:2379 --cipher-suites=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 --election-timeout=5000 root 4018 3998 5 Sep11 ? 01:03:21 kube-apiserver --advertise-address=172.31.4.224 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --requestheader-allowed-names=kube-apiserver-proxy-client --service-cluster-ip-range=10.43.0.0/16 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,EventRateLimit --requestheader-extra-headers-prefix=X-Remote-Extra- --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --storage-backend=etcd3 --anonymous-auth=false --bind-address=0.0.0.0 --cloud-provider= --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --profiling=false --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --runtime-config=authorization.k8s.io/v1beta1=true --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --service-account-lookup=true --etcd-servers=https://172.31.4.224:2379 --api-audiences=unknown --requestheader-group-headers=X-Remote-Group --service-account-issuer=rke --audit-log-maxsize=100 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --secure-port=6443 --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --authorization-mode=Node,RBAC --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-maxage=30 --audit-log-format=json --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-cache-ttl=5s --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --requestheader-username-headers=X-Remote-User --allow-privileged=true --audit-policy-file=/etc/kubernetes/audit-policy.yaml root 1034677 1034607 1 16:16 ? 00:00:00 kube-bench run --targets etcd --scored --nosummary --noremediations --v=0 --config-dir=/etc/kube-bench/cfg --benchmark rke-cis-1.7-hardened --json --log_dir /tmp/sonobuoy/logs --outputfile /tmp/sonobuoy/etcd.json
+```
+
+### 2.6 Ensure that the --peer-auto-tls argument is not set to true (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the etcd pod specification file /etc/kubernetes/manifests/etcd.yaml on the master
+node and either remove the --peer-auto-tls parameter or set it to false.
+--peer-auto-tls=false
+
+**Audit:**
+
+```bash
+/bin/ps -ef | /bin/grep etcd | /bin/grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'ETCD_PEER_AUTO_TLS' is not present OR 'ETCD_PEER_AUTO_TLS' is present
+```
+
+**Returned Value**:
+
+```console
+PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin HOSTNAME=ip-172-31-4-224 ETCDCTL_API=3 ETCDCTL_CACERT=/etc/kubernetes/ssl/kube-ca.pem ETCDCTL_CERT=/etc/kubernetes/ssl/kube-etcd-172-31-4-224.pem ETCDCTL_KEY=/etc/kubernetes/ssl/kube-etcd-172-31-4-224-key.pem ETCDCTL_ENDPOINTS=https://127.0.0.1:2379 ETCD_UNSUPPORTED_ARCH=x86_64 HOME=/
+```
+
+### 2.7 Ensure that a unique Certificate Authority is used for etcd (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+[Manual test]
+Follow the etcd documentation and create a dedicated certificate authority setup for the
+etcd service.
+Then, edit the etcd pod specification file /etc/kubernetes/manifests/etcd.yaml on the
+master node and set the below parameter.
+--trusted-ca-file=
+
+**Audit:**
+
+```bash
+/bin/ps -ef | /bin/grep etcd | /bin/grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--trusted-ca-file' is present
+```
+
+**Returned Value**:
+
+```console
+etcd 3847 3824 2 Sep11 ? 00:29:36 /usr/local/bin/etcd --peer-client-cert-auth=true --initial-advertise-peer-urls=https://172.31.4.224:2380 --initial-cluster=etcd-ip-172-31-4-224=https://172.31.4.224:2380 --initial-cluster-state=new --trusted-ca-file=/etc/kubernetes/ssl/kube-ca.pem --client-cert-auth=true --heartbeat-interval=500 --listen-client-urls=https://0.0.0.0:2379 --peer-trusted-ca-file=/etc/kubernetes/ssl/kube-ca.pem --listen-peer-urls=https://0.0.0.0:2380 --cert-file=/etc/kubernetes/ssl/kube-etcd-172-31-4-224.pem --key-file=/etc/kubernetes/ssl/kube-etcd-172-31-4-224-key.pem --peer-cert-file=/etc/kubernetes/ssl/kube-etcd-172-31-4-224.pem --peer-key-file=/etc/kubernetes/ssl/kube-etcd-172-31-4-224-key.pem --data-dir=/var/lib/rancher/etcd/ --initial-cluster-token=etcd-cluster-1 --name=etcd-ip-172-31-4-224 --advertise-client-urls=https://172.31.4.224:2379 --cipher-suites=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 --election-timeout=5000 root 4018 3998 5 Sep11 ? 01:03:21 kube-apiserver --advertise-address=172.31.4.224 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --requestheader-allowed-names=kube-apiserver-proxy-client --service-cluster-ip-range=10.43.0.0/16 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,EventRateLimit --requestheader-extra-headers-prefix=X-Remote-Extra- --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --storage-backend=etcd3 --anonymous-auth=false --bind-address=0.0.0.0 --cloud-provider= --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --profiling=false --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --runtime-config=authorization.k8s.io/v1beta1=true --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --service-account-lookup=true --etcd-servers=https://172.31.4.224:2379 --api-audiences=unknown --requestheader-group-headers=X-Remote-Group --service-account-issuer=rke --audit-log-maxsize=100 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --secure-port=6443 --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --authorization-mode=Node,RBAC --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-maxage=30 --audit-log-format=json --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-cache-ttl=5s --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --requestheader-username-headers=X-Remote-User --allow-privileged=true --audit-policy-file=/etc/kubernetes/audit-policy.yaml root 1034677 1034607 1 16:16 ? 00:00:00 kube-bench run --targets etcd --scored --nosummary --noremediations --v=0 --config-dir=/etc/kube-bench/cfg --benchmark rke-cis-1.7-hardened --json --log_dir /tmp/sonobuoy/logs --outputfile /tmp/sonobuoy/etcd.json
+```
+
+## 3.1 Authentication and Authorization
+### 3.1.1 Client certificate authentication should not be used for users (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Alternative mechanisms provided by Kubernetes such as the use of OIDC should be
+implemented in place of client certificates.
+
+### 3.1.2 Service account token authentication should not be used for users (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Alternative mechanisms provided by Kubernetes such as the use of OIDC should be implemented
+in place of service account tokens.
+
+### 3.1.3 Bootstrap token authentication should not be used for users (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Alternative mechanisms provided by Kubernetes such as the use of OIDC should be implemented
+in place of bootstrap tokens.
+
+## 3.2 Logging
+### 3.2.1 Ensure that a minimal audit policy is created (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Create an audit policy file for your cluster.
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--audit-policy-file' is present
+```
+
+**Returned Value**:
+
+```console
+root 4018 3998 5 Sep11 ? 01:03:22 kube-apiserver --advertise-address=172.31.4.224 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --requestheader-allowed-names=kube-apiserver-proxy-client --service-cluster-ip-range=10.43.0.0/16 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,EventRateLimit --requestheader-extra-headers-prefix=X-Remote-Extra- --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --storage-backend=etcd3 --anonymous-auth=false --bind-address=0.0.0.0 --cloud-provider= --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --profiling=false --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --runtime-config=authorization.k8s.io/v1beta1=true --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --service-account-lookup=true --etcd-servers=https://172.31.4.224:2379 --api-audiences=unknown --requestheader-group-headers=X-Remote-Group --service-account-issuer=rke --audit-log-maxsize=100 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --secure-port=6443 --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --authorization-mode=Node,RBAC --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-maxage=30 --audit-log-format=json --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authentication-token-webhook-cache-ttl=5s --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --requestheader-username-headers=X-Remote-User --allow-privileged=true --audit-policy-file=/etc/kubernetes/audit-policy.yaml
+```
+
+### 3.2.2 Ensure that the audit policy covers key security concerns (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Review the audit policy provided for the cluster and ensure that it covers
+at least the following areas,
+- Access to Secrets managed by the cluster. Care should be taken to only
+ log Metadata for requests to Secrets, ConfigMaps, and TokenReviews, in
+ order to avoid risk of logging sensitive data.
+- Modification of Pod and Deployment objects.
+- Use of `pods/exec`, `pods/portforward`, `pods/proxy` and `services/proxy`.
+For most requests, minimally logging at the Metadata level is recommended
+(the most basic level of logging).
+
+## 4.1 Worker Node Configuration Files
+### 4.1.1 Ensure that the kubelet service file permissions are set to 600 or more restrictive (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the each worker node.
+For example, chmod 600 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
+Not Applicable - Clusters provisioned by RKE doesn’t require or maintain a configuration file for the kubelet service.
+All configuration is passed in as arguments at container run time.
+
+### 4.1.2 Ensure that the kubelet service file ownership is set to root:root (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the each worker node.
+For example,
+chown root:root /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
+Not Applicable - Clusters provisioned by RKE doesn’t require or maintain a configuration file for the kubelet service.
+ All configuration is passed in as arguments at container run time.
+
+### 4.1.3 If proxy kubeconfig file exists ensure permissions are set to 600 or more restrictive (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the each worker node.
+For example,
+chmod 600 /node/etc/kubernetes/ssl/kubecfg-kube-proxy.yaml
+
+**Audit:**
+
+```bash
+/bin/sh -c 'if test -e /node/etc/kubernetes/ssl/kubecfg-kube-proxy.yaml; then stat -c permissions=%a /node/etc/kubernetes/ssl/kubecfg-kube-proxy.yaml; fi'
+```
+
+**Expected Result**:
+
+```console
+permissions has permissions 600, expected 600 or more restrictive
+```
+
+**Returned Value**:
+
+```console
+permissions=600
+```
+
+### 4.1.4 If proxy kubeconfig file exists ensure ownership is set to root:root (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the each worker node.
+For example, chown root:root /node/etc/kubernetes/ssl/kubecfg-kube-proxy.yaml
+
+**Audit:**
+
+```bash
+/bin/sh -c 'if test -e /node/etc/kubernetes/ssl/kubecfg-kube-proxy.yaml; then stat -c %U:%G /node/etc/kubernetes/ssl/kubecfg-kube-proxy.yaml; fi'
+```
+
+**Expected Result**:
+
+```console
+'root:root' is present
+```
+
+**Returned Value**:
+
+```console
+root:root
+```
+
+### 4.1.5 Ensure that the --kubeconfig kubelet.conf file permissions are set to 600 or more restrictive (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the each worker node.
+For example,
+chmod 600 /node/etc/kubernetes/ssl/kubecfg-kube-node.yaml
+
+**Audit:**
+
+```bash
+/bin/sh -c 'if test -e /node/etc/kubernetes/ssl/kubecfg-kube-node.yaml; then stat -c permissions=%a /node/etc/kubernetes/ssl/kubecfg-kube-node.yaml; fi'
+```
+
+**Expected Result**:
+
+```console
+permissions has permissions 600, expected 600 or more restrictive
+```
+
+**Returned Value**:
+
+```console
+permissions=600
+```
+
+### 4.1.6 Ensure that the --kubeconfig kubelet.conf file ownership is set to root:root (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the each worker node.
+For example,
+chown root:root /node/etc/kubernetes/ssl/kubecfg-kube-node.yaml
+
+**Audit:**
+
+```bash
+/bin/sh -c 'if test -e /node/etc/kubernetes/ssl/kubecfg-kube-node.yaml; then stat -c %U:%G /node/etc/kubernetes/ssl/kubecfg-kube-node.yaml; fi'
+```
+
+**Expected Result**:
+
+```console
+'root:root' is present
+```
+
+**Returned Value**:
+
+```console
+root:root
+```
+
+### 4.1.7 Ensure that the certificate authorities file permissions are set to 600 or more restrictive (Automated)
+
+
+**Result:** fail
+
+**Remediation:**
+Run the following command to modify the file permissions of the
+--client-ca-file chmod 600
+
+**Audit:**
+
+```bash
+stat -c permissions=%a /node/etc/kubernetes/ssl/kube-ca.pem
+```
+
+**Expected Result**:
+
+```console
+permissions has permissions 644, expected 600 or more restrictive
+```
+
+**Returned Value**:
+
+```console
+permissions=644
+```
+
+### 4.1.8 Ensure that the client certificate authorities file ownership is set to root:root (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the following command to modify the ownership of the --client-ca-file.
+chown root:root
+
+**Audit:**
+
+```bash
+stat -c %U:%G /node/etc/kubernetes/ssl/kube-ca.pem
+```
+
+**Expected Result**:
+
+```console
+'root:root' is equal to 'root:root'
+```
+
+**Returned Value**:
+
+```console
+root:root
+```
+
+### 4.1.9 If the kubelet config.yaml configuration file is being used validate permissions set to 600 or more restrictive (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Run the following command (using the config file location identified in the Audit step)
+chmod 600 /var/lib/kubelet/config.yaml
+Not Applicable - Clusters provisioned by RKE do not require or maintain a configuration file for the kubelet.
+All configuration is passed in as arguments at container run time.
+
+### 4.1.10 If the kubelet config.yaml configuration file is being used validate file ownership is set to root:root (Manual)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Run the following command (using the config file location identified in the Audit step)
+chown root:root /var/lib/kubelet/config.yaml
+Not Applicable - Clusters provisioned by RKE doesn’t require or maintain a configuration file for the kubelet.
+All configuration is passed in as arguments at container run time.
+
+## 4.2 Kubelet
+### 4.2.1 Ensure that the --anonymous-auth argument is set to false (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+If using a Kubelet config file, edit the file to set `authentication: anonymous: enabled` to
+`false`.
+If using executable arguments, edit the kubelet service file
+/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
+set the below parameter in KUBELET_SYSTEM_PODS_ARGS variable.
+`--anonymous-auth=false`
+Based on your system, restart the kubelet service. For example,
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+**Audit:**
+
+```bash
+/bin/ps -fC kubelet
+```
+
+**Audit Config:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/kubelet/config.yaml; then /bin/cat /var/lib/kubelet/config.yaml; fi'
+```
+
+**Expected Result**:
+
+```console
+'--anonymous-auth' is equal to 'false'
+```
+
+**Returned Value**:
+
+```console
+UID PID PPID C STIME TTY TIME CMD root 4903 4499 3 Sep11 ? 00:36:52 kubelet --v=2 --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-kubelet-172-31-4-224-key.pem --event-qps=0 --address=0.0.0.0 --cgroups-per-qos=True --pod-infra-container-image=rancher/mirrored-pause:3.7 --root-dir=/var/lib/kubelet --container-runtime=remote --make-iptables-util-chains=true --authorization-mode=Webhook --resolv-conf=/etc/resolv.conf --cloud-provider= --container-runtime-endpoint=unix:///var/run/cri-dockerd.sock --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 --authentication-token-webhook=true --anonymous-auth=false --read-only-port=0 --volume-plugin-dir=/var/lib/kubelet/volumeplugins --protect-kernel-defaults=true --feature-gates=RotateKubeletServerCertificate=true --cluster-dns=10.43.0.10 --fail-swap-on=false --hostname-override=ip-172-31-4-224 --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-node.yaml --cluster-domain=cluster.local --tls-cert-file=/etc/kubernetes/ssl/kube-kubelet-172-31-4-224.pem --streaming-connection-idle-timeout=30m --cgroup-driver=cgroupfs --resolv-conf=/run/systemd/resolve/resolv.conf
+```
+
+### 4.2.2 Ensure that the --authorization-mode argument is not set to AlwaysAllow (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+If using a Kubelet config file, edit the file to set `authorization.mode` to Webhook. If
+using executable arguments, edit the kubelet service file
+/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
+set the below parameter in KUBELET_AUTHZ_ARGS variable.
+--authorization-mode=Webhook
+Based on your system, restart the kubelet service. For example,
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+**Audit:**
+
+```bash
+/bin/ps -fC kubelet
+```
+
+**Audit Config:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/kubelet/config.yaml; then /bin/cat /var/lib/kubelet/config.yaml; fi'
+```
+
+**Expected Result**:
+
+```console
+'--authorization-mode' does not have 'AlwaysAllow'
+```
+
+**Returned Value**:
+
+```console
+UID PID PPID C STIME TTY TIME CMD root 4903 4499 3 Sep11 ? 00:36:52 kubelet --v=2 --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-kubelet-172-31-4-224-key.pem --event-qps=0 --address=0.0.0.0 --cgroups-per-qos=True --pod-infra-container-image=rancher/mirrored-pause:3.7 --root-dir=/var/lib/kubelet --container-runtime=remote --make-iptables-util-chains=true --authorization-mode=Webhook --resolv-conf=/etc/resolv.conf --cloud-provider= --container-runtime-endpoint=unix:///var/run/cri-dockerd.sock --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 --authentication-token-webhook=true --anonymous-auth=false --read-only-port=0 --volume-plugin-dir=/var/lib/kubelet/volumeplugins --protect-kernel-defaults=true --feature-gates=RotateKubeletServerCertificate=true --cluster-dns=10.43.0.10 --fail-swap-on=false --hostname-override=ip-172-31-4-224 --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-node.yaml --cluster-domain=cluster.local --tls-cert-file=/etc/kubernetes/ssl/kube-kubelet-172-31-4-224.pem --streaming-connection-idle-timeout=30m --cgroup-driver=cgroupfs --resolv-conf=/run/systemd/resolve/resolv.conf
+```
+
+### 4.2.3 Ensure that the --client-ca-file argument is set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+If using a Kubelet config file, edit the file to set `authentication.x509.clientCAFile` to
+the location of the client CA file.
+If using command line arguments, edit the kubelet service file
+/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
+set the below parameter in KUBELET_AUTHZ_ARGS variable.
+--client-ca-file=
+Based on your system, restart the kubelet service. For example,
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+**Audit:**
+
+```bash
+/bin/ps -fC kubelet
+```
+
+**Audit Config:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/kubelet/config.yaml; then /bin/cat /var/lib/kubelet/config.yaml; fi'
+```
+
+**Expected Result**:
+
+```console
+'--client-ca-file' is present
+```
+
+**Returned Value**:
+
+```console
+UID PID PPID C STIME TTY TIME CMD root 4903 4499 3 Sep11 ? 00:36:52 kubelet --v=2 --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-kubelet-172-31-4-224-key.pem --event-qps=0 --address=0.0.0.0 --cgroups-per-qos=True --pod-infra-container-image=rancher/mirrored-pause:3.7 --root-dir=/var/lib/kubelet --container-runtime=remote --make-iptables-util-chains=true --authorization-mode=Webhook --resolv-conf=/etc/resolv.conf --cloud-provider= --container-runtime-endpoint=unix:///var/run/cri-dockerd.sock --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 --authentication-token-webhook=true --anonymous-auth=false --read-only-port=0 --volume-plugin-dir=/var/lib/kubelet/volumeplugins --protect-kernel-defaults=true --feature-gates=RotateKubeletServerCertificate=true --cluster-dns=10.43.0.10 --fail-swap-on=false --hostname-override=ip-172-31-4-224 --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-node.yaml --cluster-domain=cluster.local --tls-cert-file=/etc/kubernetes/ssl/kube-kubelet-172-31-4-224.pem --streaming-connection-idle-timeout=30m --cgroup-driver=cgroupfs --resolv-conf=/run/systemd/resolve/resolv.conf
+```
+
+### 4.2.4 Verify that the --read-only-port argument is set to 0 (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+If using a Kubelet config file, edit the file to set `readOnlyPort` to 0.
+If using command line arguments, edit the kubelet service file
+/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
+set the below parameter in KUBELET_SYSTEM_PODS_ARGS variable.
+--read-only-port=0
+Based on your system, restart the kubelet service. For example,
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+**Audit:**
+
+```bash
+/bin/ps -fC kubelet
+```
+
+**Audit Config:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/kubelet/config.yaml; then /bin/cat /var/lib/kubelet/config.yaml; fi'
+```
+
+**Expected Result**:
+
+```console
+'--read-only-port' is equal to '0' OR '--read-only-port' is not present
+```
+
+**Returned Value**:
+
+```console
+UID PID PPID C STIME TTY TIME CMD root 4903 4499 3 Sep11 ? 00:36:52 kubelet --v=2 --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-kubelet-172-31-4-224-key.pem --event-qps=0 --address=0.0.0.0 --cgroups-per-qos=True --pod-infra-container-image=rancher/mirrored-pause:3.7 --root-dir=/var/lib/kubelet --container-runtime=remote --make-iptables-util-chains=true --authorization-mode=Webhook --resolv-conf=/etc/resolv.conf --cloud-provider= --container-runtime-endpoint=unix:///var/run/cri-dockerd.sock --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 --authentication-token-webhook=true --anonymous-auth=false --read-only-port=0 --volume-plugin-dir=/var/lib/kubelet/volumeplugins --protect-kernel-defaults=true --feature-gates=RotateKubeletServerCertificate=true --cluster-dns=10.43.0.10 --fail-swap-on=false --hostname-override=ip-172-31-4-224 --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-node.yaml --cluster-domain=cluster.local --tls-cert-file=/etc/kubernetes/ssl/kube-kubelet-172-31-4-224.pem --streaming-connection-idle-timeout=30m --cgroup-driver=cgroupfs --resolv-conf=/run/systemd/resolve/resolv.conf
+```
+
+### 4.2.5 Ensure that the --streaming-connection-idle-timeout argument is not set to 0 (Manual)
+
+
+**Result:** pass
+
+**Remediation:**
+If using a Kubelet config file, edit the file to set `streamingConnectionIdleTimeout` to a
+value other than 0.
+If using command line arguments, edit the kubelet service file
+/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
+set the below parameter in KUBELET_SYSTEM_PODS_ARGS variable.
+--streaming-connection-idle-timeout=5m
+Based on your system, restart the kubelet service. For example,
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+**Audit:**
+
+```bash
+/bin/ps -fC kubelet
+```
+
+**Audit Config:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/kubelet/config.yaml; then /bin/cat /var/lib/kubelet/config.yaml; fi'
+```
+
+**Expected Result**:
+
+```console
+'--streaming-connection-idle-timeout' is not equal to '0' OR '--streaming-connection-idle-timeout' is not present
+```
+
+**Returned Value**:
+
+```console
+UID PID PPID C STIME TTY TIME CMD root 4903 4499 3 Sep11 ? 00:36:52 kubelet --v=2 --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-kubelet-172-31-4-224-key.pem --event-qps=0 --address=0.0.0.0 --cgroups-per-qos=True --pod-infra-container-image=rancher/mirrored-pause:3.7 --root-dir=/var/lib/kubelet --container-runtime=remote --make-iptables-util-chains=true --authorization-mode=Webhook --resolv-conf=/etc/resolv.conf --cloud-provider= --container-runtime-endpoint=unix:///var/run/cri-dockerd.sock --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 --authentication-token-webhook=true --anonymous-auth=false --read-only-port=0 --volume-plugin-dir=/var/lib/kubelet/volumeplugins --protect-kernel-defaults=true --feature-gates=RotateKubeletServerCertificate=true --cluster-dns=10.43.0.10 --fail-swap-on=false --hostname-override=ip-172-31-4-224 --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-node.yaml --cluster-domain=cluster.local --tls-cert-file=/etc/kubernetes/ssl/kube-kubelet-172-31-4-224.pem --streaming-connection-idle-timeout=30m --cgroup-driver=cgroupfs --resolv-conf=/run/systemd/resolve/resolv.conf
+```
+
+### 4.2.6 Ensure that the --make-iptables-util-chains argument is set to true (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+If using a Kubelet config file, edit the file to set `makeIPTablesUtilChains` to `true`.
+If using command line arguments, edit the kubelet service file
+/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
+remove the --make-iptables-util-chains argument from the
+KUBELET_SYSTEM_PODS_ARGS variable.
+Based on your system, restart the kubelet service. For example:
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+**Audit:**
+
+```bash
+/bin/ps -fC kubelet
+```
+
+**Audit Config:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/kubelet/config.yaml; then /bin/cat /var/lib/kubelet/config.yaml; fi'
+```
+
+**Expected Result**:
+
+```console
+'--make-iptables-util-chains' is equal to 'true' OR '--make-iptables-util-chains' is not present
+```
+
+**Returned Value**:
+
+```console
+UID PID PPID C STIME TTY TIME CMD root 4903 4499 3 Sep11 ? 00:36:52 kubelet --v=2 --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-kubelet-172-31-4-224-key.pem --event-qps=0 --address=0.0.0.0 --cgroups-per-qos=True --pod-infra-container-image=rancher/mirrored-pause:3.7 --root-dir=/var/lib/kubelet --container-runtime=remote --make-iptables-util-chains=true --authorization-mode=Webhook --resolv-conf=/etc/resolv.conf --cloud-provider= --container-runtime-endpoint=unix:///var/run/cri-dockerd.sock --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 --authentication-token-webhook=true --anonymous-auth=false --read-only-port=0 --volume-plugin-dir=/var/lib/kubelet/volumeplugins --protect-kernel-defaults=true --feature-gates=RotateKubeletServerCertificate=true --cluster-dns=10.43.0.10 --fail-swap-on=false --hostname-override=ip-172-31-4-224 --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-node.yaml --cluster-domain=cluster.local --tls-cert-file=/etc/kubernetes/ssl/kube-kubelet-172-31-4-224.pem --streaming-connection-idle-timeout=30m --cgroup-driver=cgroupfs --resolv-conf=/run/systemd/resolve/resolv.conf
+```
+
+### 4.2.7 Ensure that the --hostname-override argument is not set (Manual)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Edit the kubelet service file /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
+on each worker node and remove the --hostname-override argument from the
+KUBELET_SYSTEM_PODS_ARGS variable.
+Based on your system, restart the kubelet service. For example,
+systemctl daemon-reload
+systemctl restart kubelet.service
+Not Applicable - Clusters provisioned by RKE set the --hostname-override to avoid any hostname configuration errors
+
+### 4.2.8 Ensure that the eventRecordQPS argument is set to a level which ensures appropriate event capture (Manual)
+
+
+**Result:** pass
+
+**Remediation:**
+If using a Kubelet config file, edit the file to set `eventRecordQPS` to an appropriate level.
+If using command line arguments, edit the kubelet service file
+/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
+set the below parameter in KUBELET_SYSTEM_PODS_ARGS variable.
+Based on your system, restart the kubelet service. For example,
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+**Audit:**
+
+```bash
+/bin/ps -fC kubelet
+```
+
+**Audit Config:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/kubelet/config.yaml; then /bin/cat /var/lib/kubelet/config.yaml; fi'
+```
+
+**Expected Result**:
+
+```console
+'--event-qps' is greater or equal to 0 OR '--event-qps' is not present
+```
+
+**Returned Value**:
+
+```console
+UID PID PPID C STIME TTY TIME CMD root 4903 4499 3 Sep11 ? 00:36:52 kubelet --v=2 --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-kubelet-172-31-4-224-key.pem --event-qps=0 --address=0.0.0.0 --cgroups-per-qos=True --pod-infra-container-image=rancher/mirrored-pause:3.7 --root-dir=/var/lib/kubelet --container-runtime=remote --make-iptables-util-chains=true --authorization-mode=Webhook --resolv-conf=/etc/resolv.conf --cloud-provider= --container-runtime-endpoint=unix:///var/run/cri-dockerd.sock --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 --authentication-token-webhook=true --anonymous-auth=false --read-only-port=0 --volume-plugin-dir=/var/lib/kubelet/volumeplugins --protect-kernel-defaults=true --feature-gates=RotateKubeletServerCertificate=true --cluster-dns=10.43.0.10 --fail-swap-on=false --hostname-override=ip-172-31-4-224 --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-node.yaml --cluster-domain=cluster.local --tls-cert-file=/etc/kubernetes/ssl/kube-kubelet-172-31-4-224.pem --streaming-connection-idle-timeout=30m --cgroup-driver=cgroupfs --resolv-conf=/run/systemd/resolve/resolv.conf
+```
+
+### 4.2.9 Ensure that the --tls-cert-file and --tls-private-key-file arguments are set as appropriate (Manual)
+
+
+**Result:** pass
+
+**Remediation:**
+If using a Kubelet config file, edit the file to set `tlsCertFile` to the location
+of the certificate file to use to identify this Kubelet, and `tlsPrivateKeyFile`
+to the location of the corresponding private key file.
+If using command line arguments, edit the kubelet service file
+/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
+set the below parameters in KUBELET_CERTIFICATE_ARGS variable.
+--tls-cert-file=
+--tls-private-key-file=
+Based on your system, restart the kubelet service. For example,
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+**Audit:**
+
+```bash
+/bin/ps -fC kubelet
+```
+
+**Audit Config:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/kubelet/config.yaml; then /bin/cat /var/lib/kubelet/config.yaml; fi'
+```
+
+**Expected Result**:
+
+```console
+'--tls-cert-file' is present AND '--tls-private-key-file' is present
+```
+
+**Returned Value**:
+
+```console
+UID PID PPID C STIME TTY TIME CMD root 4903 4499 3 Sep11 ? 00:36:52 kubelet --v=2 --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-kubelet-172-31-4-224-key.pem --event-qps=0 --address=0.0.0.0 --cgroups-per-qos=True --pod-infra-container-image=rancher/mirrored-pause:3.7 --root-dir=/var/lib/kubelet --container-runtime=remote --make-iptables-util-chains=true --authorization-mode=Webhook --resolv-conf=/etc/resolv.conf --cloud-provider= --container-runtime-endpoint=unix:///var/run/cri-dockerd.sock --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 --authentication-token-webhook=true --anonymous-auth=false --read-only-port=0 --volume-plugin-dir=/var/lib/kubelet/volumeplugins --protect-kernel-defaults=true --feature-gates=RotateKubeletServerCertificate=true --cluster-dns=10.43.0.10 --fail-swap-on=false --hostname-override=ip-172-31-4-224 --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-node.yaml --cluster-domain=cluster.local --tls-cert-file=/etc/kubernetes/ssl/kube-kubelet-172-31-4-224.pem --streaming-connection-idle-timeout=30m --cgroup-driver=cgroupfs --resolv-conf=/run/systemd/resolve/resolv.conf
+```
+
+### 4.2.10 Ensure that the --rotate-certificates argument is not set to false (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+If using a Kubelet config file, edit the file to add the line `rotateCertificates` to `true` or
+remove it altogether to use the default value.
+If using command line arguments, edit the kubelet service file
+/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
+remove --rotate-certificates=false argument from the KUBELET_CERTIFICATE_ARGS
+variable.
+Based on your system, restart the kubelet service. For example,
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+**Audit:**
+
+```bash
+/bin/ps -fC kubelet
+```
+
+**Audit Config:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/kubelet/config.yaml; then /bin/cat /var/lib/kubelet/config.yaml; fi'
+```
+
+**Expected Result**:
+
+```console
+'--rotate-certificates' is present OR '--rotate-certificates' is not present
+```
+
+**Returned Value**:
+
+```console
+UID PID PPID C STIME TTY TIME CMD root 4903 4499 3 Sep11 ? 00:36:52 kubelet --v=2 --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-kubelet-172-31-4-224-key.pem --event-qps=0 --address=0.0.0.0 --cgroups-per-qos=True --pod-infra-container-image=rancher/mirrored-pause:3.7 --root-dir=/var/lib/kubelet --container-runtime=remote --make-iptables-util-chains=true --authorization-mode=Webhook --resolv-conf=/etc/resolv.conf --cloud-provider= --container-runtime-endpoint=unix:///var/run/cri-dockerd.sock --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 --authentication-token-webhook=true --anonymous-auth=false --read-only-port=0 --volume-plugin-dir=/var/lib/kubelet/volumeplugins --protect-kernel-defaults=true --feature-gates=RotateKubeletServerCertificate=true --cluster-dns=10.43.0.10 --fail-swap-on=false --hostname-override=ip-172-31-4-224 --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-node.yaml --cluster-domain=cluster.local --tls-cert-file=/etc/kubernetes/ssl/kube-kubelet-172-31-4-224.pem --streaming-connection-idle-timeout=30m --cgroup-driver=cgroupfs --resolv-conf=/run/systemd/resolve/resolv.conf
+```
+
+### 4.2.11 Verify that the RotateKubeletServerCertificate argument is set to true (Manual)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Edit the kubelet service file /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
+on each worker node and set the below parameter in KUBELET_CERTIFICATE_ARGS variable.
+--feature-gates=RotateKubeletServerCertificate=true
+Based on your system, restart the kubelet service. For example:
+systemctl daemon-reload
+systemctl restart kubelet.service
+Not Applicable - Clusters provisioned by RKE handles certificate rotation directly through RKE.
+
+**Audit Config:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/kubelet/config.yaml; then /bin/cat /var/lib/kubelet/config.yaml; fi'
+```
+
+### 4.2.12 Ensure that the Kubelet only makes use of Strong Cryptographic Ciphers (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+If using a Kubelet config file, edit the file to set `TLSCipherSuites` to
+TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256
+or to a subset of these values.
+If using executable arguments, edit the kubelet service file
+/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
+set the --tls-cipher-suites parameter as follows, or to a subset of these values.
+--tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256
+Based on your system, restart the kubelet service. For example:
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+**Audit:**
+
+```bash
+/bin/ps -fC kubelet
+```
+
+**Audit Config:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/kubelet/config.yaml; then /bin/cat /var/lib/kubelet/config.yaml; fi'
+```
+
+**Expected Result**:
+
+```console
+'--tls-cipher-suites' contains valid elements from 'TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256'
+```
+
+**Returned Value**:
+
+```console
+UID PID PPID C STIME TTY TIME CMD root 4903 4499 3 Sep11 ? 00:36:52 kubelet --v=2 --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-kubelet-172-31-4-224-key.pem --event-qps=0 --address=0.0.0.0 --cgroups-per-qos=True --pod-infra-container-image=rancher/mirrored-pause:3.7 --root-dir=/var/lib/kubelet --container-runtime=remote --make-iptables-util-chains=true --authorization-mode=Webhook --resolv-conf=/etc/resolv.conf --cloud-provider= --container-runtime-endpoint=unix:///var/run/cri-dockerd.sock --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 --authentication-token-webhook=true --anonymous-auth=false --read-only-port=0 --volume-plugin-dir=/var/lib/kubelet/volumeplugins --protect-kernel-defaults=true --feature-gates=RotateKubeletServerCertificate=true --cluster-dns=10.43.0.10 --fail-swap-on=false --hostname-override=ip-172-31-4-224 --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-node.yaml --cluster-domain=cluster.local --tls-cert-file=/etc/kubernetes/ssl/kube-kubelet-172-31-4-224.pem --streaming-connection-idle-timeout=30m --cgroup-driver=cgroupfs --resolv-conf=/run/systemd/resolve/resolv.conf
+```
+
+### 4.2.13 Ensure that a limit is set on pod PIDs (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Decide on an appropriate level for this parameter and set it,
+either via the --pod-max-pids command line parameter or the PodPidsLimit configuration file setting.
+
+**Audit:**
+
+```bash
+/bin/ps -fC kubelet
+```
+
+**Audit Config:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/kubelet/config.yaml; then /bin/cat /var/lib/kubelet/config.yaml; fi'
+```
+
+**Expected Result**:
+
+```console
+'--pod-max-pids' is present
+```
+
+**Returned Value**:
+
+```console
+UID PID PPID C STIME TTY TIME CMD root 4903 4499 3 Sep11 ? 00:36:52 kubelet --v=2 --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-kubelet-172-31-4-224-key.pem --event-qps=0 --address=0.0.0.0 --cgroups-per-qos=True --pod-infra-container-image=rancher/mirrored-pause:3.7 --root-dir=/var/lib/kubelet --container-runtime=remote --make-iptables-util-chains=true --authorization-mode=Webhook --resolv-conf=/etc/resolv.conf --cloud-provider= --container-runtime-endpoint=unix:///var/run/cri-dockerd.sock --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 --authentication-token-webhook=true --anonymous-auth=false --read-only-port=0 --volume-plugin-dir=/var/lib/kubelet/volumeplugins --protect-kernel-defaults=true --feature-gates=RotateKubeletServerCertificate=true --cluster-dns=10.43.0.10 --fail-swap-on=false --hostname-override=ip-172-31-4-224 --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-node.yaml --cluster-domain=cluster.local --tls-cert-file=/etc/kubernetes/ssl/kube-kubelet-172-31-4-224.pem --streaming-connection-idle-timeout=30m --cgroup-driver=cgroupfs --resolv-conf=/run/systemd/resolve/resolv.conf
+```
+
+## 5.1 RBAC and Service Accounts
+### 5.1.1 Ensure that the cluster-admin role is only used where required (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Identify all clusterrolebindings to the cluster-admin role. Check if they are used and
+if they need this role or if they could use a role with fewer privileges.
+Where possible, first bind users to a lower privileged role and then remove the
+clusterrolebinding to the cluster-admin role :
+kubectl delete clusterrolebinding [name]
+
+### 5.1.2 Minimize access to secrets (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Where possible, remove get, list and watch access to Secret objects in the cluster.
+
+### 5.1.3 Minimize wildcard use in Roles and ClusterRoles (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Where possible replace any use of wildcards in clusterroles and roles with specific
+objects or actions.
+
+### 5.1.4 Minimize access to create pods (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Where possible, remove create access to pod objects in the cluster.
+
+### 5.1.5 Ensure that default service accounts are not actively used. (Manual)
+
+
+**Result:** pass
+
+**Remediation:**
+Create explicit service accounts wherever a Kubernetes workload requires specific access
+to the Kubernetes API server.
+Modify the configuration of each default service account to include this value
+automountServiceAccountToken: false
+
+**Audit Script:** `check_for_default_sa.sh`
+
+```bash
+#!/bin/bash
+
+set -eE
+
+handle_error() {
+ echo "false"
+}
+
+trap 'handle_error' ERR
+
+count_sa=$(kubectl get serviceaccounts --all-namespaces -o json | jq -r '.items[] | select(.metadata.name=="default") | select((.automountServiceAccountToken == null) or (.automountServiceAccountToken == true))' | jq .metadata.namespace | wc -l)
+if [[ ${count_sa} -gt 0 ]]; then
+ echo "false"
+ exit
+fi
+
+for ns in $(kubectl get ns --no-headers -o custom-columns=":metadata.name")
+do
+ for result in $(kubectl get clusterrolebinding,rolebinding -n $ns -o json | jq -r '.items[] | select((.subjects[]?.kind=="ServiceAccount" and .subjects[]?.name=="default") or (.subjects[]?.kind=="Group" and .subjects[]?.name=="system:serviceaccounts"))' | jq -r '"\(.roleRef.kind),\(.roleRef.name)"')
+ do
+ read kind name <<<$(IFS=","; echo $result)
+ resource_count=$(kubectl get $kind $name -n $ns -o json | jq -r '.rules[] | select(.resources[]? != "podsecuritypolicies")' | wc -l)
+ if [[ ${resource_count} -gt 0 ]]; then
+ echo "false"
+ exit
+ fi
+ done
+done
+
+
+echo "true"
+
+```
+
+**Audit Execution:**
+
+```bash
+./check_for_default_sa.sh
+```
+
+**Expected Result**:
+
+```console
+'true' is equal to 'true'
+```
+
+**Returned Value**:
+
+```console
+true
+```
+
+### 5.1.6 Ensure that Service Account Tokens are only mounted where necessary (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Modify the definition of pods and service accounts which do not need to mount service
+account tokens to disable it.
+
+### 5.1.7 Avoid use of system:masters group (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Remove the system:masters group from all users in the cluster.
+
+### 5.1.8 Limit use of the Bind, Impersonate and Escalate permissions in the Kubernetes cluster (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Where possible, remove the impersonate, bind and escalate rights from subjects.
+
+### 5.1.9 Minimize access to create persistent volumes (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Where possible, remove create access to PersistentVolume objects in the cluster.
+
+### 5.1.10 Minimize access to the proxy sub-resource of nodes (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Where possible, remove access to the proxy sub-resource of node objects.
+
+### 5.1.11 Minimize access to the approval sub-resource of certificatesigningrequests objects (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Where possible, remove access to the approval sub-resource of certificatesigningrequest objects.
+
+### 5.1.12 Minimize access to webhook configuration objects (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Where possible, remove access to the validatingwebhookconfigurations or mutatingwebhookconfigurations objects
+
+### 5.1.13 Minimize access to the service account token creation (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Where possible, remove access to the token sub-resource of serviceaccount objects.
+
+## 5.2 Pod Security Standards
+### 5.2.1 Ensure that the cluster has at least one active policy control mechanism in place (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Ensure that either Pod Security Admission or an external policy control system is in place
+for every namespace which contains user workloads.
+
+### 5.2.2 Minimize the admission of privileged containers (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Add policies to each namespace in the cluster which has user workloads to restrict the
+admission of privileged containers.
+
+### 5.2.3 Minimize the admission of containers wishing to share the host process ID namespace (Automated)
+
+
+**Result:** warn
+
+**Remediation:**
+Add policies to each namespace in the cluster which has user workloads to restrict the
+admission of `hostPID` containers.
+
+### 5.2.4 Minimize the admission of containers wishing to share the host IPC namespace (Automated)
+
+
+**Result:** warn
+
+**Remediation:**
+Add policies to each namespace in the cluster which has user workloads to restrict the
+admission of `hostIPC` containers.
+
+### 5.2.5 Minimize the admission of containers wishing to share the host network namespace (Automated)
+
+
+**Result:** warn
+
+**Remediation:**
+Add policies to each namespace in the cluster which has user workloads to restrict the
+admission of `hostNetwork` containers.
+
+### 5.2.6 Minimize the admission of containers with allowPrivilegeEscalation (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Add policies to each namespace in the cluster which has user workloads to restrict the
+admission of containers with `.spec.allowPrivilegeEscalation` set to `true`.
+
+### 5.2.7 Minimize the admission of root containers (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Create a policy for each namespace in the cluster, ensuring that either `MustRunAsNonRoot`
+or `MustRunAs` with the range of UIDs not including 0, is set.
+
+### 5.2.8 Minimize the admission of containers with the NET_RAW capability (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Add policies to each namespace in the cluster which has user workloads to restrict the
+admission of containers with the `NET_RAW` capability.
+
+### 5.2.9 Minimize the admission of containers with added capabilities (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Ensure that `allowedCapabilities` is not present in policies for the cluster unless
+it is set to an empty array.
+
+### 5.2.10 Minimize the admission of containers with capabilities assigned (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Review the use of capabilites in applications running on your cluster. Where a namespace
+contains applicaions which do not require any Linux capabities to operate consider adding
+a PSP which forbids the admission of containers which do not drop all capabilities.
+
+### 5.2.11 Minimize the admission of Windows HostProcess containers (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Add policies to each namespace in the cluster which has user workloads to restrict the
+admission of containers that have `.securityContext.windowsOptions.hostProcess` set to `true`.
+
+### 5.2.12 Minimize the admission of HostPath volumes (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Add policies to each namespace in the cluster which has user workloads to restrict the
+admission of containers with `hostPath` volumes.
+
+### 5.2.13 Minimize the admission of containers which use HostPorts (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Add policies to each namespace in the cluster which has user workloads to restrict the
+admission of containers which use `hostPort` sections.
+
+## 5.3 Network Policies and CNI
+### 5.3.1 Ensure that the CNI in use supports NetworkPolicies (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+If the CNI plugin in use does not support network policies, consideration should be given to
+making use of a different plugin, or finding an alternate mechanism for restricting traffic
+in the Kubernetes cluster.
+
+### 5.3.2 Ensure that all Namespaces have NetworkPolicies defined (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Follow the documentation and create NetworkPolicy objects as you need them.
+
+## 5.4 Secrets Management
+### 5.4.1 Prefer using Secrets as files over Secrets as environment variables (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+If possible, rewrite application code to read Secrets from mounted secret files, rather than
+from environment variables.
+
+### 5.4.2 Consider external secret storage (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Refer to the Secrets management options offered by your cloud provider or a third-party
+secrets management solution.
+
+## 5.5 Extensible Admission Control
+### 5.5.1 Configure Image Provenance using ImagePolicyWebhook admission controller (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Follow the Kubernetes documentation and setup image provenance.
+
+## 5.7 General Policies
+### 5.7.1 Create administrative boundaries between resources using namespaces (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Follow the documentation and create namespaces for objects in your deployment as you need
+them.
+
+### 5.7.2 Ensure that the seccomp profile is set to docker/default in your Pod definitions (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Use `securityContext` to enable the docker/default seccomp profile in your pod definitions.
+An example is as below:
+ securityContext:
+ seccompProfile:
+ type: RuntimeDefault
+
+### 5.7.3 Apply SecurityContext to your Pods and Containers (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Follow the Kubernetes documentation and apply SecurityContexts to your Pods. For a
+suggested list of SecurityContexts, you may refer to the CIS Security Benchmark for Docker
+Containers.
+
+### 5.7.4 The default namespace should not be used (Manual)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Ensure that namespaces are created to allow for appropriate segregation of Kubernetes
+resources and that all new resources are created in a specific namespace.
+
diff --git a/docs/reference-guides/rancher-security/hardening-guides/rke2-hardening-guide/rke2-self-assessment-guide-with-cis-v1.24-k8s-v1.24.md b/docs/reference-guides/rancher-security/hardening-guides/rke2-hardening-guide/rke2-self-assessment-guide-with-cis-v1.24-k8s-v1.24.md
new file mode 100644
index 00000000000..ba80c0a516a
--- /dev/null
+++ b/docs/reference-guides/rancher-security/hardening-guides/rke2-hardening-guide/rke2-self-assessment-guide-with-cis-v1.24-k8s-v1.24.md
@@ -0,0 +1,3202 @@
+---
+title: RKE2 Self-Assessment Guide - CIS Benchmark v1.24 - K8s v1.24
+---
+
+
+
+
+
+This document is a companion to the [RKE2 Hardening Guide](../../../../pages-for-subheaders/rke2-hardening-guide.md), which provides prescriptive guidance on how to harden RKE2 clusters that are running in production and managed by Rancher. This benchmark guide helps you evaluate the security of a hardened cluster against each control in the CIS Kubernetes Benchmark.
+
+This guide corresponds to the following versions of Rancher, CIS Benchmarks, and Kubernetes:
+
+| Rancher Version | CIS Benchmark Version | Kubernetes Version |
+|-----------------|-----------------------|--------------------|
+| Rancher v2.7 | Benchmark v1.24 | Kubernetes v1.24 |
+
+This guide walks through the various controls and provide updated example commands to audit compliance in Rancher created clusters. Because Rancher and RKE2 install Kubernetes services as Docker containers, many of the control verification checks in the CIS Kubernetes Benchmark don't apply. These checks will return a result of `Not Applicable`.
+
+This document is for Rancher operators, security teams, auditors and decision makers.
+
+For more information about each control, including detailed descriptions and remediations for failing tests, refer to the corresponding section of the CIS Kubernetes Benchmark v1.24. You can download the benchmark, after creating a free account, at [Center for Internet Security (CIS)](https://www.cisecurity.org/benchmark/kubernetes/).
+
+## Testing Methodology
+
+RKE2 launches control plane components as static pods, managed by the kubelet, and uses containerd as the container runtime. Configuration is defined by arguments passed to the container at the time of initialization or via configuration file.
+
+Where control audits differ from the original CIS benchmark, the audit commands specific to Rancher are provided for testing. When performing the tests, you will need access to the command line on the hosts of all RKE2 nodes. The commands also make use of the [kubectl](https://kubernetes.io/docs/tasks/tools/) (with a valid configuration file) and [jq](https://stedolan.github.io/jq/) tools, which are required in the testing and evaluation of test results.
+
+:::note
+
+This guide only covers `automated` (previously called `scored`) tests.
+
+:::
+
+### Controls
+
+## 1.1 Control Plane Node Configuration Files
+### 1.1.1 Ensure that the API server pod specification file permissions are set to 644 or more restrictive (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the
+control plane node.
+For example, chmod 644 /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml
+
+**Audit:**
+
+```bash
+stat -c permissions=%a /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml
+```
+
+**Expected Result**:
+
+```console
+permissions has permissions 644, expected 644 or more restrictive
+```
+
+**Returned Value**:
+
+```console
+permissions=644
+```
+
+### 1.1.2 Ensure that the API server pod specification file ownership is set to root:root (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example, chown root:root /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml
+
+**Audit:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml; then stat -c %U:%G /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml; fi'
+```
+
+**Expected Result**:
+
+```console
+'root:root' is equal to 'root:root'
+```
+
+**Returned Value**:
+
+```console
+root:root
+```
+
+### 1.1.3 Ensure that the controller manager pod specification file permissions are set to 600 or more restrictive (Automated)
+
+
+**Result:** fail
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example, chmod 600 /var/lib/rancher/rke2/agent/pod-manifests/kube-controller-manager.yaml
+
+**Audit:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/rancher/rke2/agent/pod-manifests/kube-controller-manager.yaml; then stat -c %a /var/lib/rancher/rke2/agent/pod-manifests/kube-controller-manager.yaml; fi'
+```
+
+**Expected Result**:
+
+```console
+'600' is present
+```
+
+**Returned Value**:
+
+```console
+644
+```
+
+### 1.1.4 Ensure that the controller manager pod specification file ownership is set to root:root (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example, chown root:root /var/lib/rancher/rke2/agent/pod-manifests/kube-controller-manager.yaml
+
+**Audit:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/rancher/rke2/agent/pod-manifests/kube-controller-manager.yaml; then stat -c %U:%G /var/lib/rancher/rke2/agent/pod-manifests/kube-controller-manager.yaml; fi'
+```
+
+**Expected Result**:
+
+```console
+'root:root' is equal to 'root:root'
+```
+
+**Returned Value**:
+
+```console
+root:root
+```
+
+### 1.1.5 Ensure that the scheduler pod specification file permissions are set to 600 or more restrictive (Automated)
+
+
+**Result:** fail
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example, chmod 600 /var/lib/rancher/rke2/agent/pod-manifests/kube-scheduler.yaml
+
+**Audit:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/rancher/rke2/agent/pod-manifests/kube-scheduler.yaml; then stat -c permissions=%a /var/lib/rancher/rke2/agent/pod-manifests/kube-scheduler.yaml; fi'
+```
+
+**Expected Result**:
+
+```console
+'permissions' is equal to '600'
+```
+
+**Returned Value**:
+
+```console
+permissions=644
+```
+
+### 1.1.6 Ensure that the scheduler pod specification file ownership is set to root:root (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example, chown root:root /var/lib/rancher/rke2/agent/pod-manifests/kube-scheduler.yaml
+
+**Audit:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/rancher/rke2/agent/pod-manifests/kube-scheduler.yaml; then stat -c %U:%G /var/lib/rancher/rke2/agent/pod-manifests/kube-scheduler.yaml; fi'
+```
+
+**Expected Result**:
+
+```console
+'root:root' is present
+```
+
+**Returned Value**:
+
+```console
+root:root
+```
+
+### 1.1.7 Ensure that the etcd pod specification file permissions are set to 644 or more restrictive (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example,
+chmod 644 /var/lib/rancher/rke2/agent/pod-manifests/etcd.yaml
+
+**Audit:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/rancher/rke2/agent/pod-manifests/etcd.yaml; then stat -c permissions=%a /var/lib/rancher/rke2/agent/pod-manifests/etcd.yaml; fi'
+```
+
+**Expected Result**:
+
+```console
+'644' is equal to '644'
+```
+
+**Returned Value**:
+
+```console
+permissions=644
+```
+
+### 1.1.8 Ensure that the etcd pod specification file ownership is set to root:root (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example,
+chown root:root /var/lib/rancher/rke2/agent/pod-manifests/etcd.yaml
+
+**Audit:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/rancher/rke2/agent/pod-manifests/etcd.yaml; then stat -c %U:%G /var/lib/rancher/rke2/agent/pod-manifests/etcd.yaml; fi'
+```
+
+**Expected Result**:
+
+```console
+'root:root' is equal to 'root:root'
+```
+
+**Returned Value**:
+
+```console
+root:root
+```
+
+### 1.1.9 Ensure that the Container Network Interface file permissions are set to 600 or more restrictive (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example, chmod 600
+
+**Audit:**
+
+```bash
+ps -fC ${kubeletbin:-kubelet} | grep -- --cni-conf-dir || echo "/etc/cni/net.d" | sed 's%.*cni-conf-dir[= ]\([^ ]*\).*%\1%' | xargs -I{} find {} -mindepth 1 | xargs --no-run-if-empty stat -c permissions=%a find /var/lib/cni/networks -type f 2> /dev/null | xargs --no-run-if-empty stat -c permissions=%a
+```
+
+**Expected Result**:
+
+```console
+permissions has permissions 644, expected 600 or more restrictive
+```
+
+**Returned Value**:
+
+```console
+permissions=600 permissions=644
+```
+
+### 1.1.10 Ensure that the Container Network Interface file ownership is set to root:root (Manual)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example,
+chown root:root
+
+**Audit:**
+
+```bash
+ps -fC ${kubeletbin:-kubelet} | grep -- --cni-conf-dir || echo "/etc/cni/net.d" | sed 's%.*cni-conf-dir[= ]\([^ ]*\).*%\1%' | xargs -I{} find {} -mindepth 1 | xargs --no-run-if-empty stat -c %U:%G find /var/lib/cni/networks -type f 2> /dev/null | xargs --no-run-if-empty stat -c %U:%G
+```
+
+**Expected Result**:
+
+```console
+'root:root' is present
+```
+
+**Returned Value**:
+
+```console
+root:root root:root
+```
+
+### 1.1.11 Ensure that the etcd data directory permissions are set to 700 or more restrictive (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+On the etcd server node, get the etcd data directory, passed as an argument --data-dir,
+from the command 'ps -ef | grep etcd'.
+Run the below command (based on the etcd data directory found above). For example,
+chmod 700 /var/lib/etcd
+
+**Audit:**
+
+```bash
+stat -c permissions=%a /var/lib/rancher/rke2/server/db/etcd
+```
+
+**Expected Result**:
+
+```console
+permissions has permissions 700, expected 700 or more restrictive
+```
+
+**Returned Value**:
+
+```console
+permissions=700
+```
+
+### 1.1.12 Ensure that the etcd data directory ownership is set to etcd:etcd (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+On the etcd server node, get the etcd data directory, passed as an argument --data-dir,
+from the command 'ps -ef | grep etcd'.
+Run the below command (based on the etcd data directory found above).
+For example, chown etcd:etcd /var/lib/etcd
+
+**Audit:**
+
+```bash
+stat -c %U:%G /var/lib/rancher/rke2/server/db/etcd
+```
+
+**Expected Result**:
+
+```console
+'etcd:etcd' is present
+```
+
+**Returned Value**:
+
+```console
+etcd:etcd
+```
+
+### 1.1.13 Ensure that the admin.conf file permissions are set to 600 or more restrictive (Automated)
+
+
+**Result:** fail
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example, chmod 600 /etc/kubernetes/admin.conf
+
+**Audit:**
+
+```bash
+stat -c permissions=%a /var/lib/rancher/rke2/server/cred/admin.kubeconfig
+```
+
+**Expected Result**:
+
+```console
+permissions has permissions 644, expected 600 or more restrictive
+```
+
+**Returned Value**:
+
+```console
+permissions=644
+```
+
+### 1.1.14 Ensure that the admin.conf file ownership is set to root:root (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example, chown root:root /etc/kubernetes/admin.conf
+
+**Audit:**
+
+```bash
+stat -c %U:%G /var/lib/rancher/rke2/server/cred/admin.kubeconfig
+```
+
+**Expected Result**:
+
+```console
+'root:root' is equal to 'root:root'
+```
+
+**Returned Value**:
+
+```console
+root:root
+```
+
+### 1.1.15 Ensure that the scheduler.conf file permissions are set to 600 or more restrictive (Automated)
+
+
+**Result:** fail
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example,
+chmod 600 scheduler
+
+**Audit:**
+
+```bash
+stat -c permissions=%a /var/lib/rancher/rke2/server/cred/scheduler.kubeconfig
+```
+
+**Expected Result**:
+
+```console
+permissions has permissions 644, expected 600 or more restrictive
+```
+
+**Returned Value**:
+
+```console
+permissions=644
+```
+
+### 1.1.16 Ensure that the scheduler.conf file ownership is set to root:root (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example,
+chown root:root scheduler
+
+**Audit:**
+
+```bash
+stat -c %U:%G /var/lib/rancher/rke2/server/cred/scheduler.kubeconfig
+```
+
+**Expected Result**:
+
+```console
+'root:root' is equal to 'root:root'
+```
+
+**Returned Value**:
+
+```console
+root:root
+```
+
+### 1.1.17 Ensure that the controller-manager.conf file permissions are set to 600 or more restrictive (Automated)
+
+
+**Result:** fail
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example,
+chmod 600 controllermanager
+
+**Audit:**
+
+```bash
+stat -c permissions=%a /var/lib/rancher/rke2/server/cred/controller.kubeconfig
+```
+
+**Expected Result**:
+
+```console
+permissions has permissions 644, expected 600 or more restrictive
+```
+
+**Returned Value**:
+
+```console
+permissions=644
+```
+
+### 1.1.18 Ensure that the controller-manager.conf file ownership is set to root:root (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example,
+chown root:root /var/lib/rancher/rke2/server/cred/controller.kubeconfig
+
+**Audit:**
+
+```bash
+stat -c %U:%G /var/lib/rancher/rke2/server/cred/controller.kubeconfig
+```
+
+**Expected Result**:
+
+```console
+'root:root' is equal to 'root:root'
+```
+
+**Returned Value**:
+
+```console
+root:root
+```
+
+### 1.1.19 Ensure that the Kubernetes PKI directory and file ownership is set to root:root (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example,
+chown -R root:root /var/lib/rancher/rke2/server/tls/
+
+**Audit:**
+
+```bash
+stat -c %U:%G /var/lib/rancher/rke2/server/tls
+```
+
+**Expected Result**:
+
+```console
+'root:root' is equal to 'root:root'
+```
+
+**Returned Value**:
+
+```console
+root:root
+```
+
+### 1.1.20 Ensure that the Kubernetes PKI certificate file permissions are set to 600 or more restrictive (Automated)
+
+
+**Result:** warn
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example,
+chmod -R 644 /var/lib/rancher/rke2/server/tls/*.crt
+
+**Audit:**
+
+```bash
+stat -c permissions=%a /var/lib/rancher/rke2/server/tls/*.crt
+```
+
+**Expected Result**:
+
+```console
+permissions has permissions 644, expected 600 or more restrictive
+```
+
+**Returned Value**:
+
+```console
+permissions=644 permissions=644 permissions=644 permissions=644 permissions=644 permissions=644 permissions=644 permissions=644 permissions=644 permissions=644 permissions=644 permissions=644 permissions=644 permissions=644 permissions=644
+```
+
+### 1.1.21 Ensure that the Kubernetes PKI key file permissions are set to 600 (Manual)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example,
+chmod -R 600 /var/lib/rancher/rke2/server/tls/*.key
+
+**Audit:**
+
+```bash
+stat -c permissions=%a /var/lib/rancher/rke2/server/tls/*.key
+```
+
+**Expected Result**:
+
+```console
+'permissions' is equal to '600'
+```
+
+**Returned Value**:
+
+```console
+permissions=600 permissions=600 permissions=600 permissions=600 permissions=600 permissions=600 permissions=600 permissions=600 permissions=600 permissions=600 permissions=600 permissions=600 permissions=600 permissions=600 permissions=600 permissions=600 permissions=600
+```
+
+## 1.2 API Server
+### 1.2.1 Ensure that the --anonymous-auth argument is set to false (Manual)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml
+on the control plane node and set the below parameter.
+--anonymous-auth=false
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--anonymous-auth' is equal to 'false'
+```
+
+**Returned Value**:
+
+```console
+root 2548 2489 10 Sep11 ? 02:10:01 kube-apiserver --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,PodSecurityPolicy --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 2743 2649 2 Sep11 ? 00:28:36 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 1.2.2 Ensure that the --token-auth-file parameter is not set (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the documentation and configure alternate mechanisms for authentication. Then,
+edit the API server pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml
+on the control plane node and remove the --token-auth-file= parameter.
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--token-auth-file' is not present
+```
+
+**Returned Value**:
+
+```console
+root 2548 2489 10 Sep11 ? 02:10:01 kube-apiserver --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,PodSecurityPolicy --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 2743 2649 2 Sep11 ? 00:28:36 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 1.2.3 Ensure that the --DenyServiceExternalIPs is not set (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml
+on the control plane node and remove the `DenyServiceExternalIPs`
+from enabled admission plugins.
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--enable-admission-plugins' does not have 'DenyServiceExternalIPs' OR '--enable-admission-plugins' is not present
+```
+
+**Returned Value**:
+
+```console
+root 2548 2489 10 Sep11 ? 02:10:01 kube-apiserver --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,PodSecurityPolicy --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 2743 2649 2 Sep11 ? 00:28:36 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 1.2.4 Ensure that the --kubelet-https argument is set to true (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml
+on the control plane node and remove the --kubelet-https parameter.
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--kubelet-https' is present OR '--kubelet-https' is not present
+```
+
+**Returned Value**:
+
+```console
+root 2548 2489 10 Sep11 ? 02:10:01 kube-apiserver --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,PodSecurityPolicy --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 2743 2649 2 Sep11 ? 00:28:36 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 1.2.5 Ensure that the --kubelet-client-certificate and --kubelet-client-key arguments are set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the Kubernetes documentation and set up the TLS connection between the
+apiserver and kubelets. Then, edit API server pod specification file
+/var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml on the control plane node and set the
+kubelet client certificate and key parameters as below.
+--kubelet-client-certificate=
+--kubelet-client-key=
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--kubelet-client-certificate' is present AND '--kubelet-client-key' is present
+```
+
+**Returned Value**:
+
+```console
+root 2548 2489 10 Sep11 ? 02:10:01 kube-apiserver --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,PodSecurityPolicy --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 2743 2649 2 Sep11 ? 00:28:36 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 1.2.6 Ensure that the --kubelet-certificate-authority argument is set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the Kubernetes documentation and setup the TLS connection between
+the apiserver and kubelets. Then, edit the API server pod specification file
+/var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml on the control plane node and set the
+--kubelet-certificate-authority parameter to the path to the cert file for the certificate authority.
+--kubelet-certificate-authority=
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--kubelet-certificate-authority' is present
+```
+
+**Returned Value**:
+
+```console
+root 2548 2489 10 Sep11 ? 02:10:01 kube-apiserver --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,PodSecurityPolicy --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 2743 2649 2 Sep11 ? 00:28:36 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 1.2.7 Ensure that the --authorization-mode argument is not set to AlwaysAllow (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml
+on the control plane node and set the --authorization-mode parameter to values other than AlwaysAllow.
+One such example could be as below.
+--authorization-mode=RBAC
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--authorization-mode' does not have 'AlwaysAllow'
+```
+
+**Returned Value**:
+
+```console
+root 2548 2489 10 Sep11 ? 02:10:01 kube-apiserver --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,PodSecurityPolicy --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 2743 2649 2 Sep11 ? 00:28:36 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 1.2.8 Ensure that the --authorization-mode argument includes Node (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml
+on the control plane node and set the --authorization-mode parameter to a value that includes Node.
+--authorization-mode=Node,RBAC
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--authorization-mode' has 'Node'
+```
+
+**Returned Value**:
+
+```console
+root 2548 2489 10 Sep11 ? 02:10:01 kube-apiserver --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,PodSecurityPolicy --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 2743 2649 2 Sep11 ? 00:28:36 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 1.2.9 Ensure that the --authorization-mode argument includes RBAC (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml
+on the control plane node and set the --authorization-mode parameter to a value that includes RBAC,
+for example `--authorization-mode=Node,RBAC`.
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--authorization-mode' has 'RBAC'
+```
+
+**Returned Value**:
+
+```console
+root 2548 2489 10 Sep11 ? 02:10:01 kube-apiserver --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,PodSecurityPolicy --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 2743 2649 2 Sep11 ? 00:28:36 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 1.2.10 Ensure that the admission control plugin EventRateLimit is set (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Follow the Kubernetes documentation and set the desired limits in a configuration file.
+Then, edit the API server pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml
+and set the below parameters.
+--enable-admission-plugins=...,EventRateLimit,...
+--admission-control-config-file=
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--enable-admission-plugins' has 'EventRateLimit'
+```
+
+**Returned Value**:
+
+```console
+root 2548 2489 10 Sep11 ? 02:10:01 kube-apiserver --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,PodSecurityPolicy --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 2743 2649 2 Sep11 ? 00:28:36 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 1.2.11 Ensure that the admission control plugin AlwaysAdmit is not set (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml
+on the control plane node and either remove the --enable-admission-plugins parameter, or set it to a
+value that does not include AlwaysAdmit.
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--enable-admission-plugins' does not have 'AlwaysAdmit' OR '--enable-admission-plugins' is not present
+```
+
+**Returned Value**:
+
+```console
+root 2548 2489 10 Sep11 ? 02:10:01 kube-apiserver --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,PodSecurityPolicy --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 2743 2649 2 Sep11 ? 00:28:36 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 1.2.12 Ensure that the admission control plugin AlwaysPullImages is set (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Edit the API server pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml
+on the control plane node and set the --enable-admission-plugins parameter to include
+AlwaysPullImages.
+--enable-admission-plugins=...,AlwaysPullImages,...
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--enable-admission-plugins' has 'AlwaysPullImages'
+```
+
+**Returned Value**:
+
+```console
+root 2548 2489 10 Sep11 ? 02:10:01 kube-apiserver --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,PodSecurityPolicy --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 2743 2649 2 Sep11 ? 00:28:36 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 1.2.13 Ensure that the admission control plugin SecurityContextDeny is set if PodSecurityPolicy is not used (Manual)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml
+on the control plane node and set the --enable-admission-plugins parameter to include
+SecurityContextDeny, unless PodSecurityPolicy is already in place.
+--enable-admission-plugins=...,SecurityContextDeny,...
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--enable-admission-plugins' has 'SecurityContextDeny' OR '--enable-admission-plugins' has 'PodSecurityPolicy'
+```
+
+**Returned Value**:
+
+```console
+root 2548 2489 10 Sep11 ? 02:10:01 kube-apiserver --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,PodSecurityPolicy --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 2743 2649 2 Sep11 ? 00:28:36 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 1.2.14 Ensure that the admission control plugin ServiceAccount is set (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the documentation and create ServiceAccount objects as per your environment.
+Then, edit the API server pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml
+on the control plane node and ensure that the --disable-admission-plugins parameter is set to a
+value that does not include ServiceAccount.
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--disable-admission-plugins' is present OR '--disable-admission-plugins' is not present
+```
+
+**Returned Value**:
+
+```console
+root 2548 2489 10 Sep11 ? 02:10:01 kube-apiserver --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,PodSecurityPolicy --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 2743 2649 2 Sep11 ? 00:28:36 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 1.2.15 Ensure that the admission control plugin NamespaceLifecycle is set (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml
+on the control plane node and set the --disable-admission-plugins parameter to
+ensure it does not include NamespaceLifecycle.
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--disable-admission-plugins' is present OR '--disable-admission-plugins' is not present
+```
+
+**Returned Value**:
+
+```console
+root 2548 2489 10 Sep11 ? 02:10:01 kube-apiserver --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,PodSecurityPolicy --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 2743 2649 2 Sep11 ? 00:28:36 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 1.2.16 Ensure that the admission control plugin NodeRestriction is set (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the Kubernetes documentation and configure NodeRestriction plug-in on kubelets.
+Then, edit the API server pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml
+on the control plane node and set the --enable-admission-plugins parameter to a
+value that includes NodeRestriction.
+--enable-admission-plugins=...,NodeRestriction,...
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--enable-admission-plugins' has 'NodeRestriction'
+```
+
+**Returned Value**:
+
+```console
+root 2548 2489 10 Sep11 ? 02:10:01 kube-apiserver --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,PodSecurityPolicy --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 2743 2649 2 Sep11 ? 00:28:36 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 1.2.17 Ensure that the --secure-port argument is not set to 0 (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml
+on the control plane node and either remove the --secure-port parameter or
+set it to a different (non-zero) desired port.
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--secure-port' is greater than 0 OR '--secure-port' is not present
+```
+
+**Returned Value**:
+
+```console
+root 2548 2489 10 Sep11 ? 02:10:01 kube-apiserver --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,PodSecurityPolicy --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 2743 2649 2 Sep11 ? 00:28:36 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 1.2.18 Ensure that the --profiling argument is set to false (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml
+on the control plane node and set the below parameter.
+--profiling=false
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--profiling' is equal to 'false'
+```
+
+**Returned Value**:
+
+```console
+root 2548 2489 10 Sep11 ? 02:10:01 kube-apiserver --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,PodSecurityPolicy --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 2743 2649 2 Sep11 ? 00:28:36 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 1.2.19 Ensure that the --audit-log-path argument is set (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml
+on the control plane node and set the --audit-log-path parameter to a suitable path and
+file where you would like audit logs to be written, for example,
+--audit-log-path=/var/log/apiserver/audit.log
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--audit-log-path' is present
+```
+
+**Returned Value**:
+
+```console
+root 2548 2489 10 Sep11 ? 02:10:01 kube-apiserver --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,PodSecurityPolicy --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 2743 2649 2 Sep11 ? 00:28:36 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 1.2.20 Ensure that the --audit-log-maxage argument is set to 30 or as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml
+on the control plane node and set the --audit-log-maxage parameter to 30
+or as an appropriate number of days, for example,
+--audit-log-maxage=30
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--audit-log-maxage' is greater or equal to 30
+```
+
+**Returned Value**:
+
+```console
+root 2548 2489 10 Sep11 ? 02:10:01 kube-apiserver --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,PodSecurityPolicy --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 2743 2649 2 Sep11 ? 00:28:36 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 1.2.21 Ensure that the --audit-log-maxbackup argument is set to 10 or as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml
+on the control plane node and set the --audit-log-maxbackup parameter to 10 or to an appropriate
+value. For example,
+--audit-log-maxbackup=10
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--audit-log-maxbackup' is greater or equal to 10
+```
+
+**Returned Value**:
+
+```console
+root 2548 2489 10 Sep11 ? 02:10:01 kube-apiserver --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,PodSecurityPolicy --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 2743 2649 2 Sep11 ? 00:28:36 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 1.2.22 Ensure that the --audit-log-maxsize argument is set to 100 or as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml
+on the control plane node and set the --audit-log-maxsize parameter to an appropriate size in MB.
+For example, to set it as 100 MB, --audit-log-maxsize=100
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--audit-log-maxsize' is greater or equal to 100
+```
+
+**Returned Value**:
+
+```console
+root 2548 2489 10 Sep11 ? 02:10:01 kube-apiserver --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,PodSecurityPolicy --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 2743 2649 2 Sep11 ? 00:28:36 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 1.2.24 Ensure that the --service-account-lookup argument is set to true (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml
+on the control plane node and set the below parameter.
+--service-account-lookup=true
+Alternatively, you can delete the --service-account-lookup parameter from this file so
+that the default takes effect.
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--service-account-lookup' is not present OR '--service-account-lookup' is present
+```
+
+**Returned Value**:
+
+```console
+root 2548 2489 10 Sep11 ? 02:10:01 kube-apiserver --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,PodSecurityPolicy --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 2743 2649 2 Sep11 ? 00:28:36 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 1.2.25 Ensure that the --request-timeout argument is set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml
+on the control plane node and set the --service-account-key-file parameter
+to the public key file for service accounts. For example,
+--service-account-key-file=
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--service-account-key-file' is present
+```
+
+**Returned Value**:
+
+```console
+root 2548 2489 10 Sep11 ? 02:10:01 kube-apiserver --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,PodSecurityPolicy --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 2743 2649 2 Sep11 ? 00:28:36 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true root 1017917 2489 83 16:16 ? 00:00:00 kubectl get --server=https://localhost:6443/ --client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --raw=/readyz root 1017945 2489 75 16:16 ? 00:00:00 kubectl get --server=https://localhost:6443/ --client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --raw=/livez
+```
+
+### 1.2.26 Ensure that the --etcd-certfile and --etcd-keyfile arguments are set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the Kubernetes documentation and set up the TLS connection between the apiserver and etcd.
+Then, edit the API server pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml
+on the control plane node and set the etcd certificate and key file parameters.
+--etcd-certfile=
+--etcd-keyfile=
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--etcd-certfile' is present AND '--etcd-keyfile' is present
+```
+
+**Returned Value**:
+
+```console
+root 2548 2489 10 Sep11 ? 02:10:01 kube-apiserver --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,PodSecurityPolicy --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 2743 2649 2 Sep11 ? 00:28:36 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 1.2.27 Ensure that the --tls-cert-file and --tls-private-key-file arguments are set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the Kubernetes documentation and set up the TLS connection on the apiserver.
+Then, edit the API server pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml
+on the control plane node and set the TLS certificate and private key file parameters.
+--tls-cert-file=
+--tls-private-key-file=
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--tls-cert-file' is present AND '--tls-private-key-file' is present
+```
+
+**Returned Value**:
+
+```console
+root 2548 2489 10 Sep11 ? 02:10:01 kube-apiserver --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,PodSecurityPolicy --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 2743 2649 2 Sep11 ? 00:28:36 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 1.2.28 Ensure that the --client-ca-file argument is set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the Kubernetes documentation and set up the TLS connection on the apiserver.
+Then, edit the API server pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml
+on the control plane node and set the client certificate authority file.
+--client-ca-file=
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--client-ca-file' is present
+```
+
+**Returned Value**:
+
+```console
+root 2548 2489 10 Sep11 ? 02:10:01 kube-apiserver --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,PodSecurityPolicy --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 2743 2649 2 Sep11 ? 00:28:36 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 1.2.29 Ensure that the --etcd-cafile argument is set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the Kubernetes documentation and set up the TLS connection between the apiserver and etcd.
+Then, edit the API server pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml
+on the control plane node and set the etcd certificate authority file parameter.
+--etcd-cafile=
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--etcd-cafile' is present
+```
+
+**Returned Value**:
+
+```console
+root 2548 2489 10 Sep11 ? 02:10:01 kube-apiserver --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,PodSecurityPolicy --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 2743 2649 2 Sep11 ? 00:28:36 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 1.2.30 Ensure that the --encryption-provider-config argument is set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the Kubernetes documentation and configure a EncryptionConfig file.
+Then, edit the API server pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml
+on the control plane node and set the --encryption-provider-config parameter to the path of that file.
+For example, --encryption-provider-config=
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--encryption-provider-config' is present
+```
+
+**Returned Value**:
+
+```console
+root 2548 2489 10 Sep11 ? 02:10:01 kube-apiserver --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction,PodSecurityPolicy --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 2743 2649 2 Sep11 ? 00:28:36 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 1.2.32 Ensure that the API Server only makes use of Strong Cryptographic Ciphers (Manual)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the below parameter.
+--tls-cipher-suites=TLS_AES_128_GCM_SHA256,TLS_AES_256_GCM_SHA384,TLS_CHACHA20_POLY1305_SHA256,
+TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
+TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
+TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256,
+TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
+TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,
+TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256,TLS_RSA_WITH_3DES_EDE_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA,
+TLS_RSA_WITH_AES_128_GCM_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_AES_256_GCM_SHA384
+
+### 1.2.33 Ensure that encryption providers are appropriately configured (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the Kubernetes documentation and configure a EncryptionConfig file.
+In this file, choose aescbc, kms or secretbox as the encryption provider.
+
+**Audit:**
+
+```bash
+/bin/sh -c 'if grep aescbc /var/lib/rancher/rke2/server/cred/encryption-config.json; then echo 0; fi'
+```
+
+**Expected Result**:
+
+```console
+'0' is present
+```
+
+**Returned Value**:
+
+```console
+{"kind":"EncryptionConfiguration","apiVersion":"apiserver.config.k8s.io/v1","resources":[{"resources":["secrets"],"providers":[{"aescbc":{"keys":[{"name":"aescbckey","secret":"akmMjUAq94YvsUftJpiA3b+9SClu0ESPBeckAI7KZBY="}]}},{"identity":{}}]}]} 0
+```
+
+## 1.3 Controller Manager
+### 1.3.1 Ensure that the --terminated-pod-gc-threshold argument is set as appropriate (Manual)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the Controller Manager pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-controller-manager.yaml
+on the control plane node and set the --terminated-pod-gc-threshold to an appropriate threshold,
+for example, --terminated-pod-gc-threshold=10
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-controller-manager | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--terminated-pod-gc-threshold' is present
+```
+
+**Returned Value**:
+
+```console
+root 2743 2649 2 Sep11 ? 00:28:36 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 1.3.2 Ensure that the --profiling argument is set to false (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the Controller Manager pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-controller-manager.yaml
+on the control plane node and set the below parameter.
+--profiling=false
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-controller-manager | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--profiling' is equal to 'false'
+```
+
+**Returned Value**:
+
+```console
+root 2743 2649 2 Sep11 ? 00:28:36 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 1.3.3 Ensure that the --use-service-account-credentials argument is set to true (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the Controller Manager pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-controller-manager.yaml
+on the control plane node to set the below parameter.
+--use-service-account-credentials=true
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-controller-manager | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--use-service-account-credentials' is not equal to 'false'
+```
+
+**Returned Value**:
+
+```console
+root 2743 2649 2 Sep11 ? 00:28:36 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 1.3.4 Ensure that the --service-account-private-key-file argument is set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the Controller Manager pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-controller-manager.yaml
+on the control plane node and set the --service-account-private-key-file parameter
+to the private key file for service accounts.
+--service-account-private-key-file=
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-controller-manager | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--service-account-private-key-file' is present
+```
+
+**Returned Value**:
+
+```console
+root 2743 2649 2 Sep11 ? 00:28:36 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 1.3.5 Ensure that the --root-ca-file argument is set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the Controller Manager pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-controller-manager.yaml
+on the control plane node and set the --root-ca-file parameter to the certificate bundle file`.
+--root-ca-file=
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-controller-manager | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--root-ca-file' is present
+```
+
+**Returned Value**:
+
+```console
+root 2743 2649 2 Sep11 ? 00:28:36 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 1.3.6 Ensure that the RotateKubeletServerCertificate argument is set to true (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Edit the Controller Manager pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-controller-manager.yaml
+on the control plane node and set the --feature-gates parameter to include RotateKubeletServerCertificate=true.
+--feature-gates=RotateKubeletServerCertificate=true
+
+### 1.3.7 Ensure that the --bind-address argument is set to 127.0.0.1 (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the Controller Manager pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-controller-manager.yaml
+on the control plane node and ensure the correct value for the --bind-address parameter
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-controller-manager | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--bind-address' is equal to '127.0.0.1' OR '--bind-address' is not present
+```
+
+**Returned Value**:
+
+```console
+root 2743 2649 2 Sep11 ? 00:28:36 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+## 1.4 Scheduler
+### 1.4.1 Ensure that the --profiling argument is set to false (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the Scheduler pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-scheduler.yaml file
+on the control plane node and set the below parameter.
+--profiling=false
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-scheduler | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--profiling' is equal to 'false'
+```
+
+**Returned Value**:
+
+```console
+root 2707 2593 0 Sep11 ? 00:06:20 kube-scheduler --permit-port-sharing=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/scheduler.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/scheduler.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-scheduler --kubeconfig=/var/lib/rancher/rke2/server/cred/scheduler.kubeconfig --profiling=false --secure-port=10259
+```
+
+### 1.4.2 Ensure that the --bind-address argument is set to 127.0.0.1 (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the Scheduler pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-scheduler.yaml
+on the control plane node and ensure the correct value for the --bind-address parameter
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-scheduler | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--bind-address' is equal to '127.0.0.1' OR '--bind-address' is not present
+```
+
+**Returned Value**:
+
+```console
+root 2707 2593 0 Sep11 ? 00:06:20 kube-scheduler --permit-port-sharing=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/scheduler.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/scheduler.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-scheduler --kubeconfig=/var/lib/rancher/rke2/server/cred/scheduler.kubeconfig --profiling=false --secure-port=10259
+```
+
+## 2 Etcd Node Configuration
+### 2.1 Ensure that the --cert-file and --key-file arguments are set as appropriate (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Follow the etcd service documentation and configure TLS encryption.
+Then, edit the etcd pod specification file /etc/kubernetes/manifests/etcd.yaml
+on the master node and set the below parameters.
+--cert-file=
+--key-file=
+
+### 2.2 Ensure that the --client-cert-auth argument is set to true (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Edit the etcd pod specification file /var/lib/rancher/rke2/agent/pod-manifests/etcd.yaml on the master
+node and set the below parameter.
+--client-cert-auth="true"
+
+### 2.3 Ensure that the --auto-tls argument is not set to true (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the etcd pod specification file /var/lib/rancher/rke2/agent/pod-manifests/etcd.yaml on the master
+node and either remove the --auto-tls parameter or set it to false.
+ --auto-tls=false
+
+**Audit:**
+
+```bash
+/bin/ps -ef | /bin/grep etcd | /bin/grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'ETCD_AUTO_TLS' is not present OR 'ETCD_AUTO_TLS' is present
+```
+
+**Returned Value**:
+
+```console
+PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin HOSTNAME=ip-172-31-10-113 ETCD_UNSUPPORTED_ARCH= NO_PROXY=.svc,.cluster.local,10.42.0.0/16,10.43.0.0/16 POD_HASH=560b915d9afb672c20c2c1e8664bdf8f FILE_HASH=166aebdce42ff62fcdd2cefc9e7ed8f7c5b562d219ca6afec8f73adc654f65e7 HOME=/
+```
+
+### 2.4 Ensure that the --peer-cert-file and --peer-key-file arguments are set as appropriate (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Follow the etcd service documentation and configure peer TLS encryption as appropriate
+for your etcd cluster.
+Then, edit the etcd pod specification file /var/lib/rancher/rke2/agent/pod-manifests/etcd.yaml on the
+master node and set the below parameters.
+--peer-client-file=
+--peer-key-file=
+
+### 2.5 Ensure that the --peer-client-cert-auth argument is set to true (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Edit the etcd pod specification file /var/lib/rancher/rke2/agent/pod-manifests/etcd.yaml on the master
+node and set the below parameter.
+--peer-client-cert-auth=true
+
+### 2.6 Ensure that the --peer-auto-tls argument is not set to true (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the etcd pod specification file /var/lib/rancher/rke2/agent/pod-manifests/etcd.yaml on the master
+node and either remove the --peer-auto-tls parameter or set it to false.
+--peer-auto-tls=false
+
+**Audit:**
+
+```bash
+/bin/ps -ef | /bin/grep etcd | /bin/grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'ETCD_PEER_AUTO_TLS' is not present OR 'ETCD_PEER_AUTO_TLS' is present
+```
+
+**Returned Value**:
+
+```console
+PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin HOSTNAME=ip-172-31-10-113 ETCD_UNSUPPORTED_ARCH= NO_PROXY=.svc,.cluster.local,10.42.0.0/16,10.43.0.0/16 POD_HASH=560b915d9afb672c20c2c1e8664bdf8f FILE_HASH=166aebdce42ff62fcdd2cefc9e7ed8f7c5b562d219ca6afec8f73adc654f65e7 HOME=/
+```
+
+### 2.7 Ensure that a unique Certificate Authority is used for etcd (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+[Manual test]
+Follow the etcd documentation and create a dedicated certificate authority setup for the
+etcd service.
+Then, edit the etcd pod specification file /var/lib/rancher/rke2/agent/pod-manifests/etcd.yaml on the
+master node and set the below parameter.
+--trusted-ca-file=
+
+**Audit:**
+
+```bash
+/bin/ps -ef | /bin/grep etcd | /bin/grep -v grep
+```
+
+**Audit Config:**
+
+```bash
+cat /var/lib/rancher/rke2/server/db/etcd/config
+```
+
+**Expected Result**:
+
+```console
+'ETCD_TRUSTED_CA_FILE' is present OR '{.peer-transport-security.trusted-ca-file}' is equal to '/var/lib/rancher/rke2/server/tls/etcd/peer-ca.crt'
+```
+
+**Returned Value**:
+
+```console
+PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin HOSTNAME=ip-172-31-10-113 ETCD_UNSUPPORTED_ARCH= NO_PROXY=.svc,.cluster.local,10.42.0.0/16,10.43.0.0/16 POD_HASH=560b915d9afb672c20c2c1e8664bdf8f FILE_HASH=166aebdce42ff62fcdd2cefc9e7ed8f7c5b562d219ca6afec8f73adc654f65e7 HOME=/
+```
+
+## 3.1 Authentication and Authorization
+### 3.1.1 Client certificate authentication should not be used for users (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Alternative mechanisms provided by Kubernetes such as the use of OIDC should be
+implemented in place of client certificates.
+
+## 3.2 Logging
+### 3.2.1 Ensure that a minimal audit policy is created (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Create an audit policy file for your cluster.
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep | grep -o audit-policy-file
+```
+
+**Expected Result**:
+
+```console
+'audit-policy-file' is equal to 'audit-policy-file'
+```
+
+**Returned Value**:
+
+```console
+audit-policy-file
+```
+
+### 3.2.2 Ensure that the audit policy covers key security concerns (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Review the audit policy provided for the cluster and ensure that it covers
+at least the following areas,
+- Access to Secrets managed by the cluster. Care should be taken to only
+ log Metadata for requests to Secrets, ConfigMaps, and TokenReviews, in
+ order to avoid risk of logging sensitive data.
+- Modification of Pod and Deployment objects.
+- Use of `pods/exec`, `pods/portforward`, `pods/proxy` and `services/proxy`.
+For most requests, minimally logging at the Metadata level is recommended
+(the most basic level of logging).
+
+## 4.1 Worker Node Configuration Files
+### 4.1.1 Ensure that the kubelet service file permissions are set to 600 or more restrictive (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the each worker node.
+For example, chmod 600 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
+
+### 4.1.2 Ensure that the kubelet service file ownership is set to root:root (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the each worker node.
+For example,
+chown root:root /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
+
+### 4.1.3 If proxy kubeconfig file exists ensure permissions are set to 600 or more restrictive (Automated)
+
+
+**Result:** fail
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the each worker node.
+For example,
+chmod 600 /var/lib/rancher/rke2/agent/kubeproxy.kubeconfig
+
+**Audit:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/rancher/rke2/agent/kubeproxy.kubeconfig; then stat -c permissions=%a /var/lib/rancher/rke2/agent/kubeproxy.kubeconfig; fi'
+```
+
+**Expected Result**:
+
+```console
+permissions has permissions 644, expected 600 or more restrictive
+```
+
+**Returned Value**:
+
+```console
+permissions=644
+```
+
+### 4.1.4 If proxy kubeconfig file exists ensure ownership is set to root:root (Manual)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the each worker node.
+For example, chown root:root /var/lib/rancher/rke2/agent/kubeproxy.kubeconfig
+
+**Audit:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/rancher/rke2/agent/kubeproxy.kubeconfig; then stat -c %U:%G /var/lib/rancher/rke2/agent/kubeproxy.kubeconfig; fi'
+```
+
+**Expected Result**:
+
+```console
+'root:root' is present
+```
+
+**Returned Value**:
+
+```console
+root:root
+```
+
+### 4.1.5 Ensure that the --kubeconfig kubelet.conf file permissions are set to 600 or more restrictive (Automated)
+
+
+**Result:** fail
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the each worker node.
+For example,
+chmod 600 /var/lib/rancher/rke2/agent/kubelet.kubeconfig
+
+**Audit:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/rancher/rke2/agent/kubelet.kubeconfig; then stat -c permissions=%a /var/lib/rancher/rke2/agent/kubelet.kubeconfig; fi'
+```
+
+**Expected Result**:
+
+```console
+'600' is present
+```
+
+**Returned Value**:
+
+```console
+permissions=644
+```
+
+### 4.1.6 Ensure that the --kubeconfig kubelet.conf file ownership is set to root:root (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the each worker node.
+For example,
+chown root:root /var/lib/rancher/rke2/agent/kubelet.kubeconfig
+
+**Audit:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/rancher/rke2/agent/kubelet.kubeconfig; then stat -c %U:%G /var/lib/rancher/rke2/agent/kubelet.kubeconfig; fi'
+```
+
+**Expected Result**:
+
+```console
+'root:root' is equal to 'root:root'
+```
+
+**Returned Value**:
+
+```console
+root:root
+```
+
+### 4.1.7 Ensure that the certificate authorities file permissions are set to 600 or more restrictive (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the following command to modify the file permissions of the
+--client-ca-file chmod 600
+
+**Audit Script:** `check_cafile_permissions.sh`
+
+```bash
+#!/usr/bin/env bash
+
+CAFILE=$(ps -ef | grep kubelet | grep -v apiserver | grep -- --client-ca-file= | awk -F '--client-ca-file=' '{print $2}' | awk '{print $1}')
+CAFILE=/node$CAFILE
+if test -z $CAFILE; then CAFILE=$kubeletcafile; fi
+if test -e $CAFILE; then stat -c permissions=%a $CAFILE; fi
+
+```
+
+**Audit Execution:**
+
+```bash
+./check_cafile_permissions.sh
+```
+
+**Expected Result**:
+
+```console
+permissions has permissions 600, expected 600 or more restrictive
+```
+
+**Returned Value**:
+
+```console
+permissions=600
+```
+
+### 4.1.8 Ensure that the client certificate authorities file ownership is set to root:root (Manual)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the following command to modify the ownership of the --client-ca-file.
+chown root:root
+
+**Audit Script:** `check_cafile_ownership.sh`
+
+```bash
+#!/usr/bin/env bash
+
+CAFILE=$(ps -ef | grep kubelet | grep -v apiserver | grep -- --client-ca-file= | awk -F '--client-ca-file=' '{print $2}' | awk '{print $1}')
+CAFILE=/node$CAFILE
+if test -z $CAFILE; then CAFILE=$kubeletcafile; fi
+if test -e $CAFILE; then stat -c %U:%G $CAFILE; fi
+
+```
+
+**Audit Execution:**
+
+```bash
+./check_cafile_ownership.sh
+```
+
+**Expected Result**:
+
+```console
+'root:root' is equal to 'root:root'
+```
+
+**Returned Value**:
+
+```console
+root:root
+```
+
+### 4.1.9 If the kubelet config.yaml configuration file is being used validate permissions set to 600 or more restrictive (Automated)
+
+
+**Result:** fail
+
+**Remediation:**
+Run the following command (using the config file location identified in the Audit step)
+chmod 600 /var/lib/rancher/rke2/agent/kubelet.kubeconfig
+
+**Audit:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/rancher/rke2/agent/kubelet.kubeconfig; then stat -c permissions=%a /var/lib/rancher/rke2/agent/kubelet.kubeconfig; fi'
+```
+
+**Expected Result**:
+
+```console
+permissions has permissions 644, expected 600 or more restrictive
+```
+
+**Returned Value**:
+
+```console
+permissions=644
+```
+
+### 4.1.10 If the kubelet config.yaml configuration file is being used validate file ownership is set to root:root (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the following command (using the config file location identified in the Audit step)
+chown root:root /var/lib/rancher/rke2/agent/kubelet.kubeconfig
+
+**Audit:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/rancher/rke2/agent/kubelet.kubeconfig; then stat -c %U:%G /var/lib/rancher/rke2/agent/kubelet.kubeconfig; fi'
+```
+
+**Expected Result**:
+
+```console
+'root:root' is present
+```
+
+**Returned Value**:
+
+```console
+root:root
+```
+
+## 4.2 Kubelet
+### 4.2.1 Ensure that the --anonymous-auth argument is set to false (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+If using a Kubelet config file, edit the file to set `authentication: anonymous: enabled` to
+`false`.
+If using executable arguments, edit the kubelet service file
+/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
+set the below parameter in KUBELET_SYSTEM_PODS_ARGS variable.
+`--anonymous-auth=false`
+Based on your system, restart the kubelet service. For example,
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+**Audit:**
+
+```bash
+/bin/ps -fC kubelet
+```
+
+**Audit Config:**
+
+```bash
+/bin/cat /var/lib/rancher/rke2/agent/kubelet.kubeconfig
+```
+
+**Expected Result**:
+
+```console
+'--anonymous-auth' is equal to 'false'
+```
+
+**Returned Value**:
+
+```console
+UID PID PPID C STIME TTY TIME CMD root 2291 2246 4 Sep11 ? 00:50:01 kubelet --volume-plugin-dir=/var/lib/kubelet/volumeplugins --file-check-frequency=5s --sync-frequency=30s --address=0.0.0.0 --alsologtostderr=false --anonymous-auth=false --authentication-token-webhook=true --authorization-mode=Webhook --cgroup-driver=systemd --client-ca-file=/var/lib/rancher/rke2/agent/client-ca.crt --cloud-provider=external --cluster-dns=10.43.0.10 --cluster-domain=cluster.local --container-runtime-endpoint=unix:///run/k3s/containerd/containerd.sock --containerd=/run/k3s/containerd/containerd.sock --eviction-hard=imagefs.available<5%,nodefs.available<5% --eviction-minimum-reclaim=imagefs.available=10%,nodefs.available=10% --fail-swap-on=false --healthz-bind-address=127.0.0.1 --hostname-override=ip-172-31-10-113 --kubeconfig=/var/lib/rancher/rke2/agent/kubelet.kubeconfig --log-file=/var/lib/rancher/rke2/agent/logs/kubelet.log --log-file-max-size=50 --logtostderr=false --node-labels=cattle.io/os=linux,rke.cattle.io/machine=6685035f-32be-4d1b-a06d-7ea5f42467f5 --pod-infra-container-image=index.docker.io/rancher/pause:3.6 --pod-manifest-path=/var/lib/rancher/rke2/agent/pod-manifests --protect-kernel-defaults=true --read-only-port=0 --resolv-conf=/run/systemd/resolve/resolv.conf --serialize-image-pulls=false --stderrthreshold=FATAL --tls-cert-file=/var/lib/rancher/rke2/agent/serving-kubelet.crt --tls-private-key-file=/var/lib/rancher/rke2/agent/serving-kubelet.key
+```
+
+### 4.2.2 Ensure that the --authorization-mode argument is not set to AlwaysAllow (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+If using a Kubelet config file, edit the file to set `authorization.mode` to Webhook. If
+using executable arguments, edit the kubelet service file
+/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
+set the below parameter in KUBELET_AUTHZ_ARGS variable.
+--authorization-mode=Webhook
+Based on your system, restart the kubelet service. For example,
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+**Audit:**
+
+```bash
+/bin/ps -fC kubelet
+```
+
+**Audit Config:**
+
+```bash
+/bin/cat /var/lib/rancher/rke2/agent/kubelet.kubeconfig
+```
+
+**Expected Result**:
+
+```console
+'--authorization-mode' does not have 'AlwaysAllow'
+```
+
+**Returned Value**:
+
+```console
+UID PID PPID C STIME TTY TIME CMD root 2291 2246 4 Sep11 ? 00:50:01 kubelet --volume-plugin-dir=/var/lib/kubelet/volumeplugins --file-check-frequency=5s --sync-frequency=30s --address=0.0.0.0 --alsologtostderr=false --anonymous-auth=false --authentication-token-webhook=true --authorization-mode=Webhook --cgroup-driver=systemd --client-ca-file=/var/lib/rancher/rke2/agent/client-ca.crt --cloud-provider=external --cluster-dns=10.43.0.10 --cluster-domain=cluster.local --container-runtime-endpoint=unix:///run/k3s/containerd/containerd.sock --containerd=/run/k3s/containerd/containerd.sock --eviction-hard=imagefs.available<5%,nodefs.available<5% --eviction-minimum-reclaim=imagefs.available=10%,nodefs.available=10% --fail-swap-on=false --healthz-bind-address=127.0.0.1 --hostname-override=ip-172-31-10-113 --kubeconfig=/var/lib/rancher/rke2/agent/kubelet.kubeconfig --log-file=/var/lib/rancher/rke2/agent/logs/kubelet.log --log-file-max-size=50 --logtostderr=false --node-labels=cattle.io/os=linux,rke.cattle.io/machine=6685035f-32be-4d1b-a06d-7ea5f42467f5 --pod-infra-container-image=index.docker.io/rancher/pause:3.6 --pod-manifest-path=/var/lib/rancher/rke2/agent/pod-manifests --protect-kernel-defaults=true --read-only-port=0 --resolv-conf=/run/systemd/resolve/resolv.conf --serialize-image-pulls=false --stderrthreshold=FATAL --tls-cert-file=/var/lib/rancher/rke2/agent/serving-kubelet.crt --tls-private-key-file=/var/lib/rancher/rke2/agent/serving-kubelet.key
+```
+
+### 4.2.3 Ensure that the --client-ca-file argument is set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+If using a Kubelet config file, edit the file to set `authentication.x509.clientCAFile` to
+the location of the client CA file.
+If using command line arguments, edit the kubelet service file
+/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
+set the below parameter in KUBELET_AUTHZ_ARGS variable.
+--client-ca-file=
+Based on your system, restart the kubelet service. For example,
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+**Audit:**
+
+```bash
+/bin/ps -fC kubelet
+```
+
+**Audit Config:**
+
+```bash
+/bin/cat /var/lib/rancher/rke2/agent/kubelet.kubeconfig
+```
+
+**Expected Result**:
+
+```console
+'--client-ca-file' is present
+```
+
+**Returned Value**:
+
+```console
+UID PID PPID C STIME TTY TIME CMD root 2291 2246 4 Sep11 ? 00:50:01 kubelet --volume-plugin-dir=/var/lib/kubelet/volumeplugins --file-check-frequency=5s --sync-frequency=30s --address=0.0.0.0 --alsologtostderr=false --anonymous-auth=false --authentication-token-webhook=true --authorization-mode=Webhook --cgroup-driver=systemd --client-ca-file=/var/lib/rancher/rke2/agent/client-ca.crt --cloud-provider=external --cluster-dns=10.43.0.10 --cluster-domain=cluster.local --container-runtime-endpoint=unix:///run/k3s/containerd/containerd.sock --containerd=/run/k3s/containerd/containerd.sock --eviction-hard=imagefs.available<5%,nodefs.available<5% --eviction-minimum-reclaim=imagefs.available=10%,nodefs.available=10% --fail-swap-on=false --healthz-bind-address=127.0.0.1 --hostname-override=ip-172-31-10-113 --kubeconfig=/var/lib/rancher/rke2/agent/kubelet.kubeconfig --log-file=/var/lib/rancher/rke2/agent/logs/kubelet.log --log-file-max-size=50 --logtostderr=false --node-labels=cattle.io/os=linux,rke.cattle.io/machine=6685035f-32be-4d1b-a06d-7ea5f42467f5 --pod-infra-container-image=index.docker.io/rancher/pause:3.6 --pod-manifest-path=/var/lib/rancher/rke2/agent/pod-manifests --protect-kernel-defaults=true --read-only-port=0 --resolv-conf=/run/systemd/resolve/resolv.conf --serialize-image-pulls=false --stderrthreshold=FATAL --tls-cert-file=/var/lib/rancher/rke2/agent/serving-kubelet.crt --tls-private-key-file=/var/lib/rancher/rke2/agent/serving-kubelet.key
+```
+
+### 4.2.4 Verify that the --read-only-port argument is set to 0 (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+If using a Kubelet config file, edit the file to set `readOnlyPort` to 0.
+If using command line arguments, edit the kubelet service file
+/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
+set the below parameter in KUBELET_SYSTEM_PODS_ARGS variable.
+--read-only-port=0
+Based on your system, restart the kubelet service. For example,
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+**Audit:**
+
+```bash
+/bin/ps -fC kubelet
+```
+
+**Audit Config:**
+
+```bash
+/bin/cat /var/lib/rancher/rke2/agent/kubelet.kubeconfig
+```
+
+**Expected Result**:
+
+```console
+'--read-only-port' is equal to '0' OR '--read-only-port' is present
+```
+
+**Returned Value**:
+
+```console
+UID PID PPID C STIME TTY TIME CMD root 2291 2246 4 Sep11 ? 00:50:01 kubelet --volume-plugin-dir=/var/lib/kubelet/volumeplugins --file-check-frequency=5s --sync-frequency=30s --address=0.0.0.0 --alsologtostderr=false --anonymous-auth=false --authentication-token-webhook=true --authorization-mode=Webhook --cgroup-driver=systemd --client-ca-file=/var/lib/rancher/rke2/agent/client-ca.crt --cloud-provider=external --cluster-dns=10.43.0.10 --cluster-domain=cluster.local --container-runtime-endpoint=unix:///run/k3s/containerd/containerd.sock --containerd=/run/k3s/containerd/containerd.sock --eviction-hard=imagefs.available<5%,nodefs.available<5% --eviction-minimum-reclaim=imagefs.available=10%,nodefs.available=10% --fail-swap-on=false --healthz-bind-address=127.0.0.1 --hostname-override=ip-172-31-10-113 --kubeconfig=/var/lib/rancher/rke2/agent/kubelet.kubeconfig --log-file=/var/lib/rancher/rke2/agent/logs/kubelet.log --log-file-max-size=50 --logtostderr=false --node-labels=cattle.io/os=linux,rke.cattle.io/machine=6685035f-32be-4d1b-a06d-7ea5f42467f5 --pod-infra-container-image=index.docker.io/rancher/pause:3.6 --pod-manifest-path=/var/lib/rancher/rke2/agent/pod-manifests --protect-kernel-defaults=true --read-only-port=0 --resolv-conf=/run/systemd/resolve/resolv.conf --serialize-image-pulls=false --stderrthreshold=FATAL --tls-cert-file=/var/lib/rancher/rke2/agent/serving-kubelet.crt --tls-private-key-file=/var/lib/rancher/rke2/agent/serving-kubelet.key
+```
+
+### 4.2.5 Ensure that the --streaming-connection-idle-timeout argument is not set to 0 (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+If using a Kubelet config file, edit the file to set `streamingConnectionIdleTimeout` to a
+value other than 0.
+If using command line arguments, edit the kubelet service file
+/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
+set the below parameter in KUBELET_SYSTEM_PODS_ARGS variable.
+--streaming-connection-idle-timeout=5m
+Based on your system, restart the kubelet service. For example,
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+**Audit:**
+
+```bash
+/bin/ps -fC kubelet
+```
+
+**Audit Config:**
+
+```bash
+/bin/cat /var/lib/rancher/rke2/agent/kubelet.kubeconfig
+```
+
+**Expected Result**:
+
+```console
+'{.streamingConnectionIdleTimeout}' is present OR '{.streamingConnectionIdleTimeout}' is not present
+```
+
+**Returned Value**:
+
+```console
+apiVersion: v1 clusters: - cluster: server: https://127.0.0.1:6443 certificate-authority: /var/lib/rancher/rke2/agent/server-ca.crt name: local contexts: - context: cluster: local namespace: default user: user name: Default current-context: Default kind: Config preferences: {} users: - name: user user: client-certificate: /var/lib/rancher/rke2/agent/client-kubelet.crt client-key: /var/lib/rancher/rke2/agent/client-kubelet.key
+```
+
+### 4.2.6 Ensure that the --protect-kernel-defaults argument is set to true (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+If using a Kubelet config file, edit the file to set `protectKernelDefaults` to `true`.
+If using command line arguments, edit the kubelet service file
+/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
+set the below parameter in KUBELET_SYSTEM_PODS_ARGS variable.
+--protect-kernel-defaults=true
+Based on your system, restart the kubelet service. For example:
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+**Audit:**
+
+```bash
+/bin/ps -fC kubelet
+```
+
+**Audit Config:**
+
+```bash
+/bin/cat /var/lib/rancher/rke2/agent/kubelet.kubeconfig
+```
+
+**Expected Result**:
+
+```console
+'--protect-kernel-defaults' is equal to 'true'
+```
+
+**Returned Value**:
+
+```console
+UID PID PPID C STIME TTY TIME CMD root 2291 2246 4 Sep11 ? 00:50:01 kubelet --volume-plugin-dir=/var/lib/kubelet/volumeplugins --file-check-frequency=5s --sync-frequency=30s --address=0.0.0.0 --alsologtostderr=false --anonymous-auth=false --authentication-token-webhook=true --authorization-mode=Webhook --cgroup-driver=systemd --client-ca-file=/var/lib/rancher/rke2/agent/client-ca.crt --cloud-provider=external --cluster-dns=10.43.0.10 --cluster-domain=cluster.local --container-runtime-endpoint=unix:///run/k3s/containerd/containerd.sock --containerd=/run/k3s/containerd/containerd.sock --eviction-hard=imagefs.available<5%,nodefs.available<5% --eviction-minimum-reclaim=imagefs.available=10%,nodefs.available=10% --fail-swap-on=false --healthz-bind-address=127.0.0.1 --hostname-override=ip-172-31-10-113 --kubeconfig=/var/lib/rancher/rke2/agent/kubelet.kubeconfig --log-file=/var/lib/rancher/rke2/agent/logs/kubelet.log --log-file-max-size=50 --logtostderr=false --node-labels=cattle.io/os=linux,rke.cattle.io/machine=6685035f-32be-4d1b-a06d-7ea5f42467f5 --pod-infra-container-image=index.docker.io/rancher/pause:3.6 --pod-manifest-path=/var/lib/rancher/rke2/agent/pod-manifests --protect-kernel-defaults=true --read-only-port=0 --resolv-conf=/run/systemd/resolve/resolv.conf --serialize-image-pulls=false --stderrthreshold=FATAL --tls-cert-file=/var/lib/rancher/rke2/agent/serving-kubelet.crt --tls-private-key-file=/var/lib/rancher/rke2/agent/serving-kubelet.key
+```
+
+### 4.2.7 Ensure that the --make-iptables-util-chains argument is set to true (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+If using a Kubelet config file, edit the file to set `makeIPTablesUtilChains` to `true`.
+If using command line arguments, edit the kubelet service file
+/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
+remove the --make-iptables-util-chains argument from the
+KUBELET_SYSTEM_PODS_ARGS variable.
+Based on your system, restart the kubelet service. For example:
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+**Audit:**
+
+```bash
+/bin/ps -fC kubelet
+```
+
+**Audit Config:**
+
+```bash
+/bin/cat /var/lib/rancher/rke2/agent/kubelet.kubeconfig
+```
+
+**Expected Result**:
+
+```console
+'{.makeIPTablesUtilChains}' is present OR '{.makeIPTablesUtilChains}' is not present
+```
+
+**Returned Value**:
+
+```console
+apiVersion: v1 clusters: - cluster: server: https://127.0.0.1:6443 certificate-authority: /var/lib/rancher/rke2/agent/server-ca.crt name: local contexts: - context: cluster: local namespace: default user: user name: Default current-context: Default kind: Config preferences: {} users: - name: user user: client-certificate: /var/lib/rancher/rke2/agent/client-kubelet.crt client-key: /var/lib/rancher/rke2/agent/client-kubelet.key
+```
+
+### 4.2.8 Ensure that the --hostname-override argument is not set (Manual)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Edit the kubelet service file /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
+on each worker node and remove the --hostname-override argument from the
+KUBELET_SYSTEM_PODS_ARGS variable.
+Based on your system, restart the kubelet service. For example,
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+### 4.2.9 Ensure that the eventRecordQPS argument is set to a level which ensures appropriate event capture (Automated)
+
+
+**Result:** warn
+
+**Remediation:**
+If using a Kubelet config file, edit the file to set `eventRecordQPS` to an appropriate level.
+If using command line arguments, edit the kubelet service file
+/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
+set the below parameter in KUBELET_SYSTEM_PODS_ARGS variable.
+Based on your system, restart the kubelet service. For example,
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+**Audit:**
+
+```bash
+/bin/ps -fC kubelet
+```
+
+**Audit Config:**
+
+```bash
+/bin/cat /var/lib/rancher/rke2/agent/kubelet.kubeconfig
+```
+
+**Expected Result**:
+
+```console
+'{.eventRecordQPS}' is present
+```
+
+**Returned Value**:
+
+```console
+apiVersion: v1 clusters: - cluster: server: https://127.0.0.1:6443 certificate-authority: /var/lib/rancher/rke2/agent/server-ca.crt name: local contexts: - context: cluster: local namespace: default user: user name: Default current-context: Default kind: Config preferences: {} users: - name: user user: client-certificate: /var/lib/rancher/rke2/agent/client-kubelet.crt client-key: /var/lib/rancher/rke2/agent/client-kubelet.key
+```
+
+### 4.2.10 Ensure that the --tls-cert-file and --tls-private-key-file arguments are set as appropriate (Manual)
+
+
+**Result:** pass
+
+**Remediation:**
+If using a Kubelet config file, edit the file to set `tlsCertFile` to the location
+of the certificate file to use to identify this Kubelet, and `tlsPrivateKeyFile`
+to the location of the corresponding private key file.
+If using command line arguments, edit the kubelet service file
+/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
+set the below parameters in KUBELET_CERTIFICATE_ARGS variable.
+--tls-cert-file=
+--tls-private-key-file=
+Based on your system, restart the kubelet service. For example,
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+**Audit:**
+
+```bash
+/bin/ps -fC kubelet
+```
+
+**Audit Config:**
+
+```bash
+/bin/cat /var/lib/rancher/rke2/agent/kubelet.kubeconfig
+```
+
+**Expected Result**:
+
+```console
+'--tls-cert-file' is present AND '--tls-private-key-file' is present
+```
+
+**Returned Value**:
+
+```console
+UID PID PPID C STIME TTY TIME CMD root 2291 2246 4 Sep11 ? 00:50:01 kubelet --volume-plugin-dir=/var/lib/kubelet/volumeplugins --file-check-frequency=5s --sync-frequency=30s --address=0.0.0.0 --alsologtostderr=false --anonymous-auth=false --authentication-token-webhook=true --authorization-mode=Webhook --cgroup-driver=systemd --client-ca-file=/var/lib/rancher/rke2/agent/client-ca.crt --cloud-provider=external --cluster-dns=10.43.0.10 --cluster-domain=cluster.local --container-runtime-endpoint=unix:///run/k3s/containerd/containerd.sock --containerd=/run/k3s/containerd/containerd.sock --eviction-hard=imagefs.available<5%,nodefs.available<5% --eviction-minimum-reclaim=imagefs.available=10%,nodefs.available=10% --fail-swap-on=false --healthz-bind-address=127.0.0.1 --hostname-override=ip-172-31-10-113 --kubeconfig=/var/lib/rancher/rke2/agent/kubelet.kubeconfig --log-file=/var/lib/rancher/rke2/agent/logs/kubelet.log --log-file-max-size=50 --logtostderr=false --node-labels=cattle.io/os=linux,rke.cattle.io/machine=6685035f-32be-4d1b-a06d-7ea5f42467f5 --pod-infra-container-image=index.docker.io/rancher/pause:3.6 --pod-manifest-path=/var/lib/rancher/rke2/agent/pod-manifests --protect-kernel-defaults=true --read-only-port=0 --resolv-conf=/run/systemd/resolve/resolv.conf --serialize-image-pulls=false --stderrthreshold=FATAL --tls-cert-file=/var/lib/rancher/rke2/agent/serving-kubelet.crt --tls-private-key-file=/var/lib/rancher/rke2/agent/serving-kubelet.key
+```
+
+### 4.2.11 Ensure that the --rotate-certificates argument is not set to false (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+If using a Kubelet config file, edit the file to add the line `rotateCertificates` to `true` or
+remove it altogether to use the default value.
+If using command line arguments, edit the kubelet service file
+/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
+remove --rotate-certificates=false argument from the KUBELET_CERTIFICATE_ARGS
+variable.
+Based on your system, restart the kubelet service. For example,
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+**Audit:**
+
+```bash
+/bin/ps -fC kubelet
+```
+
+**Audit Config:**
+
+```bash
+/bin/cat /var/lib/rancher/rke2/agent/kubelet.kubeconfig
+```
+
+**Expected Result**:
+
+```console
+'{.rotateCertificates}' is present OR '{.rotateCertificates}' is not present
+```
+
+**Returned Value**:
+
+```console
+apiVersion: v1 clusters: - cluster: server: https://127.0.0.1:6443 certificate-authority: /var/lib/rancher/rke2/agent/server-ca.crt name: local contexts: - context: cluster: local namespace: default user: user name: Default current-context: Default kind: Config preferences: {} users: - name: user user: client-certificate: /var/lib/rancher/rke2/agent/client-kubelet.crt client-key: /var/lib/rancher/rke2/agent/client-kubelet.key
+```
+
+### 4.2.12 Verify that the RotateKubeletServerCertificate argument is set to true (Manual)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the kubelet service file /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
+on each worker node and set the below parameter in KUBELET_CERTIFICATE_ARGS variable.
+--feature-gates=RotateKubeletServerCertificate=true
+Based on your system, restart the kubelet service. For example:
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+**Audit:**
+
+```bash
+/bin/ps -fC kubelet
+```
+
+**Audit Config:**
+
+```bash
+/bin/cat /var/lib/rancher/rke2/agent/kubelet.kubeconfig
+```
+
+**Expected Result**:
+
+```console
+'{.featureGates.RotateKubeletServerCertificate}' is present OR '{.featureGates.RotateKubeletServerCertificate}' is not present
+```
+
+**Returned Value**:
+
+```console
+apiVersion: v1 clusters: - cluster: server: https://127.0.0.1:6443 certificate-authority: /var/lib/rancher/rke2/agent/server-ca.crt name: local contexts: - context: cluster: local namespace: default user: user name: Default current-context: Default kind: Config preferences: {} users: - name: user user: client-certificate: /var/lib/rancher/rke2/agent/client-kubelet.crt client-key: /var/lib/rancher/rke2/agent/client-kubelet.key
+```
+
+### 4.2.13 Ensure that the Kubelet only makes use of Strong Cryptographic Ciphers (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+If using a Kubelet config file, edit the file to set `TLSCipherSuites` to
+TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256
+or to a subset of these values.
+If using executable arguments, edit the kubelet service file
+/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
+set the --tls-cipher-suites parameter as follows, or to a subset of these values.
+--tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256
+Based on your system, restart the kubelet service. For example:
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+**Audit:**
+
+```bash
+/bin/ps -fC kubelet
+```
+
+**Audit Config:**
+
+```bash
+/bin/cat /var/lib/rancher/rke2/agent/kubelet.kubeconfig
+```
+
+**Expected Result**:
+
+```console
+'{range .tlsCipherSuites[:]}{}{','}{end}' is present
+```
+
+**Returned Value**:
+
+```console
+apiVersion: v1 clusters: - cluster: server: https://127.0.0.1:6443 certificate-authority: /var/lib/rancher/rke2/agent/server-ca.crt name: local contexts: - context: cluster: local namespace: default user: user name: Default current-context: Default kind: Config preferences: {} users: - name: user user: client-certificate: /var/lib/rancher/rke2/agent/client-kubelet.crt client-key: /var/lib/rancher/rke2/agent/client-kubelet.key
+```
+
+## 5.1 RBAC and Service Accounts
+### 5.1.1 Ensure that the cluster-admin role is only used where required (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Identify all clusterrolebindings to the cluster-admin role. Check if they are used and
+if they need this role or if they could use a role with fewer privileges.
+Where possible, first bind users to a lower privileged role and then remove the
+clusterrolebinding to the cluster-admin role :
+kubectl delete clusterrolebinding [name]
+
+### 5.1.2 Minimize access to secrets (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Where possible, remove get, list and watch access to Secret objects in the cluster.
+
+### 5.1.3 Minimize wildcard use in Roles and ClusterRoles (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Where possible replace any use of wildcards in clusterroles and roles with specific
+objects or actions.
+
+### 5.1.4 Minimize access to create pods (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Where possible, remove create access to pod objects in the cluster.
+
+### 5.1.5 Ensure that default service accounts are not actively used. (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Create explicit service accounts wherever a Kubernetes workload requires specific access
+to the Kubernetes API server.
+Modify the configuration of each default service account to include this value
+automountServiceAccountToken: false
+
+**Audit Script:** `check_for_default_sa.sh`
+
+```bash
+#!/bin/bash
+
+set -eE
+
+handle_error() {
+ echo "false"
+}
+
+trap 'handle_error' ERR
+
+count_sa=$(kubectl get serviceaccounts --all-namespaces -o json | jq -r '.items[] | select(.metadata.name=="default") | select((.automountServiceAccountToken == null) or (.automountServiceAccountToken == true))' | jq .metadata.namespace | wc -l)
+if [[ ${count_sa} -gt 0 ]]; then
+ echo "false"
+ exit
+fi
+
+for ns in $(kubectl get ns --no-headers -o custom-columns=":metadata.name")
+do
+ for result in $(kubectl get clusterrolebinding,rolebinding -n $ns -o json | jq -r '.items[] | select((.subjects[]?.kind=="ServiceAccount" and .subjects[]?.name=="default") or (.subjects[]?.kind=="Group" and .subjects[]?.name=="system:serviceaccounts"))' | jq -r '"\(.roleRef.kind),\(.roleRef.name)"')
+ do
+ read kind name <<<$(IFS=","; echo $result)
+ resource_count=$(kubectl get $kind $name -n $ns -o json | jq -r '.rules[] | select(.resources[]? != "podsecuritypolicies")' | wc -l)
+ if [[ ${resource_count} -gt 0 ]]; then
+ echo "false"
+ exit
+ fi
+ done
+done
+
+
+echo "true"
+
+```
+
+**Audit Execution:**
+
+```bash
+./check_for_default_sa.sh
+```
+
+**Expected Result**:
+
+```console
+'true' is equal to 'true'
+```
+
+**Returned Value**:
+
+```console
+true
+```
+
+### 5.1.6 Ensure that Service Account Tokens are only mounted where necessary (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Modify the definition of pods and service accounts which do not need to mount service
+account tokens to disable it.
+
+### 5.1.7 Avoid use of system:masters group (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Remove the system:masters group from all users in the cluster.
+
+### 5.1.8 Limit use of the Bind, Impersonate and Escalate permissions in the Kubernetes cluster (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Where possible, remove the impersonate, bind and escalate rights from subjects.
+
+## 5.2 Pod Security Standards
+### 5.2.1 Ensure that the cluster has at least one active policy control mechanism in place (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Ensure that either Pod Security Admission or an external policy control system is in place
+for every namespace which contains user workloads.
+
+### 5.2.2 Minimize the admission of privileged containers (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Add policies to each namespace in the cluster which has user workloads to restrict the
+admission of privileged containers.
+
+**Audit:**
+
+```bash
+kubectl get psp global-restricted-psp && kubectl get psp global-restricted-psp -o json | jq -r ".spec.runAsUser.rule" || kubectl get psp restricted-noroot-psp && kubectl get psp restricted-noroot-psp -o json | jq -r ".spec.runAsUser.rule"
+```
+
+**Expected Result**:
+
+```console
+'MustRunAsNonRoot' is equal to 'MustRunAsNonRoot'
+```
+
+**Returned Value**:
+
+```console
+Warning: policy/v1beta1 PodSecurityPolicy is deprecated in v1.21+, unavailable in v1.25+ Error from server (NotFound): podsecuritypolicies.policy "global-restricted-psp" not found Warning: policy/v1beta1 PodSecurityPolicy is deprecated in v1.21+, unavailable in v1.25+ NAME PRIV CAPS SELINUX RUNASUSER FSGROUP SUPGROUP READONLYROOTFS VOLUMES restricted-noroot-psp false RunAsAny MustRunAsNonRoot MustRunAs MustRunAs false configMap,emptyDir,projected,secret,downwardAPI,csi,persistentVolumeClaim Warning: policy/v1beta1 PodSecurityPolicy is deprecated in v1.21+, unavailable in v1.25+ MustRunAsNonRoot
+```
+
+### 5.2.3 Minimize the admission of containers wishing to share the host process ID namespace (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Add policies to each namespace in the cluster which has user workloads to restrict the
+admission of `hostPID` containers.
+
+**Audit:**
+
+```bash
+kubectl get psp -o json | jq .items[] | jq -r 'select((.spec.hostPID == null) or (.spec.hostPID == false))' | jq .metadata.name | wc -l | xargs -I {} echo '--count={}'
+```
+
+**Expected Result**:
+
+```console
+'count' is greater than 0
+```
+
+**Returned Value**:
+
+```console
+Warning: policy/v1beta1 PodSecurityPolicy is deprecated in v1.21+, unavailable in v1.25+ --count=5
+```
+
+### 5.2.4 Minimize the admission of containers wishing to share the host IPC namespace (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Add policies to each namespace in the cluster which has user workloads to restrict the
+admission of `hostIPC` containers.
+
+**Audit:**
+
+```bash
+kubectl get psp -o json | jq .items[] | jq -r 'select((.spec.hostIPC == null) or (.spec.hostIPC == false))' | jq .metadata.name | wc -l | xargs -I {} echo '--count={}'
+```
+
+**Expected Result**:
+
+```console
+'count' is greater than 0
+```
+
+**Returned Value**:
+
+```console
+Warning: policy/v1beta1 PodSecurityPolicy is deprecated in v1.21+, unavailable in v1.25+ --count=5
+```
+
+### 5.2.5 Minimize the admission of containers wishing to share the host network namespace (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Add policies to each namespace in the cluster which has user workloads to restrict the
+admission of `hostNetwork` containers.
+
+**Audit:**
+
+```bash
+kubectl get psp -o json | jq .items[] | jq -r 'select((.spec.hostNetwork == null) or (.spec.hostNetwork == false))' | jq .metadata.name | wc -l | xargs -I {} echo '--count={}'
+```
+
+**Expected Result**:
+
+```console
+'count' is greater than 0
+```
+
+**Returned Value**:
+
+```console
+Warning: policy/v1beta1 PodSecurityPolicy is deprecated in v1.21+, unavailable in v1.25+ --count=2
+```
+
+### 5.2.6 Minimize the admission of containers with allowPrivilegeEscalation (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Add policies to each namespace in the cluster which has user workloads to restrict the
+admission of containers with `.spec.allowPrivilegeEscalation` set to `true`.
+
+**Audit:**
+
+```bash
+kubectl get psp -o json | jq .items[] | jq -r 'select((.spec.allowPrivilegeEscalation == null) or (.spec.allowPrivilegeEscalation == false))' | jq .metadata.name | wc -l | xargs -I {} echo '--count={}'
+```
+
+**Expected Result**:
+
+```console
+'count' is greater than 0
+```
+
+**Returned Value**:
+
+```console
+Warning: policy/v1beta1 PodSecurityPolicy is deprecated in v1.21+, unavailable in v1.25+ --count=4
+```
+
+### 5.2.7 Minimize the admission of root containers (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Create a policy for each namespace in the cluster, ensuring that either `MustRunAsNonRoot`
+or `MustRunAs` with the range of UIDs not including 0, is set.
+
+**Audit:**
+
+```bash
+kubectl get psp -o json | jq .items[] | jq -r 'select((.spec.allowPrivilegeEscalation == null) or (.spec.allowPrivilegeEscalation == false))' | jq .metadata.name | wc -l | xargs -I {} echo '--count={}'
+```
+
+**Expected Result**:
+
+```console
+'count' is greater than 0
+```
+
+**Returned Value**:
+
+```console
+Warning: policy/v1beta1 PodSecurityPolicy is deprecated in v1.21+, unavailable in v1.25+ --count=4
+```
+
+### 5.2.8 Minimize the admission of containers with the NET_RAW capability (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Add policies to each namespace in the cluster which has user workloads to restrict the
+admission of containers with the `NET_RAW` capability.
+
+**Audit:**
+
+```bash
+kubectl get psp global-restricted-psp && kubectl get psp global-restricted-psp -o json | jq -r .spec.requiredDropCapabilities[] || kubectl get psp restricted-noroot-psp && kubectl get psp restricted-noroot-psp -o json | jq -r .spec.requiredDropCapabilities[]
+```
+
+**Expected Result**:
+
+```console
+'ALL' is equal to 'ALL'
+```
+
+**Returned Value**:
+
+```console
+Warning: policy/v1beta1 PodSecurityPolicy is deprecated in v1.21+, unavailable in v1.25+ Error from server (NotFound): podsecuritypolicies.policy "global-restricted-psp" not found Warning: policy/v1beta1 PodSecurityPolicy is deprecated in v1.21+, unavailable in v1.25+ NAME PRIV CAPS SELINUX RUNASUSER FSGROUP SUPGROUP READONLYROOTFS VOLUMES restricted-noroot-psp false RunAsAny MustRunAsNonRoot MustRunAs MustRunAs false configMap,emptyDir,projected,secret,downwardAPI,csi,persistentVolumeClaim Warning: policy/v1beta1 PodSecurityPolicy is deprecated in v1.21+, unavailable in v1.25+ ALL
+```
+
+### 5.2.9 Minimize the admission of containers with added capabilities (Automated)
+
+
+**Result:** warn
+
+**Remediation:**
+Ensure that `allowedCapabilities` is not present in policies for the cluster unless
+it is set to an empty array.
+
+### 5.2.10 Minimize the admission of containers with capabilities assigned (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Review the use of capabilites in applications running on your cluster. Where a namespace
+contains applicaions which do not require any Linux capabities to operate consider adding
+a PSP which forbids the admission of containers which do not drop all capabilities.
+
+### 5.2.11 Minimize the admission of Windows HostProcess containers (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Add policies to each namespace in the cluster which has user workloads to restrict the
+admission of containers that have `.securityContext.windowsOptions.hostProcess` set to `true`.
+
+### 5.2.12 Minimize the admission of HostPath volumes (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Add policies to each namespace in the cluster which has user workloads to restrict the
+admission of containers with `hostPath` volumes.
+
+### 5.2.13 Minimize the admission of containers which use HostPorts (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Add policies to each namespace in the cluster which has user workloads to restrict the
+admission of containers which use `hostPort` sections.
+
+## 5.3 Network Policies and CNI
+### 5.3.1 Ensure that the CNI in use supports Network Policies (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+If the CNI plugin in use does not support network policies, consideration should be given to
+making use of a different plugin, or finding an alternate mechanism for restricting traffic
+in the Kubernetes cluster.
+
+**Audit:**
+
+```bash
+kubectl get pods --all-namespaces --selector='k8s-app in (calico-node, canal, cilium)' -o name | wc -l | xargs -I {} echo '--count={}'
+```
+
+**Expected Result**:
+
+```console
+'count' is greater than 0
+```
+
+**Returned Value**:
+
+```console
+--count=1
+```
+
+### 5.3.2 Ensure that all Namespaces have Network Policies defined (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the documentation and create NetworkPolicy objects as you need them.
+
+**Audit Script:** `check_for_rke2_network_policies.sh`
+
+```bash
+#!/bin/bash
+
+set -eE
+
+handle_error() {
+ echo "false"
+}
+
+trap 'handle_error' ERR
+
+for namespace in kube-system kube-public default; do
+ policy_count=$(/var/lib/rancher/rke2/bin/kubectl get networkpolicy -n ${namespace} -o json | jq -r '.items | length')
+ if [ ${policy_count} -eq 0 ]; then
+ echo "false"
+ exit
+ fi
+done
+
+echo "true"
+
+```
+
+**Audit Execution:**
+
+```bash
+./check_for_rke2_network_policies.sh
+```
+
+**Expected Result**:
+
+```console
+'true' is equal to 'true'
+```
+
+**Returned Value**:
+
+```console
+true
+```
+
+## 5.4 Secrets Management
+### 5.4.1 Prefer using Secrets as files over Secrets as environment variables (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+If possible, rewrite application code to read Secrets from mounted secret files, rather than
+from environment variables.
+
+### 5.4.2 Consider external secret storage (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Refer to the Secrets management options offered by your cloud provider or a third-party
+secrets management solution.
+
+## 5.5 Extensible Admission Control
+### 5.5.1 Configure Image Provenance using ImagePolicyWebhook admission controller (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Follow the Kubernetes documentation and setup image provenance.
+
+## 5.7 General Policies
+### 5.7.1 Create administrative boundaries between resources using namespaces (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Follow the documentation and create namespaces for objects in your deployment as you need
+them.
+
+### 5.7.2 Ensure that the seccomp profile is set to docker/default in your Pod definitions (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Use `securityContext` to enable the docker/default seccomp profile in your pod definitions.
+An example is as below:
+ securityContext:
+ seccompProfile:
+ type: RuntimeDefault
+
+### 5.7.3 Apply SecurityContext to your Pods and Containers (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Follow the Kubernetes documentation and apply SecurityContexts to your Pods. For a
+suggested list of SecurityContexts, you may refer to the CIS Security Benchmark for Docker
+Containers.
+
+### 5.7.4 The default namespace should not be used (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Ensure that namespaces are created to allow for appropriate segregation of Kubernetes
+resources and that all new resources are created in a specific namespace.
+
diff --git a/docs/reference-guides/rancher-security/hardening-guides/rke2-hardening-guide/rke2-self-assessment-guide-with-cis-v1.7-k8s-v1.25-v1.26-v1.27.md b/docs/reference-guides/rancher-security/hardening-guides/rke2-hardening-guide/rke2-self-assessment-guide-with-cis-v1.7-k8s-v1.25-v1.26-v1.27.md
new file mode 100644
index 00000000000..b7d4a36ea4b
--- /dev/null
+++ b/docs/reference-guides/rancher-security/hardening-guides/rke2-hardening-guide/rke2-self-assessment-guide-with-cis-v1.7-k8s-v1.25-v1.26-v1.27.md
@@ -0,0 +1,2967 @@
+---
+title: RKE2 Self-Assessment Guide - CIS Benchmark v1.7 - K8s v1.25/v1.26/v1.27
+---
+
+
+
+
+
+This document is a companion to the [RKE2 Hardening Guide](../../../../pages-for-subheaders/rke2-hardening-guide.md), which provides prescriptive guidance on how to harden RKE2 clusters that are running in production and managed by Rancher. This benchmark guide helps you evaluate the security of a hardened cluster against each control in the CIS Kubernetes Benchmark.
+
+This guide corresponds to the following versions of Rancher, CIS Benchmarks, and Kubernetes:
+
+| Rancher Version | CIS Benchmark Version | Kubernetes Version |
+|-----------------|-----------------------|--------------------|
+| Rancher v2.7 | Benchmark v1.7 | Kubernetes v1.25/v1.26/v1.27 |
+
+This guide walks through the various controls and provide updated example commands to audit compliance in Rancher created clusters. Because Rancher and RKE2 install Kubernetes services as Docker containers, many of the control verification checks in the CIS Kubernetes Benchmark don't apply. These checks will return a result of `Not Applicable`.
+
+This document is for Rancher operators, security teams, auditors and decision makers.
+
+For more information about each control, including detailed descriptions and remediations for failing tests, refer to the corresponding section of the CIS Kubernetes Benchmark v1.7. You can download the benchmark, after creating a free account, at [Center for Internet Security (CIS)](https://www.cisecurity.org/benchmark/kubernetes/).
+
+## Testing Methodology
+
+RKE2 launches control plane components as static pods, managed by the kubelet, and uses containerd as the container runtime. Configuration is defined by arguments passed to the container at the time of initialization or via configuration file.
+
+Where control audits differ from the original CIS benchmark, the audit commands specific to Rancher are provided for testing. When performing the tests, you will need access to the command line on the hosts of all RKE2 nodes. The commands also make use of the [kubectl](https://kubernetes.io/docs/tasks/tools/) (with a valid configuration file) and [jq](https://stedolan.github.io/jq/) tools, which are required in the testing and evaluation of test results.
+
+:::note
+
+This guide only covers `automated` (previously called `scored`) tests.
+
+:::
+
+### Controls
+
+## 1.1 Control Plane Node Configuration Files
+### 1.1.1 Ensure that the API server pod specification file permissions are set to 600 or more restrictive (Automated)
+
+
+**Result:** fail
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the
+control plane node.
+For example, chmod 600 /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml
+
+**Audit:**
+
+```bash
+stat -c permissions=%a /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml
+```
+
+**Expected Result**:
+
+```console
+permissions has permissions 644, expected 600 or more restrictive
+```
+
+**Returned Value**:
+
+```console
+permissions=644
+```
+
+### 1.1.2 Ensure that the API server pod specification file ownership is set to root:root (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example, chown root:root /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml
+
+**Audit:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml; then stat -c %U:%G /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml; fi'
+```
+
+**Expected Result**:
+
+```console
+'root:root' is equal to 'root:root'
+```
+
+**Returned Value**:
+
+```console
+root:root
+```
+
+### 1.1.3 Ensure that the controller manager pod specification file permissions are set to 600 or more restrictive (Automated)
+
+
+**Result:** fail
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example, chmod 600 /var/lib/rancher/rke2/agent/pod-manifests/kube-controller-manager.yaml
+
+**Audit:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/rancher/rke2/agent/pod-manifests/kube-controller-manager.yaml; then stat -c permissions=%a /var/lib/rancher/rke2/agent/pod-manifests/kube-controller-manager.yaml; fi'
+```
+
+**Expected Result**:
+
+```console
+permissions has permissions 644, expected 600 or more restrictive
+```
+
+**Returned Value**:
+
+```console
+permissions=644
+```
+
+### 1.1.4 Ensure that the controller manager pod specification file ownership is set to root:root (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example, chown root:root /var/lib/rancher/rke2/agent/pod-manifests/kube-controller-manager.yaml
+
+**Audit:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/rancher/rke2/agent/pod-manifests/kube-controller-manager.yaml; then stat -c %U:%G /var/lib/rancher/rke2/agent/pod-manifests/kube-controller-manager.yaml; fi'
+```
+
+**Expected Result**:
+
+```console
+'root:root' is equal to 'root:root'
+```
+
+**Returned Value**:
+
+```console
+root:root
+```
+
+### 1.1.5 Ensure that the scheduler pod specification file permissions are set to 600 or more restrictive (Automated)
+
+
+**Result:** fail
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example, chmod 600 /var/lib/rancher/rke2/agent/pod-manifests/kube-scheduler.yaml
+
+**Audit:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/rancher/rke2/agent/pod-manifests/kube-scheduler.yaml; then stat -c permissions=%a /var/lib/rancher/rke2/agent/pod-manifests/kube-scheduler.yaml; fi'
+```
+
+**Expected Result**:
+
+```console
+permissions has permissions 644, expected 600 or more restrictive
+```
+
+**Returned Value**:
+
+```console
+permissions=644
+```
+
+### 1.1.6 Ensure that the scheduler pod specification file ownership is set to root:root (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example, chown root:root /var/lib/rancher/rke2/agent/pod-manifests/kube-scheduler.yaml
+
+**Audit:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/rancher/rke2/agent/pod-manifests/kube-scheduler.yaml; then stat -c %U:%G /var/lib/rancher/rke2/agent/pod-manifests/kube-scheduler.yaml; fi'
+```
+
+**Expected Result**:
+
+```console
+'root:root' is present
+```
+
+**Returned Value**:
+
+```console
+root:root
+```
+
+### 1.1.7 Ensure that the etcd pod specification file permissions are set to 600 or more restrictive (Automated)
+
+
+**Result:** fail
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example,
+chmod 600 /var/lib/rancher/rke2/agent/pod-manifests/etcd.yaml
+
+**Audit:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/rancher/rke2/agent/pod-manifests/etcd.yaml; then find /var/lib/rancher/rke2/agent/pod-manifests/etcd.yaml -name '*etcd*' | xargs stat -c permissions=%a; fi'
+```
+
+**Expected Result**:
+
+```console
+permissions has permissions 644, expected 600 or more restrictive
+```
+
+**Returned Value**:
+
+```console
+permissions=644
+```
+
+### 1.1.8 Ensure that the etcd pod specification file ownership is set to root:root (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example,
+chown root:root /var/lib/rancher/rke2/agent/pod-manifests/etcd.yaml
+
+**Audit:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/rancher/rke2/agent/pod-manifests/etcd.yaml; then stat -c %U:%G /var/lib/rancher/rke2/agent/pod-manifests/etcd.yaml; fi'
+```
+
+**Expected Result**:
+
+```console
+'root:root' is equal to 'root:root'
+```
+
+**Returned Value**:
+
+```console
+root:root
+```
+
+### 1.1.9 Ensure that the Container Network Interface file permissions are set to 600 or more restrictive (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example, chmod 600
+
+**Audit:**
+
+```bash
+ps -fC ${kubeletbin:-kubelet} | grep -- --cni-conf-dir || echo "/etc/cni/net.d" | sed 's%.*cni-conf-dir[= ]\([^ ]*\).*%\1%' | xargs -I{} find {} -mindepth 1 | xargs --no-run-if-empty stat -c permissions=%a find /var/lib/cni/networks -type f 2> /dev/null | xargs --no-run-if-empty stat -c permissions=%a
+```
+
+**Expected Result**:
+
+```console
+permissions has permissions 644, expected 600 or more restrictive
+```
+
+**Returned Value**:
+
+```console
+permissions=600 permissions=644
+```
+
+### 1.1.10 Ensure that the Container Network Interface file ownership is set to root:root (Manual)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example,
+chown root:root
+
+**Audit:**
+
+```bash
+ps -fC ${kubeletbin:-kubelet} | grep -- --cni-conf-dir || echo "/etc/cni/net.d" | sed 's%.*cni-conf-dir[= ]\([^ ]*\).*%\1%' | xargs -I{} find {} -mindepth 1 | xargs --no-run-if-empty stat -c %U:%G find /var/lib/cni/networks -type f 2> /dev/null | xargs --no-run-if-empty stat -c %U:%G
+```
+
+**Expected Result**:
+
+```console
+'root:root' is present
+```
+
+**Returned Value**:
+
+```console
+root:root root:root
+```
+
+### 1.1.11 Ensure that the etcd data directory permissions are set to 700 or more restrictive (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+On the etcd server node, get the etcd data directory, passed as an argument --data-dir,
+from the command 'ps -ef | grep etcd'.
+Run the below command (based on the etcd data directory found above). For example,
+chmod 700 /var/lib/etcd
+
+**Audit:**
+
+```bash
+stat -c permissions=%a /var/lib/rancher/rke2/server/db/etcd
+```
+
+**Expected Result**:
+
+```console
+permissions has permissions 700, expected 700 or more restrictive
+```
+
+**Returned Value**:
+
+```console
+permissions=700
+```
+
+### 1.1.12 Ensure that the etcd data directory ownership is set to etcd:etcd (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+On the etcd server node, get the etcd data directory, passed as an argument --data-dir,
+from the command 'ps -ef | grep etcd'.
+Run the below command (based on the etcd data directory found above).
+For example, chown etcd:etcd /var/lib/etcd
+
+### 1.1.13 Ensure that the admin.conf file permissions are set to 600 or more restrictive (Automated)
+
+
+**Result:** fail
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example, chmod 600 /etc/kubernetes/admin.conf
+
+**Audit:**
+
+```bash
+stat -c permissions=%a /var/lib/rancher/rke2/server/cred/admin.kubeconfig
+```
+
+**Expected Result**:
+
+```console
+permissions has permissions 644, expected 600 or more restrictive
+```
+
+**Returned Value**:
+
+```console
+permissions=644
+```
+
+### 1.1.14 Ensure that the admin.conf file ownership is set to root:root (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example, chown root:root /etc/kubernetes/admin.conf
+
+**Audit:**
+
+```bash
+stat -c %U:%G /var/lib/rancher/rke2/server/cred/admin.kubeconfig
+```
+
+**Expected Result**:
+
+```console
+'root:root' is equal to 'root:root'
+```
+
+**Returned Value**:
+
+```console
+root:root
+```
+
+### 1.1.15 Ensure that the scheduler.conf file permissions are set to 600 or more restrictive (Automated)
+
+
+**Result:** fail
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example,
+chmod 600 /var/lib/rancher/rke2/server/cred/scheduler.kubeconfig
+
+**Audit:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/rancher/rke2/server/cred/scheduler.kubeconfig; then stat -c permissions=%a /var/lib/rancher/rke2/server/cred/scheduler.kubeconfig; fi'
+```
+
+**Expected Result**:
+
+```console
+'600' is present
+```
+
+**Returned Value**:
+
+```console
+permissions=644
+```
+
+### 1.1.16 Ensure that the scheduler.conf file ownership is set to root:root (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example,
+chown root:root /var/lib/rancher/rke2/server/cred/scheduler.kubeconfig
+
+**Audit:**
+
+```bash
+stat -c %U:%G /var/lib/rancher/rke2/server/cred/scheduler.kubeconfig
+```
+
+**Expected Result**:
+
+```console
+'root:root' is equal to 'root:root'
+```
+
+**Returned Value**:
+
+```console
+root:root
+```
+
+### 1.1.17 Ensure that the controller-manager.conf file permissions are set to 600 or more restrictive (Automated)
+
+
+**Result:** fail
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example,
+chmod 600 /var/lib/rancher/rke2/server/cred/controller.kubeconfig
+
+**Audit:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/rancher/rke2/server/cred/controller.kubeconfig; then stat -c permissions=%a /var/lib/rancher/rke2/server/cred/controller.kubeconfig; fi'
+```
+
+**Expected Result**:
+
+```console
+'600' is present
+```
+
+**Returned Value**:
+
+```console
+permissions=644
+```
+
+### 1.1.18 Ensure that the controller-manager.conf file ownership is set to root:root (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example,
+chown root:root /var/lib/rancher/rke2/server/cred/controller.kubeconfig
+
+**Audit:**
+
+```bash
+stat -c %U:%G /var/lib/rancher/rke2/server/cred/controller.kubeconfig
+```
+
+**Expected Result**:
+
+```console
+'root:root' is equal to 'root:root'
+```
+
+**Returned Value**:
+
+```console
+root:root
+```
+
+### 1.1.19 Ensure that the Kubernetes PKI directory and file ownership is set to root:root (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example,
+chown -R root:root /etc/kubernetes/pki/
+
+**Audit:**
+
+```bash
+stat -c %U:%G /var/lib/rancher/rke2/server/tls
+```
+
+**Expected Result**:
+
+```console
+'root:root' is equal to 'root:root'
+```
+
+**Returned Value**:
+
+```console
+root:root
+```
+
+### 1.1.20 Ensure that the Kubernetes PKI certificate file permissions are set to 600 or more restrictive (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example,
+chmod -R 600 /var/lib/rancher/rke2/server/tls/*.crt
+
+**Audit:**
+
+```bash
+stat -c permissions=%a /var/lib/rancher/rke2/server/tls/*.crt
+```
+
+**Expected Result**:
+
+```console
+permissions has permissions 644, expected 600 or more restrictive
+```
+
+**Returned Value**:
+
+```console
+permissions=644 permissions=644 permissions=644 permissions=644 permissions=644 permissions=644 permissions=644 permissions=644 permissions=644 permissions=644 permissions=644 permissions=644 permissions=644 permissions=644 permissions=644
+```
+
+### 1.1.21 Ensure that the Kubernetes PKI key file permissions are set to 600 (Manual)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the control plane node.
+For example,
+chmod -R 600 /var/lib/rancher/rke2/server/tls/*.key
+
+**Audit:**
+
+```bash
+stat -c permissions=%a /var/lib/rancher/rke2/server/tls/*.key
+```
+
+**Expected Result**:
+
+```console
+permissions has permissions 600, expected 600 or more restrictive
+```
+
+**Returned Value**:
+
+```console
+permissions=600 permissions=600 permissions=600 permissions=600 permissions=600 permissions=600 permissions=600 permissions=600 permissions=600 permissions=600 permissions=600 permissions=600 permissions=600 permissions=600 permissions=600 permissions=600 permissions=600
+```
+
+## 1.2 API Server
+### 1.2.1 Ensure that the --anonymous-auth argument is set to false (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Edit the API server pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml
+on the control plane node and set the below parameter.
+--anonymous-auth=false
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+### 1.2.2 Ensure that the --token-auth-file parameter is not set (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the documentation and configure alternate mechanisms for authentication. Then,
+edit the API server pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml
+on the control plane node and remove the --token-auth-file= parameter.
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--token-auth-file' is not present
+```
+
+**Returned Value**:
+
+```console
+root 2489 2419 8 Sep11 ? 01:41:54 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --admission-control-config-file=/etc/rancher/rke2/config/rancher-psact.yaml --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 2652 2539 2 Sep11 ? 00:24:53 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 1.2.3 Ensure that the --DenyServiceExternalIPs is not set (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml
+on the control plane node and remove the `DenyServiceExternalIPs`
+from enabled admission plugins.
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--enable-admission-plugins' does not have 'DenyServiceExternalIPs' OR '--enable-admission-plugins' is not present
+```
+
+**Returned Value**:
+
+```console
+root 2489 2419 8 Sep11 ? 01:41:54 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --admission-control-config-file=/etc/rancher/rke2/config/rancher-psact.yaml --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 2652 2539 2 Sep11 ? 00:24:53 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 1.2.4 Ensure that the --kubelet-client-certificate and --kubelet-client-key arguments are set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the Kubernetes documentation and set up the TLS connection between the
+apiserver and kubelets. Then, edit API server pod specification file
+/var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml on the control plane node and set the
+kubelet client certificate and key parameters as below.
+--kubelet-client-certificate=
+--kubelet-client-key=
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--kubelet-client-certificate' is present AND '--kubelet-client-key' is present
+```
+
+**Returned Value**:
+
+```console
+root 2489 2419 8 Sep11 ? 01:41:54 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --admission-control-config-file=/etc/rancher/rke2/config/rancher-psact.yaml --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 2652 2539 2 Sep11 ? 00:24:53 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 1.2.5 Ensure that the --kubelet-certificate-authority argument is set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the Kubernetes documentation and setup the TLS connection between
+the apiserver and kubelets. Then, edit the API server pod specification file
+/var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml on the control plane node and set the
+--kubelet-certificate-authority parameter to the path to the cert file for the certificate authority.
+--kubelet-certificate-authority=
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--kubelet-certificate-authority' is present
+```
+
+**Returned Value**:
+
+```console
+root 2489 2419 8 Sep11 ? 01:41:54 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --admission-control-config-file=/etc/rancher/rke2/config/rancher-psact.yaml --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 2652 2539 2 Sep11 ? 00:24:53 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 1.2.6 Ensure that the --authorization-mode argument is not set to AlwaysAllow (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml
+on the control plane node and set the --authorization-mode parameter to values other than AlwaysAllow.
+One such example could be as below.
+--authorization-mode=RBAC
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--authorization-mode' does not have 'AlwaysAllow'
+```
+
+**Returned Value**:
+
+```console
+root 2489 2419 8 Sep11 ? 01:41:54 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --admission-control-config-file=/etc/rancher/rke2/config/rancher-psact.yaml --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 2652 2539 2 Sep11 ? 00:24:53 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 1.2.7 Ensure that the --authorization-mode argument includes Node (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml
+on the control plane node and set the --authorization-mode parameter to a value that includes Node.
+--authorization-mode=Node,RBAC
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--authorization-mode' has 'Node'
+```
+
+**Returned Value**:
+
+```console
+root 2489 2419 8 Sep11 ? 01:41:54 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --admission-control-config-file=/etc/rancher/rke2/config/rancher-psact.yaml --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 2652 2539 2 Sep11 ? 00:24:53 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 1.2.8 Ensure that the --authorization-mode argument includes RBAC (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml
+on the control plane node and set the --authorization-mode parameter to a value that includes RBAC,
+for example `--authorization-mode=Node,RBAC`.
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--authorization-mode' has 'RBAC'
+```
+
+**Returned Value**:
+
+```console
+root 2489 2419 8 Sep11 ? 01:41:54 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --admission-control-config-file=/etc/rancher/rke2/config/rancher-psact.yaml --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 2652 2539 2 Sep11 ? 00:24:53 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 1.2.9 Ensure that the admission control plugin EventRateLimit is set (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Follow the Kubernetes documentation and set the desired limits in a configuration file.
+Then, edit the API server pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml
+and set the below parameters.
+--enable-admission-plugins=...,EventRateLimit,...
+--admission-control-config-file=
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--enable-admission-plugins' has 'EventRateLimit'
+```
+
+**Returned Value**:
+
+```console
+root 2489 2419 8 Sep11 ? 01:41:54 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --admission-control-config-file=/etc/rancher/rke2/config/rancher-psact.yaml --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 2652 2539 2 Sep11 ? 00:24:53 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 1.2.10 Ensure that the admission control plugin AlwaysAdmit is not set (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml
+on the control plane node and either remove the --enable-admission-plugins parameter, or set it to a
+value that does not include AlwaysAdmit.
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--enable-admission-plugins' does not have 'AlwaysAdmit' OR '--enable-admission-plugins' is not present
+```
+
+**Returned Value**:
+
+```console
+root 2489 2419 8 Sep11 ? 01:41:54 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --admission-control-config-file=/etc/rancher/rke2/config/rancher-psact.yaml --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 2652 2539 2 Sep11 ? 00:24:53 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 1.2.11 Ensure that the admission control plugin AlwaysPullImages is set (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Edit the API server pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml
+on the control plane node and set the --enable-admission-plugins parameter to include
+AlwaysPullImages.
+--enable-admission-plugins=...,AlwaysPullImages,...
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--enable-admission-plugins' has 'AlwaysPullImages'
+```
+
+**Returned Value**:
+
+```console
+root 2489 2419 8 Sep11 ? 01:41:54 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --admission-control-config-file=/etc/rancher/rke2/config/rancher-psact.yaml --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 2652 2539 2 Sep11 ? 00:24:53 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 1.2.12 Ensure that the admission control plugin SecurityContextDeny is set if PodSecurityPolicy is not used (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Edit the API server pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml
+on the control plane node and set the --enable-admission-plugins parameter to include
+SecurityContextDeny, unless PodSecurityPolicy is already in place.
+--enable-admission-plugins=...,SecurityContextDeny,...
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--enable-admission-plugins' has 'SecurityContextDeny' OR '--enable-admission-plugins' has 'PodSecurityPolicy'
+```
+
+**Returned Value**:
+
+```console
+root 2489 2419 8 Sep11 ? 01:41:54 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --admission-control-config-file=/etc/rancher/rke2/config/rancher-psact.yaml --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 2652 2539 2 Sep11 ? 00:24:53 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 1.2.13 Ensure that the admission control plugin ServiceAccount is set (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the documentation and create ServiceAccount objects as per your environment.
+Then, edit the API server pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml
+on the control plane node and ensure that the --disable-admission-plugins parameter is set to a
+value that does not include ServiceAccount.
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--disable-admission-plugins' is present OR '--disable-admission-plugins' is not present
+```
+
+**Returned Value**:
+
+```console
+root 2489 2419 8 Sep11 ? 01:41:54 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --admission-control-config-file=/etc/rancher/rke2/config/rancher-psact.yaml --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 2652 2539 2 Sep11 ? 00:24:53 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true root 1018768 2419 99 16:17 ? 00:00:00 kubectl get --server=https://localhost:6443/ --client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --raw=/readyz
+```
+
+### 1.2.14 Ensure that the admission control plugin NamespaceLifecycle is set (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml
+on the control plane node and set the --disable-admission-plugins parameter to
+ensure it does not include NamespaceLifecycle.
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--disable-admission-plugins' is present OR '--disable-admission-plugins' is not present
+```
+
+**Returned Value**:
+
+```console
+root 2489 2419 8 Sep11 ? 01:41:54 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --admission-control-config-file=/etc/rancher/rke2/config/rancher-psact.yaml --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 2652 2539 2 Sep11 ? 00:24:53 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 1.2.15 Ensure that the admission control plugin NodeRestriction is set (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the Kubernetes documentation and configure NodeRestriction plug-in on kubelets.
+Then, edit the API server pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml
+on the control plane node and set the --enable-admission-plugins parameter to a
+value that includes NodeRestriction.
+--enable-admission-plugins=...,NodeRestriction,...
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--enable-admission-plugins' has 'NodeRestriction'
+```
+
+**Returned Value**:
+
+```console
+root 2489 2419 8 Sep11 ? 01:41:54 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --admission-control-config-file=/etc/rancher/rke2/config/rancher-psact.yaml --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 2652 2539 2 Sep11 ? 00:24:53 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 1.2.16 Ensure that the --secure-port argument is not set to 0 - NoteThis recommendation is obsolete and will be deleted per the consensus process (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml
+on the control plane node and either remove the --secure-port parameter or
+set it to a different (non-zero) desired port.
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--secure-port' is greater than 0 OR '--secure-port' is not present
+```
+
+**Returned Value**:
+
+```console
+root 2489 2419 8 Sep11 ? 01:41:54 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --admission-control-config-file=/etc/rancher/rke2/config/rancher-psact.yaml --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 2652 2539 2 Sep11 ? 00:24:53 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 1.2.17 Ensure that the --profiling argument is set to false (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml
+on the control plane node and set the below parameter.
+--profiling=false
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--profiling' is equal to 'false'
+```
+
+**Returned Value**:
+
+```console
+root 2489 2419 8 Sep11 ? 01:41:54 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --admission-control-config-file=/etc/rancher/rke2/config/rancher-psact.yaml --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 2652 2539 2 Sep11 ? 00:24:53 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 1.2.18 Ensure that the --audit-log-path argument is set (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml
+on the control plane node and set the --audit-log-path parameter to a suitable path and
+file where you would like audit logs to be written, for example,
+--audit-log-path=/var/log/apiserver/audit.log
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--audit-log-path' is present
+```
+
+**Returned Value**:
+
+```console
+root 2489 2419 8 Sep11 ? 01:41:54 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --admission-control-config-file=/etc/rancher/rke2/config/rancher-psact.yaml --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 2652 2539 2 Sep11 ? 00:24:53 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 1.2.19 Ensure that the --audit-log-maxage argument is set to 30 or as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml
+on the control plane node and set the --audit-log-maxage parameter to 30
+or as an appropriate number of days, for example,
+--audit-log-maxage=30
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--audit-log-maxage' is greater or equal to 30
+```
+
+**Returned Value**:
+
+```console
+root 2489 2419 8 Sep11 ? 01:41:54 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --admission-control-config-file=/etc/rancher/rke2/config/rancher-psact.yaml --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 2652 2539 2 Sep11 ? 00:24:53 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 1.2.20 Ensure that the --audit-log-maxbackup argument is set to 10 or as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml
+on the control plane node and set the --audit-log-maxbackup parameter to 10 or to an appropriate
+value. For example,
+--audit-log-maxbackup=10
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--audit-log-maxbackup' is greater or equal to 10
+```
+
+**Returned Value**:
+
+```console
+root 2489 2419 8 Sep11 ? 01:41:54 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --admission-control-config-file=/etc/rancher/rke2/config/rancher-psact.yaml --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 2652 2539 2 Sep11 ? 00:24:53 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 1.2.21 Ensure that the --audit-log-maxsize argument is set to 100 or as appropriate (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Edit the API server pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml
+on the control plane node and set the --audit-log-maxsize parameter to an appropriate size in MB.
+For example, to set it as 100 MB, --audit-log-maxsize=100
+
+### 1.2.22 Ensure that the --request-timeout argument is set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml
+and set the below parameter as appropriate and if needed.
+For example, --request-timeout=300s
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--request-timeout' is not present OR '--request-timeout' is present
+```
+
+**Returned Value**:
+
+```console
+root 2489 2419 8 Sep11 ? 01:41:54 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --admission-control-config-file=/etc/rancher/rke2/config/rancher-psact.yaml --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 2652 2539 2 Sep11 ? 00:24:53 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 1.2.23 Ensure that the --service-account-lookup argument is set to true (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml
+on the control plane node and set the below parameter.
+--service-account-lookup=true
+Alternatively, you can delete the --service-account-lookup parameter from this file so
+that the default takes effect.
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--service-account-lookup' is not present OR '--service-account-lookup' is present
+```
+
+**Returned Value**:
+
+```console
+root 2489 2419 8 Sep11 ? 01:41:54 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --admission-control-config-file=/etc/rancher/rke2/config/rancher-psact.yaml --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 2652 2539 2 Sep11 ? 00:24:53 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 1.2.24 Ensure that the --service-account-key-file argument is set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the API server pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml
+on the control plane node and set the --service-account-key-file parameter
+to the public key file for service accounts. For example,
+--service-account-key-file=
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--service-account-key-file' is present
+```
+
+**Returned Value**:
+
+```console
+root 2489 2419 8 Sep11 ? 01:41:54 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --admission-control-config-file=/etc/rancher/rke2/config/rancher-psact.yaml --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 2652 2539 2 Sep11 ? 00:24:53 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 1.2.25 Ensure that the --etcd-certfile and --etcd-keyfile arguments are set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the Kubernetes documentation and set up the TLS connection between the apiserver and etcd.
+Then, edit the API server pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml
+on the control plane node and set the etcd certificate and key file parameters.
+--etcd-certfile=
+--etcd-keyfile=
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--etcd-certfile' is present AND '--etcd-keyfile' is present
+```
+
+**Returned Value**:
+
+```console
+root 2489 2419 8 Sep11 ? 01:41:54 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --admission-control-config-file=/etc/rancher/rke2/config/rancher-psact.yaml --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 2652 2539 2 Sep11 ? 00:24:53 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 1.2.26 Ensure that the --tls-cert-file and --tls-private-key-file arguments are set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the Kubernetes documentation and set up the TLS connection on the apiserver.
+Then, edit the API server pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml
+on the control plane node and set the TLS certificate and private key file parameters.
+--tls-cert-file=
+--tls-private-key-file=
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--tls-cert-file' is present AND '--tls-private-key-file' is present
+```
+
+**Returned Value**:
+
+```console
+root 2489 2419 8 Sep11 ? 01:41:54 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --admission-control-config-file=/etc/rancher/rke2/config/rancher-psact.yaml --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 2652 2539 2 Sep11 ? 00:24:53 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 1.2.27 Ensure that the --client-ca-file argument is set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the Kubernetes documentation and set up the TLS connection on the apiserver.
+Then, edit the API server pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml
+on the control plane node and set the client certificate authority file.
+--client-ca-file=
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--client-ca-file' is present
+```
+
+**Returned Value**:
+
+```console
+root 2489 2419 8 Sep11 ? 01:41:54 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --admission-control-config-file=/etc/rancher/rke2/config/rancher-psact.yaml --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 2652 2539 2 Sep11 ? 00:24:53 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 1.2.28 Ensure that the --etcd-cafile argument is set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the Kubernetes documentation and set up the TLS connection between the apiserver and etcd.
+Then, edit the API server pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml
+on the control plane node and set the etcd certificate authority file parameter.
+--etcd-cafile=
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--etcd-cafile' is present
+```
+
+**Returned Value**:
+
+```console
+root 2489 2419 8 Sep11 ? 01:41:54 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --admission-control-config-file=/etc/rancher/rke2/config/rancher-psact.yaml --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 2652 2539 2 Sep11 ? 00:24:53 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 1.2.29 Ensure that the --encryption-provider-config argument is set as appropriate (Manual)
+
+
+**Result:** pass
+
+**Remediation:**
+Follow the Kubernetes documentation and configure a EncryptionConfig file.
+Then, edit the API server pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml
+on the control plane node and set the --encryption-provider-config parameter to the path of that file.
+For example, --encryption-provider-config=
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--encryption-provider-config' is present
+```
+
+**Returned Value**:
+
+```console
+root 2489 2419 8 Sep11 ? 01:41:54 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --admission-control-config-file=/etc/rancher/rke2/config/rancher-psact.yaml --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 2652 2539 2 Sep11 ? 00:24:53 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 1.2.30 Ensure that encryption providers are appropriately configured (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Follow the Kubernetes documentation and configure a EncryptionConfig file.
+In this file, choose aescbc, kms or secretbox as the encryption provider.
+
+**Audit:**
+
+```bash
+ENCRYPTION_PROVIDER_CONFIG=$(ps -ef | grep kube-apiserver | grep -- --encryption-provider-config | sed 's%.*encryption-provider-config[= ]\([^ ]*\).*%\1%') if test -e $ENCRYPTION_PROVIDER_CONFIG; then grep -A1 'providers:' $ENCRYPTION_PROVIDER_CONFIG | tail -n1 | grep -o "[A-Za-z]*" | sed 's/^/provider=/'; fi
+```
+
+**Expected Result**:
+
+```console
+'provider' is present
+```
+
+### 1.2.31 Ensure that the API Server only makes use of Strong Cryptographic Ciphers (Manual)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
+on the control plane node and set the below parameter.
+--tls-cipher-suites=TLS_AES_128_GCM_SHA256,TLS_AES_256_GCM_SHA384,TLS_CHACHA20_POLY1305_SHA256,
+TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
+TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
+TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256,
+TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
+TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,
+TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256,TLS_RSA_WITH_3DES_EDE_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA,
+TLS_RSA_WITH_AES_128_GCM_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_AES_256_GCM_SHA384
+Not Applicable.
+
+## 1.3 Controller Manager
+### 1.3.1 Ensure that the --terminated-pod-gc-threshold argument is set as appropriate (Manual)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the Controller Manager pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-controller-manager.yaml
+on the control plane node and set the --terminated-pod-gc-threshold to an appropriate threshold,
+for example, --terminated-pod-gc-threshold=10
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-controller-manager | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--terminated-pod-gc-threshold' is present
+```
+
+**Returned Value**:
+
+```console
+root 2652 2539 2 Sep11 ? 00:24:53 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 1.3.2 Ensure that the --profiling argument is set to false (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the Controller Manager pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-controller-manager.yaml
+on the control plane node and set the below parameter.
+--profiling=false
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-controller-manager | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--profiling' is equal to 'false'
+```
+
+**Returned Value**:
+
+```console
+root 2652 2539 2 Sep11 ? 00:24:53 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 1.3.3 Ensure that the --use-service-account-credentials argument is set to true (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the Controller Manager pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-controller-manager.yaml
+on the control plane node to set the below parameter.
+--use-service-account-credentials=true
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-controller-manager | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--use-service-account-credentials' is not equal to 'false'
+```
+
+**Returned Value**:
+
+```console
+root 2652 2539 2 Sep11 ? 00:24:53 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 1.3.4 Ensure that the --service-account-private-key-file argument is set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the Controller Manager pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-controller-manager.yaml
+on the control plane node and set the --service-account-private-key-file parameter
+to the private key file for service accounts.
+--service-account-private-key-file=
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-controller-manager | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--service-account-private-key-file' is present
+```
+
+**Returned Value**:
+
+```console
+root 2652 2539 2 Sep11 ? 00:24:53 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 1.3.5 Ensure that the --root-ca-file argument is set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the Controller Manager pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-controller-manager.yaml
+on the control plane node and set the --root-ca-file parameter to the certificate bundle file`.
+--root-ca-file=
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-controller-manager | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--root-ca-file' is present
+```
+
+**Returned Value**:
+
+```console
+root 2652 2539 2 Sep11 ? 00:24:53 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 1.3.6 Ensure that the RotateKubeletServerCertificate argument is set to true (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Edit the Controller Manager pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-controller-manager.yaml
+on the control plane node and set the --feature-gates parameter to include RotateKubeletServerCertificate=true.
+--feature-gates=RotateKubeletServerCertificate=true
+
+### 1.3.7 Ensure that the --bind-address argument is set to 127.0.0.1 (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the Controller Manager pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-controller-manager.yaml
+on the control plane node and ensure the correct value for the --bind-address parameter
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-controller-manager | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--bind-address' is equal to '127.0.0.1' OR '--bind-address' is not present
+```
+
+**Returned Value**:
+
+```console
+root 2652 2539 2 Sep11 ? 00:24:53 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+## 1.4 Scheduler
+### 1.4.1 Ensure that the --profiling argument is set to false (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the Scheduler pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-scheduler.yaml file
+on the control plane node and set the below parameter.
+--profiling=false
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-scheduler | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--profiling' is equal to 'false'
+```
+
+**Returned Value**:
+
+```console
+root 2645 2538 0 Sep11 ? 00:05:26 kube-scheduler --permit-port-sharing=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/scheduler.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/scheduler.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-scheduler --kubeconfig=/var/lib/rancher/rke2/server/cred/scheduler.kubeconfig --profiling=false --secure-port=10259
+```
+
+### 1.4.2 Ensure that the --bind-address argument is set to 127.0.0.1 (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the Scheduler pod specification file /var/lib/rancher/rke2/agent/pod-manifests/kube-scheduler.yaml
+on the control plane node and ensure the correct value for the --bind-address parameter
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-scheduler | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--bind-address' is equal to '127.0.0.1' OR '--bind-address' is not present
+```
+
+**Returned Value**:
+
+```console
+root 2645 2538 0 Sep11 ? 00:05:26 kube-scheduler --permit-port-sharing=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/scheduler.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/scheduler.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-scheduler --kubeconfig=/var/lib/rancher/rke2/server/cred/scheduler.kubeconfig --profiling=false --secure-port=10259
+```
+
+## 2 Etcd Node Configuration
+### 2.1 Ensure that the --cert-file and --key-file arguments are set as appropriate (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Follow the etcd service documentation and configure TLS encryption.
+Then, edit the etcd pod specification file /etc/kubernetes/manifests/etcd.yaml
+on the master node and set the below parameters.
+--cert-file=
+--key-file=
+Not Applicable.
+
+### 2.2 Ensure that the --client-cert-auth argument is set to true (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Edit the etcd pod specification file /var/lib/rancher/rke2/agent/pod-manifests/etcd.yaml on the master
+node and set the below parameter.
+--client-cert-auth="true"
+Not Applicable.
+
+### 2.3 Ensure that the --auto-tls argument is not set to true (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the etcd pod specification file /var/lib/rancher/rke2/agent/pod-manifests/etcd.yaml on the master
+node and either remove the --auto-tls parameter or set it to false.
+ --auto-tls=false
+
+**Audit:**
+
+```bash
+/bin/ps -ef | /bin/grep etcd | /bin/grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'ETCD_AUTO_TLS' is not present OR 'ETCD_AUTO_TLS' is present
+```
+
+**Returned Value**:
+
+```console
+PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin HOSTNAME=ip-172-31-14-226 ETCD_UNSUPPORTED_ARCH= FILE_HASH=e9ca6f328e70dd3c17ba78c302ee32927a4961198e95d1d948114a5d7e350d99 NO_PROXY=.svc,.cluster.local,10.42.0.0/16,10.43.0.0/16 POD_HASH=aa1658a59ab75324ef67c786d08307e3 HOME=/
+```
+
+### 2.4 Ensure that the --peer-cert-file and --peer-key-file arguments are set as appropriate (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Follow the etcd service documentation and configure peer TLS encryption as appropriate
+for your etcd cluster.
+Then, edit the etcd pod specification file /var/lib/rancher/rke2/agent/pod-manifests/etcd.yaml on the
+master node and set the below parameters.
+--peer-client-file=
+--peer-key-file=
+Not Applicable.
+
+### 2.5 Ensure that the --peer-client-cert-auth argument is set to true (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Edit the etcd pod specification file /var/lib/rancher/rke2/agent/pod-manifests/etcd.yaml on the master
+node and set the below parameter.
+--peer-client-cert-auth=true
+Not Applicable.
+
+### 2.6 Ensure that the --peer-auto-tls argument is not set to true (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the etcd pod specification file /var/lib/rancher/rke2/agent/pod-manifests/etcd.yaml on the master
+node and either remove the --peer-auto-tls parameter or set it to false.
+--peer-auto-tls=false
+
+**Audit:**
+
+```bash
+/bin/ps -ef | /bin/grep etcd | /bin/grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'ETCD_PEER_AUTO_TLS' is not present OR 'ETCD_PEER_AUTO_TLS' is present
+```
+
+**Returned Value**:
+
+```console
+PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin HOSTNAME=ip-172-31-14-226 ETCD_UNSUPPORTED_ARCH= FILE_HASH=e9ca6f328e70dd3c17ba78c302ee32927a4961198e95d1d948114a5d7e350d99 NO_PROXY=.svc,.cluster.local,10.42.0.0/16,10.43.0.0/16 POD_HASH=aa1658a59ab75324ef67c786d08307e3 HOME=/
+```
+
+### 2.7 Ensure that a unique Certificate Authority is used for etcd (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+[Manual test]
+Follow the etcd documentation and create a dedicated certificate authority setup for the
+etcd service.
+Then, edit the etcd pod specification file /var/lib/rancher/rke2/agent/pod-manifests/etcd.yaml on the
+master node and set the below parameter.
+--trusted-ca-file=
+
+**Audit:**
+
+```bash
+/bin/ps -ef | /bin/grep etcd | /bin/grep -v grep
+```
+
+**Audit Config:**
+
+```bash
+cat /var/lib/rancher/rke2/server/db/etcd/config
+```
+
+**Expected Result**:
+
+```console
+'ETCD_TRUSTED_CA_FILE' is present OR '{.peer-transport-security.trusted-ca-file}' is equal to '/var/lib/rancher/rke2/server/tls/etcd/peer-ca.crt'
+```
+
+**Returned Value**:
+
+```console
+PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin HOSTNAME=ip-172-31-14-226 ETCD_UNSUPPORTED_ARCH= FILE_HASH=e9ca6f328e70dd3c17ba78c302ee32927a4961198e95d1d948114a5d7e350d99 NO_PROXY=.svc,.cluster.local,10.42.0.0/16,10.43.0.0/16 POD_HASH=aa1658a59ab75324ef67c786d08307e3 HOME=/
+```
+
+## 3.1 Authentication and Authorization
+### 3.1.1 Client certificate authentication should not be used for users (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Alternative mechanisms provided by Kubernetes such as the use of OIDC should be
+implemented in place of client certificates.
+
+### 3.1.2 Service account token authentication should not be used for users (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Alternative mechanisms provided by Kubernetes such as the use of OIDC should be implemented
+in place of service account tokens.
+
+### 3.1.3 Bootstrap token authentication should not be used for users (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Alternative mechanisms provided by Kubernetes such as the use of OIDC should be implemented
+in place of bootstrap tokens.
+
+## 3.2 Logging
+### 3.2.1 Ensure that a minimal audit policy is created (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Create an audit policy file for your cluster.
+
+**Audit:**
+
+```bash
+/bin/ps -ef | grep kube-apiserver | grep -v grep
+```
+
+**Expected Result**:
+
+```console
+'--audit-policy-file' is present
+```
+
+**Returned Value**:
+
+```console
+root 2489 2419 8 Sep11 ? 01:41:54 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --admission-control-config-file=/etc/rancher/rke2/config/rancher-psact.yaml --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --feature-gates=JobTrackingWithFinalizers=true --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 2652 2539 2 Sep11 ? 00:24:53 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/rke2/server/tls/kube-controller-manager --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --feature-gates=JobTrackingWithFinalizers=true --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --use-service-account-credentials=true
+```
+
+### 3.2.2 Ensure that the audit policy covers key security concerns (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Review the audit policy provided for the cluster and ensure that it covers
+at least the following areas,
+- Access to Secrets managed by the cluster. Care should be taken to only
+ log Metadata for requests to Secrets, ConfigMaps, and TokenReviews, in
+ order to avoid risk of logging sensitive data.
+- Modification of Pod and Deployment objects.
+- Use of `pods/exec`, `pods/portforward`, `pods/proxy` and `services/proxy`.
+For most requests, minimally logging at the Metadata level is recommended
+(the most basic level of logging).
+
+## 4.1 Worker Node Configuration Files
+### 4.1.1 Ensure that the kubelet service file permissions are set to 600 or more restrictive (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the each worker node.
+For example, chmod 600 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
+Not Applicable.
+
+### 4.1.2 Ensure that the kubelet service file ownership is set to root:root (Automated)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the each worker node.
+For example,
+chown root:root /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
+Not applicable.
+
+### 4.1.3 If proxy kubeconfig file exists ensure permissions are set to 600 or more restrictive (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the each worker node.
+For example,
+chmod 600 /var/lib/rancher/rke2/agent/kubeproxy.kubeconfig
+
+**Audit:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/rancher/rke2/agent/kubeproxy.kubeconfig; then stat -c permissions=%a /var/lib/rancher/rke2/agent/kubeproxy.kubeconfig; fi'
+```
+
+**Expected Result**:
+
+```console
+permissions has permissions 644, expected 600 or more restrictive
+```
+
+**Returned Value**:
+
+```console
+permissions=644
+```
+
+### 4.1.4 If proxy kubeconfig file exists ensure ownership is set to root:root (Manual)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the each worker node.
+For example, chown root:root /var/lib/rancher/rke2/agent/kubeproxy.kubeconfig
+
+**Audit:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/rancher/rke2/agent/kubeproxy.kubeconfig; then stat -c %U:%G /var/lib/rancher/rke2/agent/kubeproxy.kubeconfig; fi'
+```
+
+**Expected Result**:
+
+```console
+'root:root' is present
+```
+
+**Returned Value**:
+
+```console
+root:root
+```
+
+### 4.1.5 Ensure that the --kubeconfig kubelet.conf file permissions are set to 600 or more restrictive (Automated)
+
+
+**Result:** fail
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the each worker node.
+For example,
+chmod 600 /var/lib/rancher/rke2/agent/kubelet.kubeconfig
+
+**Audit:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/rancher/rke2/agent/kubelet.kubeconfig; then stat -c permissions=%a /var/lib/rancher/rke2/agent/kubelet.kubeconfig; fi'
+```
+
+**Expected Result**:
+
+```console
+permissions has permissions 644, expected 600 or more restrictive
+```
+
+**Returned Value**:
+
+```console
+permissions=644
+```
+
+### 4.1.6 Ensure that the --kubeconfig kubelet.conf file ownership is set to root:root (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the below command (based on the file location on your system) on the each worker node.
+For example,
+chown root:root /var/lib/rancher/rke2/agent/kubelet.kubeconfig
+
+**Audit:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/rancher/rke2/agent/kubelet.kubeconfig; then stat -c %U:%G /var/lib/rancher/rke2/agent/kubelet.kubeconfig; fi'
+```
+
+**Expected Result**:
+
+```console
+'root:root' is equal to 'root:root'
+```
+
+**Returned Value**:
+
+```console
+root:root
+```
+
+### 4.1.7 Ensure that the certificate authorities file permissions are set to 600 or more restrictive (Manual)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the following command to modify the file permissions of the
+--client-ca-file chmod 600
+
+**Audit Script:** `check_cafile_permissions.sh`
+
+```bash
+#!/usr/bin/env bash
+
+CAFILE=$(ps -ef | grep kubelet | grep -v apiserver | grep -- --client-ca-file= | awk -F '--client-ca-file=' '{print $2}' | awk '{print $1}')
+CAFILE=/node$CAFILE
+if test -z $CAFILE; then CAFILE=$kubeletcafile; fi
+if test -e $CAFILE; then stat -c permissions=%a $CAFILE; fi
+
+```
+
+**Audit Execution:**
+
+```bash
+./check_cafile_permissions.sh
+```
+
+**Expected Result**:
+
+```console
+permissions has permissions 600, expected 600 or more restrictive
+```
+
+**Returned Value**:
+
+```console
+permissions=600
+```
+
+### 4.1.8 Ensure that the client certificate authorities file ownership is set to root:root (Manual)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the following command to modify the ownership of the --client-ca-file.
+chown root:root
+
+**Audit Script:** `check_cafile_ownership.sh`
+
+```bash
+#!/usr/bin/env bash
+
+CAFILE=$(ps -ef | grep kubelet | grep -v apiserver | grep -- --client-ca-file= | awk -F '--client-ca-file=' '{print $2}' | awk '{print $1}')
+CAFILE=/node$CAFILE
+if test -z $CAFILE; then CAFILE=$kubeletcafile; fi
+if test -e $CAFILE; then stat -c %U:%G $CAFILE; fi
+
+```
+
+**Audit Execution:**
+
+```bash
+./check_cafile_ownership.sh
+```
+
+**Expected Result**:
+
+```console
+'root:root' is equal to 'root:root'
+```
+
+**Returned Value**:
+
+```console
+root:root
+```
+
+### 4.1.9 If the kubelet config.yaml configuration file is being used validate permissions set to 600 or more restrictive (Automated)
+
+
+**Result:** fail
+
+**Remediation:**
+Run the following command (using the config file location identified in the Audit step)
+chmod 600 /var/lib/rancher/rke2/agent/kubelet.kubeconfig
+
+**Audit:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/rancher/rke2/agent/kubelet.kubeconfig; then stat -c permissions=%a /var/lib/rancher/rke2/agent/kubelet.kubeconfig; fi'
+```
+
+**Expected Result**:
+
+```console
+permissions has permissions 644, expected 600 or more restrictive
+```
+
+**Returned Value**:
+
+```console
+permissions=644
+```
+
+### 4.1.10 If the kubelet config.yaml configuration file is being used validate file ownership is set to root:root (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+Run the following command (using the config file location identified in the Audit step)
+chown root:root /var/lib/rancher/rke2/agent/kubelet.kubeconfig
+
+**Audit:**
+
+```bash
+/bin/sh -c 'if test -e /var/lib/rancher/rke2/agent/kubelet.kubeconfig; then stat -c %U:%G /var/lib/rancher/rke2/agent/kubelet.kubeconfig; fi'
+```
+
+**Expected Result**:
+
+```console
+'root:root' is present
+```
+
+**Returned Value**:
+
+```console
+root:root
+```
+
+## 4.2 Kubelet
+### 4.2.1 Ensure that the --anonymous-auth argument is set to false (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+If using a Kubelet config file, edit the file to set `authentication: anonymous: enabled` to
+`false`.
+If using executable arguments, edit the kubelet service file
+/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
+set the below parameter in KUBELET_SYSTEM_PODS_ARGS variable.
+`--anonymous-auth=false`
+Based on your system, restart the kubelet service. For example,
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+**Audit:**
+
+```bash
+/bin/ps -fC kubelet
+```
+
+**Audit Config:**
+
+```bash
+/bin/cat /var/lib/rancher/rke2/agent/kubelet.kubeconfig
+```
+
+**Expected Result**:
+
+```console
+'--anonymous-auth' is equal to 'false'
+```
+
+**Returned Value**:
+
+```console
+UID PID PPID C STIME TTY TIME CMD root 2236 2075 4 Sep11 ? 00:47:51 kubelet --volume-plugin-dir=/var/lib/kubelet/volumeplugins --file-check-frequency=5s --sync-frequency=30s --address=0.0.0.0 --alsologtostderr=false --anonymous-auth=false --authentication-token-webhook=true --authorization-mode=Webhook --cgroup-driver=systemd --client-ca-file=/var/lib/rancher/rke2/agent/client-ca.crt --cloud-provider=external --cluster-dns=10.43.0.10 --cluster-domain=cluster.local --container-runtime-endpoint=unix:///run/k3s/containerd/containerd.sock --containerd=/run/k3s/containerd/containerd.sock --eviction-hard=imagefs.available<5%,nodefs.available<5% --eviction-minimum-reclaim=imagefs.available=10%,nodefs.available=10% --fail-swap-on=false --healthz-bind-address=127.0.0.1 --hostname-override=ip-172-31-14-226 --kubeconfig=/var/lib/rancher/rke2/agent/kubelet.kubeconfig --log-file=/var/lib/rancher/rke2/agent/logs/kubelet.log --log-file-max-size=50 --logtostderr=false --node-labels=cattle.io/os=linux,rke.cattle.io/machine=1adcc1f7-66f1-4503-b9bc-dfb6e808f27b --pod-infra-container-image=index.docker.io/rancher/pause:3.6 --pod-manifest-path=/var/lib/rancher/rke2/agent/pod-manifests --protect-kernel-defaults=true --read-only-port=0 --resolv-conf=/run/systemd/resolve/resolv.conf --serialize-image-pulls=false --stderrthreshold=FATAL --tls-cert-file=/var/lib/rancher/rke2/agent/serving-kubelet.crt --tls-private-key-file=/var/lib/rancher/rke2/agent/serving-kubelet.key
+```
+
+### 4.2.2 Ensure that the --authorization-mode argument is not set to AlwaysAllow (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+If using a Kubelet config file, edit the file to set `authorization.mode` to Webhook. If
+using executable arguments, edit the kubelet service file
+/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
+set the below parameter in KUBELET_AUTHZ_ARGS variable.
+--authorization-mode=Webhook
+Based on your system, restart the kubelet service. For example,
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+**Audit:**
+
+```bash
+/bin/ps -fC kubelet
+```
+
+**Audit Config:**
+
+```bash
+/bin/cat /var/lib/rancher/rke2/agent/kubelet.kubeconfig
+```
+
+**Expected Result**:
+
+```console
+'--authorization-mode' does not have 'AlwaysAllow'
+```
+
+**Returned Value**:
+
+```console
+UID PID PPID C STIME TTY TIME CMD root 2236 2075 4 Sep11 ? 00:47:51 kubelet --volume-plugin-dir=/var/lib/kubelet/volumeplugins --file-check-frequency=5s --sync-frequency=30s --address=0.0.0.0 --alsologtostderr=false --anonymous-auth=false --authentication-token-webhook=true --authorization-mode=Webhook --cgroup-driver=systemd --client-ca-file=/var/lib/rancher/rke2/agent/client-ca.crt --cloud-provider=external --cluster-dns=10.43.0.10 --cluster-domain=cluster.local --container-runtime-endpoint=unix:///run/k3s/containerd/containerd.sock --containerd=/run/k3s/containerd/containerd.sock --eviction-hard=imagefs.available<5%,nodefs.available<5% --eviction-minimum-reclaim=imagefs.available=10%,nodefs.available=10% --fail-swap-on=false --healthz-bind-address=127.0.0.1 --hostname-override=ip-172-31-14-226 --kubeconfig=/var/lib/rancher/rke2/agent/kubelet.kubeconfig --log-file=/var/lib/rancher/rke2/agent/logs/kubelet.log --log-file-max-size=50 --logtostderr=false --node-labels=cattle.io/os=linux,rke.cattle.io/machine=1adcc1f7-66f1-4503-b9bc-dfb6e808f27b --pod-infra-container-image=index.docker.io/rancher/pause:3.6 --pod-manifest-path=/var/lib/rancher/rke2/agent/pod-manifests --protect-kernel-defaults=true --read-only-port=0 --resolv-conf=/run/systemd/resolve/resolv.conf --serialize-image-pulls=false --stderrthreshold=FATAL --tls-cert-file=/var/lib/rancher/rke2/agent/serving-kubelet.crt --tls-private-key-file=/var/lib/rancher/rke2/agent/serving-kubelet.key
+```
+
+### 4.2.3 Ensure that the --client-ca-file argument is set as appropriate (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+If using a Kubelet config file, edit the file to set `authentication.x509.clientCAFile` to
+the location of the client CA file.
+If using command line arguments, edit the kubelet service file
+/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
+set the below parameter in KUBELET_AUTHZ_ARGS variable.
+--client-ca-file=
+Based on your system, restart the kubelet service. For example,
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+**Audit:**
+
+```bash
+/bin/ps -fC kubelet
+```
+
+**Audit Config:**
+
+```bash
+/bin/cat /var/lib/rancher/rke2/agent/kubelet.kubeconfig
+```
+
+**Expected Result**:
+
+```console
+'--client-ca-file' is present
+```
+
+**Returned Value**:
+
+```console
+UID PID PPID C STIME TTY TIME CMD root 2236 2075 4 Sep11 ? 00:47:51 kubelet --volume-plugin-dir=/var/lib/kubelet/volumeplugins --file-check-frequency=5s --sync-frequency=30s --address=0.0.0.0 --alsologtostderr=false --anonymous-auth=false --authentication-token-webhook=true --authorization-mode=Webhook --cgroup-driver=systemd --client-ca-file=/var/lib/rancher/rke2/agent/client-ca.crt --cloud-provider=external --cluster-dns=10.43.0.10 --cluster-domain=cluster.local --container-runtime-endpoint=unix:///run/k3s/containerd/containerd.sock --containerd=/run/k3s/containerd/containerd.sock --eviction-hard=imagefs.available<5%,nodefs.available<5% --eviction-minimum-reclaim=imagefs.available=10%,nodefs.available=10% --fail-swap-on=false --healthz-bind-address=127.0.0.1 --hostname-override=ip-172-31-14-226 --kubeconfig=/var/lib/rancher/rke2/agent/kubelet.kubeconfig --log-file=/var/lib/rancher/rke2/agent/logs/kubelet.log --log-file-max-size=50 --logtostderr=false --node-labels=cattle.io/os=linux,rke.cattle.io/machine=1adcc1f7-66f1-4503-b9bc-dfb6e808f27b --pod-infra-container-image=index.docker.io/rancher/pause:3.6 --pod-manifest-path=/var/lib/rancher/rke2/agent/pod-manifests --protect-kernel-defaults=true --read-only-port=0 --resolv-conf=/run/systemd/resolve/resolv.conf --serialize-image-pulls=false --stderrthreshold=FATAL --tls-cert-file=/var/lib/rancher/rke2/agent/serving-kubelet.crt --tls-private-key-file=/var/lib/rancher/rke2/agent/serving-kubelet.key
+```
+
+### 4.2.4 Verify that the --read-only-port argument is set to 0 (Manual)
+
+
+**Result:** pass
+
+**Remediation:**
+If using a Kubelet config file, edit the file to set `readOnlyPort` to 0.
+If using command line arguments, edit the kubelet service file
+/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
+set the below parameter in KUBELET_SYSTEM_PODS_ARGS variable.
+--read-only-port=0
+Based on your system, restart the kubelet service. For example,
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+**Audit:**
+
+```bash
+/bin/ps -fC kubelet
+```
+
+**Audit Config:**
+
+```bash
+/bin/cat /var/lib/rancher/rke2/agent/kubelet.kubeconfig
+```
+
+**Expected Result**:
+
+```console
+'--read-only-port' is equal to '0' OR '--read-only-port' is not present
+```
+
+**Returned Value**:
+
+```console
+UID PID PPID C STIME TTY TIME CMD root 2236 2075 4 Sep11 ? 00:47:51 kubelet --volume-plugin-dir=/var/lib/kubelet/volumeplugins --file-check-frequency=5s --sync-frequency=30s --address=0.0.0.0 --alsologtostderr=false --anonymous-auth=false --authentication-token-webhook=true --authorization-mode=Webhook --cgroup-driver=systemd --client-ca-file=/var/lib/rancher/rke2/agent/client-ca.crt --cloud-provider=external --cluster-dns=10.43.0.10 --cluster-domain=cluster.local --container-runtime-endpoint=unix:///run/k3s/containerd/containerd.sock --containerd=/run/k3s/containerd/containerd.sock --eviction-hard=imagefs.available<5%,nodefs.available<5% --eviction-minimum-reclaim=imagefs.available=10%,nodefs.available=10% --fail-swap-on=false --healthz-bind-address=127.0.0.1 --hostname-override=ip-172-31-14-226 --kubeconfig=/var/lib/rancher/rke2/agent/kubelet.kubeconfig --log-file=/var/lib/rancher/rke2/agent/logs/kubelet.log --log-file-max-size=50 --logtostderr=false --node-labels=cattle.io/os=linux,rke.cattle.io/machine=1adcc1f7-66f1-4503-b9bc-dfb6e808f27b --pod-infra-container-image=index.docker.io/rancher/pause:3.6 --pod-manifest-path=/var/lib/rancher/rke2/agent/pod-manifests --protect-kernel-defaults=true --read-only-port=0 --resolv-conf=/run/systemd/resolve/resolv.conf --serialize-image-pulls=false --stderrthreshold=FATAL --tls-cert-file=/var/lib/rancher/rke2/agent/serving-kubelet.crt --tls-private-key-file=/var/lib/rancher/rke2/agent/serving-kubelet.key
+```
+
+### 4.2.5 Ensure that the --streaming-connection-idle-timeout argument is not set to 0 (Manual)
+
+
+**Result:** pass
+
+**Remediation:**
+If using a Kubelet config file, edit the file to set `streamingConnectionIdleTimeout` to a
+value other than 0.
+If using command line arguments, edit the kubelet service file
+/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
+set the below parameter in KUBELET_SYSTEM_PODS_ARGS variable.
+--streaming-connection-idle-timeout=5m
+Based on your system, restart the kubelet service. For example,
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+**Audit:**
+
+```bash
+/bin/ps -fC kubelet
+```
+
+**Audit Config:**
+
+```bash
+/bin/cat /var/lib/rancher/rke2/agent/kubelet.kubeconfig
+```
+
+**Expected Result**:
+
+```console
+'{.streamingConnectionIdleTimeout}' is present OR '{.streamingConnectionIdleTimeout}' is not present
+```
+
+**Returned Value**:
+
+```console
+apiVersion: v1 clusters: - cluster: server: https://127.0.0.1:6443 certificate-authority: /var/lib/rancher/rke2/agent/server-ca.crt name: local contexts: - context: cluster: local namespace: default user: user name: Default current-context: Default kind: Config preferences: {} users: - name: user user: client-certificate: /var/lib/rancher/rke2/agent/client-kubelet.crt client-key: /var/lib/rancher/rke2/agent/client-kubelet.key
+```
+
+### 4.2.6 Ensure that the --make-iptables-util-chains argument is set to true (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+If using a Kubelet config file, edit the file to set `makeIPTablesUtilChains` to `true`.
+If using command line arguments, edit the kubelet service file
+/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
+remove the --make-iptables-util-chains argument from the
+KUBELET_SYSTEM_PODS_ARGS variable.
+Based on your system, restart the kubelet service. For example:
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+**Audit:**
+
+```bash
+/bin/ps -fC kubelet
+```
+
+**Audit Config:**
+
+```bash
+/bin/cat /var/lib/rancher/rke2/agent/kubelet.kubeconfig
+```
+
+**Expected Result**:
+
+```console
+'{.makeIPTablesUtilChains}' is present OR '{.makeIPTablesUtilChains}' is not present
+```
+
+**Returned Value**:
+
+```console
+apiVersion: v1 clusters: - cluster: server: https://127.0.0.1:6443 certificate-authority: /var/lib/rancher/rke2/agent/server-ca.crt name: local contexts: - context: cluster: local namespace: default user: user name: Default current-context: Default kind: Config preferences: {} users: - name: user user: client-certificate: /var/lib/rancher/rke2/agent/client-kubelet.crt client-key: /var/lib/rancher/rke2/agent/client-kubelet.key
+```
+
+### 4.2.7 Ensure that the --hostname-override argument is not set (Manual)
+
+
+**Result:** Not Applicable
+
+**Remediation:**
+Edit the kubelet service file /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
+on each worker node and remove the --hostname-override argument from the
+KUBELET_SYSTEM_PODS_ARGS variable.
+Based on your system, restart the kubelet service. For example,
+systemctl daemon-reload
+systemctl restart kubelet.service
+Not Applicable.
+
+### 4.2.8 Ensure that the eventRecordQPS argument is set to a level which ensures appropriate event capture (Manual)
+
+
+**Result:** pass
+
+**Remediation:**
+If using a Kubelet config file, edit the file to set `eventRecordQPS` to an appropriate level.
+If using command line arguments, edit the kubelet service file
+/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
+set the below parameter in KUBELET_SYSTEM_PODS_ARGS variable.
+Based on your system, restart the kubelet service. For example,
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+**Audit:**
+
+```bash
+/bin/ps -fC kubelet
+```
+
+**Audit Config:**
+
+```bash
+/bin/cat /var/lib/rancher/rke2/agent/kubelet.kubeconfig
+```
+
+**Expected Result**:
+
+```console
+'{.eventRecordQPS}' is present OR '{.eventRecordQPS}' is not present
+```
+
+**Returned Value**:
+
+```console
+apiVersion: v1 clusters: - cluster: server: https://127.0.0.1:6443 certificate-authority: /var/lib/rancher/rke2/agent/server-ca.crt name: local contexts: - context: cluster: local namespace: default user: user name: Default current-context: Default kind: Config preferences: {} users: - name: user user: client-certificate: /var/lib/rancher/rke2/agent/client-kubelet.crt client-key: /var/lib/rancher/rke2/agent/client-kubelet.key
+```
+
+### 4.2.9 Ensure that the --tls-cert-file and --tls-private-key-file arguments are set as appropriate (Manual)
+
+
+**Result:** pass
+
+**Remediation:**
+If using a Kubelet config file, edit the file to set `tlsCertFile` to the location
+of the certificate file to use to identify this Kubelet, and `tlsPrivateKeyFile`
+to the location of the corresponding private key file.
+If using command line arguments, edit the kubelet service file
+/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
+set the below parameters in KUBELET_CERTIFICATE_ARGS variable.
+--tls-cert-file=
+--tls-private-key-file=
+Based on your system, restart the kubelet service. For example,
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+**Audit:**
+
+```bash
+/bin/ps -fC kubelet
+```
+
+**Audit Config:**
+
+```bash
+/bin/cat /var/lib/rancher/rke2/agent/kubelet.kubeconfig
+```
+
+**Expected Result**:
+
+```console
+'--tls-cert-file' is present AND '--tls-private-key-file' is present
+```
+
+**Returned Value**:
+
+```console
+UID PID PPID C STIME TTY TIME CMD root 2236 2075 4 Sep11 ? 00:47:51 kubelet --volume-plugin-dir=/var/lib/kubelet/volumeplugins --file-check-frequency=5s --sync-frequency=30s --address=0.0.0.0 --alsologtostderr=false --anonymous-auth=false --authentication-token-webhook=true --authorization-mode=Webhook --cgroup-driver=systemd --client-ca-file=/var/lib/rancher/rke2/agent/client-ca.crt --cloud-provider=external --cluster-dns=10.43.0.10 --cluster-domain=cluster.local --container-runtime-endpoint=unix:///run/k3s/containerd/containerd.sock --containerd=/run/k3s/containerd/containerd.sock --eviction-hard=imagefs.available<5%,nodefs.available<5% --eviction-minimum-reclaim=imagefs.available=10%,nodefs.available=10% --fail-swap-on=false --healthz-bind-address=127.0.0.1 --hostname-override=ip-172-31-14-226 --kubeconfig=/var/lib/rancher/rke2/agent/kubelet.kubeconfig --log-file=/var/lib/rancher/rke2/agent/logs/kubelet.log --log-file-max-size=50 --logtostderr=false --node-labels=cattle.io/os=linux,rke.cattle.io/machine=1adcc1f7-66f1-4503-b9bc-dfb6e808f27b --pod-infra-container-image=index.docker.io/rancher/pause:3.6 --pod-manifest-path=/var/lib/rancher/rke2/agent/pod-manifests --protect-kernel-defaults=true --read-only-port=0 --resolv-conf=/run/systemd/resolve/resolv.conf --serialize-image-pulls=false --stderrthreshold=FATAL --tls-cert-file=/var/lib/rancher/rke2/agent/serving-kubelet.crt --tls-private-key-file=/var/lib/rancher/rke2/agent/serving-kubelet.key
+```
+
+### 4.2.10 Ensure that the --rotate-certificates argument is not set to false (Automated)
+
+
+**Result:** pass
+
+**Remediation:**
+If using a Kubelet config file, edit the file to add the line `rotateCertificates` to `true` or
+remove it altogether to use the default value.
+If using command line arguments, edit the kubelet service file
+/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
+remove --rotate-certificates=false argument from the KUBELET_CERTIFICATE_ARGS
+variable.
+Based on your system, restart the kubelet service. For example,
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+**Audit:**
+
+```bash
+/bin/ps -fC kubelet
+```
+
+**Audit Config:**
+
+```bash
+/bin/cat /var/lib/rancher/rke2/agent/kubelet.kubeconfig
+```
+
+**Expected Result**:
+
+```console
+'{.rotateCertificates}' is present OR '{.rotateCertificates}' is not present
+```
+
+**Returned Value**:
+
+```console
+apiVersion: v1 clusters: - cluster: server: https://127.0.0.1:6443 certificate-authority: /var/lib/rancher/rke2/agent/server-ca.crt name: local contexts: - context: cluster: local namespace: default user: user name: Default current-context: Default kind: Config preferences: {} users: - name: user user: client-certificate: /var/lib/rancher/rke2/agent/client-kubelet.crt client-key: /var/lib/rancher/rke2/agent/client-kubelet.key
+```
+
+### 4.2.11 Verify that the RotateKubeletServerCertificate argument is set to true (Manual)
+
+
+**Result:** pass
+
+**Remediation:**
+Edit the kubelet service file /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
+on each worker node and set the below parameter in KUBELET_CERTIFICATE_ARGS variable.
+--feature-gates=RotateKubeletServerCertificate=true
+Based on your system, restart the kubelet service. For example:
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+**Audit:**
+
+```bash
+/bin/ps -fC kubelet
+```
+
+**Audit Config:**
+
+```bash
+/bin/cat /var/lib/rancher/rke2/agent/kubelet.kubeconfig
+```
+
+**Expected Result**:
+
+```console
+'{.featureGates.RotateKubeletServerCertificate}' is present OR '{.featureGates.RotateKubeletServerCertificate}' is not present
+```
+
+**Returned Value**:
+
+```console
+apiVersion: v1 clusters: - cluster: server: https://127.0.0.1:6443 certificate-authority: /var/lib/rancher/rke2/agent/server-ca.crt name: local contexts: - context: cluster: local namespace: default user: user name: Default current-context: Default kind: Config preferences: {} users: - name: user user: client-certificate: /var/lib/rancher/rke2/agent/client-kubelet.crt client-key: /var/lib/rancher/rke2/agent/client-kubelet.key
+```
+
+### 4.2.12 Ensure that the Kubelet only makes use of Strong Cryptographic Ciphers (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+If using a Kubelet config file, edit the file to set `TLSCipherSuites` to
+TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256
+or to a subset of these values.
+If using executable arguments, edit the kubelet service file
+/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
+set the --tls-cipher-suites parameter as follows, or to a subset of these values.
+--tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256
+Based on your system, restart the kubelet service. For example:
+systemctl daemon-reload
+systemctl restart kubelet.service
+
+**Audit:**
+
+```bash
+/bin/ps -fC kubelet
+```
+
+**Audit Config:**
+
+```bash
+/bin/cat /var/lib/rancher/rke2/agent/kubelet.kubeconfig
+```
+
+**Expected Result**:
+
+```console
+'{range .tlsCipherSuites[:]}{}{','}{end}' is present
+```
+
+**Returned Value**:
+
+```console
+apiVersion: v1 clusters: - cluster: server: https://127.0.0.1:6443 certificate-authority: /var/lib/rancher/rke2/agent/server-ca.crt name: local contexts: - context: cluster: local namespace: default user: user name: Default current-context: Default kind: Config preferences: {} users: - name: user user: client-certificate: /var/lib/rancher/rke2/agent/client-kubelet.crt client-key: /var/lib/rancher/rke2/agent/client-kubelet.key
+```
+
+### 4.2.13 Ensure that a limit is set on pod PIDs (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Decide on an appropriate level for this parameter and set it,
+either via the --pod-max-pids command line parameter or the PodPidsLimit configuration file setting.
+
+**Audit:**
+
+```bash
+/bin/ps -fC kubelet
+```
+
+**Audit Config:**
+
+```bash
+/bin/cat /var/lib/rancher/rke2/agent/kubelet.kubeconfig
+```
+
+**Expected Result**:
+
+```console
+'{.podPidsLimit}' is present
+```
+
+**Returned Value**:
+
+```console
+apiVersion: v1 clusters: - cluster: server: https://127.0.0.1:6443 certificate-authority: /var/lib/rancher/rke2/agent/server-ca.crt name: local contexts: - context: cluster: local namespace: default user: user name: Default current-context: Default kind: Config preferences: {} users: - name: user user: client-certificate: /var/lib/rancher/rke2/agent/client-kubelet.crt client-key: /var/lib/rancher/rke2/agent/client-kubelet.key
+```
+
+## 5.1 RBAC and Service Accounts
+### 5.1.1 Ensure that the cluster-admin role is only used where required (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Identify all clusterrolebindings to the cluster-admin role. Check if they are used and
+if they need this role or if they could use a role with fewer privileges.
+Where possible, first bind users to a lower privileged role and then remove the
+clusterrolebinding to the cluster-admin role :
+kubectl delete clusterrolebinding [name]
+
+### 5.1.2 Minimize access to secrets (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Where possible, remove get, list and watch access to Secret objects in the cluster.
+
+### 5.1.3 Minimize wildcard use in Roles and ClusterRoles (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Where possible replace any use of wildcards in clusterroles and roles with specific
+objects or actions.
+
+### 5.1.4 Minimize access to create pods (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Where possible, remove create access to pod objects in the cluster.
+
+### 5.1.5 Ensure that default service accounts are not actively used. (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Create explicit service accounts wherever a Kubernetes workload requires specific access
+to the Kubernetes API server.
+Modify the configuration of each default service account to include this value
+automountServiceAccountToken: false
+
+### 5.1.6 Ensure that Service Account Tokens are only mounted where necessary (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Modify the definition of pods and service accounts which do not need to mount service
+account tokens to disable it.
+
+### 5.1.7 Avoid use of system:masters group (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Remove the system:masters group from all users in the cluster.
+
+### 5.1.8 Limit use of the Bind, Impersonate and Escalate permissions in the Kubernetes cluster (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Where possible, remove the impersonate, bind and escalate rights from subjects.
+
+### 5.1.9 Minimize access to create persistent volumes (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Where possible, remove create access to PersistentVolume objects in the cluster.
+
+### 5.1.10 Minimize access to the proxy sub-resource of nodes (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Where possible, remove access to the proxy sub-resource of node objects.
+
+### 5.1.11 Minimize access to the approval sub-resource of certificatesigningrequests objects (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Where possible, remove access to the approval sub-resource of certificatesigningrequest objects.
+
+### 5.1.12 Minimize access to webhook configuration objects (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Where possible, remove access to the validatingwebhookconfigurations or mutatingwebhookconfigurations objects
+
+### 5.1.13 Minimize access to the service account token creation (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Where possible, remove access to the token sub-resource of serviceaccount objects.
+
+## 5.2 Pod Security Standards
+### 5.2.1 Ensure that the cluster has at least one active policy control mechanism in place (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Ensure that either Pod Security Admission or an external policy control system is in place
+for every namespace which contains user workloads.
+
+### 5.2.2 Minimize the admission of privileged containers (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Add policies to each namespace in the cluster which has user workloads to restrict the
+admission of privileged containers.
+
+### 5.2.3 Minimize the admission of containers wishing to share the host process ID namespace (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Add policies to each namespace in the cluster which has user workloads to restrict the
+admission of `hostPID` containers.
+
+### 5.2.4 Minimize the admission of containers wishing to share the host IPC namespace (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Add policies to each namespace in the cluster which has user workloads to restrict the
+admission of `hostIPC` containers.
+
+### 5.2.5 Minimize the admission of containers wishing to share the host network namespace (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Add policies to each namespace in the cluster which has user workloads to restrict the
+admission of `hostNetwork` containers.
+
+### 5.2.6 Minimize the admission of containers with allowPrivilegeEscalation (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Add policies to each namespace in the cluster which has user workloads to restrict the
+admission of containers with `.spec.allowPrivilegeEscalation` set to `true`.
+
+### 5.2.7 Minimize the admission of root containers (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Create a policy for each namespace in the cluster, ensuring that either `MustRunAsNonRoot`
+or `MustRunAs` with the range of UIDs not including 0, is set.
+
+### 5.2.8 Minimize the admission of containers with the NET_RAW capability (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Add policies to each namespace in the cluster which has user workloads to restrict the
+admission of containers with the `NET_RAW` capability.
+
+### 5.2.9 Minimize the admission of containers with added capabilities (Automated)
+
+
+**Result:** warn
+
+**Remediation:**
+Ensure that `allowedCapabilities` is not present in policies for the cluster unless
+it is set to an empty array.
+
+### 5.2.10 Minimize the admission of containers with capabilities assigned (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Review the use of capabilites in applications running on your cluster. Where a namespace
+contains applicaions which do not require any Linux capabities to operate consider adding
+a PSP which forbids the admission of containers which do not drop all capabilities.
+
+### 5.2.11 Minimize the admission of Windows HostProcess containers (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Add policies to each namespace in the cluster which has user workloads to restrict the
+admission of containers that have `.securityContext.windowsOptions.hostProcess` set to `true`.
+
+### 5.2.12 Minimize the admission of HostPath volumes (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Add policies to each namespace in the cluster which has user workloads to restrict the
+admission of containers with `hostPath` volumes.
+
+### 5.2.13 Minimize the admission of containers which use HostPorts (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Add policies to each namespace in the cluster which has user workloads to restrict the
+admission of containers which use `hostPort` sections.
+
+## 5.3 Network Policies and CNI
+### 5.3.1 Ensure that the CNI in use supports NetworkPolicies (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+If the CNI plugin in use does not support network policies, consideration should be given to
+making use of a different plugin, or finding an alternate mechanism for restricting traffic
+in the Kubernetes cluster.
+
+### 5.3.2 Ensure that all Namespaces have NetworkPolicies defined (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Follow the documentation and create NetworkPolicy objects as you need them.
+
+## 5.4 Secrets Management
+### 5.4.1 Prefer using Secrets as files over Secrets as environment variables (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+If possible, rewrite application code to read Secrets from mounted secret files, rather than
+from environment variables.
+
+### 5.4.2 Consider external secret storage (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Refer to the Secrets management options offered by your cloud provider or a third-party
+secrets management solution.
+
+## 5.5 Extensible Admission Control
+### 5.5.1 Configure Image Provenance using ImagePolicyWebhook admission controller (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Follow the Kubernetes documentation and setup image provenance.
+
+## 5.7 General Policies
+### 5.7.1 Create administrative boundaries between resources using namespaces (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Follow the documentation and create namespaces for objects in your deployment as you need
+them.
+
+### 5.7.2 Ensure that the seccomp profile is set to docker/default in your Pod definitions (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Use `securityContext` to enable the docker/default seccomp profile in your pod definitions.
+An example is as below:
+ securityContext:
+ seccompProfile:
+ type: RuntimeDefault
+
+### 5.7.3 Apply SecurityContext to your Pods and Containers (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Follow the Kubernetes documentation and apply SecurityContexts to your Pods. For a
+suggested list of SecurityContexts, you may refer to the CIS Security Benchmark for Docker
+Containers.
+
+### 5.7.4 The default namespace should not be used (Manual)
+
+
+**Result:** warn
+
+**Remediation:**
+Ensure that namespaces are created to allow for appropriate segregation of Kubernetes
+resources and that all new resources are created in a specific namespace.
+
diff --git a/docs/reference-guides/rancher-security/rancher-webhook-hardening.md b/docs/reference-guides/rancher-security/rancher-webhook-hardening.md
new file mode 100644
index 00000000000..1f771dfdfe5
--- /dev/null
+++ b/docs/reference-guides/rancher-security/rancher-webhook-hardening.md
@@ -0,0 +1,133 @@
+---
+title: Hardening the Rancher Webhook
+---
+
+Rancher Webhook is an important component within Rancher, playing a role in enforcing security requirements for Rancher and its workloads. To decrease its attack surface, access to it should be limited to the only valid caller it has: the Kubernetes API server. This can be done by using network policies and authentication independently or in conjunction with each other to harden the webhook against attacks.
+
+## Block External Traffic Using Network Policies
+
+The webhook is only expected to accept requests from the Kubernetes API server. By default, however, the webhook can accept traffic from any source. If you are using a CNI that supports Network Policies, you can create a policy that blocks traffic that doesn't originate from the API server.
+
+The built-in NetworkPolicy resource in Kubernetes can't block or admit traffic from the cluster hosts, and the `kube-apiserver` process is always running on the host network. Therefore, you must use the advanced network policy resources from the CNI in use. Examples for Calico and Cilium follow. Consult the documentation for your CNI for more details.
+
+### Calico
+
+Use the NetworkPolicy resource in the `crd.projectcalico.org/v1` API group. Use the selector `app == 'rancher-webhook'` to create a rule for the webhook, and set the CIDR of the control plane hosts as the ingress source:
+
+```yaml
+apiVersion: crd.projectcalico.org/v1
+kind: NetworkPolicy
+metadata:
+ name: allow-k8s
+ namespace: cattle-system
+spec:
+ selector: app == 'rancher-webhook'
+ types:
+ - Ingress
+ ingress:
+ - action: Allow
+ protocol: TCP
+ source:
+ nets:
+ - 192.168.42.0/24 # CIDR of the control plane host. May list more than 1 if the hosts are in different subnets.
+ destination:
+ selector:
+ app == 'rancher-webhook'
+```
+
+### Cilium
+
+Use the CiliumNetworkPolicy resource in the `cilium.io/v2` API group. Add the `host` and `remote-node` keys to the `fromEntities` ingress rule. This blocks in-cluster and external traffic while allowing traffic from the hosts.
+
+```yaml
+apiVersion: "cilium.io/v2"
+kind: CiliumNetworkPolicy
+metadata:
+ name: allow-k8s
+ namespace: cattle-system
+spec:
+ endpointSelector:
+ matchLabels:
+ app: rancher-webhook
+ ingress:
+ - fromEntities:
+ - host
+ - remote-node
+```
+
+## Require the Kubernetes API Server to Authenticate to the Webhook
+
+The webhook should only accept requests from the Kubernetes API server. By default, the webhook doesn't require clients to authenticate to it. It will accept any request. You can configure the webhook to require credentials so that only the API server can access it. More information can be found in the [Kubernetes documentation](https://kubernetes.io/docs/reference/access-authn-authz/extensible-admission-controllers/#authenticate-apiservers).
+
+1. Configure the API server to present a client certificate to the webhook, pointing to an AdmissionConfiguration file to configure the ValidatingAdmissionWebhook and MutatingAdmissionWebhook plugins:
+
+ ```yaml
+ # /etc/rancher/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/admission/kubeconfig"
+ - name: MutatingAdmissionWebhook
+ configuration:
+ apiVersion: apiserver.config.k8s.io/v1
+ kind: WebhookAdmissionConfiguration
+ kubeConfigFile: "/etc/rancher/admission/kubeconfig"
+ ```
+
+ This is also the same config file where other admission plugins are configured, such as PodSecurity. If your distro or your setup uses additional admission plugins, configure those as well. For example, add [RKE2's PodSecurity configuration](https://docs.rke2.io/security/pod_security_standards) to this file.
+
+2. Create the kubeconfig file that the admission plugins refer to. Rancher Webhook only supports client certificate authentication, so generate a TLS key pair, and set the kubeconfig to use either `client-certificate` and `client-key` or `client-certificate-data` and `client-key-data`. For example:
+
+ ```yaml
+ # /etc/rancher/admission/kubeconfig
+ apiVersion: v1
+ kind: Config
+ users:
+ - name: 'rancher-webhook.cattle-system.svc'
+ user:
+ client-certificate: /path/to/client/cert
+ client-key: /path/to/client/key
+ ```
+
+3. Start the kube-apiserver binary with the flag `--admission-control-config-file` pointing to your AdmissionConfiguration file. The way to do this varies by distro, and it isn't supported universally, such as in hosted Kubernetes providers. Consult the documentation for your Kubernetes distribution.
+
+ For RKE2, `rke2-server` can be started with a config file like so:
+
+ ```yaml
+ # /etc/rancher/rke2/config.yaml
+ kube-apiserver-arg:
+ - admission-control-config-file=/etc/rancher/admission/admission.yaml
+ kube-apiserver-extra-mount:
+ - /etc/rancher/admission:/etc/rancher/admission:ro
+ ```
+
+ :::danger
+ Some distros set this flag by default. If your distro provisions its own AdmissionConfiguration, you must include it in your custom admission control config file. For example, RKE2 installs an AdmissionConfiguration file at `/etc/rancher/rke2/rke2-pss.yaml`, which configures the PodSecurity admission plugin. Setting `admission-control-config-file` in config.yaml will override this essential security setting. To include both plugins, consult [the Default Pod Security Standards documentation](https://docs.rke2.io/security/pod_security_standards) and copy the appropriate plugin configuration to your admission.yaml.
+ :::
+
+4. If you're using Rancher to provision your cluster using existing nodes, create these files on the node before you provision them.
+
+ If you're using Rancher to provision your cluster on new nodes, allow the provisioning to complete, then use the provided SSH key and IP address to connect to the nodes, and place the RKE2 config file in the `/etc/rancher/rke2/config.yaml.d/` directory.
+
+5. After the cluster is configured with these credentials, configure the Rancher cluster agent to enable authentication in the webhook. Create a file containing these chart values:
+
+ ```yaml
+ # values.yaml
+ auth:
+ clientCA:
+ allowedCNs:
+ -
+ -
+ ```
+
+6. Create a configmap in the `cattle-system` namespace on the provisioned cluster with these values:
+
+ ```
+ kubectl --namespace cattle-system create configmap --from-file=rancher-webhook=values.yaml
+ ```
+
+ The webhook will restart with these values.
diff --git a/docusaurus.config.js b/docusaurus.config.js
index 3ab17e54bc1..f2b60198737 100644
--- a/docusaurus.config.js
+++ b/docusaurus.config.js
@@ -124,10 +124,23 @@ module.exports = {
sidebarPath: require.resolve('./sidebars.js'),
showLastUpdateTime: true,
editUrl: 'https://github.com/rancher/rancher-docs/edit/main/',
- lastVersion: 'current',
+ // lastVersion: '2.7',
+ includeCurrentVersion: false,
versions: {
- current: {
- label: 'Latest'
+ // current: {
+ // label: 'Next 🚧',
+ // path: 'next',
+ // banner: 'unreleased'
+ // },
+ latest: {
+ label: 'Latest',
+ path: '',
+ banner: 'none'
+ },
+ 2.8: {
+ label: 'v2.8 (Preview)',
+ path: 'v2.8',
+ banner: 'unreleased'
},
2.7: {
label: 'v2.7',
@@ -1143,28 +1156,52 @@ module.exports = {
from: '/v2.6/explanations/integrations-in-rancher/opa-gatekeeper'
}, // Redirects for restructure from PR #234 (end)
{
- to: "/reference-guides/rancher-security/hardening-guides/k3s-hardening-guide/k3s-self-assessment-guide-with-cis-v1.7-k8s-v1.25",
+ to: "/reference-guides/rancher-security/hardening-guides/k3s-hardening-guide/k3s-self-assessment-guide-with-cis-v1.24-k8s-v1.24",
+ from: "/reference-guides/rancher-security/hardening-guides/k3s-hardening-guide/k3s-self-assessment-guide-with-cis-v1.23-k8s-v1.24"
+ },
+ {
+ to: "/v2.7/reference-guides/rancher-security/hardening-guides/k3s-hardening-guide/k3s-self-assessment-guide-with-cis-v1.24-k8s-v1.24",
+ from: "/2.7/reference-guides/rancher-security/hardening-guides/k3s-hardening-guide/k3s-self-assessment-guide-with-cis-v1.23-k8s-v1.24"
+ },
+ {
+ to: "/reference-guides/rancher-security/hardening-guides/k3s-hardening-guide/k3s-self-assessment-guide-with-cis-v1.7-k8s-v1.25-v1.26-v1.27",
from: "/reference-guides/rancher-security/hardening-guides/k3s-hardening-guide/k3s-self-assessment-guide-with-cis-v1.23-k8s-v1.25"
},
{
- to: "/v2.7/reference-guides/rancher-security/hardening-guides/k3s-hardening-guide/k3s-self-assessment-guide-with-cis-v1.7-k8s-v1.25",
+ to: "/v2.7/reference-guides/rancher-security/hardening-guides/k3s-hardening-guide/k3s-self-assessment-guide-with-cis-v1.7-k8s-v1.25-v1.26-v1.27",
from: "/v2.7/reference-guides/rancher-security/hardening-guides/k3s-hardening-guide/k3s-self-assessment-guide-with-cis-v1.23-k8s-v1.25"
},
{
- to: "/reference-guides/rancher-security/hardening-guides/rke1-hardening-guide/rke1-self-assessment-guide-with-cis-v1.7-k8s-v1.25",
+ to: "/reference-guides/rancher-security/hardening-guides/rke1-hardening-guide/rke1-self-assessment-guide-with-cis-v1.24-k8s-v1.24",
+ from: "/reference-guides/rancher-security/hardening-guides/rke1-hardening-guide/rke1-self-assessment-guide-with-cis-v1.23-k8s-v1.24"
+ },
+ {
+ to: "/v2.7/reference-guides/rancher-security/hardening-guides/rke1-hardening-guide/rke1-self-assessment-guide-with-cis-v1.24-k8s-v1.24",
+ from: "/v2.7/reference-guides/rancher-security/hardening-guides/rke1-hardening-guide/rke1-self-assessment-guide-with-cis-v1.23-k8s-v1.24"
+ },
+ {
+ to: "/reference-guides/rancher-security/hardening-guides/rke1-hardening-guide/rke1-self-assessment-guide-with-cis-v1.7-k8s-v1.25-v1.26-v1.27",
from: "/reference-guides/rancher-security/hardening-guides/rke1-hardening-guide/rke1-self-assessment-guide-with-cis-v1.23-k8s-v1.25"
},
{
- to: "/v2.7/reference-guides/rancher-security/hardening-guides/rke1-hardening-guide/rke1-self-assessment-guide-with-cis-v1.7-k8s-v1.25",
+ to: "/v2.7/reference-guides/rancher-security/hardening-guides/rke1-hardening-guide/rke1-self-assessment-guide-with-cis-v1.7-k8s-v1.25-v1.26-v1.27",
from: "/v2.7/reference-guides/rancher-security/hardening-guides/rke1-hardening-guide/rke1-self-assessment-guide-with-cis-v1.23-k8s-v1.25"
},
{
- to: "/reference-guides/rancher-security/hardening-guides/rke2-hardening-guide/rke2-self-assessment-guide-with-cis-v1.7-k8s-v1.25",
+ to: "/reference-guides/rancher-security/hardening-guides/rke2-hardening-guide/rke2-self-assessment-guide-with-cis-v1.24-k8s-v1.24",
+ from: "/reference-guides/rancher-security/hardening-guides/rke2-hardening-guide/rke2-self-assessment-guide-with-cis-v1.23-k8s-v1.24"
+ },
+ {
+ to: "/v2.7/reference-guides/rancher-security/hardening-guides/rke2-hardening-guide/rke2-self-assessment-guide-with-cis-v1.24-k8s-v1.24",
+ from: "/v2.7/reference-guides/rancher-security/hardening-guides/rke2-hardening-guide/rke2-self-assessment-guide-with-cis-v1.23-k8s-v1.24"
+ },
+ {
+ to: "/reference-guides/rancher-security/hardening-guides/rke2-hardening-guide/rke2-self-assessment-guide-with-cis-v1.7-k8s-v1.25-v1.26-v1.27",
from: "/reference-guides/rancher-security/hardening-guides/rke2-hardening-guide/rke2-self-assessment-guide-with-cis-v1.23-k8s-v1.25"
},
{
- to: "/v2.7/reference-guides/rancher-security/hardening-guides/rke2-hardening-guide/rke2-self-assessment-guide-with-cis-v1.7-k8s-v1.25",
+ to: "/v2.7/reference-guides/rancher-security/hardening-guides/rke2-hardening-guide/rke2-self-assessment-guide-with-cis-v1.7-k8s-v1.25-v1.26-v1.27",
from: "/v2.7/reference-guides/rancher-security/hardening-guides/rke2-hardening-guide/rke2-self-assessment-guide-with-cis-v1.23-k8s-v1.25"
}
],
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/backups/docker-installs/docker-installs.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/backups/docker-installs/docker-installs.md
new file mode 100644
index 00000000000..51c3001d777
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/backups/docker-installs/docker-installs.md
@@ -0,0 +1,6 @@
+---
+title: 备份和�� Docker 安装的 Rancher
+---
+
+- [备份](../../how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/back-up-docker-installed-rancher.md)
+- [还原](../../how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/restore-docker-installed-rancher.md)
\ No newline at end of file
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/cluster-provisioning/rke-clusters/options/options.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/cluster-provisioning/rke-clusters/options/options.md
new file mode 100644
index 00000000000..39c332461ce
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/cluster-provisioning/rke-clusters/options/options.md
@@ -0,0 +1,5 @@
+---
+title: RKE 集群�置
+---
+
+本文已è¿�移到[æ¤å¤„](../../../reference-guides/cluster-configuration/rancher-server-configuration/rke1-cluster-configuration.md)。
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/contribute-to-rancher.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/contribute-to-rancher.md
new file mode 100644
index 00000000000..baff7b735b9
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/contribute-to-rancher.md
@@ -0,0 +1,136 @@
+---
+title: �与 Rancher 社区贡献
+---
+
+本文介�了 Rancher 仓库和 Rancher 文档�如何构建 Rancher 仓库以��交 issue 时�包�哪些信�。
+
+有关如何为 Rancher 项目开��出贡献的更多详细信�,请�阅 [Rancher Developer Wiki](https://github.com/rancher/rancher/wiki)。Wiki 包�以下主题的资�:
+
+- 如何æ�建 Rancher å¼€å�‘环境并è¿�行测试
+- Issue 在开å�‘生命周期ä¸çš„典型æµ�程
+- ç¼–ç �指å�—和开å�‘最佳实践
+- 调试和故障排除
+- 开� Rancher API
+
+在 Rancher Users Slack 上,开�者的频�是 **#developer**。
+
+## Rancher 文档
+
+å¦‚æžœä½ å¯¹æ¤ç½‘站上的文档有建议,请在主 [Rancher 文档](https://github.com/rancher/rancher-docs)仓库ä¸[æ��交 issue](https://github.com/rancher/rancher-docs/issues/new/choose)。æ¤ä»“库包å�« Rancher v2.0 å�Šæ›´é«˜ç‰ˆæœ¬çš„æ–‡æ¡£ã€‚
+
+有关贡献和构建 Rancher v2.x 文档仓库的更多详细信�,请�阅 [Rancher 文档 README](https://github.com/rancher/rancher-docs#readme)。
+
+有关 Rancher v1.6 å�Šæ›´æ—©ç‰ˆæœ¬çš„æ–‡æ¡£ï¼Œè¯·å�‚阅 [Rancher 1.x docs](https://github.com/rancher/rancher.github.io) 仓库,其ä¸åŒ…å�« https://rancher.com/docs/rancher/v1.6/en/ çš„æº�文件。
+
+## Rancher 仓库
+
+所有仓库都�于我们的主� GitHub 组织内。Rancher 使用了很多仓库,以下是部分主�仓库的�述:
+
+| 仓库 | URL | �述 |
+-----------|-----|-------------
+| Rancher | https://github.com/rancher/rancher | Rancher 2.x 的主è¦�æº�ç �仓库。 |
+| Types | https://github.com/rancher/types | 包� Rancher 2.x 的所有 API 类型的仓库。 |
+| API Framework | https://github.com/rancher/norman | API 框架,用于构建由 Kubernetes 自定义资æº�支æŒ�çš„ Rancher é£Žæ ¼çš„ API。 |
+| User Interface | https://github.com/rancher/dashboard/ | Dashboard UI æº�ç �仓库。 |
+| (Rancher) Docker Machine | https://github.com/rancher/machine | 使用主机驱动时使用的 Docker Machine 二进制文件的æº�ç �仓库。这是 `docker/machine` 仓库的一个 fork。 |
+| machine-package | https://github.com/rancher/machine-package | 用于构建 Rancher Docker Machine 二进制文件。 |
+| kontainer-engine | https://github.com/rancher/kontainer-engine | kontainer-engine çš„æº�ç �仓库,它是é…�置托管 Kubernetes 集群的工具。 |
+| RKE repository | https://github.com/rancher/rke | Rancher Kubernetes Engine çš„æº�ç �仓库,该工具å�¯åœ¨ä»»ä½•主机上é…�ç½® Kubernetes 集群。 |
+| CLI | https://github.com/rancher/cli | Rancher 2.x ä¸ä½¿ç”¨çš„ Rancher CLI çš„æº�ç �仓库。 |
+| (Rancher) Helm repository | https://github.com/rancher/helm | 打包的 Helm 二进制文件的æº�ç �仓库。这是 `helm/helm` 仓库的一个 fork。 |
+| Telemetry repository | https://github.com/rancher/telemetry | Telemetry 二进制文件的æº�ç �仓库。 |
+| loglevel repository | https://github.com/rancher/loglevel | loglevel 二进制文件的æº�ç �仓库,用于动æ€�更改日志级别。 |
+
+è¦�查看 Rancher 使用的所有库/项目,请查看 `rancher/rancher` 仓库ä¸çš„ [`go.mod` 文件](https://github.com/rancher/rancher/blob/master/go.mod)。
+
+
+用于�置/管� Kubernetes 集群的 Rancher 组件。
+
+### 构建 Rancher 仓库
+
+æ¯�个仓库都应该有一个 Makefile,并且å�¯ä»¥ä½¿ç”¨ `make` 命令进行构建。`make` ç›®æ ‡åŸºäºŽä»“åº“ä¸ `/scripts` 目录ä¸çš„脚本,æ¯�ä¸ªç›®æ ‡éƒ½ä½¿ç”¨ [Dapper](https://github.com/rancher/dapper) 在å¤ç«‹çš„环境ä¸è¿�行。`Dockerfile.dapper` å°†ç”¨äºŽæ¤æ“�作,它包å�«äº†æ‰€éœ€çš„æ‰€æœ‰æž„建工具。
+
+é»˜è®¤ç›®æ ‡æ˜¯ `ci`,它将è¿�行 `./scripts/validate`ã€�`./scripts/build`ã€�`./scripts/test ` å’Œ `./scripts/package`。生æˆ�的二进制文件将在 `./build/bin` ä¸ï¼Œé€šå¸¸ä¹Ÿæ‰“包在 Docker 镜åƒ�ä¸ã€‚
+
+### Rancher Bug�Issue 或疑问
+
+å¦‚æžœä½ å�‘现任何 bug 或问题,由于有人å�¯èƒ½é�‡åˆ°è¿‡å�Œæ ·çš„问题,或者我们已ç»�æ£åœ¨å¯»æ‰¾è§£å†³æ–¹æ¡ˆï¼Œå› æ¤è¯·å…ˆåœ¨[已报告 issue](https://github.com/rancher/rancher/issues) 䏿�œç´¢ã€‚
+
+如果找ä¸�åˆ°ä¸Žä½ çš„é—®é¢˜ç›¸å…³çš„å†…å®¹ï¼Œè¯·é€šè¿‡[æ��出 issue](https://github.com/rancher/rancher/issues/new) 与我们è�”系。与 Rancher 相关的仓库有很多,但请将 issue æ��交到 Rancher 仓库ä¸ï¼Œè¿™æ ·èƒ½ç¡®ä¿�我们能看到这些 issueã€‚å¦‚æžœä½ æƒ³å°±ä¸€ä¸ªç”¨ä¾‹æ��å‡ºé—®é¢˜æˆ–è¯¢é—®å…¶ä»–ç”¨æˆ·ï¼Œä½ å�¯ä»¥åœ¨ [Rancher 论å�›](https://forums.rancher.com)上å�‘帖。
+
+#### �交 Issue 的检查清�
+
+æ��交问题时请é�µå¾ªæ¤æ¸…å�•ï¼Œä»¥ä¾¿æˆ‘ä»¬è°ƒæŸ¥å’Œè§£å†³é—®é¢˜ã€‚å¦‚æžœä½ èƒ½æ��供更多信æ�¯ï¼Œæˆ‘们就å�¯ä»¥ä½¿ç”¨æ›´å¤šæ•°æ�®æ�¥ç¡®å®šå¯¼è‡´é—®é¢˜çš„åŽŸå› æˆ–å�‘现更多相关的内容。
+
+:::note
+
+如果数æ�®é‡�很大,请使用 [GitHub Gist](https://gist.github.com/) 或类似工具,并在 issue ä¸é“¾æŽ¥ä½ 创建的资æº�。
+
+:::
+
+:::note ���示:
+
+è¯·åˆ é™¤æ‰€æœ‰æ•�感数æ�®ã€‚
+
+:::
+
+- **资æº�**:请尽é‡�详细地æ��供所使用的资æº�ã€‚å¯¼è‡´é—®é¢˜çš„åŽŸå› å�¯èƒ½å¾ˆå¤šï¼Œå› æ¤è¯·å°½é‡�æ��供更多细节æ�¥å¸®åŠ©æˆ‘ä»¬ç¡®å®šæ ¹æœ¬åŽŸå› ã€‚ä¸‹é�¢æ˜¯ä¸€äº›å�‚考示例:
+ - **主机**ï¼šä¸»æœºçš„è§„æ ¼ï¼ˆä¾‹å¦‚ CPU/内å˜/ç£�盘),è¿�行在什么云厂商上,使用的 Amazon Machine Image,使用的 DigitalOcean droplet,é…�置的镜åƒ�(å¤�现时用于é‡�新构建或使用)。
+ - **æ“�作系统**:使用的是什么æ“�作系统。在æ¤å¤„æ��供详细信æ�¯ï¼Œä¾‹å¦‚ `cat /etc/os-release` 的输出(确切的æ“�作系统版本)和 `uname -r` çš„è¾“å‡ºï¼ˆç¡®åˆ‡çš„å†…æ ¸ï¼‰ã€‚
+ - **Docker**:使用的 Docker 版本以å�Šå®‰è£…的方法。Docker 的大部分详情都å�¯ä»¥åœ¨ `docker version` å’Œ `docker info` çš„è¾“å‡ºä¸æ‰¾åˆ°ã€‚
+ - **环境**:是å�¦ä½¿ç”¨äº†ä»£ç�†ï¼Œæ˜¯å�¦ä½¿ç”¨å�¯ä¿¡çš„ CA/自ç¾å��è¯�书,是å�¦ä½¿ç”¨äº†å¤–部负载å�‡è¡¡å™¨ã€‚
+ - **Rancher**:使用的 Rancher 版本,å�¯ä»¥åœ¨ UI 左下角或者从主机è¿�行的 image æ ‡ç¾ä¸èŽ·å�–。
+ - **集群**ï¼šåˆ›å»ºäº†ä»€ä¹ˆæ ·çš„é›†ç¾¤ï¼Œå¦‚ä½•åˆ›å»ºçš„ï¼Œåœ¨åˆ›å»ºæ—¶æŒ‡å®šäº†ä»€ä¹ˆå�‚数。
+- **å¤�现 issue çš„æ¥éª¤**:尽é‡�è¯¦ç»†åœ°è¯´æ˜Žä½ æ˜¯å¦‚ä½•è§¦å�‘所报告的情况的。这有助于å¤�çŽ°ä½ çš„æƒ…å†µã€‚
+ - æ��ä¾›ä»Žåˆ›å»ºåˆ°ä½ æŠ¥å‘Šçš„æƒ…å†µä½¿ç”¨çš„æ‰‹åŠ¨æ¥éª¤æˆ–自动化脚本。
+- **日志**:�供使用资�的数�/日志。
+ - Rancher
+ - Docker 安装
+
+ ```
+ docker logs \
+ --timestamps \
+ $(docker ps | grep -E "rancher/rancher:|rancher/rancher " | awk '{ print $1 }')
+ ```
+ - 使用 `kubectl` 的 Kubernetes 安装
+
+ :::note
+
+ ç¡®ä¿�ä½ é…�置了æ£ç¡®çš„ kubeconfig(例如,如果 Rancher 安装在 Kubernetes 集群上,则 `export KUBECONFIG=$PWD/kube_config_cluster.yml`)或通过 UI 使用了嵌入å¼� kubectl。
+
+ :::
+
+ ```
+ kubectl -n cattle-system \
+ logs \
+ -l app=rancher \
+ --timestamps=true
+ ```
+ - 在 RKE 集群的�个节点上使用 `docker` 的 Docker 安装
+
+ ```
+ docker logs \
+ --timestamps \
+ $(docker ps | grep -E "rancher/rancher@|rancher_rancher" | awk '{ print $1 }')
+ ```
+ - 使用 RKE é™„åŠ ç»„ä»¶çš„ Kubernetes 安装
+
+ :::note
+
+ ç¡®ä¿�ä½ é…�置了æ£ç¡®çš„ kubeconfig(例如,如果 Rancher Server 安装在 Kubernetes 集群上,则 `export KUBECONFIG=$PWD/kube_config_cluster.yml`)或通过 UI 使用了嵌入å¼� kubectl。
+
+ :::
+
+ ```
+ kubectl -n cattle-system \
+ logs \
+ --timestamps=true \
+ -f $(kubectl --kubeconfig $KUBECONFIG get pods -n cattle-system -o json | jq -r '.items[] | select(.spec.containers[].name="cattle-server") | .metadata.name')
+ ```
+ - 系统日志记录(å�¯èƒ½ä¸�å˜åœ¨ï¼Œå�–决于æ“�作系统)
+ - `/var/log/messages`
+ - `/var/log/syslog`
+ - `/var/log/kern.log`
+ - Docker Daemon 日志记录(å�¯èƒ½å¹¶ä¸�全部å˜åœ¨ï¼Œå�–决于æ“�作系统)
+ - `/var/log/docker.log`
+- **æŒ‡æ ‡**ï¼šå¦‚æžœä½ é�‡åˆ°æ€§èƒ½é—®é¢˜ï¼Œè¯·æ��供尽å�¯èƒ½å¤šçš„æŒ‡æ ‡æ•°æ�®ï¼ˆæ–‡ä»¶æˆ–å±�幕截图)æ�¥å¸®åŠ©æˆ‘ä»¬ç¡®å®šé—®é¢˜ã€‚å¦‚æžœä½ é�‡åˆ°ä¸»æœºç›¸å…³çš„é—®é¢˜ï¼Œä½ å�¯ä»¥æ��ä¾› `top`ã€�`free -m`ã€�`df` 的输出,这些输出会显示进程/内å˜/ç£�盘的使用情况。
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/faq/container-network-interface-providers.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/faq/container-network-interface-providers.md
new file mode 100644
index 00000000000..ad796bb5c4c
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/faq/container-network-interface-providers.md
@@ -0,0 +1,204 @@
+---
+title: CNI 网络�件
+description: 了解容器网络接� (CNI)�Rancher �供的 CNI 网络�件��供商的功能,以�如何选择网络�供商
+---
+
+## 什么是 CNI?
+
+CNI(容器网络接å�£ï¼‰æ˜¯ä¸€ä¸ª[云原生计算基金会项目](https://cncf.io/),它包å�«äº†ä¸€äº›è§„范和库,用于编写在 Linux 容器ä¸é…�置网络接å�£çš„一系列æ�’件。CNI å�ªå…³æ³¨å®¹å™¨çš„ç½‘ç»œè¿žæŽ¥ï¼Œå¹¶åœ¨å®¹å™¨è¢«åˆ é™¤æ—¶ç§»é™¤æ‰€åˆ†é…�的资æº�。
+
+Kubernetes 使用 CNI 作为网络�供商和 Kubernetes Pod 网络之间的接�。
+
+
+
+有关更多信�,请访问 [CNI GitHub 项目](https://github.com/containernetworking/cni)。
+
+## CNI 使用了哪些网络模型?
+
+CNI 网络�件使用�装网络模型(例如 Virtual Extensible Lan,缩写是 [VXLAN](https://github.com/flannel-io/flannel/blob/master/Documentation/backends.md#vxlan))或��装网络模型(例如 Border Gateway Protocol,缩写是 [BGP](https://en.wikipedia.org/wiki/Border_Gateway_Protocol))�实现网络结构。
+
+### 什么是�装网络?
+
+æ¤ç½‘络模型æ��供了一个逻辑二层(L2)网络,该网络å°�装在跨 Kubernetes 集群节点的现有三层(L3ï¼‰ç½‘ç»œæ‹“æ‰‘ä¸Šã€‚ä½¿ç”¨æ¤æ¨¡åž‹ï¼Œä½ å�¯ä»¥ä¸ºå®¹å™¨æ��供一个隔离的 L2 ç½‘ç»œï¼Œè€Œæ— éœ€åˆ†å�‘路由。å°�装网络带æ�¥äº†å°‘é‡�的处ç�†å¼€é”€ä»¥å�Šç”±äºŽè¦†ç›–å°�装生æˆ� IP header é€ æˆ�çš„ IP 包大å°�å¢žåŠ ã€‚å°�装信æ�¯ç”± Kubernetes worker 之间的 UDP 端å�£åˆ†å�‘,交æ�¢å¦‚何访问 MAC 地å�€çš„网络控制平é�¢ä¿¡æ�¯ã€‚æ¤ç±»ç½‘络模型ä¸å¸¸ç”¨çš„å°�装是 VXLANã€�Internet å��议安全性 (IPSec) å’Œ IP-in-IP。
+
+简å�•æ�¥è¯´ï¼Œè¿™ç§�网络模型在 Kubernetes worker 之间生æˆ�了一ç§�扩展网桥,其ä¸è¿žæŽ¥äº† pod。
+
+å¦‚æžœä½ å��å�‘使用扩展 L2 网桥,则å�¯ä»¥é€‰æ‹©æ¤ç½‘络模型。æ¤ç½‘络模型对 Kubernetes worker çš„ L3 网络延迟很æ•�感。如果数æ�®ä¸å¿ƒä½�于ä¸�å�Œçš„地ç�†ä½�置,请确ä¿�它们之间的延迟较低,以é�¿å…�最终的网络分段。
+
+使用这ç§�网络模型的 CNI 网络æ�’件包括 Flannelã€�Canalã€�Weave å’Œ Cilium。默认情况下,Calico ä¸�ä¼šä½¿ç”¨æ¤æ¨¡åž‹ï¼Œä½†ä½ å�¯ä»¥å¯¹å…¶è¿›è¡Œé…�置。
+
+
+
+### 什么是��装网络?
+
+该网络模型æ��供了一个 L3 网络,用于在容器之间路由数æ�®åŒ…ã€‚æ¤æ¨¡åž‹ä¸�会生æˆ�隔离的 L2 网络,也ä¸�会产生开销。这些好处的代价是,Kubernetes worker 必须管ç�†æ‰€éœ€çš„æ‰€æœ‰è·¯ç”±åˆ†å�‘。该网络模型ä¸�使用 IP header 进行å°�装,而是使用 Kubernetes Worker 之间的网络å��è®®æ�¥åˆ†å�‘路由信æ�¯ä»¥å®žçް Pod 连接,例如 [BGP](https://en.wikipedia.org/wiki/Border_Gateway_Protocol)。
+
+简而言之,这�网络模型在 Kubernetes worker 之间生�了一�扩展网络路由器,�供了如何连接 Pod 的信�。
+
+å¦‚æžœä½ å��å�‘使用 L3 网络,则å�¯ä»¥é€‰æ‹©æ¤ç½‘ç»œæ¨¡åž‹ã€‚æ¤æ¨¡åž‹åœ¨æ“�作系统级别为 Kubernetes Worker 动æ€�更新路由。对延迟较ä¸�æ•�感。
+
+使用这ç§�网络模型的 CNI 网络æ�’件包括 Calico å’Œ Cilium。Cilium å�¯ä»¥ä½¿ç”¨æ¤æ¨¡åž‹è¿›è¡Œé…�置,å�³ä½¿è¿™ä¸�是默认模å¼�。
+
+
+
+## Rancher �供哪些 CNI �件?
+
+### RKE Kubernetes 集群
+
+Rancher 开箱å�³ç”¨åœ°ä¸º RKE Kubernetes 集群æ��ä¾›äº†å‡ ä¸ª CNI 网络æ�’件,分别是 Canalã€�Flannelã€�Calico å’Œ Weave。
+
+å¦‚æžœä½ ä½¿ç”¨ Rancher 创建新的 Kubernetes é›†ç¾¤ï¼Œä½ å�¯ä»¥é€‰æ‹©ä½ çš„ CNI 网络æ�’件。
+
+#### Canal
+
+
+
+Canal 是一个 CNI 网络æ�’件,它很好地结å�ˆäº† Flannel å’Œ Calico çš„ä¼˜ç‚¹ã€‚å®ƒè®©ä½ è½»æ�¾åœ°å°† Calico å’Œ Flannel 网络部署为统一的网络解决方案,将 Calico 的网络ç–略执行与 Calico(未å°�装)和 Flannel(å°�装)丰富的网络连接选项结å�ˆèµ·æ�¥ã€‚
+
+Canal 是 Rancher 默认的 CNI 网络�件,并采用了 Flannel 和 VXLAN �装。
+
+Kubernetes Worker 需�打开 UDP 端� `8472` (VXLAN) 和 TCP 端� `9099`(�康检查)。如果使用 Wireguard,则需�打开 UDP 端� `51820` 和 `51821`。有关详细信�,请�阅[下游集群的端��求](../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/node-requirements-for-rancher-managed-clusters.md)。
+
+
+
+有关详细信�,请�阅 [Canal GitHub 页�](https://github.com/projectcalico/canal)。
+
+#### Flannel
+
+
+
+Flannel 是为 Kubernetes é…�ç½® L3 网络结构的简å�•方法。Flannel 在æ¯�å�°ä¸»æœºä¸Šè¿�行一个å��为 flanneld 的二进制 Agent,该 Agent 负责从更大的预é…�置地å�€ç©ºé—´ä¸ä¸ºæ¯�å�°ä¸»æœºåˆ†é…�å�网租约。Flannel 通过 Kubernetes API 或直接使用 etcd æ�¥å˜å‚¨ç½‘络é…�ç½®ã€�分é…�çš„å�网ã€�以å�Šå…¶ä»–辅助数æ�®ï¼ˆä¾‹å¦‚主机的公共 IP)。数æ�®åŒ…使用æŸ�ç§�å�Žç«¯æœºåˆ¶æ�¥è½¬å�‘,默认å°�装为 [VXLAN](https://github.com/flannel-io/flannel/blob/master/Documentation/backends.md#vxlan)。
+
+默认情况下,å°�装的æµ�é‡�是ä¸�åŠ å¯†çš„ã€‚Flannel æ��供了两ç§�åŠ å¯†æ–¹æ¡ˆï¼š
+
+* [IPSec](https://github.com/flannel-io/flannel/blob/master/Documentation/backends.md#ipsec):使用 [strongSwan](https://www.strongswan.org/) 在 Kubernetes worker ä¹‹é—´å»ºç«‹åŠ å¯†çš„ IPSec éš§é�“ã€‚å®ƒæ˜¯åŠ å¯†çš„å®žéªŒæ€§å�Žç«¯ã€‚
+* [WireGuard](https://github.com/flannel-io/flannel/blob/master/Documentation/backends.md#wireguard):比 strongSwan 更快的替代方案。
+
+Kubernetes Worker 需�打开 UDP 端� `8472` (VXLAN)。有关详细信�,请�阅[下游集群的端��求](../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/node-requirements-for-rancher-managed-clusters.md#网络�求)。
+
+
+
+有关详细信�,请�阅 [Flannel GitHub 页�](https://github.com/flannel-io/flannel)。
+
+#### Weave
+
+
+
+Weave 在云上的 Kubernetes 集群ä¸å�¯ç”¨ç½‘络和网络ç–略。æ¤å¤–,它还支æŒ�åŠ å¯†å¯¹ç‰èŠ‚ç‚¹ä¹‹é—´çš„æµ�é‡�。
+
+Kubernetes worker 需�打开 TCP 端� `6783`(控制端�)�UDP 端� `6783` 和 UDP 端� `6784`(数�端�)。有关详细信�,请�阅[下游集群的端��求](../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/node-requirements-for-rancher-managed-clusters.md#网络�求)。
+
+有关详细信�,请�阅以下页�:
+
+- [Weave Net 官网](https://www.weave.works/)
+
+### RKE2 Kubernetes 集群
+
+Rancher 开箱å�³ç”¨åœ°ä¸º RKE2 Kubernetes 集群æ��ä¾›äº†å‡ ä¸ª CNI 网络æ�’件,分别是 [Canal](#canal)(è§�上一节)ã€�Calico å’Œ Cilium。
+
+å¦‚æžœä½ ä½¿ç”¨ Rancher 创建新的 Kubernetes é›†ç¾¤ï¼Œä½ å�¯ä»¥é€‰æ‹©ä½ çš„ CNI 网络æ�’件。
+
+#### Calico
+
+
+
+Calico 在云上的 Kubernetes 集群ä¸å�¯ç”¨ç½‘络和网络ç–略。默认情况下,Calico 使用纯净ã€�未å°�装的 IP 网络结构和ç–略引擎为 Kubernetes 工作负载æ��供网络。工作负载能够使用 BGP 在云上和本地进行通信。
+
+Calico 还æ��供了一ç§�æ— çŠ¶æ€�çš„ IP-in-IP 或 VXLAN å°�装模å¼�。如果需è¦�ï¼Œä½ å�¯ä»¥ä½¿ç”¨å®ƒã€‚Calico 还支æŒ�ç–ç•¥éš”ç¦»ï¼Œè®©ä½ ä½¿ç”¨é«˜çº§ ingress å’Œ egress ç–ç•¥ä¿�护和管ç�† Kubernetes 工作负载。
+
+如果使用 BGP,Kubernetes Worker 需�打开 TCP 端� `179`,如果使用 VXLAN �装,则需�打开 UDP 端� `4789`。�外,使用 Typha 时需� TCP 端� `5473`。有关详细信�,请�阅[下游集群的端��求](../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/node-requirements-for-rancher-managed-clusters.md#网络�求)。
+
+:::note ���示:
+
+在 Rancher 2.6.3 ä¸ï¼ŒCalico 探测到在安装 RKE2 æ—¶ Windows 节点会失败。请注æ„�,æ¤é—®é¢˜å·²åœ¨ v2.6.4 ä¸è§£å†³ã€‚
+
+- è¦�解决æ¤é—®é¢˜ï¼Œè¯·å…ˆå¯¼èˆªåˆ° `https:///v3/settings/windows-rke2-install-script`。
+
+- 在那里,将当�设置 `https://raw.githubusercontent.com/rancher/wins/v0.1.3/install.ps1` 更改为新设置 `https://raw.githubusercontent .com/rancher/rke2/master/windows/rke2-install.ps1`。
+
+:::
+
+
+
+有关详细信�,请�阅以下页�:
+
+- [Project Calico 官方网站](https://www.projectcalico.org/)
+- [Calico 项目 GitHub 页�](https://github.com/projectcalico/calico)
+
+#### Cilium
+
+
+
+Cilium 在 Kubernetes ä¸å�¯ç”¨ç½‘络和网络ç–略(L3ã€�L4 å’Œ L7)。默认情况下,Cilium 使用 eBPF 技术在节点内部路由数æ�®åŒ…,并使用 VXLAN 将数æ�®åŒ…å�‘é€�åˆ°å…¶ä»–èŠ‚ç‚¹ã€‚ä½ ä¹Ÿå�¯ä»¥é…�ç½®é�žå°�装的技术。
+
+Cilium 推è��大于 5.2 çš„å†…æ ¸ç‰ˆæœ¬ï¼Œä»Žè€Œå……åˆ†åˆ©ç”¨ eBPF 的能力。Kubernetes worker 需è¦�打开 TCP 端å�£ `8472`(VXLAN)和 TCP 端å�£ `4240`(å�¥åº·æ£€æŸ¥ï¼‰ã€‚æ¤å¤–,还必须为å�¥åº·æ£€æŸ¥å�¯ç”¨ ICMP 8/0。有关详细信æ�¯ï¼Œè¯·æŸ¥çœ‹ [Cilium 系统è¦�求](https://docs.cilium.io/en/latest/operations/system_requirements/#firewall-requirements)。
+
+##### Cilium ä¸è·¨èŠ‚ç‚¹çš„ Ingress 路由
+
+默认情况下,Cilium ä¸�å…�许 Pod 与其他节点上的 Pod 通信。è¦�解决æ¤é—®é¢˜ï¼Œè¯·å�¯ç”¨ Ingress Controller 以使用 “CiliumNetworkPolicyâ€� 进行跨节点路由请求。
+
+选择 Cilium CNI 并为新集群�用项目网络隔离�,�置如下:
+
+```
+apiVersion: cilium.io/v2
+kind: CiliumNetworkPolicy
+metadata:
+ name: hn-nodes
+ namespace: default
+spec:
+ endpointSelector: {}
+ ingress:
+ - fromEntities:
+ - remote-node
+```
+
+## �个网络�件的 CNI 功能
+
+下表总结了 Rancher 䏿¯�个 CNI 网络æ�’件支æŒ�çš„ä¸�å�ŒåŠŸèƒ½ï¼š
+
+| æ��供商 | 网络模型 | 路线分å�‘ | 网络ç–ç•¥ | ç½‘æ ¼ | 外部数æ�®å˜å‚¨ | åŠ å¯† | Ingress/Egress ç–ç•¥ |
+| ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- |
+| Canal | �装 (VXLAN) | � | 是 | � | K8s API | 是 | 是 |
+| Flannel | �装 (VXLAN) | � | � | � | K8s API | 是 | � |
+| Calico | �装(VXLAN,IPIP)或未�装 | 是 | 是 | 是 | Etcd 和 K8s API | 是 | 是 |
+| Weave | �装 | 是 | 是 | 是 | � | 是 | 是 |
+| Cilium | �装 (VXLAN) | 是 | 是 | 是 | Etcd 和 K8s API | 是 | 是 |
+
+- 网络模型:å°�装或未å°�装。如需更多信æ�¯ï¼Œè¯·å�‚阅 [CNI ä¸ä½¿ç”¨çš„网络模型](#cni-使用了哪些网络模型)。
+
+- 路由分å�‘:一ç§�外部网关å��议,用于在互è�”网上交æ�¢è·¯ç”±å’Œå�¯è¾¾æ€§ä¿¡æ�¯ã€‚BGP å�¯ä»¥å¸®åŠ©è¿›è¡Œè·¨é›†ç¾¤ pod 之间的网络。æ¤åŠŸèƒ½å¯¹äºŽæœªå°�装的 CNI 网络æ�’件是必须的,并且通常由 BGP 完æˆ�ã€‚å¦‚æžœä½ æƒ³æž„å»ºè·¨ç½‘æ®µæ‹†åˆ†çš„é›†ç¾¤ï¼Œè·¯ç”±åˆ†å�‘是一个很好的功能。
+
+- 网络ç–略:Kubernetes æ��供了强制执行规则的功能,这些规则决定了哪些 service å�¯ä»¥ä½¿ç”¨ç½‘络ç–略进行相互通信。这是从 Kubernetes 1.7 起稳定的功能,å�¯ä»¥ä¸ŽæŸ�些网络æ�’件一起使用。
+
+- ç½‘æ ¼ï¼šå…�许在ä¸�å�Œçš„ Kubernetes 集群间进行 service 之间的网络通信。
+
+- 外部数æ�®å˜å‚¨ï¼šå…·æœ‰æ¤åŠŸèƒ½çš„ CNI 网络æ�’件需è¦�一个外部数æ�®å˜å‚¨æ�¥å˜å‚¨æ•°æ�®ã€‚
+
+- åŠ å¯†ï¼šå…�è®¸åŠ å¯†å’Œå®‰å…¨çš„ç½‘ç»œæŽ§åˆ¶å’Œæ•°æ�®å¹³é�¢ã€‚
+
+- Ingress/Egress ç–略:å…�è®¸ä½ ç®¡ç�† Kubernetes å’Œé�ž Kubernetes 通信的路由控制。
+
+
+## CNI 社区人气
+
+下表总结了ä¸�å�Œçš„ GitHub æŒ‡æ ‡ï¼Œè®©ä½ äº†è§£æ¯�个项目的å�—欢迎程度和活动。数æ�®æ”¶é›†äºŽ 2022 å¹´ 1 月。
+
+| �供商 | 项目 | Stars | Forks | Contributors |
+| ---- | ---- | ---- | ---- | ---- |
+| Canal | https://github.com/projectcalico/canal | 679 | 100 | 21 |
+| Flannel | https://github.com/flannel-io/flannel | 7k | 2.5k | 185 |
+| Calico | https://github.com/projectcalico/calico | 3.1k | 741 | 224 |
+| Weave | https://github.com/weaveworks/weave/ | 6.2k | 635 | 84 |
+| Cilium | https://github.com/cilium/cilium | 10.6k | 1.3k | 352 |
+
+
+
+## 使用哪个 CNI �件?
+
+è¿™å�–å†³äºŽä½ çš„é¡¹ç›®éœ€æ±‚ã€‚å�„个æ��供商都有ä¸�å�Œçš„功能和选项。没有一个æ��供商å�¯ä»¥æ»¡è¶³æ‰€æœ‰ç”¨æˆ·çš„需求。
+
+Canal 是默认的 CNI 网络æ�’件。对于大多数用例,我们推è��ä½ ä½¿ç”¨å®ƒã€‚å®ƒä½¿ç”¨ Flannel 为容器æ��ä¾›å°�装网络,å�Œæ—¶æ·»åŠ Calico 网络ç–略,å�¯ä»¥åœ¨ç½‘络方é�¢æ��供项目/命å��空间隔离。
+
+## 如何�置 CNI 网络�件?
+
+å¦‚éœ€äº†è§£å¦‚ä½•ä¸ºä½ çš„é›†ç¾¤é…�置网络æ�’件,请å�‚阅[集群选项](../reference-guides/cluster-configuration/rancher-server-configuration/rke1-cluster-configuration.md)。有关更高级的é…�置选项,请å�‚阅有关使用[é…�置文件](../reference-guides/cluster-configuration/rancher-server-configuration/rke1-cluster-configuration.md#rke-集群é…�置文件å�‚考)å’Œ[网络æ�’ä»¶](https://rancher.com/docs/rke/latest/en/config-options/add-ons/network-plugins/)选项æ�¥é…�置集群的说明。
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/faq/deprecated-features-in-v2.5.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/faq/deprecated-features-in-v2.5.md
new file mode 100644
index 00000000000..ec1898663b2
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/faq/deprecated-features-in-v2.5.md
@@ -0,0 +1,26 @@
+---
+title: Rancher 弃用的功能
+---
+
+### Rancher 的弃用ç–略是什么?
+
+我们在支æŒ�[æœ�务æ�¡æ¬¾](https://rancher.com/support-maintenance-terms)ä¸å�‘布了官方弃用ç–略。
+
+### 在哪里�以找到 Rancher 已弃用的功能?
+
+Rancher 会在 GitHub 上的[å�‘行说明](https://github.com/rancher/rancher/releases)ä¸å…¬å¸ƒå·²å¼ƒç”¨çš„功能。请å�‚阅以下补ä¸�版本了解已弃用的功能:
+
+| 补�版本 | �布日期 |
+|---------------|---------------|
+| [2.6.0](https://github.com/rancher/rancher/releases/tag/v2.6.0) | 2021 年 8 月 31 日 |
+| [2.6.1](https://github.com/rancher/rancher/releases/tag/v2.6.1) | 2021 年 10 月 11 日 |
+| [2.6.2](https://github.com/rancher/rancher/releases/tag/v2.6.2) | 2021 年 10 月 19 日 |
+| [2.6.3](https://github.com/rancher/rancher/releases/tag/v2.6.3) | 2021 年 12 月 21 日 |
+| [2.6.4](https://github.com/rancher/rancher/releases/tag/v2.6.4) | 2022 年 3 月 31 日 |
+| [2.6.5](https://github.com/rancher/rancher/releases/tag/v2.6.5) | 2022 年 5 月 12 日 |
+| [2.6.6](https://github.com/rancher/rancher/releases/tag/v2.6.6) | 2022 年 6 月 30 日 |
+
+
+### 如果æŸ�ä¸ªåŠŸèƒ½æ ‡è®°ä¸ºå¼ƒç”¨ï¼Œæˆ‘è¦�怎么å�šï¼Ÿ
+
+如果æŸ�个å�‘行版将æŸ�åŠŸèƒ½æ ‡è®°ä¸º"Deprecated"(已弃用),该功能ä»�ç„¶å�¯ç”¨å¹¶å�—支æŒ�,从而å…�许用户按照常规æµ�程进行å�‡çº§ã€‚在å�‡çº§åˆ°è¯¥åŠŸèƒ½è¢«æ ‡è®°ä¸º"å·²åˆ é™¤"çš„å�‘行版å‰�,用户/管ç�†å‘˜åº”该计划剥离该功能。对于新部署,我们建议ä¸�è¦�使用已弃用的功能。
\ No newline at end of file
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/faq/dockershim.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/faq/dockershim.md
new file mode 100644
index 00000000000..cfab0dfbaf4
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/faq/dockershim.md
@@ -0,0 +1,45 @@
+---
+title: Dockershim
+---
+
+Dockershim 是 Kubelet å’Œ Docker Daemon 之间的 CRI 兼容层。Kubernetes 1.20 版本宣布了[ç§»é™¤æ ‘å†… Dockershim](https://kubernetes.io/blog/2020/12/02/dont-panic-kubernetes-and-docker/)。目å‰�计划在 Kubernetes 1.24 ä¸ç§»é™¤ã€‚有关æ¤ç§»é™¤çš„æ›´å¤šä¿¡æ�¯ä»¥å�Šæ—¶é—´çº¿ï¼Œè¯·å�‚è§� [Kubernetes Dockershim 弃用相关的常è§�问题](https://kubernetes.io/blog/2020/12/02/dockershim-faq/#when-will-dockershim-be-removed)。
+
+从 Kubernetes 1.21 开始。RKE 集群支æŒ�外部 Dockershim,æ�¥è®©ç”¨æˆ·ç»§ç»ä½¿ç”¨ Docker 作为 CRI è¿�行时。现在,我们通过使用 [Mirantis å’Œ Docker ](https://www.mirantis.com/blog/mirantis-to-take-over-support-of-kubernetes-dockershim-2/) æ�¥ç¡®ä¿� RKE 集群å�¯ä»¥ç»§ç»ä½¿ç”¨ Docker,从而实现上游开æº�社区的 Dockershim。
+
+��用外部 Dockershim,�置以下选项:
+
+```
+enable_cri_dockerd: true
+```
+
+å¦‚æžœä½ æƒ³ä½¿ç”¨å…¶ä»–å®¹å™¨è¿�行时,Rancher 也æ��供使用 Containerd 作为默认è¿�行时的,以边缘为ä¸å¿ƒçš„ K3s,和以数æ�®ä¸å¿ƒä¸ºä¸å¿ƒçš„ RKE2 Kubernetes å�‘行版。å�³ä½¿åœ¨ Kubernetes 1.24 åˆ é™¤äº†æ ‘å†… Dockershim 之å�Žï¼Œä½ 也å�¯ä»¥é€šè¿‡ Rancher å�‡çº§å’Œç®¡ç�†å¯¼å…¥çš„ RKE2 å’Œ K3s Kubernetes 集群。
+
+### 常�问题
+
+
+
+Q. 如果�获得 Rancher 对上游 Dockershim 的支�,我需��级 Rancher �?
+
+对于 RKE,Dockershim 的上游支æŒ�从 Kubernetes 1.21 å¼€å§‹ã€‚ä½ éœ€è¦�使用 Rancher 2.6 或更高版本æ‰�能获å�–使用 Kubernetes 1.21 çš„ RKE 的支æŒ�。详情请å�‚阅我们的[支æŒ�矩阵](https://rancher.com/support-maintenance-terms/all-supported-versions/rancher-v2.6.0/)。
+
+
+
+Q. 我目�的 RKE 使用 Kubernetes 1.20。为了��出现��支� Dockershim 的情况,我是�需�尽早将 RKE �级到 Kubernetes 1.21?
+
+A. 在使用 Kubernetes 1.20 çš„ RKE ä¸ï¼ŒDockershim 版本ä¾�ç„¶å�¯ç”¨ï¼Œè€Œä¸”在 Kubernetes 1.24 之å‰�ä¸�会在上游弃用。Kubernetes 会å�‘出弃用 Dockershim çš„è¦å‘Šï¼Œè€Œ Rancher 在使用 Kubernetes 1.21 çš„ RKE ä¸å·²ç»�ç¼“è§£äº†è¿™ä¸ªé—®é¢˜ã€‚ä½ å�¯ä»¥æŒ‰ç…§è®¡åˆ’æ£å¸¸å�‡çº§åˆ° Kubernetes 1.21,但也应该考虑在å�‡çº§åˆ° Kubernetes 1.22 æ—¶å�¯ç”¨å¤–部 Dockershim。在å�‡çº§åˆ° Kubernetes 1.24 之å‰�ï¼Œä½ éœ€è¦�å�¯ç”¨å¤–部 Dockershimï¼Œæ¤æ—¶çŽ°æœ‰çš„å®žçŽ°éƒ½ä¼šè¢«åˆ é™¤ã€‚
+
+有关æ¤ç§»é™¤çš„æ›´å¤šä¿¡æ�¯ä»¥å�Šæ—¶é—´çº¿ï¼Œè¯·å�‚è§� [Kubernetes Dockershim 弃用相关的常è§�问题](https://kubernetes.io/blog/2020/12/02/dockershim-faq/#when-will-dockershim-be-removed)。
+
+
+
+Q: 如果我�想��赖 Dockershim,我还有什么选择?
+
+A: ä½ å�¯ä»¥ä¸º Kubernetes 使用ä¸�需è¦� Dockershim 支æŒ�çš„è¿�行时,如 Containerd。RKE2 å’Œ K3s 就是其ä¸çš„两个选项。
+
+
+
+Q: 如果我目å‰�使用 RKE1,但想切æ�¢åˆ° RKE2,我å�¯ä»¥æ€Žæ ·è¿›è¡Œè¿�移?
+
+A: Rancher 也在探索就地å�‡çº§è·¯å¾„çš„å�¯èƒ½æ€§ã€‚æ¤å¤–ï¼Œä½ å§‹ç»ˆå�¯ä»¥ä½¿ç”¨ kubectl 将工作负载è¿�移到å�¦ä¸€ä¸ªé›†ç¾¤ã€‚
+
+
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/faq/general-faq.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/faq/general-faq.md
new file mode 100644
index 00000000000..45d4ae835ae
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/faq/general-faq.md
@@ -0,0 +1,69 @@
+---
+title: 一般常è§�问题解ç”
+---
+
+本文包�了用户常�的 Rancher 2.x 问题。
+
+有关常è§�技术问题,请å�‚阅[常è§�技术问题解ç”](technical-items.md)。
+
+
+
+**Rancher 2.x 支� Docker Swarm 和 Mesos 作为环境类型�?**
+
+å¦‚æžœä½ åœ¨ Rancher 2.x ä¸åˆ›å»ºçŽ¯å¢ƒï¼ŒSwarm å’Œ Mesos å°†ä¸�å†�是å�¯é€‰çš„æ ‡å‡†é€‰é¡¹ã€‚但是,Swarm å’Œ Mesos 还能继ç»ä½œä¸ºå�¯ä»¥éƒ¨ç½²çš„商店应用程åº�。这是一个艰难的决定,但这是大势所趋。比如说,15,000 多个集群å�¯èƒ½å�ªæœ‰å¤§çº¦ 200 个在è¿�行 Swarm。
+
+
+
+**是��以使用 Rancher 2.x 管� Azure Kubernetes �务?**
+
+是的。
+
+
+
+**Rancher 是�支� Windows?**
+
+Rancher 支� Windows Server 1809 容器。有关如何使用 Windows Worker 节点设置集群的详细信�,请�阅[为 Windows �置自定义集群](../pages-for-subheaders/use-windows-clusters.md)。
+
+
+
+**Rancher 是�支� Istio?**
+
+Rancher 支� [Istio](../pages-for-subheaders/istio.md)。
+
+æ¤å¤–,Istio 是在我们的微型 PaaS “Rioâ€� ä¸å®žçŽ°çš„ï¼Œå®ƒå�¯ä»¥è¿�行在 Rancher 2.x 以å�Šä»»ä½•符å�ˆ CNCF çš„ Kubernetes 集群上。详情请å�‚阅[这里](https://rio.io/)。
+
+
+
+**Rancher 2.x 是å�¦æ”¯æŒ�使用 Hashicorp çš„ Vault æ�¥å˜å‚¨å¯†æ–‡ï¼Ÿ**
+
+密文管�已在我们的 roadmap 上,但我们尚未将该功能分�给特定版本。
+
+
+
+**Rancher 2.x 是�也支� RKT 容器?**
+
+目�,我们�支� Docker。
+
+
+
+**Rancher 2.x 是å�¦æ”¯æŒ�å°† Calicoã€�Contivã€�Contrailã€�Flannelã€�Weave net ç‰ç½‘络æ�’件用于嵌入和已注册的 Kubernetes?**
+
+Rancher 开箱å�³ç”¨åœ°ä¸º Kubernetes 集群æ��ä¾›äº†å‡ ä¸ª CNI 网络æ�’件,分别是 Canalã€�Flannelã€�Calico å’Œ Weave。有关官方支æŒ�的详细信æ�¯ï¼Œè¯·å�‚阅 [Rancher 支æŒ�矩阵](https://rancher.com/support-maintenance-terms/)。
+
+
+
+**Rancher 是�计划支� Traefik?**
+
+目�,我们�打算�供嵌入� Traefik 支�,但我们�在探索负载�衡方案。
+
+
+
+**我�以将 OpenShift Kubernetes 集群导入 2.x �?**
+
+æˆ‘ä»¬çš„ç›®æ ‡æ˜¯è¿�行任何上游 Kubernetes é›†ç¾¤ã€‚å› æ¤ï¼ŒRancher 2.x 应该å�¯ä»¥ä¸Ž OpenShift 一起使用,但我们尚未对æ¤è¿›è¡Œæµ‹è¯•。
+
+
+
+**Rancher 会集� Longhorn �?**
+
+是的。Longhorn 已集æˆ�到 Rancher 2.5+ ä¸ã€‚
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/faq/install-and-configure-kubectl.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/faq/install-and-configure-kubectl.md
new file mode 100644
index 00000000000..21c301639b6
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/faq/install-and-configure-kubectl.md
@@ -0,0 +1,29 @@
+---
+title: 安装和�置 kubectl
+---
+
+`kubectl` 是一个 CLI 工具,用于è¿�行 Kubernetes 集群相关的命令。Rancher 2.x ä¸çš„许多维护和管ç�†ä»»åŠ¡éƒ½éœ€è¦�它。
+
+### 安装
+
+请å�‚阅 [kubectl 安装](https://kubernetes.io/docs/tasks/tools/install-kubectl/)å°† kubectl å®‰è£…åˆ°ä½ çš„æ“�作系统上。
+
+### �置
+
+使用 RKE 创建 Kubernetes 集群时,RKE 会在本地目录ä¸åˆ›å»ºä¸€ä¸ª `kube_config_cluster.yml`,该文件包å�«ä½¿ç”¨ `kubectl` 或 `helm` ç‰å·¥å…·è¿žæŽ¥åˆ°æ–°é›†ç¾¤çš„å‡è¯�。
+
+ä½ å�¯ä»¥å°†æ¤æ–‡ä»¶å¤�制为 `$HOME/.kube/config`ã€‚å¦‚æžœä½ ä½¿ç”¨å¤šä¸ª Kubernetes 集群,将 `KUBECONFIG` 环境å�˜é‡�设置为 `kube_config_cluster.yml` 的路径:
+
+```
+export KUBECONFIG=$(pwd)/kube_config_cluster.yml
+```
+
+使用 `kubectl` æµ‹è¯•ä½ çš„è¿žæŽ¥æ€§ï¼Œå¹¶æŸ¥çœ‹ä½ æ˜¯å�¦å�¯ä»¥èŽ·å�–节点列表:
+
+```
+kubectl get nodes
+ NAME STATUS ROLES AGE VERSION
+165.227.114.63 Ready controlplane,etcd,worker 11m v1.10.1
+165.227.116.167 Ready controlplane,etcd,worker 11m v1.10.1
+165.227.127.226 Ready controlplane,etcd,worker 11m v1.10.1
+```
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/faq/rancher-is-no-longer-needed.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/faq/rancher-is-no-longer-needed.md
new file mode 100644
index 00000000000..ffb98927c69
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/faq/rancher-is-no-longer-needed.md
@@ -0,0 +1,61 @@
+---
+title: �载 Rancher
+---
+
+本文介ç»�äº†å¦‚æžœä½ ä¸�å†�需è¦� Rancherã€�ä¸�想å†�ç”± Rancher 管ç�†é›†ç¾¤ã€�æˆ–æƒ³åˆ é™¤ Rancher Server 需è¦�怎么å�šã€‚
+
+
+### 如果 Rancher Server è¢«åˆ é™¤ï¼Œä¸‹æ¸¸é›†ç¾¤ä¸çš„å·¥ä½œè´Ÿè½½ä¼šæ€Žæ ·ï¼Ÿ
+
+如果 Rancher åˆ é™¤äº†æˆ–æ— æ³•æ�¢å¤�,Rancher 管ç�†çš„下游 Kubernetes 集群ä¸çš„æ‰€æœ‰å·¥ä½œè´Ÿè½½å°†ç»§ç»æ£å¸¸è¿�行。
+
+### å¦‚æžœåˆ é™¤äº† Rancher Server,该如何访问下游集群?
+
+å¦‚æžœåˆ é™¤äº† Rancher,访问下游集群的方å¼�å�–决于集群的类型和集群的创建方å¼�。总而言之:
+
+- **注册集群**:集群ä¸�å�—å½±å“�ï¼Œä½ å�¯ä»¥æ³¨å†Œé›†ç¾¤å‰�的方法访问该集群。
+- **托管的 Kubernetes 集群**ï¼šå¦‚æžœä½ åœ¨ Kubernetes 云æ��供商(例如 EKSã€�GKE 或 AKS)ä¸åˆ›å»ºé›†ç¾¤ï¼Œä½ å�¯ä»¥ç»§ç»ä½¿ç”¨æ��供商的云å‡è¯�æ�¥ç®¡ç�†é›†ç¾¤ã€‚
+- **RKE 集群**:è¦�访问 [RKE 集群](../pages-for-subheaders/launch-kubernetes-with-rancher.md),集群必须å�¯ç”¨äº†[授æ�ƒé›†ç¾¤ç«¯ç‚¹ï¼ˆauthorized cluster endpoint,ACE)](../reference-guides/rancher-manager-architecture/communicating-with-downstream-user-clusters.md#4-授æ�ƒé›†ç¾¤ç«¯ç‚¹)ï¼Œè€Œä¸”ä½ å¿…é¡»ä»Ž Rancher UI 下载了集群的 kubeconfig 文件。RKE 集群默认å�¯ç”¨æŽˆæ�ƒé›†ç¾¤ç«¯ç‚¹ã€‚通过使用æ¤ç«¯ç‚¹ï¼Œä½ å�¯ä»¥ç›´æŽ¥ä½¿ç”¨ kubectl è®¿é—®ä½ çš„é›†ç¾¤ï¼Œè€Œä¸�用通过 Rancher Server çš„[认è¯�代ç�†](../reference-guides/rancher-manager-architecture/communicating-with-downstream-user-clusters.md#1-认è¯�代ç�†)进行通信。有关é…�ç½® kubectl 以使用授æ�ƒé›†ç¾¤ç«¯ç‚¹çš„说明,请å�‚阅[使用 kubectl å’Œ kubeconfig 文件直接访问集群](../how-to-guides/new-user-guides/manage-clusters/access-clusters/use-kubectl-and-kubeconfig.md#直接使用下游集群进行身份验è¯�)ã€‚è¿™äº›é›†ç¾¤å°†ä½¿ç”¨åˆ é™¤ Rancher æ—¶é…�置的身份验è¯�快照。
+
+### 如果我�想�使用 Rancher 了该怎么�?
+
+:::note
+
+之�推�的 [System Tools](../reference-guides/system-tools.md) 自 2022 年 6 月起已弃用。
+
+:::
+
+å¦‚æžœä½ [在 Kubernetes 集群上安装了 Rancher](../pages-for-subheaders/install-upgrade-on-a-kubernetes-cluster.md)ï¼Œä½ å�¯ä»¥ä½¿ç”¨ [Rancher Cleanup](https://github.com/rancher/rancher-cleanup) å·¥å…·åˆ é™¤ Rancher。
+
+在高å�¯ç”¨ (HA) 模å¼�下å�¸è½½ Rancher è¿˜å°†åˆ é™¤æ‰€æœ‰ `helm-operation-*` Pod 和以下应用程åº�:
+
+- fleet
+- fleet-agent
+- rancher-operator
+- rancher-webhook
+
+自定义资æº� (CRD) 和自定义命å��空间ä»�需è¦�æ‰‹åŠ¨åˆ é™¤ã€‚
+
+å¦‚æžœä½ åœ¨ Docker ä¸å®‰è£… Rancher,则å�¯ä»¥é€šè¿‡åˆ 除è¿�行 Rancher çš„å�•个 Docker 容器æ�¥å�¸è½½ Rancher。
+
+移除 Rancher ä¸�会影å“�导入的集群。有关其他集群类型,请å�‚考[移除 Rancher å�Žè®¿é—®ä¸‹æ¸¸é›†ç¾¤](#å¦‚æžœåˆ é™¤äº†-rancher-server该如何访问下游集群)。
+
+### 如果我�想 Rancher 管�我的注册集群该怎么办?
+
+å¦‚æžœä½ åœ¨ Rancher UI ä¸åˆ 除了已注册的集群,则该集群将与 Rancher 分离,集群ä¸�会å�‘生改å�˜ï¼Œä½ å�¯ä»¥ä½¿ç”¨æ³¨å†Œé›†ç¾¤ä¹‹å‰�的方法访问该集群。
+
+�分离集群:
+
+1. 在左上角,�击 **☰ > 集群管�**。
+2. 转到è¦�与 Rancher 分离的已注册集群,然å�Žå�•击 **â‹® > åˆ é™¤**。
+3. å�•击**åˆ é™¤**。
+
+**结果**:注册的集群已与 Rancher 分离,并在 Rancher 外æ£å¸¸è¿�行。
+
+### 如果我�想 Rancher 管�我的 RKE 集群或托管的 Kubernetes 集群该怎么办?
+
+ç›®å‰�,我们没有将这些集群从 Rancher ä¸åˆ†ç¦»å‡ºæ�¥çš„功能。在这ç§�情况下,“分离â€�指的是将 Rancher 组件移除出集群,并独立于 Rancher 管ç�†å¯¹é›†ç¾¤çš„访问。
+
+[æ¤ issue](https://github.com/rancher/rancher/issues/25234) 跟踪了在没有 Rancher 的情况下管ç�†è¿™äº›é›†ç¾¤çš„功能。
+
+æœ‰å…³å¦‚ä½•åœ¨åˆ é™¤ Rancher Server å�Žè®¿é—®é›†ç¾¤çš„æ›´å¤šä¿¡æ�¯ï¼Œè¯·å�‚阅[本节](#å¦‚æžœåˆ é™¤äº†-rancher-server该如何访问下游集群)。
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/faq/security.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/faq/security.md
new file mode 100644
index 00000000000..0078c58eac7
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/faq/security.md
@@ -0,0 +1,14 @@
+---
+title: 安全
+
+---
+
+**是�有强化指�?**
+
+强化指�现在�于[安全](../pages-for-subheaders/rancher-security.md)部分。
+
+
+
+**Rancher Kubernetes 集群 CIS Benchmark 测试的结果是什么?**
+
+我们已ç»�针对强化的 Rancher Kubernetes 集群è¿�行了 CIS Kubernetes Benchmark æµ‹è¯•ã€‚ä½ å�¯ä»¥åœ¨[安全](../pages-for-subheaders/rancher-security.md)䏿‰¾åˆ°è¯¥è¯„估的结果。
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/faq/technical-items.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/faq/technical-items.md
new file mode 100644
index 00000000000..2bc3cfb6bfc
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/faq/technical-items.md
@@ -0,0 +1,176 @@
+---
+title: 技术
+---
+
+### 如何é‡�置管ç�†å‘˜å¯†ç �?
+
+Docker 安装:
+```
+$ docker exec -ti reset-password
+New password for default administrator (user-xxxxx):
+
+```
+
+Kubernetes 安装(Helm):
+```
+$ KUBECONFIG=./kube_config_cluster.yml
+$ kubectl --kubeconfig $KUBECONFIG -n cattle-system exec $(kubectl --kubeconfig $KUBECONFIG -n cattle-system get pods -l app=rancher --no-headers | head -1 | awk '{ print $1 }') -c rancher -- reset-password
+New password for default administrator (user-xxxxx):
+
+```
+
+
+
+### æˆ‘åˆ é™¤/å�œç”¨äº†æœ€å�Žä¸€ä¸ª admin,该如何解决?
+Docker 安装:
+```
+$ docker exec -ti ensure-default-admin
+New default administrator (user-xxxxx)
+New password for default administrator (user-xxxxx):
+
+```
+
+Kubernetes 安装(Helm):
+```
+$ KUBECONFIG=./kube_config_cluster.yml
+$ kubectl --kubeconfig $KUBECONFIG -n cattle-system exec $(kubectl --kubeconfig $KUBECONFIG -n cattle-system get pods -l app=rancher | grep '1/1' | head -1 | awk '{ print $1 }') -- ensure-default-admin
+New password for default administrator (user-xxxxx):
+
+```
+### 如何�用调试日志记录?
+
+请�阅[故障排除:日志记录](../troubleshooting/other-troubleshooting-tips/logging.md)。
+
+### 我的 ClusterIP ��应 ping,该如何解决?
+
+ClusterIP 是一个虚拟 IP,ä¸�会å“�应 ping。è¦�测试 ClusterIP 是å�¦é…�ç½®æ£ç¡®ï¼Œæœ€å¥½çš„æ–¹æ³•是使用 `curl` 访问 IP 和端å�£å¹¶æ£€æŸ¥å®ƒæ˜¯å�¦å“�应。
+
+### 在哪里管�节点模�?
+
+æ‰“å¼€ä½ çš„è´¦å�·è�œå�•(å�³ä¸Šè§’)并选择`节点模æ�¿`。
+
+### 为什么我的四层负载�衡器处于 `Pending` 状�?
+
+四层负载�衡器创建为 `type: LoadBalancer`。Kubernetes 需�一个�以满足这些请求的云�供商或控制器,�则这些请求将永远处于 `Pending` 状�。有关更多信�,请�阅[云�供商](../pages-for-subheaders/set-up-cloud-providers.md)或[创建外部负载�衡器](https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/)。
+
+### Rancher 的状æ€�å˜å‚¨åœ¨å“ªé‡Œï¼Ÿ
+
+- Docker 安装:在 `rancher/rancher` 容器的嵌入å¼� etcd ä¸ï¼Œä½�于 `/var/lib/rancher`。
+- Kubernetes install:在为è¿�行 Rancher 而创建的 RKE 集群的 etcd ä¸ã€‚
+
+### 支�的 Docker 版本是如何确定的?
+
+我们é�µå¾ªä¸Šæ¸¸ Kubernetes 版本验è¯�过的 Docker 版本。如果需è¦�获å�–验è¯�过的版本,请查看 Kubernetes 版本 CHANGELOG.md ä¸çš„ [External Dependencies](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.10.md#external-dependencies)。
+
+### 如何访问 Rancher 创建的节点?
+
+ä½ å�¯ä»¥è½¬åˆ°**节点**视图,然å�Žä¸‹è½½ç”¨äºŽè®¿é—® Rancher 创建的节点的 SSH 密钥。选择è¦�访问的节点并å�•击行尾 **â‹®** 按钮,然å�Žé€‰æ‹©**下载密钥**,如下图所示。
+
+
+
+解压缩下载的 zip 文件,并使用 `id_rsa` æ–‡ä»¶è¿žæŽ¥åˆ°ä½ çš„ä¸»æœºã€‚è¯·åŠ¡å¿…ä½¿ç”¨æ£ç¡®çš„用户å��(如果是 RancherOS,则使用 `rancher` 或 `docker`;如果是 Ubuntu,则使用 `ubuntu`;如果是 Amazon Linux,则使用 `ec2-user`)。
+
+```
+$ ssh -i id_rsa user@ip_of_node
+```
+
+### 如何在 Rancher ä¸è‡ªåŠ¨åŒ–ä»»åŠ¡ X?
+
+UI ç”±é�™æ€�文件组æˆ�ï¼Œå¹¶æ ¹æ�® API çš„å“�应工作。æ�¢è¨€ä¹‹ï¼ŒUI ä¸å�¯ä»¥æ‰§è¡Œçš„æ¯�个æ“�作/任务都å�¯ä»¥é€šè¿‡ API 进行自动化。有两ç§�方法å�¯ä»¥å®žçŽ°è¿™ä¸€ç‚¹ï¼š
+
+* 访问 `https://your_rancher_ip/v3` 并�览 API 选项。
+* 在使用 UI æ—¶æ�•获 API 调用(通常使用 [Chrome å¼€å�‘者工具](https://developers.google.com/web/tools/chrome-devtools/#network)ï¼Œä½†ä½ ä¹Ÿå�¯ä»¥ä½¿ç”¨å…¶ä»–工具)。
+
+### 节点的 IP 地�改�了,该如何��?
+
+节点需è¦�é…�ç½®é�™æ€� IP(或使用 DHCP ä¿�留的 IP)。如果节点的 IP å·²æ›´æ”¹ï¼Œä½ å¿…é¡»åœ¨é›†ç¾¤ä¸åˆ 除并é‡�æ–°æ·»åŠ å®ƒã€‚åˆ é™¤å�Žï¼ŒRancher 会将集群更新为æ£ç¡®çš„状æ€�。如果集群ä¸�å†�处于 `Provisioning` 状æ€�ï¼Œåˆ™å·²ä»Žé›†ç¾¤åˆ é™¤è¯¥èŠ‚ç‚¹ã€‚
+
+节点的 IP 地å�€å�‘生å�˜åŒ–时,Rancher ä¼šå¤±åŽ»ä¸ŽèŠ‚ç‚¹çš„è¿žæŽ¥ï¼Œå› æ¤æ— 法æ£å¸¸æ¸…ç�†èŠ‚ç‚¹ã€‚è¯·å�‚阅[清ç�†é›†ç¾¤èŠ‚ç‚¹](../how-to-guides/new-user-guides/manage-clusters/clean-cluster-nodes.md)æ�¥æ¸…ç�†èŠ‚ç‚¹ã€‚
+
+在集群ä¸ç§»é™¤å¹¶æ¸…ç�†èŠ‚ç‚¹æ—¶ï¼Œä½ å�¯ä»¥å°†èŠ‚ç‚¹é‡�æ–°æ·»åŠ åˆ°é›†ç¾¤ä¸ã€‚
+
+### 如何将其他å�‚æ•°/绑定/环境å�˜é‡�æ·»åŠ åˆ° Rancher å�¯åŠ¨çš„ Kubernetes 集群的 Kubernetes 组件ä¸ï¼Ÿ
+
+ä½ å�¯ä»¥ä½¿ç”¨é›†ç¾¤é€‰é¡¹ä¸çš„[é…�置文件](../reference-guides/cluster-configuration/rancher-server-configuration/rke1-cluster-configuration.md#rke-集群é…�置文件å�‚考)选项æ�¥æ·»åŠ å…¶ä»–å�‚æ•°/​​绑定/环境å�˜é‡�。有关详细信æ�¯ï¼Œè¯·å�‚阅 RKE 文档ä¸çš„[å…¶ä»–å�‚æ•°ã€�绑定和环境å�˜é‡�](https://rancher.com/docs/rke/latest/en/config-options/services/services-extras/),或æµ�览 [Cluster.ymls 示例](https://rancher.com/docs/rke/latest/en/example-yamls/)。
+
+### 如何检查�书链是�有效?
+
+使用 `openssl verify` 命令æ�¥éªŒè¯�ä½ çš„è¯�书链:
+
+:::tip
+
+将 `SSL_CERT_DIR` 和 `SSL_CERT_FILE` �置到虚拟�置,从而确�在手动验�时�使用�作系统安装的�书。
+
+:::
+
+```
+SSL_CERT_DIR=/dummy SSL_CERT_FILE=/dummy openssl verify -CAfile ca.pem rancher.yourdomain.com.pem
+rancher.yourdomain.com.pem: OK
+```
+
+å¦‚æžœä½ çœ‹åˆ° `unable to get local issuer certificate` 错误,则表示链ä¸�å®Œæ•´ã€‚é€šå¸¸æƒ…å†µä¸‹ï¼Œè¿™è¡¨ç¤ºä½ çš„æœ�务器è¯�书由ä¸é—´ CA é¢�å�‘ã€‚å¦‚æžœä½ å·²ç»�拥有æ¤è¯�ä¹¦ï¼Œä½ å�¯ä»¥åœ¨è¯�书的验è¯�ä¸ä½¿ç”¨å®ƒï¼Œå¦‚下所示:
+
+```
+SSL_CERT_DIR=/dummy SSL_CERT_FILE=/dummy openssl verify -CAfile ca.pem -untrusted intermediate.pem rancher.yourdomain.com.pem
+rancher.yourdomain.com.pem: OK
+```
+
+å¦‚æžœä½ å·²æˆ�功验è¯�è¯�ä¹¦é“¾ï¼Œä½ éœ€è¦�在æœ�务器è¯�书ä¸åŒ…å�«æ‰€éœ€çš„ä¸é—´ CA è¯�书,从而完æˆ�与 Rancher 连接的è¯�书链(例如,使用 Rancher Agent)。æœ�务器è¯�书文件ä¸è¯�书的顺åº�首先是æœ�务器è¯�书本身(`rancher.yourdomain.com.pem` 的内容),然å�Žæ˜¯ä¸é—´ CA è¯�书(`intermediate.pem` 的内容):
+
+```
+-----BEGIN CERTIFICATE-----
+%YOUR_CERTIFICATE%
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+%YOUR_INTERMEDIATE_CERTIFICATE%
+-----END CERTIFICATE-----
+```
+
+如果在验è¯�过程ä¸ä»�ç„¶å‡ºçŽ°é”™è¯¯ï¼Œä½ å�¯ä»¥è¿�行以下命令,检索æœ�务器è¯�书的主题和é¢�å�‘者:
+
+```
+openssl x509 -noout -subject -issuer -in rancher.yourdomain.com.pem
+subject= /C=GB/ST=England/O=Alice Ltd/CN=rancher.yourdomain.com
+issuer= /C=GB/ST=England/O=Alice Ltd/CN=Alice Intermediate CA
+```
+
+### 如何在æœ�务器è¯�书䏿£€æŸ¥ `Common Name` å’Œ `Subject Alternative Names`?
+
+虽然技术上仅需è¦� `Subject Alternative Names` 䏿œ‰ä¸€ä¸ªæ�¡ç›®ï¼Œä½†åœ¨ `Common Name` å’Œ `Subject Alternative Names` ä¸éƒ½åŒ…å�«ä¸»æœºå��å�¯ä»¥æœ€å¤§ç¨‹åº¦åœ°æ��高与旧版æµ�览器/应用程åº�的兼容性。
+
+检查 `Common Name`:
+
+```
+openssl x509 -noout -subject -in cert.pem
+subject= /CN=rancher.my.org
+```
+
+检查 `Subject Alternative Names`:
+
+```
+openssl x509 -noout -in cert.pem -text | grep DNS
+ DNS:rancher.my.org
+```
+
+### 为什么节点�生故障时�新调度一个 pod 需� 5 分钟以上的时间?
+
+这是以下默认 Kubernetes 设置的组�导致的:
+
+* kubelet
+ * `node-status-update-frequency`:指定 kubelet 将节点状��布到 master 的频率(默认 10s)。
+* kube-controller-manager
+ * `node-monitor-period`:在 NodeController ä¸å�Œæ¥ NodeStatus 的周期(默认 5s)。
+ * `node-monitor-grace-period`ï¼šåœ¨å°†èŠ‚ç‚¹æ ‡è®°ä¸ºä¸�å�¥åº·ä¹‹å‰�,å…�è®¸èŠ‚ç‚¹æ— å“�应的时间长度(默认 40s)。
+ * `pod-eviction-timeout`ï¼šåœ¨æ•…éšœèŠ‚ç‚¹ä¸Šåˆ é™¤ pod 的宽é™�期(默认 5m0s)。
+
+有关这些设置的更多信�,请�阅 [Kubernetes:kubelet](https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet/) 和 [Kubernetes:kube-controller-manager](https://kubernetes.io/docs/reference/command-line-tools-reference/kube-controller-manager/)。
+
+Kubernetes 1.13 默认�用 `TaintBasedEvictions` 功能。有关详细信�,请�阅 [Kubernetes:基于污点的驱�](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/#taint-based-evictions)。
+
+* kube-apiserver(Kubernetes 1.13 �更高版本)
+ * `default-not-ready-toleration-seconds`:表示 `notReady:NoExecute` 的容å¿�度的 `tolerationSeconds`ï¼Œè¯¥è®¾ç½®é»˜è®¤æ·»åŠ åˆ°è¿˜æ²¡æœ‰è¯¥å®¹å¿�度的 pod。
+ * `default-unreachable-toleration-seconds`:表示 `unreachable:NoExecute` 的容å¿�度的 `tolerationSeconds`ï¼Œè¯¥è®¾ç½®é»˜è®¤æ·»åŠ åˆ°è¿˜æ²¡æœ‰è¯¥å®¹å¿�度的 pod。
+
+### 我å�¯ä»¥åœ¨ UI ä¸ä½¿ç”¨é”®ç›˜å¿«æ�·é”®å�—?
+
+æ˜¯çš„ï¼Œä½ å�¯ä»¥ä½¿ç”¨é”®ç›˜å¿«æ�·é”®è®¿é—® UI 的大部分内容。è¦�查看快æ�·æ–¹å¼�的概览,请在 UI ä»»æ„�ä½�置按 `?`。
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/faq/telemetry.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/faq/telemetry.md
new file mode 100644
index 00000000000..400f6e839ad
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/faq/telemetry.md
@@ -0,0 +1,31 @@
+---
+title: �测
+---
+
+### 什么是�测?
+
+é�¥æµ‹ï¼ˆTelemetry)收集 Rancher 安装大å°�ã€�使用的组件版本以å�Šä½¿ç”¨åŠŸèƒ½çš„æ±‡æ€»ä¿¡æ�¯ã€‚Rancher Labs 会使用æ¤ä¿¡æ�¯æ�¥æ”¹è¿›äº§å“�,我们ä¸�会与第三方共享æ¤ä¿¡æ�¯ã€‚
+
+### 收集什么信�?
+
+我们ä¸�会收集任何识别信æ�¯ï¼ˆå¦‚用户å��ã€�密ç �或用户资æº�çš„å��称或地å�€ï¼‰ã€‚
+
+收集的主�内容包括:
+
+- æ¯�个集群的节点总数(最å°�ã€�å¹³å�‡ã€�最大ã€�总数)å�Šå…¶å¤§å°�(例如 CPU æ ¸å¿ƒæ•°å’Œ RAM)。
+- 集群ã€�项目ã€�命å��空间和 Pod ç‰é€»è¾‘资æº�çš„è�šå�ˆè®¡æ•°ã€‚
+- 用于部署集群和节点的驱动程�计数(例如 GKE�EC2�导入与自定义)。
+- 部署在节点上的 Kubernetes 组件��作系统和 Docker 的版本。
+- 是��用了�些�选组件(例如,使用了哪些身份验��供程�)。
+- �行的 Rancher 的镜��称和版本。
+- æ¤å®‰è£…的唯一éš�æœºæ ‡è¯†ç¬¦ã€‚
+
+### 我�以看到��的信��?
+
+如果å�¯ç”¨äº†é�¥æµ‹ï¼Œä½ å�¯ä»¥è½¬åˆ° `https:///v1-telemetry` 查看当å‰�æ•°æ�®ã€‚
+
+如果未å�¯ç”¨é�¥æµ‹ï¼Œåˆ™æ”¶é›†æ•°æ�®çš„进程未è¿�è¡Œï¼Œå› æ¤æ²¡æœ‰å�¯ä¾›æŸ¥çœ‹çš„内容。
+
+### 如何打开或关é—它?
+
+完æˆ�åˆ�始设置å�Žï¼Œç®¡ç�†å‘˜å�¯ä»¥è½¬åˆ° UI `全局`ä¸çš„`设置`页é�¢ï¼Œå�•击**编辑**,然å�Žå°† `telemetry-opt` 更改为 `in` 或 `out`。
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/air-gapped-upgrades.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/air-gapped-upgrades.md
new file mode 100644
index 00000000000..dee4c863bcf
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/air-gapped-upgrades.md
@@ -0,0 +1,89 @@
+---
+title: åœ¨ç¦»çº¿çŽ¯å¢ƒä¸æ¸²æŸ“ Helm 模æ�¿
+---
+
+:::note
+
+以下说明å�‡è®¾ä½ å·²ç»�按照[本页](upgrades.md)çš„ Kubernetes å�‡çº§è¯´æ˜Žæ“�作(包括先决æ�¡ä»¶ï¼‰åˆ°æ¥éª¤ 3:å�‡çº§ Rancher。
+
+:::
+
+### Rancher Helm 模�选项
+
+使用安装 Rancher 时选择的选项æ�¥æ¸²æŸ“ Rancher 模æ�¿ã€‚å�‚考下表æ�¥æ›¿æ�¢æ¯�个å� ä½�符。Rancher 需è¦�é…�置为使用ç§�有镜åƒ�仓库,以便é…�置所有 Rancher å�¯åŠ¨çš„ Kubernetes 集群或 Rancher 工具。
+
+æ ¹æ�®ä½ 在安装过程ä¸å�šå‡ºçš„选择,完æˆ�以下æ¥éª¤ä¹‹ä¸€ã€‚
+
+| å� ä½�符 | æ��è¿° |
+------------|-------------
+| `` | 输出压缩包的版本�。 |
+| `` | 指�负载�衡器的 DNS �称。 |
+| `` | ä½ çš„ç§�有镜åƒ�仓库的 DNS å��称。 |
+| `` | 在 K8s 集群上�行的 cert-manager 版本。 |
+
+
+### 选项 A:使用默认的自ç¾å��è¯�书
+
+```
+helm template rancher ./rancher-.tgz --output-dir . \
+ --no-hooks \ # prevent files for Helm hooks from being generated
+ --namespace cattle-system \
+ --set hostname= \
+ --set certmanager.version= \
+ --set rancherImage=/rancher/rancher \
+ --set systemDefaultRegistry= \ # Set a default private registry to be used in Rancher
+ --set useBundledSystemChart=true # Use the packaged Rancher system charts
+```
+
+### 选项 B:使用 Kubernetes 密文从文件ä¸èŽ·å�–è¯�书
+
+```plain
+helm template rancher ./rancher-.tgz --output-dir . \
+ --no-hooks \ # prevent files for Helm hooks from being generated
+ --namespace cattle-system \
+ --set hostname= \
+ --set rancherImage=/rancher/rancher \
+ --set ingress.tls.source=secret \
+ --set systemDefaultRegistry= \ # Set a default private registry to be used in Rancher
+ --set useBundledSystemChart=true # Use the packaged Rancher system charts
+```
+
+å¦‚æžœä½ ä½¿ç”¨çš„æ˜¯ç§�有 CA ç¾å��çš„è¯�书,请在 `--set ingress.tls.source=secret` å�ŽåŠ ä¸Š `--set privateCA=true`:
+
+```plain
+helm template rancher ./rancher-.tgz --output-dir . \
+ --no-hooks \ # prevent files for Helm hooks from being generated
+ --namespace cattle-system \
+ --set hostname= \
+ --set rancherImage=/rancher/rancher \
+ --set ingress.tls.source=secret \
+ --set privateCA=true \
+ --set systemDefaultRegistry= \ # Set a default private registry to be used in Rancher
+ --set useBundledSystemChart=true # Use the packaged Rancher system charts
+```
+
+### 应用已渲染的模�
+
+将渲染的 manifest 目录å¤�制到å�¯ä»¥è®¿é—® Rancher Server 集群的系统ä¸ï¼Œå¹¶åº”用渲染的模æ�¿ã€‚
+
+使用 `kubectl` �应用渲染的 manifest。
+
+```plain
+kubectl -n cattle-system apply -R -f ./rancher
+```
+
+## 验��级
+
+登录 Rancher 以确认�级�功。
+
+:::tip
+
+�级�出现网络问题?
+
+请��[��集群网络](/versioned_docs/version-2.0-2.4/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/upgrades/namespace-migration.md)。
+
+:::
+
+## 已知�级问题
+
+ä½ å�¯ä»¥åœ¨ [GitHub](https://github.com/rancher/rancher/releases) å�‘布说明以å�Š [Rancher 论å�›](https://forums.rancher.com/c/announcements/12)䏿‰¾åˆ°æ¯�个 Rancher 版本的已知问题。
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/rancher-on-aks.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/rancher-on-aks.md
new file mode 100644
index 00000000000..22de9e7af35
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/rancher-on-aks.md
@@ -0,0 +1,147 @@
+---
+title: 在 Azure Kubernetes Service 上安装 Rancher
+---
+
+本文介�了如何在微软的 Azure Kubernetes Service (AKS) 上安装 Rancher。
+
+本指å�—使用命令行工具æ�¥é…�置一个带有 Ingress çš„ AKS é›†ç¾¤ã€‚å¦‚æžœä½ æ›´å–œæ¬¢ä½¿ç”¨ Azure 门户æ�¥é…�置集群,请å�‚è§�[官方文档](https://docs.microsoft.com/en-us/azure/aks/kubernetes-walkthrough-portal)。
+
+å¦‚æžœä½ å·²æœ‰ä¸€ä¸ª AKS Kubernetes 集群,请直接跳到[安装 Ingress](#5-安装-ingress) çš„æ¥éª¤ï¼Œç„¶å�ŽæŒ‰ç…§[æ¤é¡µ](../../../pages-for-subheaders/install-upgrade-on-a-kubernetes-cluster.md#安装-rancher-helm-chart)的说明安装 Rancher Helm Chart。
+
+## 先决�件
+
+:::caution
+
+部署到 Microsoft Azure 会产生费用。
+
+:::
+
+- [Microsoft Azure 账�](https://azure.microsoft.com/en-us/free/):用于创建部署 Rancher 和 Kubernetes 的资�。
+- [Microsoft Azure 订阅](https://docs.microsoft.com/en-us/azure/cost-management-billing/manage/create-subscription#create-a-subscription-in-the-azure-portal)ï¼šå¦‚æžœä½ æ²¡æœ‰çš„è¯�,请访问æ¤é“¾æŽ¥æŸ¥çœ‹å¦‚何创建 Microsoft Azure 订阅。
+- [Micsoroft Azure 租户](https://docs.microsoft.com/en-us/azure/active-directory/develop/quickstart-create-new-tenant):访问æ¤é“¾æŽ¥å¹¶å�‚考教程以创建 Microsoft Azure 租户。
+- ä½ çš„è®¢é˜…æœ‰è¶³å¤Ÿçš„é…�é¢�,至少有 2 个 vCPU。有关 Rancher Server 资æº�è¦�求的详情,请å�‚è§�[æ¤èŠ‚](../../../pages-for-subheaders/installation-requirements.md#rke-和托管-kubernetes)。
+- 在 Azure ä¸ç”¨ Helm 安装 Rancher 时,请使用 L7 è´Ÿè½½å�‡è¡¡å™¨æ�¥é�¿å…�网络问题。详情请å�‚è§� [Azure è´Ÿè½½å�‡è¡¡å™¨é™�制](https://docs.microsoft.com/en-us/azure/load-balancer/components#limitations)。
+
+## 1. å‡†å¤‡ä½ çš„å·¥ä½œç«™
+
+在工作站上安装以下命令行工具:
+
+- **az**,Azure CLI:如需获得帮助,请å�‚è§�[安装æ¥éª¤](https://docs.microsoft.com/en-us/cli/azure/)。
+- **kubectl**:如需获得帮助,请å�‚è§�[安装æ¥éª¤](https://kubernetes.io/docs/tasks/tools/#kubectl)。
+- **helm**:如需获å�–帮助,请å�‚è§�[安装æ¥éª¤](https://helm.sh/docs/intro/install/)。
+
+## 2. 创建资�组
+
+安装 CLI å�Žï¼Œä½ 需è¦�ç”¨ä½ çš„ Azure 账户登录:
+
+```
+az login
+```
+
+创建一个 [资æº�组](https://docs.microsoft.com/en-us/azure/azure-resource-manager/management/manage-resource-groups-portal) æ�¥ä¿�å˜é›†ç¾¤çš„æ‰€æœ‰ç›¸å…³èµ„æº�ã€‚ä½¿ç”¨ä¸€ä¸ªé€‚ç”¨äºŽä½ å®žé™…æƒ…å†µçš„ä½�置:
+
+```
+az group create --name rancher-rg --location eastus
+```
+
+## 3. 创建 AKS 集群
+
+è¿�行以下命令创建一个 AKS é›†ç¾¤ã€‚é€‰æ‹©é€‚ç”¨äºŽä½ å®žé™…æƒ…å†µçš„è™šæ‹Ÿæœºå¤§å°�。如需获得å�¯ç”¨çš„大å°�和选项,请å�‚è§�[æ¤å¤„](https://docs.microsoft.com/en-us/azure/virtual-machines/sizes)。在选择 Kubernetes 版本时,请务必先查阅[支æŒ�矩阵](https://rancher.com/support-matrix/)ï¼Œä»¥æ‰¾å‡ºå·²é’ˆå¯¹ä½ çš„ Rancher 版本验è¯�的最新 Kubernetes 版本。
+
+:::note
+
+å¦‚æžœä½ è¦�从旧的 Kubernetes 版本更新到 Kubernetes v1.22 æˆ–æ›´é«˜ç‰ˆæœ¬ï¼Œä½ è¿˜éœ€è¦�[æ›´æ–°](https://kubernetes.github.io/ingress-nginx/user-guide/k8s-122-migration/) ingress-nginx。
+
+:::
+
+```
+az aks create \
+ --resource-group rancher-rg \
+ --name rancher-server \
+ --kubernetes-version \
+ --node-count 3 \
+ --node-vm-size Standard_D2_v3
+```
+
+集群部署需�一些时间�能完�。
+
+## 4. 获å�–访问å‡è¯�
+
+集群部署完æˆ�å�Žï¼ŒèŽ·å�–访问å‡è¯�。
+
+```
+az aks get-credentials --resource-group rancher-rg --name rancher-server
+```
+
+æ¤å‘½ä»¤æŠŠé›†ç¾¤çš„å‡è¯�å�ˆå¹¶åˆ°çŽ°æœ‰çš„ kubeconfig ä¸ï¼Œå¹¶å…�许 `kubectl` 与集群交互。
+
+## 5. 安装 Ingress
+
+集群需è¦�一个 Ingress,以从集群外部访问 Rancher。è¦� Ingressï¼Œä½ éœ€è¦�分é…�一个公共 IP 地å�€ã€‚请确ä¿�ä½ æœ‰è¶³å¤Ÿçš„é…�é¢�,å�¦åˆ™å®ƒå°†æ— 法分é…� IP 地å�€ã€‚公共 IP 地å�€çš„é™�制在æ¯�个订阅的区域级别生效。
+
+为确ä¿�ä½ é€‰æ‹©äº†æ£ç¡®çš„ Ingress-NGINX Helm Chart,首先在 [Kubernetes/ingress-nginx 支æŒ�表](https://github.com/kubernetes/ingress-nginx#supported-versions-table)䏿‰¾åˆ°ä¸Žä½ çš„ Kubernetes 版本兼容的 `Ingress-NGINX 版本`。
+
+然�,�行以下命令列出�用的 Helm Chart:
+
+```
+helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
+helm repo update
+helm search repo ingress-nginx -l
+```
+
+`helm search` 命令的输出包å�«ä¸€ä¸ª `APP VERSION` 列。æ¤åˆ—下的版本ç‰å�ŒäºŽä½ 之å‰�选择的 `Ingress-NGINX 版本`。使用应用程åº�版本,选择一个 Chart ç‰ˆæœ¬ï¼Œè¯¥ç‰ˆæœ¬æ‰“åŒ…äº†ä¸Žä½ çš„ Kubernetes 兼容的应用程åº�。例如,如果使用的是 Kubernetes v1.24,则å�¯ä»¥é€‰æ‹© v4.6.0 Helm Chartï¼Œå› ä¸º Ingress-NGINX v1.7.0 与该 Chart 打包在一起,而 v1.7.0 与 Kubernetes v1.24 兼容。如有疑问,请选择最新的兼容版本。
+
+äº†è§£ä½ éœ€è¦�çš„ Helm chart `版本`å�Žï¼Œè¿�行以下命令。它安装一个带有 Kubernetes è´Ÿè½½å�‡è¡¡å™¨æœ�务的 `nginx-ingress-controller`:
+
+```
+helm search repo ingress-nginx -l
+helm upgrade --install \
+ ingress-nginx ingress-nginx/ingress-nginx \
+ --namespace ingress-nginx \
+ --set controller.service.type=LoadBalancer \
+ --set controller.service.annotations."service\.beta\.kubernetes\.io/azure-load-balancer-health-probe-request-path"=/healthz \
+ --set controller.service.externalTrafficPolicy=Local \
+ --version 4.6.0 \
+ --create-namespace
+```
+
+## 6. 获�负载�衡器的 IP
+
+�行以下命令获�负载�衡器的 IP 地�:
+
+```
+kubectl get service ingress-nginx-controller --namespace=ingress-nginx
+```
+
+返回的结果应与以下内容类似:
+
+```
+NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)
+ AGE
+ingress-nginx-controller LoadBalancer 10.0.116.18 40.31.180.83 80:31229/TCP,443:31050/TCP
+ 67s
+```
+
+ä¿�å˜ `EXTERNAL-IP`。
+
+## 7. 设置 DNS
+
+到 Rancher Server 的外部æµ�é‡�需è¦�é‡�定å�‘åˆ°ä½ åˆ›å»ºçš„è´Ÿè½½å�‡è¡¡å™¨ã€‚
+
+创建指å�‘ä½ ä¿�å˜çš„ `EXTERNAL-IP` çš„ DNS。这个 DNS 会用作 Rancher Server çš„ URL。
+
+设置 DNS 的有效方法有很多。如需获å�–帮助,请å�‚è§� [Azure DNS 文档ä¸å¿ƒ](https://docs.microsoft.com/en-us/azure/dns/)。
+
+## 8. 安装 Rancher Helm Chart
+
+按照[本页](../../../pages-for-subheaders/install-upgrade-on-a-kubernetes-cluster.md#安装-rancher-helm-chart)的说明安装 Rancher Helm Chart。任何 Kubernetes å�‘行版上安装的 Rancher çš„ Helm è¯´æ˜Žéƒ½æ˜¯ä¸€æ ·çš„ã€‚
+
+安装 Rancher 时,使用上一æ¥èŽ·å�–çš„ DNS å��称作为 Rancher Server çš„ URL。它å�¯ä»¥ä½œä¸º Helm é€‰é¡¹ä¼ é€’è¿›æ�¥ã€‚例如,如果 DNS å��称是 `rancher.my.org`ï¼Œä½ éœ€è¦�使用 `--set hostname=rancher.my.org` 选项æ�¥è¿�行 Helm 安装命令。
+
+在æ¤è®¾ç½®ä¹‹ä¸Šå®‰è£… Rancher æ—¶ï¼Œä½ è¿˜éœ€è¦�å°†ä»¥ä¸‹å€¼ä¼ é€’åˆ° Rancher Helm 安装命令,以设置与 Rancher çš„ Ingress 资æº�一起使用的 Ingress Controller çš„å��称:
+
+```
+--set ingress.ingressClassName=nginx
+```
+
+请å�‚阅[Helm 安装命令](../../../pages-for-subheaders/install-upgrade-on-a-kubernetes-cluster.md#5-æ ¹æ�®ä½ 选择的è¯�书选项通过-helm-安装-rancher)äº†è§£ä½ çš„è¯�书选项。
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/rancher-on-amazon-eks.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/rancher-on-amazon-eks.md
new file mode 100644
index 00000000000..335e3fee425
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/rancher-on-amazon-eks.md
@@ -0,0 +1,151 @@
+---
+title: 在 Amazon EKS 上安装 Rancher
+---
+
+本文介ç»�了如何在 Amazon EKS 集群上安装 Rancherã€‚ä½ ä¹Ÿå�¯ä»¥[通过 AWS Marketplace 安装 Rancher](../../quick-start-guides/deploy-rancher-manager/aws-marketplace.md)。
+
+å¦‚æžœä½ å·²ç»�有一个 EKS Kubernetes 集群,请直接跳转到[安装 Ingress](#5-安装-ingress)这个æ¥éª¤ã€‚ç„¶å�ŽæŒ‰ç…§[æ¤å¤„](../../../pages-for-subheaders/install-upgrade-on-a-kubernetes-cluster.md#安装-rancher-helm-chart)çš„æ¥éª¤å®‰è£… Rancher Helm Chart。
+
+## 为 Rancher Server 创建 EKS 集群
+
+在本节ä¸ï¼Œä½ 将使用命令行工具安装一个带有 Ingress çš„ EKS é›†ç¾¤ã€‚å¦‚æžœä½ æƒ³åœ¨ EKS 上使用 Rancher 时使用较少的资æº�ï¼Œè¯·ä½¿ç”¨æ¤æ–¹æ³•。
+
+:::note 先决�件:
+
+- 已有一个 AWS 账户。
+- 建议使用 IAM 用户而ä¸�是 AWS æ ¹è´¦æˆ·ã€‚ä½ å°†éœ€è¦� IAM 用户的访问密钥 (access key) 和密文秘钥 (secret key) æ�¥é…�ç½® AWS 命令行界é�¢ã€‚
+- IAM 用户需è¦�具备[eksctl 文档](https://eksctl.io/usage/minimum-iam-policies/)䏿��述的最低 IAM ç–略。
+
+:::
+
+### 1. å‡†å¤‡ä½ çš„å·¥ä½œç«™
+
+在工作站上安装以下命令行工具:
+
+- **AWS CLI v2**:如需获å�–帮助,请å�‚è§�[安装æ¥éª¤](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html)。
+- **eksctl**:如需获å�–帮助,请å�‚è§�[安装æ¥éª¤](https://docs.aws.amazon.com/eks/latest/userguide/eksctl.html)。
+- **kubectl**:如需获得帮助,请å�‚è§�[安装æ¥éª¤](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html)。
+- **helm**:如需获å�–帮助,请å�‚è§�[安装æ¥éª¤](https://helm.sh/docs/intro/install/)。
+
+### 2. �置 AWS CLI
+
+�行以下命令,�置 AWS CLI:
+
+```
+aws configure
+```
+
+输入以下�数:
+
+| 值 | �述 |
+|-------|-------------|
+| AWS Access Key ID | 具有 EKS æ�ƒé™�çš„ IAM 用户的访问密钥å‡è¯�。 |
+| AWS Secret Access Key | 具有 EKS æ�ƒé™�çš„ IAM 用户的密文密钥å‡è¯�。 |
+| Default region name | 集群节点所在的 [AWS 区域](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.RegionsAndAvailabilityZones.html#Concepts.RegionsAndAvailabilityZones.Regions)。 |
+| Default output format | 输入 `json`。 |
+
+### 3. 创建 EKS 集群
+
+è¿�行以下命令创建一个 EKS é›†ç¾¤ã€‚ä½¿ç”¨é€‚ç”¨äºŽä½ çš„ç”¨ä¾‹çš„ AWS 区域。在选择 Kubernetes 版本时,请务必先查阅[支æŒ�矩阵](https://rancher.com/support-matrix/)ï¼Œä»¥æ‰¾å‡ºå·²é’ˆå¯¹ä½ çš„ Rancher 版本验è¯�的最新 Kubernetes 版本。
+
+**注æ„�**ï¼šå¦‚æžœä½ è¦�从旧的 Kubernetes 版本更新到 Kubernetes v1.22 æˆ–æ›´é«˜ç‰ˆæœ¬ï¼Œä½ è¿˜éœ€è¦�[æ›´æ–°](https://kubernetes.github.io/ingress-nginx/user-guide/k8s-122-migration/) ingress-nginx。
+
+```
+eksctl create cluster \
+ --name rancher-server \
+ --version \
+ --region us-west-2 \
+ --nodegroup-name ranchernodes \
+ --nodes 3 \
+ --nodes-min 1 \
+ --nodes-max 4 \
+ --managed
+```
+
+使用 CloudFormation 进行的集群部署�能需�一些时间�能完�。
+
+### 4. 测试集群
+
+�行以下命令测试集群:
+
+```
+eksctl get cluster
+```
+
+返回的结果应与以下内容类似:
+
+```
+eksctl get cluster
+2021-03-18 15:09:35 [ℹ] eksctl version 0.40.0
+2021-03-18 15:09:35 [ℹ] using region us-west-2
+NAME REGION EKSCTL CREATED
+rancher-server-cluster us-west-2 True
+```
+
+### 5. 安装 Ingress
+
+集群需�一个 Ingress,以从集群外部访问 Rancher。
+
+为确ä¿�ä½ é€‰æ‹©äº†æ£ç¡®çš„ Ingress-NGINX Helm Chart,首先在 [Kubernetes/ingress-nginx 支æŒ�表](https://github.com/kubernetes/ingress-nginx#supported-versions-table)䏿‰¾åˆ°ä¸Žä½ çš„ Kubernetes 版本兼容的 `Ingress-NGINX 版本`。
+
+然�,�行以下命令列出�用的 Helm Chart:
+
+```
+helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
+helm repo update
+helm search repo ingress-nginx -l
+```
+
+`helm search` 命令的输出包å�«ä¸€ä¸ª `APP VERSION` 列。æ¤åˆ—下的版本ç‰å�ŒäºŽä½ 之å‰�选择的 `Ingress-NGINX 版本`。使用应用程åº�版本,选择一个 Chart ç‰ˆæœ¬ï¼Œè¯¥ç‰ˆæœ¬æ‰“åŒ…äº†ä¸Žä½ çš„ Kubernetes 兼容的应用程åº�。例如,如果使用的是 Kubernetes v1.23,则å�¯ä»¥é€‰æ‹© v4.6.0 Helm Chartï¼Œå› ä¸º Ingress-NGINX v1.7.0 与该 Chart 打包在一起,而 v1.7.0 与 Kubernetes v1.23 兼容。如有疑问,请选择最新的兼容版本。
+
+äº†è§£ä½ éœ€è¦�çš„ Helm chart `版本`å�Žï¼Œè¿�行以下命令。它安装一个带有 Kubernetes è´Ÿè½½å�‡è¡¡å™¨æœ�务的 `nginx-ingress-controller`:
+
+```
+helm upgrade --install \
+ ingress-nginx ingress-nginx/ingress-nginx \
+ --namespace ingress-nginx \
+ --set controller.service.type=LoadBalancer \
+ --version 4.6.0 \
+ --create-namespace
+```
+
+### 6. 获�负载�衡器的 IP
+
+�行以下命令获�负载�衡器的 IP 地�:
+
+```
+kubectl get service ingress-nginx-controller --namespace=ingress-nginx
+```
+
+返回的结果应与以下内容类似:
+
+```
+NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)
+ AGE
+ingress-nginx-controller LoadBalancer 10.100.90.18 a904a952c73bf4f668a17c46ac7c56ab-962521486.us-west-2.elb.amazonaws.com 80:31229/TCP,443:31050/TCP
+ 27m
+```
+
+ä¿�å˜ `EXTERNAL-IP`。
+
+### 7. 设置 DNS
+
+到 Rancher Server 的外部æµ�é‡�需è¦�é‡�定å�‘åˆ°ä½ åˆ›å»ºçš„è´Ÿè½½å�‡è¡¡å™¨ã€‚
+
+创建指å�‘ä½ ä¿�å˜çš„外部 IP 地å�€çš„ DNS。这个 DNS 会用作 Rancher Server çš„ URL。
+
+设置 DNS 的有效方法有很多。如需获得帮助,请å�‚è§� AWS 文档ä¸å¿ƒçš„[转å�‘æµ�é‡�到 ELB è´Ÿè½½å�‡è¡¡å™¨](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-to-elb-load-balancer.html)。
+
+### 8. 安装 Rancher Helm Chart
+
+按照[本页](../../../pages-for-subheaders/install-upgrade-on-a-kubernetes-cluster.md#安装-rancher-helm-chart)的说明安装 Rancher Helm Chart。任何 Kubernetes å�‘行版上安装的 Rancher çš„ Helm è¯´æ˜Žéƒ½æ˜¯ä¸€æ ·çš„ã€‚
+
+安装 Rancher 时,使用上一æ¥èŽ·å�–çš„ DNS å��称作为 Rancher Server çš„ URL。它å�¯ä»¥ä½œä¸º Helm é€‰é¡¹ä¼ é€’è¿›æ�¥ã€‚例如,如果 DNS å��称是 `rancher.my.org`ï¼Œä½ éœ€è¦�使用 `--set hostname=rancher.my.org` 选项æ�¥è¿�行 Helm 安装命令。
+
+在æ¤è®¾ç½®ä¹‹ä¸Šå®‰è£… Rancher æ—¶ï¼Œä½ è¿˜éœ€è¦�å°†ä»¥ä¸‹å€¼ä¼ é€’åˆ° Rancher Helm 安装命令,以设置与 Rancher çš„ Ingress 资æº�一起使用的 Ingress Controller çš„å��称:
+
+```
+--set ingress.ingressClassName=nginx
+```
+
+请å�‚阅[Helm 安装命令](../../../pages-for-subheaders/install-upgrade-on-a-kubernetes-cluster.md#5-æ ¹æ�®ä½ 选择的è¯�书选项通过-helm-安装-rancher)äº†è§£ä½ çš„è¯�书选项。
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/rancher-on-gke.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/rancher-on-gke.md
new file mode 100644
index 00000000000..90d395c0f12
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/rancher-on-gke.md
@@ -0,0 +1,201 @@
+---
+title: 在 GKE 集群上安装 Rancher
+---
+
+在本节ä¸ï¼Œä½ å°†å¦ä¹ 如何使用 GKE 安装 Rancher。
+
+å¦‚æžœä½ å·²ç»�有一个 GKE Kubernetes 集群,请直接跳转到[安装 Ingress](#7-安装-ingress)这个æ¥éª¤ã€‚ç„¶å�ŽæŒ‰ç…§[æ¤å¤„](../../../pages-for-subheaders/install-upgrade-on-a-kubernetes-cluster.md#安装-rancher-helm-chart)çš„æ¥éª¤å®‰è£… Rancher Helm Chart。
+
+## 先决�件
+
+- ä½ éœ€è¦�有一个 Google è´¦å�·ã€‚
+- ä½ éœ€è¦�有一个 Google Cloud Billing è´¦å�·ã€‚ä½ å�¯ä½¿ç”¨ Google Cloud Console æ�¥ç®¡ç�†ä½ çš„ Cloud Billing è´¦å�·ã€‚有关 Cloud Console 的详情,请å�‚è§� [ Console 通用指å�—](https://support.google.com/cloud/answer/3465889?hl=en&ref_topic=3340599)。
+- ä½ éœ€è¦�至少一个在用的 IP 地å�€å’Œè‡³å°‘ 2 个 CPU 的云é…�é¢�。有关 Rancher Server 的硬件è¦�求,请å�‚è§�[本节](../../../pages-for-subheaders/installation-requirements.md#rke-和托管-kubernetes)。
+
+## 1. �用 Kubernetes Engine API
+
+按照以下æ¥éª¤å�¯ç”¨ Kubernetes Engine API:
+
+1. 访问 Google Cloud Console ä¸çš„ [Kubernetes Engine 页é�¢](https://console.cloud.google.com/projectselector/kubernetes?_ga=2.169595943.767329331.1617810440-856599067.1617343886)。
+1. 创建或选择一个项目。
+1. 打开项目,并为项目å�¯ç”¨ Kubernetes Engine API。ç‰å¾… API 和相关æœ�务的å�¯ç”¨ã€‚è¿™å�¯èƒ½éœ€è¦�å‡ åˆ†é’Ÿæ—¶é—´ã€‚
+1. ç¡®ä¿�ä¸ºä½ çš„äº‘é¡¹ç›®å�¯ç”¨äº†è®¡è´¹ã€‚æœ‰å…³å¦‚ä½•ä¸ºä½ çš„é¡¹ç›®å�¯ç”¨è®¡è´¹ï¼Œè¯·å�‚è§� [Google Cloud 文档ä¸å¿ƒ](https://cloud.google.com/billing/docs/how-to/modify-project#enable_billing_for_a_project)。
+
+## 2. 打开 Cloud Shell
+
+Cloud Shell 是一个 shell 环境,用于管ç�†æ‰˜ç®¡åœ¨ Google Cloud 上的资æº�。Cloud Shell 预装了 `gcloud` 命令行工具和 kubectl 命令行工具ä¸ã€‚`gcloud` 工具为 Google Cloud æ��供主è¦�的命令行界é�¢ï¼Œè€Œ`kubectl` 则æ��供针对 Kubernetes 集群的主è¦�命令行界é�¢ã€‚
+
+下文�述了如何从 Google Cloud Console 或从本地工作站�动 Cloud Shell。
+
+### Cloud Shell
+
+如需从 [Google Cloud Console](https://console.cloud.google.com) å�¯åЍ shell,请在控制å�°çš„å�³ä¸Šè§’ç‚¹å‡»ç»ˆç«¯æŒ‰é’®ã€‚é¼ æ ‡æ‚¬å�œåœ¨æŒ‰é’®ä¸Šæ—¶ï¼Œå®ƒä¼šæ ‡è®°ä¸º **Activate Cloud Shell**。
+
+### 本地 Shell
+
+执行以下æ¥éª¤ä»¥å®‰è£… `gcloud` å’Œ `kubectl`:
+
+1. 按照[这些æ¥éª¤](https://cloud.google.com/sdk/docs/install)安装 Cloud SDK。The Cloud SDK 包括 `gcloud` 命令行工具。ä¸�å�Œæ“�作系统对应的æ¥éª¤æœ‰æ‰€ä¸�å�Œã€‚
+1. 安装 Cloud SDK �,�行以下命令以安装 `kubectl` 命令行工具:
+
+ ```
+ gcloud components install kubectl
+ ```
+ å�Žé�¢çš„æ¥éª¤ä¼šé…�ç½® `kubectl`,使其用于使用新的 GKE 集群。
+1. 如果 Helm 3 未安装的�,[安装 Helm 3](https://helm.sh/docs/intro/install/)。
+1. 使用 `HELM_EXPERIMENTAL_OCI` å�˜é‡�æ�¥å�¯ç”¨ Helm 的实验功能 [OCI 镜åƒ�支æŒ�](https://github.com/helm/community/blob/master/hips/hip-0006.md)ã€‚æŠŠä»¥ä¸‹è¡Œæ·»åŠ åˆ° `~/.bashrc` (或 macOS ä¸çš„ `~/.bash_profile`ï¼Œæˆ–è€…ä½ çš„ shell å˜å‚¨çŽ¯å¢ƒå�˜é‡�的地方):
+
+ ```
+ export HELM_EXPERIMENTAL_OCI=1
+ ```
+1. è¿�行以下命令æ�¥åŠ è½½ä½ æ›´æ–°çš„ `.bashrc` 文件:
+
+ ```
+ source ~/.bashrc
+ ```
+ å¦‚æžœä½ è¿�行的是 macOS,使用这个命令:
+ ```
+ source ~/.bash_profile
+ ```
+
+
+
+## 3. �置 gcloud CLI
+
+选择以下方法之一�置默认的 gcloud 设置:
+
+- å¦‚æžœä½ æƒ³äº†è§£é»˜è®¤å€¼ï¼Œè¯·ä½¿ç”¨ gcloud init。
+- 如需å�•ç‹¬è®¾ç½®ä½ çš„é¡¹ç›® IDã€�地区和区域,使用 gcloud config。
+
+
+
+
+1. �行 gcloud init 并按照指示�作:
+
+ ```
+ gcloud init
+ ```
+ å¦‚æžœä½ åœ¨è¿œç¨‹æœ�务器上使用 SSH,使用 --console-only æ ‡å¿—ï¼Œä»¥é˜²æ¢è¯¥å‘½ä»¤å�¯åЍæµ�览器。
+
+ ```
+ gcloud init --console-only
+ ```
+2. 按照指示,以授æ�ƒ gcloud ä½¿ç”¨ä½ çš„ Google Cloud è´¦æˆ·ï¼Œå¹¶é€‰æ‹©ä½ åˆ›å»ºçš„æ–°é¡¹ç›®ã€‚
+
+
+
+
+
+
+
+## 4. 确认 gcloud çš„é…�置是å�¦æ£ç¡®
+
+�行:
+
+```
+gcloud config list
+```
+
+返回的结果应与以下内容类似:
+
+```
+[compute]
+region = us-west1 # Your chosen region
+zone = us-west1-b # Your chosen zone
+[core]
+account =
+disable_usage_reporting = True
+project =
+
+Your active configuration is: [default]
+```
+
+## 5. 创建一个 GKE 集群
+
+下�的命令创建了一个三节点的集群。
+
+把 `cluster-name` 替æ�¢ä¸ºä½ 新集群的å��称。
+
+在选择 Kubernetes 版本时,请务必先查阅[支æŒ�矩阵](https://rancher.com/support-matrix/)ï¼Œä»¥æ‰¾å‡ºå·²é’ˆå¯¹ä½ çš„ Rancher 版本验è¯�的最新 Kubernetes 版本。
+
+è¦�使用 Rancher æˆ�功创建 GKE 集群,GKE 必须处于 Standard 模å¼�。GKE 在创建 Kubernetes 集群时有两ç§�è¿�行模å¼�,分别是 Autopilot å’Œ Standard 模å¼�。Autopilot 模å¼�的集群é…�置对编辑 kube-system 命å��空间有é™�制。但是,Rancher 在安装时需è¦�在 kube-system 命å��空间ä¸åˆ›å»ºèµ„æº�ã€‚å› æ¤ï¼Œä½ å°†æ— æ³•åœ¨ä»¥ Autopilot 模å¼�创建的 GKE 集群上安装 Rancher。如需详细了解 GKE Autopilot 模å¼�å’Œ Standard 模å¼�之间的差异,请访问[比较 GKE Autopilot å’Œ Standard ](https://cloud.google.com/kubernetes-engine/docs/resources/autopilot-standard-feature-comparison)。
+
+**注æ„�**ï¼šå¦‚æžœä½ è¦�从旧的 Kubernetes 版本更新到 Kubernetes v1.22 æˆ–æ›´é«˜ç‰ˆæœ¬ï¼Œä½ è¿˜éœ€è¦�[æ›´æ–°](https://kubernetes.github.io/ingress-nginx/user-guide/k8s-122-migration/) ingress-nginx。
+
+```
+gcloud container clusters create cluster-name --num-nodes=3 --cluster-version=
+```
+
+## 6. 获å�–验è¯�å‡è¯�
+
+创建集群å�Žï¼Œä½ 需è¦�获得认è¯�å‡è¯�æ‰�能与集群交互:
+
+```
+gcloud container clusters get-credentials cluster-name
+```
+
+æ¤å‘½ä»¤å°† `kubectl` é…�ç½®æˆ�ä½¿ç”¨ä½ åˆ›å»ºçš„é›†ç¾¤ã€‚
+
+## 7. 安装 Ingress
+
+集群需�一个 Ingress,以从集群外部访问 Rancher。
+
+以下命令安装带有 LoadBalancer �务的 `nginx-ingress-controller`:
+
+```
+helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
+helm repo update
+helm upgrade --install \
+ ingress-nginx ingress-nginx/ingress-nginx \
+ --namespace ingress-nginx \
+ --set controller.service.type=LoadBalancer \
+ --version 4.0.18 \
+ --create-namespace
+```
+
+## 8. 获�负载�衡器的 IP
+
+�行以下命令获�负载�衡器的 IP 地�:
+
+```
+kubectl get service ingress-nginx-controller --namespace=ingress-nginx
+```
+
+返回的结果应与以下内容类似:
+
+```
+NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
+ingress-nginx-controller LoadBalancer 10.3.244.156 35.233.206.34 80:31876/TCP,443:32497/TCP 81s
+```
+
+ä¿�å˜ `EXTERNAL-IP`。
+
+## 9. 设置 DNS
+
+到 Rancher Server 的外部æµ�é‡�需è¦�é‡�定å�‘åˆ°ä½ åˆ›å»ºçš„è´Ÿè½½å�‡è¡¡å™¨ã€‚
+
+创建指å�‘ä½ ä¿�å˜çš„外部 IP 地å�€çš„ DNS。这个 DNS 会用作 Rancher Server çš„ URL。
+
+设置 DNS 的有效方法有很多。如需获å�–帮助,请å�‚è§� Google Cloud 文档ä¸çš„[管ç�† DNS 记录](https://cloud.google.com/dns/docs/records)部分。
+
+## 10. 安装 Rancher Helm Chart
+
+按照[本页](../../../pages-for-subheaders/install-upgrade-on-a-kubernetes-cluster.md#安装-rancher-helm-chart)的说明安装 Rancher Helm Chart。任何 Kubernetes å�‘行版上安装的 Rancher çš„ Helm è¯´æ˜Žéƒ½æ˜¯ä¸€æ ·çš„ã€‚
+
+安装 Rancher 时,使用上一æ¥èŽ·å�–çš„ DNS å��称作为 Rancher Server çš„ URL。它å�¯ä»¥ä½œä¸º Helm é€‰é¡¹ä¼ é€’è¿›æ�¥ã€‚例如,如果 DNS å��称是 `rancher.my.org`ï¼Œä½ éœ€è¦�使用 `--set hostname=rancher.my.org` 选项æ�¥è¿�行 Helm 安装命令。
+
+在æ¤è®¾ç½®ä¹‹ä¸Šå®‰è£… Rancher æ—¶ï¼Œä½ è¿˜éœ€è¦�设置与 Rancher çš„ Ingress 资æº�一起使用的 Ingress Controller çš„å��称:
+
+```
+--set ingress.ingressClassName=nginx
+```
+
+请å�‚阅[Helm 安装命令](../../../pages-for-subheaders/install-upgrade-on-a-kubernetes-cluster.md#5-æ ¹æ�®ä½ 选择的è¯�书选项通过-helm-安装-rancher)äº†è§£ä½ çš„è¯�书选项。
+
+在 Rancher v2.7.5 ä¸ï¼Œå¦‚æžœä½ æ‰“ç®—åœ¨é›†ç¾¤ä¸Šä½¿ç”¨é»˜è®¤çš„ GKE Ingress 而ä¸�å�¯ç”¨ VPC 原生的集群模å¼�,则需è¦�è®¾ç½®ä»¥ä¸‹æ ‡å¿—ï¼š
+
+```
+--set service.type=NodePort
+```
+
+æ¤è®¾ç½®æ˜¯å¿…è¦�的,这考虑了与 ClusterIP(`cattle-system/rancher` 的默认类型)之间的兼容性问题。
\ No newline at end of file
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/rancher-psact.yaml b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/rancher-psact.yaml
new file mode 100644
index 00000000000..ae248cc9b7c
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/rancher-psact.yaml
@@ -0,0 +1,37 @@
+apiVersion: apiserver.config.k8s.io/v1
+kind: AdmissionConfiguration
+plugins:
+- configuration:
+ apiVersion: pod-security.admission.config.k8s.io/v1
+ defaults:
+ audit: restricted
+ audit-version: latest
+ enforce: restricted
+ enforce-version: latest
+ warn: restricted
+ warn-version: latest
+ exemptions:
+ namespaces:
+ - ingress-nginx
+ - kube-system
+ - cattle-system
+ - cattle-epinio-system
+ - cattle-fleet-system
+ - longhorn-system
+ - cattle-neuvector-system
+ - cattle-monitoring-system
+ - rancher-alerting-drivers
+ - cis-operator-system
+ - cattle-csp-adapter-system
+ - cattle-externalip-system
+ - cattle-gatekeeper-system
+ - istio-system
+ - cattle-istio-system
+ - cattle-logging-system
+ - cattle-windows-gmsa-system
+ - cattle-sriov-system
+ - cattle-ui-plugin-system
+ - tigera-operator
+ kind: PodSecurityConfiguration
+ name: PodSecurity
+ path: ""
\ No newline at end of file
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/rollbacks.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/rollbacks.md
new file mode 100644
index 00000000000..c306729f752
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/rollbacks.md
@@ -0,0 +1,128 @@
+---
+title: 回滚
+---
+
+## 使用 Rancher 2.6.4+ 进行回滚的其他æ¥éª¤
+
+Rancher v2.6.4 å°† cluster-api 模å�—从 v0.4.4 å�‡çº§åˆ° v1.0.2。å��过æ�¥ï¼Œcluster-api çš„ v1.0.2 版本将集群 API 的自定义资æº�定义 (CRD) 从 `cluster.x-k8s.io/v1alpha4` å�‡çº§åˆ° `cluster.x-k8s.io/v1beta1`ã€‚å½“ä½ å°�试将 Rancher v2.6.4 回滚到以å‰�版本的 Rancher v2.6.x 时,CRD å�‡çº§åˆ° v1beta1 ä¼šå¯¼è‡´å›žæ»šå¤±è´¥ã€‚è¿™æ˜¯å› ä¸ºä½¿ç”¨æ—§ apiVersion (v1alpha4) çš„ CRD 与 v1beta1 ä¸�兼容。
+
+è¦�é�¿å…�å›žæ»šå¤±è´¥ï¼Œä½ éœ€è¦�在å°�试æ�¢å¤�æ“�作或回滚**之å‰�**è¿�行以下 Rancher 脚本:
+
+* `verify.sh`ï¼šæ£€æŸ¥é›†ç¾¤ä¸æ˜¯å�¦æœ‰ä»»ä½•与 Rancher 相关的资æº�。
+* `cleanup.sh`:清�集群。
+
+有关详细信æ�¯å’Œæº�代ç �,请å�‚阅 [rancher/rancher-cleanup repo](https://github.com/rancher/rancher-cleanup)。
+
+:::caution
+
+`cleanup.sh` è¿�行的时候会有å�œæœºæ—¶é—´ï¼Œè¿™æ˜¯å› ä¸ºè„šæœ¬ä¼šåˆ é™¤ Rancher 创建的资æº�。
+
+:::
+
+### 从 v2.6.4+ 回滚到较低版本的 v2.6.x
+
+1. 按照[说明](https://github.com/rancher/rancher-cleanup/blob/main/README.md)�行脚本。
+1. 按照[说明](../../../how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/migrate-rancher-to-new-cluster.md)在现有集群上安装 rancher-backup Helm Chart 并��之�的状�。
+ 1. çœ�ç•¥æ¥éª¤ 3。
+ 1. 执行到æ¥éª¤ 4 时,在è¦�回滚到的 local 集群上安装 Rancher 2.6.x 版本。
+
+## 回滚到 Rancher 2.5.0+
+
+�回滚到 Rancher 2.5.0+,使用 **Rancher 备份**应用并通过备份��� Rancher。
+
+回滚�,Rancher 必须以较低/较早的版本�动。
+
+还原是通过创建 Restore 自定义资�实现的。
+
+:::note ���示:
+
+* 请按照æ¤é¡µé�¢ä¸Šçš„说明在已备份的å�Œä¸€é›†ç¾¤ä¸Šè¿˜åŽŸ Rancher。è¦�把 Rancher è¿�移到新集群,请å�‚ç…§æ¥éª¤[è¿�ç§» Rancher](../../../how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/migrate-rancher-to-new-cluster.md)。
+
+* 在使用相å�Œè®¾ç½®æ�¢å¤� Rancher 时,Rancher deployment 在æ�¢å¤�开始å‰�被手动缩å‡�,然å�Ž Operator 将在æ�¢å¤�完æˆ�å�Žå°†å…¶ç¼©å›žã€‚å› æ¤ï¼Œåœ¨æ�¢å¤�完æˆ�之å‰�,Rancher å’Œ UI 都将ä¸�å�¯ç”¨ã€‚如果 UI ä¸�å�¯ç”¨æ—¶ï¼Œä½ å�¯ä½¿ç”¨ `kubectl create -f restore.yaml`YAML æ�¢å¤�文件æ�¥ä½¿ç”¨åˆ�始的集群 kubeconfig。
+
+:::
+
+### 创建 Restore 自定义资�
+
+1. 点击 **☰ > 集群管�**。
+1. æ‰¾åˆ°ä½ çš„æœ¬åœ°é›†ç¾¤ï¼Œå¹¶ç‚¹å‡» **Explore**。
+1. 在左侧导航æ �ä¸ï¼Œç‚¹å‡» **Rancher 备份 > 还原**。
+ :::note
+
+ 如果 Rancher Backups 应用ä¸�å�¯è§�ï¼Œä½ éœ€è¦�到 **Apps** çš„ Charts 页é�¢ä¸å®‰è£…应用。详情请å�‚è§�[æ¤å¤„](../../../pages-for-subheaders/helm-charts-in-rancher.md#charts)。
+
+ :::
+
+1. �击**创建**。
+1. 使用表�或 YAML 创建 Restore。如需获�使用表�创建 Restore 资�的更多信�,请��[�置�考](../../../reference-guides/backup-restore-configuration/restore-configuration.md)和[示例](../../../reference-guides/backup-restore-configuration/examples.md)。
+1. 如需使用 YAML 编辑器,点击**创建 > 使用 YAML 文件创建**。然�输入 Restore YAML。以下是 Restore 自定义资�示例:
+
+ ```yaml
+ apiVersion: resources.cattle.io/v1
+ kind: Restore
+ metadata:
+ name: restore-migration
+ spec:
+ backupFilename: backup-b0450532-cee1-4aa1-a881-f5f48a007b1c-2020-09-15T07-27-09Z.tar.gz
+ encryptionConfigSecretName: encryptionconfig
+ storageLocation:
+ s3:
+ credentialSecretName: s3-creds
+ credentialSecretNamespace: default
+ bucketName: rancher-backups
+ folder: rancher
+ region: us-west-2
+ endpoint: s3.us-west-2.amazonaws.com
+ ```
+ 如需获得�置 Restore 的帮助,请��[�置�考](../../../reference-guides/backup-restore-configuration/restore-configuration.md)和[示例](../../../reference-guides/backup-restore-configuration/examples.md)。
+
+1. �击**创建**。
+
+**结果**ï¼šå·²åˆ›å»ºå¤‡ä»½æ–‡ä»¶å¹¶æ›´æ–°åˆ°ç›®æ ‡å˜å‚¨ä½�置。资æº�还原顺åº�如下:
+
+1. 自定义资�定义(CRD)
+2. 集群范围资�
+3. 命�空间资�
+
+如需查看还原的处ç�†æ–¹å¼�,请检查 Operator 的日志。按照如下æ¥éª¤èŽ·å�–日志:
+
+```yaml
+kubectl get pods -n cattle-resources-system
+kubectl logs -n cattle-resources-system -f
+```
+
+### 回滚到上一个 Rancher 版本
+
+ä½ å�¯ä»¥ä½¿ç”¨ Helm CLI 回滚 Rancher。è¦�回滚到上一个版本:
+
+```yaml
+helm rollback rancher -n cattle-system
+```
+
+å¦‚æžœä½ ä¸�æ˜¯æƒ³å›žæ»šåˆ°ä¸Šä¸€ä¸ªç‰ˆæœ¬ï¼Œä½ ä¹Ÿå�¯ä»¥æŒ‡å®šå›žæ»šçš„版本。查看部署历å�²è®°å½•:
+
+```yaml
+helm history rancher -n cattle-system
+```
+
+ç¡®å®šç›®æ ‡ç‰ˆæœ¬å�Žï¼Œæ‰§è¡Œå›žæ»šã€‚æ¤ç¤ºä¾‹å›žæ»šåˆ°ç‰ˆæœ¬ `3`:
+
+```yaml
+helm rollback rancher 3 -n cattle-system
+```
+
+## 回滚到 Rancher 2.2-2.4
+
+è¦�回滚到 2.5 之å‰�çš„ Rancher 版本,å�‚考æ¤å¤„çš„æ¥éª¤[æ�¢å¤�备份 — Kubernetes 安装](/versioned_docs/version-2.0-2.4/how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/restore-rancher-launched-kubernetes-clusters-from-backup.md)。如果æ�¢å¤� Rancher Server 的集群的æŸ�个快照,Rancher 的版本以å�Šçжæ€�å�‡ä¼šæ�¢å¤�回到快照时的版本和状æ€�。
+
+有关回滚 Docker 安装的 Rancher,请��[本页](../other-installation-methods/rancher-on-a-single-node-with-docker/roll-back-docker-installed-rancher.md)。
+
+:::note
+
+托管集群对其状æ€�具有æ�ƒå¨�æ€§ã€‚å› æ¤ï¼Œæ�¢å¤� Rancher Server ä¸�会æ�¢å¤�å¿«ç…§å�Žå¯¹æ‰˜ç®¡é›†ç¾¤è¿›è¡Œçš„工作负载部署或更改。
+
+:::
+
+## 回滚到 Rancher 2.0-2.1
+
+我们ä¸�å†�支æŒ�回滚到 Rancher 2.0-2.1。回滚到这些版本的说明ä¿�留在[æ¤å¤„](/versioned_docs/version-2.0-2.4/how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/restore-rancher-launched-kubernetes-clusters-from-backup/roll-back-to-v2.0-v2.1.md)ï¼Œä»…ç”¨äºŽæ— æ³•å�‡çº§åˆ° v2.2 的情况。
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/troubleshooting.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/troubleshooting.md
new file mode 100644
index 00000000000..2912d831f55
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/troubleshooting.md
@@ -0,0 +1,188 @@
+---
+title: Rancher Server Kubernetes 集群的问题排查
+---
+
+本文介�如何对安装在 Kubernetes 集群上的 Rancher 进行故障排除。
+
+### 相关命�空间
+
+故障排除主è¦�针对以下 3 个命å��空间ä¸çš„对象:
+
+- `cattle-system`:`rancher` deployment 和 Pod。
+- `ingress-nginx`:Ingress Controller Pod 和 services。
+- `cert-manager`:`cert-manager` Pod。
+
+### "default backend - 404"
+
+很多æ“�作都有å�¯èƒ½å¯¼è‡´ Ingress Controller æ— æ³•å°†æµ�é‡�转å�‘åˆ°ä½ çš„ Rancher 实例。但是大多数情况下都是由错误的 SSL é…�置导致的。
+
+检查事项:
+
+- [Rancher 是å�¦æ£åœ¨è¿�行](#检查-rancher-是å�¦æ£åœ¨è¿�行)
+- [�书的 Common Name(CN)是 "Kubernetes Ingress Controller Fake Certificate"](#�书的-cn-是-kubernetes-ingress-controller-fake-certificate)
+
+### 检查 Rancher 是å�¦æ£åœ¨è¿�行
+
+使用 `kubectl` 检查 `cattle-system` 系统命�空间,并查看 Rancher Pod 的状�是�是 **Running**:
+
+```
+kubectl -n cattle-system get pods
+
+NAME READY STATUS RESTARTS AGE
+pod/rancher-784d94f59b-vgqzh 1/1 Running 0 10m
+```
+
+如果状��是 `Running`,在 Pod 上�行 `describe`,并检查 **Events**:
+
+```
+kubectl -n cattle-system describe pod
+
+...
+Events:
+ Type Reason Age From Message
+ ---- ------ ---- ---- -------
+ Normal Scheduled 11m default-scheduler Successfully assigned rancher-784d94f59b-vgqzh to localhost
+ Normal SuccessfulMountVolume 11m kubelet, localhost MountVolume.SetUp succeeded for volume "rancher-token-dj4mt"
+ Normal Pulling 11m kubelet, localhost pulling image "rancher/rancher:v2.0.4"
+ Normal Pulled 11m kubelet, localhost Successfully pulled image "rancher/rancher:v2.0.4"
+ Normal Created 11m kubelet, localhost Created container
+ Normal Started 11m kubelet, localhost Started container
+```
+
+### 检查 Rancher 日志
+
+使用 `kubectl` 列出 Pod:
+
+```
+kubectl -n cattle-system get pods
+
+NAME READY STATUS RESTARTS AGE
+pod/rancher-784d94f59b-vgqzh 1/1 Running 0 10m
+```
+
+使用 `kubectl` 和 Pod �称列出该 Pod 的日志:
+
+```
+kubectl -n cattle-system logs -f rancher-784d94f59b-vgqzh
+```
+
+### �书的 CN 是 "Kubernetes Ingress Controller Fake Certificate"
+
+使用�览器检查�书的详细信�。如果显示 CN 是 "Kubernetes Ingress Controller Fake Certificate",则说明读�或�� SSL �书时出现了问题。
+
+:::note
+
+å¦‚æžœä½ ä½¿ç”¨çš„æ˜¯ Let's Encrypt è¯�书,è¯�书é¢�å�‘的过程å�¯èƒ½éœ€è¦�å‡ åˆ†é’Ÿã€‚
+
+:::
+
+### 排查 Cert-Manager ��的�书(Rancher 或 Let's Encrypt 生�的)问题
+
+`cert-manager` 有 3 部分:
+
+- `cert-manager` 命å��空间ä¸çš„ `cert-manager` Pod。
+- `cattle-system` 命å��空间ä¸çš„ `Issuer` 对象。
+- `cattle-system` 命å��空间ä¸çš„ `Certificate` 对象。
+
+å¾€å�Žæ“�作,对æ¯�个对象è¿�行 `kubectl describe` å¹¶æ£€æŸ¥äº‹ä»¶ã€‚è¿™æ ·ï¼Œä½ å�¯ä»¥è¿½è¸ªå�¯èƒ½ä¸¢å¤±çš„内容。
+
+以下是 Issuer 有问题的示例:
+
+```
+kubectl -n cattle-system describe certificate
+...
+Events:
+ Type Reason Age From Message
+ ---- ------ ---- ---- -------
+ Warning IssuerNotReady 18s (x23 over 19m) cert-manager Issuer rancher not ready
+```
+
+```
+kubectl -n cattle-system describe issuer
+...
+Events:
+ Type Reason Age From Message
+ ---- ------ ---- ---- -------
+ Warning ErrInitIssuer 19m (x12 over 19m) cert-manager Error initializing issuer: secret "tls-rancher" not found
+ Warning ErrGetKeyPair 9m (x16 over 19m) cert-manager Error getting keypair for CA issuer: secret "tls-rancher" not found
+```
+
+### æŽ’æŸ¥ä½ è‡ªå·±æ��供的 SSL è¯�书问题
+
+ä½ çš„è¯�书直接应用于 `cattle-system` 命å��空间ä¸çš„ Ingress 对象。
+
+检查 Ingress 对象的状�,并查看它是�准备就绪:
+
+```
+kubectl -n cattle-system describe ingress
+```
+
+如果 Ingress 对象已就绪,但是 SSL ä»�ç„¶æ— æ³•æ£å¸¸å·¥ä½œï¼Œä½ çš„è¯�ä¹¦æˆ–å¯†æ–‡çš„æ ¼å¼�å�¯èƒ½ä¸�æ£ç¡®ã€‚
+
+è¿™ç§�情况下,请检查 nginx-ingress-controller 的日志。nginx-ingress-controller çš„ Pod 䏿œ‰å¤šä¸ªå®¹å™¨ï¼Œå› æ¤ä½ 需è¦�指定容器的å��称:
+
+```
+kubectl -n ingress-nginx logs -f nginx-ingress-controller-rfjrq nginx-ingress-controller
+...
+W0705 23:04:58.240571 7 backend_ssl.go:49] error obtaining PEM from secret cattle-system/tls-rancher-ingress: error retrieving secret cattle-system/tls-rancher-ingress: secret cattle-system/tls-rancher-ingress was not found
+```
+
+### 没有匹�的 "Issuer"
+
+ä½ æ‰€é€‰çš„ SSL é…�ç½®è¦�求在安装 Rancher 之å‰�先安装 Cert-Manager,å�¦åˆ™ä¼šå‡ºçŽ°ä»¥ä¸‹é”™è¯¯:
+
+```
+Error: validation failed: unable to recognize "": no matches for kind "Issuer" in version "certmanager.k8s.io/v1alpha1"
+```
+
+在这�情况下,先安装 Cert-Manager,然���新安装 Rancher。
+
+
+### Canal Pod 显示 READY 2/3
+
+æ¤é—®é¢˜çš„æœ€å¸¸è§�åŽŸå› æ˜¯ç«¯å�£ 8472/UDP åœ¨èŠ‚ç‚¹ä¹‹é—´æœªæ‰“å¼€ã€‚å› æ¤ï¼Œä½ å�¯ä»¥æ£€æŸ¥ä½ 的本地防ç�«å¢™ã€�网络路由或安全组。
+
+解决网络问题�,`canal` Pod 会超时并��以建立连接。
+
+### nginx-ingress-controller Pod 显示 RESTARTS
+
+æ¤é—®é¢˜çš„æœ€å¸¸è§�åŽŸå› æ˜¯ `canal` pod 未能建立覆盖网络。å�‚è§� [canal Pod 显示 READY `2/3`](#canal-pod-显示-ready-23) 进行排查。
+
+
+### Failed to dial to /var/run/docker.sock: ssh: rejected: administratively prohibited (open failed)
+
+æ¤é”™è¯¯çš„åŽŸå› å�¯èƒ½æ˜¯ï¼š
+
+* æŒ‡å®šè¿žæŽ¥çš„ç”¨æˆ·æ— æ�ƒè®¿é—® Docker Socketã€‚å¦‚æžœæ˜¯è¿™ä¸ªåŽŸå› ï¼Œä½ é€šè¿‡ç™»å½•ä¸»æœºå¹¶è¿�行 `docker ps` 命令æ�¥æ£€æŸ¥ï¼š
+
+```
+$ ssh user@server
+user@server$ docker ps
+CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
+```
+
+如果需è¦�了解如何进行æ£ç¡®è®¾ç½®ï¼Œè¯·å�‚è§�[以é�ž root 用户身份管ç�† Docker](https://docs.docker.com/install/linux/linux-postinstall/#manage-docker-as-a-non-root-user)。
+
+* ä½ ä½¿ç”¨çš„æ“�作系统是 RedHat 或 CentOS:由于 [Bugzilla #1527565](https://bugzilla.redhat.com/show_bug.cgi?id=1527565)ï¼Œä½ ä¸�能使用 `root` ç”¨æˆ·è¿žæŽ¥åˆ°èŠ‚ç‚¹ã€‚å› æ¤ï¼Œä½ 需è¦�æ·»åŠ ä¸€ä¸ªå�•独的用户并é…�置其访问 Docker Socket。如果需è¦�了解如何进行æ£ç¡®è®¾ç½®ï¼Œè¯·å�‚è§�[以é�ž root 用户身份管ç�† Docker](https://docs.docker.com/install/linux/linux-postinstall/#manage-docker-as-a-non-root-user)。
+
+* SSH æœ�务器版本ä¸�是 6.7 或更高版本:高版本是 Socket 转å�‘所必须的,用于通过 SSH 连接到 Docker Socketã€‚ä½ å�¯ä»¥åœ¨ä½ è¦�连接的主机上使用 `sshd -V` 或使用 netcat 进行检查:
+```
+$ nc xxx.xxx.xxx.xxx 22
+SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.10
+```
+
+### Failed to dial ssh using address [xxx.xxx.xxx.xxx:xx]: Error configuring SSH: ssh: no key found
+
+`ssh_key_path` å¯†é’¥æ–‡ä»¶æ— æ³•è®¿é—®ï¼šè¯·ç¡®ä¿�ä½ å·²ç»�指定了ç§�钥文件(ä¸�是公钥 `.pub`),而且è¿�行 `rke` 命令的用户å�¯ä»¥è®¿é—®è¯¥ç§�钥文件。
+
+### Failed to dial ssh using address [xxx.xxx.xxx.xxx:xx]: ssh: handshake failed: ssh: unable to authenticate, attempted methods [none publickey], no supported methods remain
+
+`ssh_key_path` 密钥文件ä¸�是访问节点的æ£ç¡®æ–‡ä»¶ï¼šè¯·ä»”细检查,确ä¿�ä½ å·²ä¸ºèŠ‚ç‚¹æŒ‡å®šäº†æ£ç¡®çš„ `ssh_key_path` 和连接用户。
+
+### Failed to dial ssh using address [xxx.xxx.xxx.xxx:xx]: Error configuring SSH: ssh: cannot decode encrypted private keys
+
+å¦‚éœ€ä½¿ç”¨åŠ å¯†çš„ç§�钥,请使用 `ssh-agent` æ�¥ä½¿ç”¨å¯†ç �æ�¥åŠ è½½å¯†é’¥ã€‚å¦‚æžœåœ¨è¿�行 `rke` å‘½ä»¤çš„çŽ¯å¢ƒä¸æ‰¾åˆ° `SSH_AUTH_SOCK` 环境å�˜é‡�,它将自动用于连接到节点。
+
+### Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
+
+èŠ‚ç‚¹æ— æ³•é€šè¿‡é…�置的 `address` å’Œ `port` 访问。
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/upgrade-a-hardened-cluster-to-k8s-v1-25.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/upgrade-a-hardened-cluster-to-k8s-v1-25.md
new file mode 100644
index 00000000000..f55a95063b5
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/upgrade-a-hardened-cluster-to-k8s-v1-25.md
@@ -0,0 +1,68 @@
+---
+title: å°†åŠ å›ºçš„è‡ªå®šä¹‰/导入集群å�‡çº§åˆ° Kubernetes v1.25
+---
+
+Kubernetes v1.25 改å�˜äº†é›†ç¾¤æ��述和执行安全ç–略的方å¼�。从这个版本开始,[Pod 安全ç–ç•¥ (PSP)](https://kubernetes.io/docs/concepts/security/pod-security-policy/)ä¸�å†�å�¯ç”¨ã€‚Kubernetes v1.25 将它们替æ�¢ä¸ºæ–°çš„安全对象:[Pod å®‰å…¨æ ‡å‡† (PSS)](https://kubernetes.io/docs/concepts/security/pod-security-standards/) å’Œ [Pod 安全准入 (PSA)](https://kubernetes.io/docs/concepts/security/pod-security-admission/)。
+
+å¦‚æžœä½ å…·æœ‰è‡ªå®šä¹‰æˆ–å¯¼å…¥çš„åŠ å›ºé›†ç¾¤ï¼Œä½ éœ€è¦�å�šå¥½å‡†å¤‡ï¼Œç¡®ä¿�将旧版本的 Kubernetes 顺利å�‡çº§åˆ° v1.25 或更高版本。
+
+:::note
+
+å�‡çº§åˆ° v1.25 å�Žï¼Œæ·»åŠ å¿…è¦�çš„ Rancher 命å��空间è±�å…�。有关详细信æ�¯ï¼Œè¯·å�‚阅 [Pod 安全准入 (PSA) é…�置模æ�¿](../../../how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/psa-config-templates.md#è±�å…�必须的-rancher-命å��空间)。
+
+:::
+
+## å°†å¯¼å…¥çš„åŠ å›ºé›†ç¾¤å�‡çº§åˆ° Kubernetes v1.25 或更高版本
+
+
+
+
+在集群ä¸çš„æ¯�个节点上执行以下æ“�作:
+1. å°† [`rancher-psact.yaml`](./rancher-psact.yaml) ä¿�å˜åˆ° `/etc/rancher/rke2` ä¸ã€‚
+1. 编辑 RKE2 �置文件:
+ 1. å°† `profile` å—æ®µæ›´æ–°ä¸º `cis-1.23`。
+ 1. 指定刚æ‰�æ·»åŠ çš„é…�置文件的路径:`pod-security-admission-config-file: /etc/rancher/rke2/rancher-psact.yaml`。
+
+
+
+
+在集群ä¸çš„æ¯�个节点上执行以下æ“�作:
+
+é�µå¾ª K3s [å°†åŠ å›ºé›†ç¾¤ä»Ž v1.24.x å�‡çº§åˆ° v1.25.x](https://docs.k3s.io/known-issues#hardened-125)的官方说明,但使用[自定义](./rancher-psact.yaml)Rancher PSA é…�置模æ�¿ï¼Œè€Œä¸�是 K3s 官方网站上æ��供的é…�置。
+
+
+
+执行这些æ¥éª¤å�Žï¼Œä½ å�¯ä»¥é€šè¿‡ Rancher UI å�‡çº§é›†ç¾¤çš„ Kubernetes 版本:
+
+1. 在左上角,�击 **☰ > 集群管�**。
+1. 在**集群**è¡¨ä¸æ‰¾åˆ°è¦�更新的集群,点击 **â‹®**。
+1. 选择**编辑�置**。
+1. 在 **Kubernetes 版本**下拉è�œå�•ä¸ï¼Œé€‰æ‹©è¦�使用的版本。
+1. å�•击**ä¿�å˜**。
+
+## å°†è‡ªå®šä¹‰åŠ å›ºé›†ç¾¤å�‡çº§åˆ° Kubernetes v1.25 或更高版本
+
+
+
+
+1. 在左上角,�击 **☰ > 集群管�**。
+1. 在**集群**è¡¨ä¸æ‰¾åˆ°è¦�更新的集群,点击 **â‹®**。
+1. 选择**编辑�置**。
+1. 在**基本信æ�¯ > 安全**下的 **CIS é…�置文件**下拉è�œå�•ä¸ï¼Œé€‰æ‹© `cis-1.23`。
+1. 在 **PSA é…�置模æ�¿**下拉è�œå�•ä¸ï¼Œé€‰æ‹© `rancher-restricted`。
+1. 在 **Kubernetes 版本**下拉è�œå�•ä¸ï¼Œé€‰æ‹©è¦�使用的版本。
+1. å�•击**ä¿�å˜**。
+
+
+
+
+1. 在左上角,�击 **☰ > 集群管�**。
+1. 在**集群**è¡¨ä¸æ‰¾åˆ°è¦�更新的集群,点击 **â‹®**。
+1. 选择**编辑 YAML**。
+1. 从 `kube-apiserver-arg.enable-admission-plugins` ä¸åˆ 除 `PodSecurityPolicy`。
+1. 在 `spec` å—æ®µä¸ï¼Œæ·»åŠ ä¸€è¡Œï¼š`defaultPodSecurityAdmissionConfigurationTemplateName: rancher-restricted`
+1. å°† `kubernetesVersion` æ›´æ–°ä¸ºä½ é€‰æ‹©çš„ç‰ˆæœ¬ï¼ˆv1.25 或更高版本)。
+1. å�•击**ä¿�å˜**。
+
+
+
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/upgrades.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/upgrades.md
new file mode 100644
index 00000000000..9e5367abb2d
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/upgrades.md
@@ -0,0 +1,207 @@
+---
+title: �级
+---
+
+本文介ç»�如何å�‡çº§ä½¿ç”¨ Helm 安装在 Kubernetes 集群上的 Rancher Server。这些æ¥éª¤ä¹Ÿé€‚用于使用 Helm 进行的离线安装。
+
+有关使用 Docker 安装的 Rancher 的�级说明,请��[本页。](../other-installation-methods/rancher-on-a-single-node-with-docker/upgrade-docker-installed-rancher.md)
+
+如需å�‡çº§ Kubernetes 集群ä¸çš„组件,或 [Kubernetes services](https://rancher.com/docs/rke/latest/en/config-options/services/) 或 [é™„åŠ ç»„ä»¶ï¼ˆadd-on)](https://rancher.com/docs/rke/latest/en/config-options/add-ons/)的定义,请å�‚è§� [RKE å�‡çº§æ–‡æ¡£](https://rancher.com/docs/rke/latest/en/upgrades/)çš„ Rancher Kubernetes 引擎。
+
+
+## 先决�件
+
+### 访问 kubeconfig
+
+Helm çš„è¿�行ä½�ç½®ï¼Œåº”è¯¥ä¸Žä½ çš„ kubeconfig æ–‡ä»¶ï¼Œæˆ–ä½ è¿�行 kubectl 命令的ä½�置相å�Œã€‚
+
+å¦‚æžœä½ åœ¨å®‰è£… Kubernetes 时使用了 RKE,那么 config å°†ä¼šåœ¨ä½ è¿�行 `rke up` 的目录下创建。
+
+kubeconfig 也å�¯ä»¥é€šè¿‡ `--kubeconfig` æ ‡ç¾ï¼ˆè¯¦æƒ…请å�‚è§� https://helm.sh/docs/helm/helm/ )æ�¥æ‰‹åŠ¨æŒ‡å®šæ‰€éœ€çš„é›†ç¾¤ã€‚
+
+### 查看已知问题
+
+如需查看æ¯�个 Rancher 版本的已知问题,请å�‚è§� [GitHub](https://github.com/rancher/rancher/releases) ä¸çš„å�‘行说明,或查看 [Rancher 论å�›](https://forums.rancher.com/c/announcements/12)。
+
+ä¸�支æŒ� _å�‡çº§_ 或 _å�‡çº§åˆ°_ [rancher-alpha 仓库](../resources/choose-a-rancher-version.md#helm-chart-仓库)ä¸çš„任何 Chart。
+### Helm 版本
+
+本安装指å�—å�‡å®šä½ 使用的是 Helm 3。
+
+å¦‚æžœä½ ä½¿ç”¨ Helm 2,请å�‚è§� [Helm 2 è¿�移到 Helm 3 文档](https://helm.sh/blog/migrate-from-helm-v2-to-helm-v3/)ã€‚å¦‚æžœä½ ä¸�能å�‡çº§åˆ° Helm 3,[Helm 2 å�‡çº§é¡µé�¢](/versioned_docs/version-2.0-2.4/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/upgrades/helm2.md)æ��供了使用 Helm 2 å�‡çº§çš„æ—§å�‡çº§æŒ‡å�—。
+
+### 离线安装:推�镜�到�有镜�仓库
+
+[仅适用于离线安装](../../../pages-for-subheaders/air-gapped-helm-cli-install.md):为新的 Rancher Server 版本收集和推é€�镜åƒ�ã€‚ä½¿ç”¨ä½ éœ€è¦�针对 Rancher 版本å�‡çº§çš„镜åƒ�,按照æ¥éª¤[推é€�镜åƒ�到ç§�有镜åƒ�仓库](../other-installation-methods/air-gapped-helm-cli-install/publish-images.md)。
+
+### 使用 cert-manager 0.8.0 之�的版本�级
+
+[从 2019 å¹´ 11 月 1 日开始,Let's Encrypt å·²å±�蔽早于 0.8.0 çš„ cert-manager 实例](https://community.letsencrypt.org/t/blocking-old-cert-manager-versions/98753)ã€‚å› æ¤ï¼Œè¯·å�‚è§�[说明](../resources/upgrade-cert-manager.md)把 cert-manager å�‡çº§åˆ°æœ€æ–°ç‰ˆæœ¬ã€‚
+
+## �级概�
+
+按照以下æ¥éª¤å�‡çº§ Rancher Server:
+
+
+### 1. 备份�行 Rancher Server 的 Kubernetes 集群
+
+使用[备份应用](../../../how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/back-up-rancher.md)�备份 Rancher。
+
+如果å�‡çº§è¿‡ç¨‹ä¸å‡ºçŽ°é—®é¢˜ï¼Œä½ å°†ä½¿ç”¨å¤‡ä»½ä½œä¸ºè¿˜åŽŸç‚¹ã€‚
+
+### 2. 更新 Helm Chart 仓库
+
+1. 更新本地 Helm 仓库缓å˜ã€‚
+
+ ```
+ helm repo update
+ ```
+
+1. 获å�–ä½ ç”¨æ�¥å®‰è£… Rancher 的仓库å��称。
+
+ 关于仓库�其区别,请�� [Helm Chart Repositories](../resources/choose-a-rancher-version.md#helm-chart-仓库)。
+
+ - Latest:建议用于试用最新功能
+ ```
+ helm repo add rancher-latest https://releases.rancher.com/server-charts/latest
+ ```
+ - Stable:建议用于生产环境
+ ```
+ helm repo add rancher-stable https://releases.rancher.com/server-charts/stable
+ ```
+ - Alpha:�将�布的实验性预览。
+ ```
+ helm repo add rancher-alpha https://releases.rancher.com/server-charts/alpha
+ ```
+ 注�:�支��级到 Alpha 版�从 Alpha 版�级或在 Alpha 版之间�级。
+
+ ```
+ helm repo list
+
+ NAME URL
+ stable https://charts.helm.sh/stable
+ rancher- https://releases.rancher.com/server-charts/
+ ```
+
+ :::note
+
+ å¦‚æžœä½ æƒ³åˆ‡æ�¢åˆ°ä¸�å�Œçš„ Helm Chart 仓库,请按照[切æ�¢ä»“库æ¥éª¤](../resources/choose-a-rancher-version.md#切æ�¢åˆ°ä¸�å�Œ-helm-chart-仓库)进行æ“�ä½œã€‚å¦‚æžœä½ è¦�切æ�¢ä»“库,请先å†�次列出仓库,å†�ç»§ç»æ‰§è¡Œæ¥éª¤ 3,以确ä¿�æ·»åŠ äº†æ£ç¡®çš„仓库。
+
+ :::
+
+1. 从 Helm Chart 仓库获�最新的 Chart �安装 Rancher。
+
+ 该命令将æ��å�–最新的 Chart,并将其作为 `.tgz`文件ä¿�å˜åœ¨å½“å‰�目录ä¸ã€‚
+
+ ```plain
+ helm fetch rancher-/rancher
+ ```
+ ä½ å�¯ä»¥é€šè¿‡ `--version=` æ ‡è®°ï¼Œæ�¥æŒ‡å®šè¦�å�‡çº§çš„ç›®æ ‡ Chart 版本。例如:
+
+ ```plain
+ helm fetch rancher-/rancher --version=2.6.8
+ ```
+
+### 3. �级 Rancher
+
+本节介�了如何使用 Helm �级 Rancher 的一般(互�网连接)或离线安装。
+
+:::note 离线说明:
+
+å¦‚æžœä½ åœ¨ç¦»çº¿çŽ¯å¢ƒä¸å®‰è£… Rancher,请跳过本页的其余部分,按照[本页](air-gapped-upgrades.md)上的说明渲染 Helm 模æ�¿ã€‚
+
+:::
+
+
+从当å‰�安装的 Rancher Helm Chart ä¸èŽ·å�–用 `--set`ä¼ é€’çš„å€¼ã€‚
+
+```
+helm get values rancher -n cattle-system
+
+hostname: rancher.my.org
+```
+
+:::note
+
+这个命令会列出更多的值。æ¤å¤„展示的å�ªæ˜¯å…¶ä¸ä¸€ä¸ªå€¼çš„例å�。
+
+:::
+
+:::tip
+
+Deployment çš„å��ç§°å�¯èƒ½ä¼šæœ‰æ‰€ä¸�å�Œã€‚ä¾‹å¦‚ï¼Œå¦‚æžœä½ é€šè¿‡ AWS Marketplace 部署 Rancher,则 Deployment çš„å��称为“rancher-stableâ€�。
+å› æ¤ï¼š
+```
+helm get values rancher-stable -n cattle-system
+
+hostname: rancher.my.org
+```
+
+:::
+
+如果è¦�å°† cert-manager 从 v1.5 或更早的版本å�‡çº§åˆ°æœ€æ–°ç‰ˆæœ¬ï¼Œè¯·å�‚阅 [cert-manager upgrade docs](../resources/upgrade-cert-manager.md#选项-cå�‡çº§-15-å�Šä»¥ä¸‹ç‰ˆæœ¬çš„-cert-manager) 了解如何在ä¸�å�¸è½½æˆ–é‡�新安装 Rancher 的情况下å�‡çº§ cert-manager。å�¦åˆ™ï¼Œè¯·æŒ‰ç…§ä»¥ä¸‹[ Rancher å�‡çº§æ¥éª¤](#rancher-å�‡çº§æ¥éª¤)进行æ“�作。
+
+#### Rancher å�‡çº§æ¥éª¤
+
+ä¿�ç•™ä½ çš„æ‰€æœ‰è®¾ç½®æŠŠ Rancher å�‡çº§åˆ°æœ€æ–°ç‰ˆæœ¬ã€‚
+
+将上一æ¥ä¸çš„æ‰€æœ‰å€¼ç”¨ `--set key=value` è¿½åŠ åˆ°å‘½ä»¤ä¸ã€‚
+
+对于 Kubernetes v1.25 或更高版本,使用 Rancher v2.7.2-v2.7.4 时,将 `global.cattle.psp.enabled` 设置为 `false`。对于 Rancher v2.7.5 å�Šæ›´é«˜ç‰ˆæœ¬æ�¥è¯´ï¼Œè¿™ä¸�æ˜¯å¿…éœ€çš„ï¼Œä½†ä½ ä»�ç„¶å�¯ä»¥æ‰‹åŠ¨è®¾ç½®è¯¥é€‰é¡¹ã€‚
+
+```
+helm upgrade rancher rancher-/rancher \
+ --namespace cattle-system \
+ --set hostname=rancher.my.org
+```
+
+:::note
+
+以上是一个例å�,å�¯èƒ½æœ‰æ›´å¤šä¸Šä¸€æ¥çš„值需è¦�è¿½åŠ ã€‚
+
+:::
+
+:::tip
+
+å¦‚æžœä½ é€šè¿‡ AWS Marketplace 部署 Rancher,则 Deployment çš„å��称为“rancher-stableâ€�。
+å› æ¤ï¼š
+```
+helm upgrade rancher-stable rancher-/rancher \
+ --namespace cattle-system \
+ --set hostname=rancher.my.org
+```
+
+:::
+
+å�¦å¤–ï¼Œä½ ä¹Ÿå�¯ä»¥å°†å½“å‰�的值导出到一个文件ä¸ï¼Œå¹¶åœ¨å�‡çº§æ—¶å¼•ç”¨è¯¥æ–‡ä»¶ã€‚ä¾‹å¦‚ï¼Œå¦‚æžœä½ å�ªéœ€è¦�改å�˜ Rancher 的版本:
+
+1. 将当�值导出到文件:
+ ```
+ helm get values rancher -n cattle-system -o yaml > values.yaml
+ ```
+1. �更新 Rancher 版本:
+
+ 对于 Kubernetes v1.25 或更高版本,使用 Rancher v2.7.2-v2.7.4 时,将 `global.cattle.psp.enabled` 设置为 `false`。对于 Rancher v2.7.5 å�Šæ›´é«˜ç‰ˆæœ¬æ�¥è¯´ï¼Œè¿™ä¸�æ˜¯å¿…éœ€çš„ï¼Œä½†ä½ ä»�ç„¶å�¯ä»¥æ‰‹åŠ¨è®¾ç½®è¯¥é€‰é¡¹ã€‚
+
+ ```
+ helm upgrade rancher rancher-/rancher \
+ --namespace cattle-system \
+ -f values.yaml \
+ --version=2.6.8
+ ```
+
+### 4. 验��级
+
+登录 Rancher 以确认�级�功。
+
+:::tip
+
+�级�出现网络问题?
+
+请��[��集群网络](/versioned_docs/version-2.0-2.4/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/upgrades/namespace-migration.md)。
+
+:::
+
+## 已知�级问题
+
+ä½ å�¯ä»¥åœ¨ [GitHub](https://github.com/rancher/rancher/releases) å�‘布说明以å�Š [Rancher 论å�›](https://forums.rancher.com/c/announcements/12)䏿‰¾åˆ°æ¯�个 Rancher 版本的已知问题。
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/installation-references/feature-flags.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/installation-references/feature-flags.md
new file mode 100644
index 00000000000..873a0689b14
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/installation-references/feature-flags.md
@@ -0,0 +1,39 @@
+---
+title: 功能开关
+---
+
+使用功能开关(Feature Flagï¼‰ï¼Œä½ å�¯ä»¥è¯•用å�¯é€‰æˆ–实验性的功能并å�¯ç”¨æ£åœ¨é€�æ¥æ·˜æ±°çš„æ—§ç‰ˆåŠŸèƒ½ã€‚
+
+�了解功能的值以�如何�用它们,请�阅[�用实验性功能](../../../pages-for-subheaders/enable-experimental-features.md)。
+
+:::note
+
+æŸ�些功能è¦�求é‡�æ–°å�¯åЍ Rancher 容器。Rancher UI 䏿 ‡è®°äº†è¦�求é‡�å�¯çš„功能。
+
+:::
+
+以下是 Rancher ä¸å�¯ç”¨çš„åŠŸèƒ½å¼€å…³åˆ—è¡¨ã€‚å¦‚æžœä½ æ˜¯ä»Žæ—§ Rancher 版本å�‡çº§çš„ï¼Œä½ å�¯èƒ½ä¼šåœ¨ Rancher UI ä¸çœ‹åˆ°å…¶ä»–功能,例如 `proxy` 或 `dashboard`(å�‡[已䏿–](/versioned_docs/version-2.5/reference-guides/installation-references/feature-flags.md)):
+
+- `continuous-delivery`:å…�许从 Fleet ä¸å�•独ç¦�用 Fleet GitOps。有关详细信æ�¯ï¼Œè¯·å�‚阅[æŒ�ç»äº¤ä»˜](../../../how-to-guides/advanced-user-guides/enable-experimental-features/continuous-delivery.md)。
+- `fleet`:v2.6 å�Šæ›´é«˜ç‰ˆæœ¬çš„ Rancher é…�置框架需è¦� Fleet。å�³ä½¿ä½ 在旧 Rancher 版本ä¸ç¦�ç”¨äº†è¯¥æ ‡å¿—ï¼Œè¯¥æ ‡å¿—ä¹Ÿå°†åœ¨å�‡çº§æ—¶è‡ªåЍå�¯ç”¨ã€‚有关详细信æ�¯ï¼Œè¯·å�‚阅 [Fleet - GitOps at Scale](../../../how-to-guides/new-user-guides/deploy-apps-across-clusters/fleet.md)。
+- `harvester`:管� Virtualization Management 页�的访问。用户�以在该页�直接导航到 Harvester 集群并访问 Harvester UI。有关详细信�,请�阅 [Harvester 集�](../../../integrations-in-rancher/harvester.md)。
+- `istio-virtual-service-ui`:å�¯ç”¨[å�¯è§†ç•Œé�¢](../../../how-to-guides/advanced-user-guides/enable-experimental-features/istio-traffic-management-features.md)æ�¥åˆ›å»ºã€�读å�–ã€�æ›´æ–°å’Œåˆ é™¤ Istio 虚拟æœ�åŠ¡å’Œç›®æ ‡è§„åˆ™ï¼Œè¿™äº›éƒ½æ˜¯ Istio æµ�é‡�管ç�†åŠŸèƒ½ã€‚
+- `legacy`:å�¯ç”¨ 2.5.x å�Šæ›´æ—©ç‰ˆæœ¬çš„一组功能,这些功能æ£é€�æ¸�被新的实现淘汰。它们是已弃用以å�Šå�Žç»å�¯ç”¨äºŽæ–°ç‰ˆæœ¬çš„功能组å�ˆã€‚æ–°çš„ Rancher 安装会默认ç¦�ç”¨æ¤æ ‡å¿—ã€‚å¦‚æžœä½ ä»Žä»¥å‰�版本的 Rancher å�‡çº§ï¼Œæ¤æ ‡å¿—会å�¯ç”¨ã€‚
+- `multi-cluster-management`:å…�许é…�置和管ç�†å¤šä¸ª Kubernetes é›†ç¾¤ã€‚æ¤æ ‡å¿—å�ªèƒ½åœ¨å®‰è£…时设置。å�Žç»æ— 法å�¯ç”¨æˆ–ç¦�用它。
+- `rke1-custom-node-cleanup`ï¼šæ¸…é™¤å·²åˆ é™¤çš„ RKE1 è‡ªå®šä¹‰èŠ‚ç‚¹ã€‚å»ºè®®ä½ å�¯ç”¨æ¤æ ‡å¿—,以防æ¢å·²åˆ 除的节点å°�试é‡�æ–°åŠ å…¥é›†ç¾¤ã€‚
+- `rke2`:å�¯ç”¨é…�ç½® RKE2 é›†ç¾¤ã€‚æ¤æ ‡å¿—默认å�¯ç”¨ã€‚
+- `token-hashing`:å�¯ç”¨ä»¤ç‰Œå“ˆå¸Œã€‚å�¯ç”¨å�Žï¼Œä¼šä½¿ç”¨ SHA256 算法对现有 Token 和所有新 Token 进行哈希处ç�†ã€‚一旦对 Token 进行哈希处ç�†ï¼Œå°±æ— 法撤消æ“�ä½œã€‚æ¤æ ‡å¿—在å�¯ç”¨å�Žæ— 法ç¦�用。有关详细信æ�¯ï¼Œè¯·å�‚阅 [API 令牌](../../../reference-guides/about-the-api/api-tokens.md#令牌哈希)。
+- `unsupported-storage-drivers`:å…�许å�¯ç”¨é�žé»˜è®¤å�¯ç”¨çš„å˜å‚¨æ��供程åº�å’Œå�·æ�’件。有关详细信æ�¯ï¼Œè¯·å�‚阅[å…�许使用ä¸�å�—支æŒ�çš„å˜å‚¨é©±åŠ¨ç¨‹åº�](../../../how-to-guides/advanced-user-guides/enable-experimental-features/unsupported-storage-drivers.md)。
+
+下表介ç»�了 Rancher ä¸åŠŸèƒ½å¼€å…³çš„å�¯ç”¨æ€§å’Œé»˜è®¤å€¼ã€‚æ ‡è®°ä¸ºâ€œGAâ€�的功能已普é��å�¯ç”¨ï¼š
+
+| 功能开关�称 | 默认值 | 状� | �用于 |
+| ----------------------------- | ------------- | ------------ | --------------- |
+| `continuous-delivery` | `true` | GA | v2.6.0 |
+| `fleet` | `true` | �能�用 | v2.6.0 |
+| `fleet` | `true` | GA | v2.5.0 |
+| `harvester` | `true` | 实验功能 | v2.6.1 |
+| `legacy` | 新安装:`false`;�级:`true` | GA | v2.6.0 |
+| `rke1-custom-node-cleanup` | `true` | GA | v2.6.0 |
+| `rke2` | `true` | 实验功能 | v2.6.0 |
+| `token-hashing` | 新安装:`false`;�级:`true` | GA | v2.6.0 |
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/installation-references/helm-chart-options.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/installation-references/helm-chart-options.md
new file mode 100644
index 00000000000..bd69a89cfee
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/installation-references/helm-chart-options.md
@@ -0,0 +1,310 @@
+---
+title: Rancher Helm Chart 选项
+keywords: [rancher helm chart, rancher helm 选项, rancher helm chart 选项, helm chart rancher, helm 选项 rancher, helm chart 选项 rancher]
+---
+
+本文�供了 Rancher Helm Chart 的�置�考。
+
+如需选择 Helm Chart 版本,请��[本页](../../../getting-started/installation-and-upgrade/resources/choose-a-rancher-version.md)。
+
+了解开�实验性功能的详情,请��[本页](../../../pages-for-subheaders/enable-experimental-features.md)。
+
+## 常用选项
+
+| 选项 | 默认值 | �述 |
+| ------------------------- | ------------- | ---------------------------------------------------------------------------------- |
+| `bootstrapPassword` | " " | `string` - 为第一个管ç�†å‘˜ç”¨æˆ·è®¾ç½®[引导密ç �](#引导密ç �)。登录å�Žï¼Œç®¡ç�†å‘˜éœ€è¦�é‡�置密ç �。如ä¸�设置,会使用éš�机生æˆ�的引导密ç �。 |
+| `hostname` | " " | `string` - ä½ çš„ Rancher Server 的完全é™�定的域å��(FQDN) |
+| `ingress.tls.source` | "rancher" | `string` - 从哪里获� Ingress 的�书- "rancher, letsEncrypt, secret" |
+| `letsEncrypt.email` | " " | `string` - ä½ çš„é‚®ç®±åœ°å�€ |
+| `letsEncrypt.environment` | "production" | `string` - �选项:"staging, production" |
+| `privateCA` | false | `bool` - å¦‚æžœä½ çš„è¯�书是由ç§�有 CA ç¾å�‘的,把这个值设置为 true |
+
+
+
+## 高级选项
+
+| 选项 | 默认值 | �述 |
+| ------------------------------ | ----------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `additionalTrustedCAs` | false | `bool` - 请��[�外的授信 CA](#�外的授信-ca) |
+| `addLocal` | "true" | `string` - 让 Rancher 检测并导入 “localâ€� Rancher Server 集群。_注æ„�:æ¤é€‰é¡¹åœ¨ 2.5.0 ä¸å·²ä¸�å�¯ç”¨ã€‚ä½ å�¯è€ƒè™‘使用 `restrictedAdmin` 选项,æ�¥é�¿å…�用户修改本地集群。_ |
+| `antiAffinity` | "preferred" | `string` - Rancher Pod 的�亲和性规则 - "preferred, required" |
+| `auditLog.destination` | "sidecar" | `string` - ��审计日志到 Sidecar 容器的控制�或 hostPath � - "sidecar, hostPath" |
+| `auditLog.hostPath` | "/var/log/rancher/audit" | `string` - ä¸»æœºä¸Šçš„æ—¥å¿—æ–‡ä»¶ç›®æ ‡åœ°å�€ï¼ˆä»…当`auditLog.destination` 的值是 `hostPath` 时生效) |
+| `auditLog.level` | 0 | `int` - 设置 [API 审计日志](../../../how-to-guides/advanced-user-guides/enable-api-audit-log.md)ç‰çº§ã€‚0 代表关é—。[0-3] |
+| `auditLog.maxAge` | 1 | `int` - 旧审计日志文件最多��留的天数(仅当`auditLog.destination` 的值是 `hostPath` 时生效) |
+| `auditLog.maxBackup` | 1 | `int` - 审计文件最大��留的个数(仅当 `auditLog.destination` 的值是 `hostPath` 时生效) |
+| `auditLog.maxSize` | 100 | `int` - 在审计日志被轮��的最大容�,��是 MB(仅当 `auditLog.destination` 的值是 `hostPath` 时生效) |
+| `auditLog.image.repository` | "registry.suse.com/bci/bci-micro" | `string` - 用于收集审计日志的镜�的�置。 |
+| `auditLog.image.tag` | "15.4.14.3" | `string` - 用于收集审计日志的镜åƒ�çš„æ ‡ç¾ã€‚ |
+| `auditLog.image.pullPolicy` | "IfNotPresent" | `string` - 覆盖 auditLog 镜�的 imagePullPolicy - “Always��“Never��“IfNotPresent�。 |
+| `busyboxImage` | "" | `string` - 用于收集审计日志的 busybox 镜åƒ�ä½�置。_注æ„�:æ¤é€‰é¡¹å·²å¼ƒç”¨ï¼Œè¯·ä½¿ç”¨ `auditLog.image.repository` æ�¥æŽ§åˆ¶å®¡è®¡ sidecar 镜åƒ�_。 |
+| `certmanager.version` | "" | `string` - 设置 cert-manager compatibility |
+| `debug` | false | `bool` - 在 Rancher Server 设置 debug �数 |
+| `extraEnv` | [] | `list` - 为 Rancher �外设置环境�� |
+| `imagePullSecrets` | [] | `list` - ç§�有镜åƒ�仓库å‡è¯�的密文å��称列表 |
+| `ingress.configurationSnippet` | "" | `string` - æ·»åŠ é¢�外的 Nginx é…�置。å�¯ç”¨äºŽä»£ç�†é…�置。 |
+| `ingress.extraAnnotations` | {} | `map` - 用于自定义 Ingress 的�外注释 |
+| `ingress.enabled` | true | 如果值为 false,Helm ä¸�会安装 Rancher Ingressã€‚ä½ å�¯æŠŠå€¼è®¾ä¸º false ä»¥éƒ¨ç½²ä½ è‡ªå·±çš„ Ingress。 |
+| `letsEncrypt.ingress.class` | "" | `string` - cert-manager acmesolver ingress 的�选 ingress 类,用于�应 Let's Encrypt ACME 质询。选项:traefik,nginx。 | |
+| `noProxy` | "127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,.svc,.cluster.local,cattle-system.svc" | `string` - �使用代�的主机�或 IP 地�的逗�分隔列表 | |
+| `proxy` | "" | `string` - 给 Rancher �置的 HTTP[S] 代� |
+| `rancherImage` | "rancher/rancher" | `string` - Rancher 镜�� |
+| `rancherImagePullPolicy` | "IfNotPresent" | `string` - 覆盖 Rancher Server 镜�的 imagePullPolicy - "Always", "Never", "IfNotPresent" |
+| `rancherImageTag` | å’Œ Chart 版本一致 | `string` - rancher/rancher 镜åƒ�æ ‡ç¾ |
+| `replicas` | 3 | `int` - Rancher Server 副本数。如果设为 -1ï¼Œä¼šæ ¹æ�®é›†ç¾¤ä¸çš„å�¯ç”¨èŠ‚ç‚¹æ•°è‡ªåŠ¨é€‰æ‹© 1,2或3。 |
+| `resources` | {} | `map` - Rancher Pod 资�请求和�制 |
+| `restrictedAdmin` | `false` | `bool` - 如果值为 true,�始的 Rancher 用户访问本地 Kubernetes 集群会�到�制,以�����级。详情请�� [restricted-admin 角色](../../../how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/global-permissions.md#��管�员)。 |
+| `systemDefaultRegistry` | "" | `string` - 用于所有系统容器镜�的�有仓库,例如 http://registry.example.com/ |
+| `tls` | "ingress" | `string` - 详情请å�‚è§�[外部 TLS 终æ¢](#外部-tls-终æ¢)。- "ingress, external" |
+| `useBundledSystemChart` | `false` | `bool` - 选择 Rancher Server 打包的 system-charts。æ¤å�‚数用于离线环境安装。 |
+| `global.cattle.psp.enabled` | `true` | `bool` - 使用 Rancher v2.7.2-v2.7.4 时,选择 `false` 以ç¦�用 Kubernetes v1.25 å�Šæ›´é«˜ç‰ˆæœ¬çš„ PSP。使用 Rancher v2.7.5 å�Šæ›´é«˜ç‰ˆæœ¬æ—¶ï¼ŒRancher 会å°�试检测集群是å�¦è¿�行ä¸�支æŒ� PSP çš„ Kubernetes 版本,如果确定集群ä¸�支æŒ� PSP,则将默认 PSP 的使用设置为 falseã€‚ä½ ä»�ç„¶å�¯ä»¥é€šè¿‡æ˜¾å¼�æ��ä¾›æ¤å€¼çš„ `true` 或 `false` æ�¥æ‰‹åŠ¨è¦†ç›–æ¤å€¼ã€‚在支æŒ� PSP 的集群ä¸ï¼ˆä¾‹å¦‚使用 Kubernetes v1.24 或更低版本的集群),Rancher ä»�将默认使用 PSP。 |
+
+
+### 引导密ç �
+
+Rancher 首次å�¯åŠ¨æ—¶ï¼Œä¼šä¸ºç¬¬ä¸€ä¸ªç®¡ç�†å‘˜ç”¨æˆ·éš�机生æˆ�一个密ç �。当管ç�†å‘˜é¦–次登录 Rancher 时,用于获å�–引导密ç �(Bootstrap)的命令会在 UI 上显示。管ç�†å‘˜éœ€è¦�è¿�行命令并使用引导密ç �登录。然å�Ž Rancher 会让管ç�†å‘˜é‡�置密ç �。
+
+å¦‚æžœä½ æƒ³æŒ‡å®šå¼•å¯¼å¯†ç �而ä¸�使用éš�机生æˆ�的密ç �,请å�‚考以下命令设置密ç �。
+
+```plain
+--set bootstrapPassword="rancher"
+```
+
+æ— è®ºä½ æ˜¯ä½¿ç”¨æ��供的密ç �还是生æˆ�的密ç �,密ç �å�‡å˜å‚¨åœ¨ Kubernetes 密文ä¸ã€‚安装 Rancher å�Žï¼Œå¦‚何使用 kubectl 获å�–密ç �的说明将会在 UI 䏿˜¾ç¤ºï¼š
+
+```
+kubectl get secret --namespace cattle-system bootstrap-secret -o go-template='{{ .data.bootstrapPassword|base64decode}}{{ "\n" }}'
+```
+
+### API 审计日志
+
+�用 [API 审计日志](../../../how-to-guides/advanced-user-guides/enable-api-audit-log.md)。
+
+ä½ å�¯ä»¥åƒ�æ”¶é›†å…¶ä»–å®¹å™¨æ—¥å¿—ä¸€æ ·æ”¶é›†æ¤æ—¥å¿—。在 Rancher Server 集群上为 `System` 项目å�¯ç”¨ [Logging](../../../pages-for-subheaders/logging.md)。
+
+```plain
+--set auditLog.level=1
+```
+
+默认情况下,å�¯ç”¨å®¡è®¡æ—¥å¿—会在 Rancher pod ä¸åˆ›å»ºä¸€ä¸ª Sidecar 容器。这个容器(`rancher-audit-log`)会把日志æµ�ä¼ è¾“åˆ° `stdout`ã€‚ä½ å�¯ä»¥åƒ�æ”¶é›†å…¶ä»–å®¹å™¨æ—¥å¿—ä¸€æ ·æ”¶é›†æ¤æ—¥å¿—ã€‚å¦‚æžœä½ ä½¿ç”¨ Sidecar ä½œä¸ºå®¡è®¡æ—¥å¿—çš„ç›®æ ‡æ—¶ï¼Œ `hostPath`,`maxAge`,`maxBackups` å’Œ `maxSize` 选项ä¸�ä¼šç”Ÿæ•ˆã€‚å»ºè®®ä½¿ç”¨ä½ çš„æ“�作系统或 Docker Daemon 的日志轮æ�¢åŠŸèƒ½æ�¥æŽ§åˆ¶ç£�盘空间的使用。请为 Rancher Server 集群或 System 项目å�¯ç”¨ [Logging](../../../pages-for-subheaders/logging.md)。
+
+å°† `auditLog.destination` 的值设为 `hostPath`,å�¯ä»¥å°†æ—¥å¿—转å�‘到与主机系统共享的å�·ï¼Œè€Œä¸�æ˜¯ä¼ è¾“åˆ° Sidecar å®¹å™¨ã€‚å¦‚æžœç›®æ ‡è®¾ç½®ä¸º `hostPath`ï¼Œä½ å�¯èƒ½éœ€è¦�调整其他 auditLog å�‚数以进行日志轮æ�¢ã€‚
+
+### �外设置环境��
+
+ä½ å�¯ä»¥ä½¿ç”¨ `extraEnv` 为 Rancher Server é¢�外设置环境å�˜é‡�。该列表以 YAML æ ¼å¼�ä¼ é€’ç»™ Rancher 部署,它嵌入在 Rancher 容器的 `env` ä¸‹ã€‚ä½ å�¯ä»¥å�‚考 Kubernetes 文档设置容器环境å�˜é‡�。`extraEnv` å�¯ä»¥ä½¿ç”¨ [Define Environment Variables for a Container](https://kubernetes.io/docs/tasks/inject-data-application/define-environment-variable-container/#define-an-environment-variable-for-a-container) ä¸å¼•用的任何键。
+
+使用 `name` 和 `value` 键的示例:
+
+```plain
+--set 'extraEnv[0].name=CATTLE_TLS_MIN_VERSION'
+--set 'extraEnv[0].value=1.0'
+```
+
+如果将æ•�感数æ�®ï¼ˆä¾‹å¦‚代ç�†è®¤è¯�å‡è¯�)作为环境å�˜é‡�çš„å€¼ä¼ é€’ï¼Œåˆ™å¼ºçƒˆå»ºè®®ä½¿ç”¨ Secret å¼•ç”¨ã€‚è¿™å°†é˜²æ¢æ•�感数æ�®åœ¨ Helm 或 Rancher éƒ¨ç½²ä¸æš´éœ²ã€‚
+
+ä½ å�¯ä»¥å�‚考使用 `name`ã€�`valueFrom.secretKeyRef.name` å’Œ `valueFrom.secretKeyRef.key` 键的示例。详è§� [HTTP 代ç�†](#http-代ç�†)ä¸çš„示例。
+
+### TLS 设置
+
+å½“ä½ åœ¨ Kubernetes 集群内安装 Rancher 时,TLS 会在集群的 Ingress Controller 上å�¸è½½ã€‚支æŒ�çš„ TLS 设置å�–决于使用的 Ingress Controller。
+
+�� [TLS 设置](tls-settings.md)了解更多信�和选项。
+
+### 导入 `local` 集群
+
+默认情况下,Rancher Server 会检测并导入其所在的 `local` 集群。有�访问 `local` 集群的用户对 Rancher Server 管�的所有集群具有“root�访问��。
+
+:::caution
+
+å¦‚æžœä½ å…³é— addLocal,大多数 Rancher 2.5 功能都ä¸�能使用,包括 EKS Provisioner。
+
+:::
+
+å¦‚æžœè¿™åœ¨ä½ çš„çŽ¯å¢ƒä¸æ˜¯ä¸€ä¸ªé—®é¢˜ï¼Œä½ å�¯ä»¥åœ¨åˆ�始安装时将æ¤é€‰é¡¹è®¾ç½®ä¸ºâ€œfalseâ€�。
+
+æ¤é€‰é¡¹ä»…在首次安装 Rancher 时有效。详情请å�‚è§� [Issue 16522](https://github.com/rancher/rancher/issues/16522)。
+
+```plain
+--set addLocal="false"
+```
+
+### 自定义 Ingress
+
+è¦�自定义或使用 Rancher Server 的其他 Ingressï¼Œä½ å�¯ä»¥è®¾ç½®è‡ªå·±çš„ Ingress 注释。
+
+设置自定义�书��者的示例:
+
+```plain
+--set ingress.extraAnnotations.'cert-manager\.io/cluster-issuer'=issuer-name
+```
+
+以下是使用 `ingress.configurationSnippet`设置é�™æ€�代ç�†æ ‡å¤´çš„示例。该值åƒ�模æ�¿ä¸€æ ·è¿›è¡Œè§£æž�ï¼Œå› æ¤å�¯ä»¥ä½¿ç”¨å�˜é‡�。
+
+```plain
+--set ingress.configurationSnippet='more_set_input_headers X-Forwarded-Host {{ .Values.hostname }};'
+```
+
+### HTTP 代�
+
+Rancher 的一些功能(Helm Chart)需è¦�使用互è�”网æ‰�èƒ½ä½¿ç”¨ã€‚ä½ å�¯ä»¥ä½¿ç”¨ `proxy` 设置代ç�†æœ�务器,或使用 `extraEnv` 设置 `HTTPS_PROXY` 环境å�˜é‡�æ�¥æŒ‡å�‘代ç�†æœ�务器。
+
+å°†è¦�排除的 IP 使用逗å�·åˆ†éš”åˆ—è¡¨æ·»åŠ åˆ° `noProxy` Chart value ä¸ã€‚ç¡®ä¿�æ·»åŠ äº†ä»¥ä¸‹å€¼ï¼š
+- Pod 集群 IP 范围(默认值:`10.42.0.0/16`)。
+- Service Cluster IP 范围(默认值:`10.43.0.0/16`)。
+- 内部集群域(默认值:`.svc,.cluster.local`)。
+- 任何 Worker 集群 `controlplane` 节点。
+ Rancher 支æŒ�在æ¤åˆ—表ä¸ä½¿ç”¨ CIDR 表示法æ�¥è¡¨ç¤ºèŒƒå›´ã€‚
+
+ä¸�包括æ•�感数æ�®æ—¶ï¼Œå�¯ä»¥ä½¿ç”¨ `proxy` 或 `extraEnv` Chart 选项。使用 `extraEnv` 时将忽略 `noProxy` Helm é€‰é¡¹ã€‚å› æ¤ï¼Œ`NO_PROXY` 环境å�˜é‡�也必须设置为 `extraEnv`。
+
+以下是使用 `extraEnv` Chart 选项设置代�的示例:
+
+```plain
+--set proxy="http:///"
+```
+
+使用 `extraEnv` Chart 选项设置代�的示例:
+```plain
+--set extraEnv[1].name=HTTPS_PROXY
+--set extraEnv[1].value="http://:/"
+--set extraEnv[2].name=NO_PROXY
+--set extraEnv[2].value="127.0.0.0/8\,10.0.0.0/8\,172.16.0.0/12\,192.168.0.0/16\,.svc\,.cluster.local"
+```
+
+包å�«æ•�感数æ�®ï¼ˆä¾‹å¦‚代ç�†è®¤è¯�å‡è¯�)时,请使用 `extraEnv` 选项和 `valueFrom.secretRef` æ�¥é˜²æ¢æ•�感数æ�®åœ¨ Helm 或 Rancher éƒ¨ç½²ä¸æš´éœ²ã€‚
+
+下é�¢æ˜¯ä½¿ç”¨ `extraEnv` é…�置代ç�†çš„示例。æ¤ç¤ºä¾‹ Secret 在 Secret çš„ `"https-proxy-url"` é”®ä¸åŒ…å�« `"http://:@:/"` 值:
+```plain
+--set extraEnv[1].name=HTTPS_PROXY
+--set extraEnv[1].valueFrom.secretKeyRef.name=secret-name
+--set extraEnv[1].valueFrom.secretKeyRef.key=https-proxy-url
+--set extraEnv[2].name=NO_PROXY
+--set extraEnv[2].value="127.0.0.0/8\,10.0.0.0/8\,172.16.0.0/12\,192.168.0.0/16\,.svc\,.cluster.local"
+```
+
+有关如何�置环境��的更多信�,请�阅[为容器定义环境��](https://kubernetes.io/docs/tasks/inject-data-application/define-environment-variable-container/#define-an-environment-variable-for-a-container)。
+
+### �外的授信 CA
+
+å¦‚æžœä½ æœ‰ç§�有镜åƒ�仓库(registries)ã€�应用商店(catalogs)或拦截è¯�书的代ç�†ï¼Œåˆ™å�¯èƒ½éœ€è¦�å�‘ Rancher æ·»åŠ é¢�外的授信 CA。
+
+```plain
+--set additionalTrustedCAs=true
+```
+
+创建完 Rancher deployment å�Žï¼Œå°† pem æ ¼å¼�çš„ CA è¯�书å¤�制到一个å��为 `ca-additional.pem` 的文件ä¸ï¼Œå¹¶ä½¿ç”¨ `kubectl` 在 `cattle-system` 命å��空间ä¸åˆ›å»º `tls-ca-additional` 密文。
+
+```plain
+kubectl -n cattle-system create secret generic tls-ca-additional --from-file=ca-additional.pem=./ca-additional.pem
+```
+
+### �有仓库和离线安装
+
+有关使用�有仓库安装 Rancher 的详情,请��[离线安装](../../../pages-for-subheaders/air-gapped-helm-cli-install.md)。
+
+## 外部 TLS 终æ¢
+
+我们建议将负载�衡器�置为 4 层�衡,将普通 80/tcp 和 443/tcp 转�到 Rancher Management 集群节点。集群上的 Ingress Controller 会将端� 80 上的 HTTP ���定�到端� 443 上的 HTTPS。
+
+ä½ å�¯ä»¥åœ¨ Rancher 集群(Ingress)外部的 L7 è´Ÿè½½å�‡è¡¡å™¨ä¸Šç»ˆæ¢ SSL/TLS。使用 `--set tls=external` 选项,将负载å�‡è¡¡å™¨æŒ‡å�‘所有 Rancher 集群节点上的端å�£ HTTP 80。这将在 HTTP 端å�£ 80 上暴露 Rancher 接å�£ã€‚请注æ„�,å…�许直接连接到 Rancher 集群的客户端ä¸�ä¼šè¢«åŠ å¯†ã€‚å¦‚æžœä½ é€‰æ‹©è¿™æ ·å�šï¼Œæˆ‘ä»¬å»ºè®®ä½ å°†ç½‘ç»œçº§åˆ«çš„ç›´æŽ¥è®¿é—®é™�åˆ¶ä¸ºä»…ä½ çš„è´Ÿè½½å�‡è¡¡å™¨ã€‚
+
+:::note
+
+å¦‚æžœä½ ä½¿ç”¨çš„æ˜¯ç§�有 CA ç¾å��çš„è¯�ä¹¦ï¼Œè¯·æ·»åŠ `--set privateCA=true` å¹¶å�‚è§�[æ·»åŠ TLS 密文 - 使用ç§�有 CA ç¾å��è¯�书](../../../getting-started/installation-and-upgrade/resources/add-tls-secrets.md),为 Rancher æ·»åŠ CA è¯�书。
+
+:::
+
+ä½ çš„è´Ÿè½½å�‡è¡¡å™¨å¿…须支æŒ�长期å˜åœ¨çš„ Websocket 连接,并且需è¦�æ�’入代ç�†å¤´ï¼Œä»¥ä¾¿ Rancher å�¯ä»¥æ£ç¡®ä¼ é€�链接。
+
+### 使用 NGINX v0.25 为外部 TLS �置 Ingress
+
+在 NGINX 0.25 ä¸ï¼ŒNGINX 关于转å�‘头和外部 TLS 终æ¢çš„行为[已更改](https://github.com/kubernetes/ingress-nginx/blob/master/Changelog.md#0220)ã€‚å› æ¤ï¼Œå¦‚æžœä½ å�Œæ—¶ä½¿ç”¨ NGINX 0.25 和外部 TLS 终æ¢é…�ç½®ï¼Œä½ å¿…é¡»ç¼–è¾‘ `cluster.yml` æ�¥ä¸º Ingress å�¯ç”¨ `use-forwarded-headers` 选项。
+
+```yaml
+ingress:
+ provider: nginx
+ options:
+ use-forwarded-headers: 'true'
+```
+
+### 必须的 Header
+
+- `Host`
+- `X-Forwarded-Proto`
+- `X-Forwarded-Port`
+- `X-Forwarded-For`
+
+### 建议的超时时间
+
+- 读超时:`1800 seconds`
+- 写超时:`1800 seconds`
+- 连接超时:`30 seconds`
+
+### �康检查
+
+Rancher 将对 `/healthz` 端点的�康检查�应`200`。
+
+### 示例 NGINX �置
+
+æ¤ NGINX é…�置已在 NGINX 1.14 上进行了测试。
+
+:::caution
+
+æ¤ NGINX é…�ç½®å�ªæ˜¯ä¸€ä¸ªç¤ºä¾‹ï¼Œå�¯èƒ½ä¸�适å�ˆä½ 的环境。如需查阅完整文档,请å�‚è§� [NGINX è´Ÿè½½å�‡è¡¡ - HTTP è´Ÿè½½å�‡è¡¡](https://docs.nginx.com/nginx/admin-guide/load-balancer/http-load-balancer/)。
+
+:::
+
+- å°† `IP_NODE1`,`IP_NODE2` å’Œ `IP_NODE3` 替æ�¢ä¸ºä½ 集群ä¸èŠ‚ç‚¹çš„ IP 地å�€ã€‚
+- 将两处的 `FQDN` �替�为 Rancher 的 DNS �称。
+- 把 `/certs/fullchain.pem` 和 `/certs/privkey.pem` 分别替�为�务器�书和�务器�书密钥的�置。
+
+```
+worker_processes 4;
+worker_rlimit_nofile 40000;
+
+events {
+ worker_connections 8192;
+}
+
+http {
+ upstream rancher {
+ server IP_NODE_1:80;
+ server IP_NODE_2:80;
+ server IP_NODE_3:80;
+ }
+
+ map $http_upgrade $connection_upgrade {
+ default Upgrade;
+ '' close;
+ }
+
+ server {
+ listen 443 ssl http2;
+ server_name FQDN;
+ ssl_certificate /certs/fullchain.pem;
+ ssl_certificate_key /certs/privkey.pem;
+
+ location / {
+ proxy_set_header Host $host;
+ proxy_set_header X-Forwarded-Proto $scheme;
+ proxy_set_header X-Forwarded-Port $server_port;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_pass http://rancher;
+ proxy_http_version 1.1;
+ proxy_set_header Upgrade $http_upgrade;
+ proxy_set_header Connection $connection_upgrade;
+ # æ¤é¡¹å…�许执行的 shell 窗å�£ä¿�æŒ�å¼€å�¯ï¼Œæœ€é•¿å�¯è¾¾15分钟。ä¸�使用æ¤å�‚æ•°çš„è¯�,默认1分钟å�Žè‡ªåЍ关é—。
+ proxy_read_timeout 900s;
+ proxy_buffering off;
+ }
+ }
+
+ server {
+ listen 80;
+ server_name FQDN;
+ return 301 https://$server_name$request_uri;
+ }
+}
+```
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/installation-references/tls-settings.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/installation-references/tls-settings.md
new file mode 100644
index 00000000000..25f5652fe6e
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/installation-references/tls-settings.md
@@ -0,0 +1,21 @@
+---
+title: TLS 设置
+---
+
+更改默认 TLS 设置的方法�决于它的安装方�。
+
+## 在高å�¯ç”¨ Kubernetes 集群ä¸è¿�行 Rancher
+
+å½“ä½ åœ¨ Kubernetes 集群内安装 Rancher 时,TLS 会在集群的 Ingress Controller 上å�¸è½½ã€‚å�¯ç”¨çš„ TLS 设置å�–决于使用的 Ingress Controller:
+
+* nginx-ingress-controller(RKE1 å’Œ RKE2 默认):[默认的 TLS 版本和密ç �](https://kubernetes.github.io/ingress-nginx/user-guide/tls/#default-tls-version-and-ciphers)。
+* traefik(K3s 默认):[TLS 选项](https://doc.traefik.io/traefik/https/tls/#tls-options)。
+
+## 在å�•个 Docker 容器ä¸è¿�行 Rancher
+
+默认 TLS é…�置仅支æŒ� TLS 1.2 和安全的 TLS 密ç �å¥—ä»¶ã€‚ä½ å�¯ä»¥é€šè¿‡è®¾ç½®ä»¥ä¸‹çŽ¯å¢ƒå�˜é‡�æ�¥æ›´æ”¹æ¤é…�置:
+
+| �数 | �述 | 默认 | �用选项 |
+|-----|-----|-----|-----|
+| `CATTLE_TLS_MIN_VERSION` | 最� TLS 版本 | `1.2` | `1.0`, `1.1`, `1.2`, `1.3` |
+| `CATTLE_TLS_CIPHERS` | 支æŒ�çš„ TLS 密ç �套件 | `TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256`, `TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384`, `TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305`, `TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256`, `TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384`, `TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305` | 详情请å�‚è§� [Golang TLS 常é‡�](https://golang.org/pkg/crypto/tls/#pkg-constants)。 |
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/installation-requirements/dockershim.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/installation-requirements/dockershim.md
new file mode 100644
index 00000000000..84f2383eaf7
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/installation-requirements/dockershim.md
@@ -0,0 +1,47 @@
+---
+title: Dockershim
+---
+
+Dockershim 是 Kubelet å’Œ Docker Daemon 之间的 CRI 兼容层。Kubernetes 1.20 版本宣布了[ç§»é™¤æ ‘å†… Dockershim](https://kubernetes.io/blog/2020/12/02/dont-panic-kubernetes-and-docker/)。有关æ¤ç§»é™¤çš„æ›´å¤šä¿¡æ�¯ä»¥å�Šæ—¶é—´çº¿ï¼Œè¯·å�‚è§� [Kubernetes Dockershim 弃用相关的常è§�问题](https://kubernetes.io/blog/2020/12/02/dockershim-faq/#when-will-dockershim-be-removed)。
+
+RKE 集群现在支æŒ�外部 Dockershim,æ�¥è®©ç”¨æˆ·ç»§ç»ä½¿ç”¨ Docker 作为 CRI è¿�行时。现在,我们通过使用 [Mirantis å’Œ Docker ](https://www.mirantis.com/blog/mirantis-to-take-over-support-of-kubernetes-dockershim-2/) æ�¥ç¡®ä¿� RKE 集群å�¯ä»¥ç»§ç»ä½¿ç”¨ Docker,从而实现上游开æº�社区的外部 Dockershim。
+
+RKE2 å’Œ K3s 集群使用嵌入的 containerd 作为容器è¿�è¡Œæ—¶ï¼Œå› æ¤ä¸�å�—å½±å“�。
+
+è¦�在 1.24 之å‰�çš„ RKE 版本ä¸å�¯ç”¨å¤–部 Dockershim,请é…�置以下选项:
+
+```
+enable_cri_dockerd: true
+```
+
+从 1.24 版本开始,以上默认为 true。
+
+å¦‚æžœä½ æƒ³ä½¿ç”¨å…¶ä»–å®¹å™¨è¿�行时,Rancher 也æ��供使用 Containerd 作为默认è¿�行时的,以边缘为ä¸å¿ƒçš„ K3s,和以数æ�®ä¸å¿ƒä¸ºä¸å¿ƒçš„ RKE2 Kubernetes å�‘行版。然å�Žï¼Œä½ å°±å�¯ä»¥é€šè¿‡ Rancher 对导入的 RKE2 å’Œ K3s Kubernetes 集群进行å�‡çº§å’Œç®¡ç�†ã€‚
+
+### 常�问题
+
+
+
+Q:是�必须�级 Rancher �能获得 Rancher 对上游外部 Dockershim 替�的支�?
+
+A:对于 RKE,Dockershim `cri_dockerd` 替æ�¢çš„上游支æŒ�从 Kubernetes 1.21 å¼€å§‹ã€‚ä½ éœ€è¦�使用支æŒ� RKE 1.21 çš„ Rancher 版本。详情请å�‚è§�我们的支æŒ�矩阵。
+
+
+
+Q:我目å‰�çš„ RKE 使用 Kubernetes 1.23。如果上游最终在 1.24 ä¸åˆ 除 Dockershim,会å�‘生什么?
+
+A:RKE ä¸å¸¦æœ‰ Kubernetes çš„ Dockershim 版本将继ç»å·¥ä½œåˆ° 1.23。有关时间线的更多信æ�¯ï¼Œè¯·å�‚è§� [Kubernetes Dockershim 弃用相关的常è§�问题](https://kubernetes.io/blog/2020/12/02/dockershim-faq/#when-will-dockershim-be-removed)。从 1.24 开始,RKE 将默认å�¯ç”¨ `cri_dockerd` 并在之å�Žçš„版本ä¸ç»§ç»å�¯ç”¨ã€‚
+
+
+
+Q: 如果我�想��赖 Dockershim 或 cri_dockerd,我还有什么选择?
+
+A: ä½ å�¯ä»¥ä¸º Kubernetes 使用ä¸�需è¦� Dockershim 支æŒ�çš„è¿�行时,如 Containerd。RKE2 å’Œ K3s 就是其ä¸çš„两个选项。
+
+
+
+Q: 如果我目å‰�使用 RKE1,但想切æ�¢åˆ° RKE2,我å�¯ä»¥æ€Žæ ·è¿›è¡Œè¿�移?
+
+A: ä½ å�¯ä»¥æž„建一个新集群,然å�Žå°†å·¥ä½œè´Ÿè½½è¿�移到使用 Containerd 的新 RKE2 集群。Rancher 也在探索就地å�‡çº§è·¯å¾„çš„å�¯èƒ½æ€§ã€‚
+
+
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/installation-requirements/install-docker.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/installation-requirements/install-docker.md
new file mode 100644
index 00000000000..8b98ce09030
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/installation-requirements/install-docker.md
@@ -0,0 +1,23 @@
+---
+title: 安装 Docker
+---
+
+在使用 Helm 或 Docker 在 RKE 集群节点上安装 Rancher Server å‰�ï¼Œä½ éœ€è¦�先安装 Docker。RKE2 å’Œ K3s 集群ä¸�è¦�求使用 Docker。
+
+Docker æœ‰å‡ ä¸ªå®‰è£…æ–¹æ³•ã€‚ä¸€ç§�方法是å�‚è§� [Docker 官方文档](https://docs.docker.com/install/)以了解如何在 Linux 上安装 Docker。ä¸�å�Œ Linux å�‘行版的安装æ¥éª¤å�¯èƒ½æœ‰æ‰€ä¸�å�Œã€‚
+
+�一�方�是使用 Rancher 的 Docker 安装脚本,该脚本�用于较新的 Docker 版本。
+
+例如,æ¤å‘½ä»¤å�¯ç”¨äºŽåœ¨ SUSE Linux Enterprise 或 Ubuntu ç‰ä¸»è¦� Linux å�‘行版上安装 Docker 20.10:
+
+```
+curl https://releases.rancher.com/install-docker/20.10.sh | sh
+```
+
+Rancher �供 Kubernetes 支�的所有上游 Docker 版本的安装脚本。如需了解我们是��供�个 Docker 版本的安装脚本,请��包�了 Rancher 所有的 Docker 安装脚本的 [GitHub 仓库](https://github.com/rancher/install-docker)。
+
+请注�,必须应用以下 sysctl 设置:
+
+```
+net.bridge.bridge-nf-call-iptables=1
+```
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/installation-requirements/port-requirements.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/installation-requirements/port-requirements.md
new file mode 100644
index 00000000000..7dcdc48683c
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/installation-requirements/port-requirements.md
@@ -0,0 +1,343 @@
+---
+title: 端��求
+description: 了解 Rancher æ£å¸¸è¿�行所需的端å�£è¦�求,包括 Rancher 节点和下游 Kubernetes 集群节点
+---
+
+import PortsIaasNodes from '@site/src/components/PortsIaasNodes'
+import PortsCustomNodes from '@site/src/components/PortsCustomNodes'
+import PortsImportedHosted from '@site/src/components/PortsImportedHosted'
+
+为了确ä¿�能æ£å¸¸è¿�行,Rancher 需è¦�在 Rancher 节点和下游 Kubernetes 集群节点上开放一些端å�£ã€‚
+
+## Rancher 节点
+
+下表列出了�行 Rancher Server 的节点之间需�开放的端�。
+
+��的 Rancher Server 架构有��的端��求。
+
+Rancher å�¯ä»¥å®‰è£…在任何 Kubernetes é›†ç¾¤ä¸Šã€‚å¦‚æžœä½ çš„ Rancher 安装在 K3sã€�RKE 或 RKE2 Kubernetes 集群上,请å�‚考下é�¢çš„æ ‡ç¾é¡µã€‚对于其他 Kubernetes å�‘行版,请å�‚è§�该å�‘行版的文档,了解集群节点的端å�£è¦�求。
+
+:::note 注�事项:
+
+- Rancher 节点�能�求�外出站访问已�置的外部验��供程�(如 LDAP)。
+- Kubernetes 建议节点端��务使用 TCP 30000-32767。
+- 对于防�墙,�能需�在集群和 Pod CIDR 内�用��。
+- Rancher 节点å�¯èƒ½è¿˜éœ€è¦�出站访问用于å˜å‚¨é›†ç¾¤å¤‡ä»½ï¼ˆå¦‚ Minio)的外部 S3 上的ä½�置。
+
+:::
+
+### K3s 上 Rancher Server 节点的端�
+
+
+ �击展开
+
+K3s server 需�开放端� 6443 �能供节点访问。
+
+使用 Flannel VXLAN 时,节点需è¦�能够通过 UDP 端å�£ 8472 访问其他节点。节点ä¸�应监å�¬ä»»ä½•其他端å�£ã€‚K3s 使用å��å�‘éš§é�“,建立节点与 Server 的出站连接,所有 kubelet æµ�é‡�都通过该隧é�“è¿›è¡Œã€‚ä½†æ˜¯ï¼Œå¦‚æžœä½ ä¸�使用 Flannel,而是使用自定义的 CNI,K3s 则ä¸�需è¦�打开 8472 端å�£ã€‚
+
+如果�使用 Metrics Server,则需�在�个节点上打开端� 10250。
+
+:::note ���示:
+
+节点上的 VXLAN 端å�£ä¼šå¼€æ”¾é›†ç¾¤ç½‘络,让任何人å�‡èƒ½è®¿é—®é›†ç¾¤ã€‚å› æ¤ï¼Œä¸�è¦�å°† VXLAN 端å�£æš´éœ²ç»™å¤–界。请使用ç¦�用 8472 端å�£çš„防ç�«å¢™/安全组æ�¥è¿�行节点。
+
+:::
+
+下表�述了入站和出站��的端��求:
+
+Rancher Server 节点的入站规则
+
+| �议 | 端� | � | �述 |
+|-----|-----|----------------|---|
+| TCP | 80 | 执行外部 SSL 终æ¢çš„è´Ÿè½½å�‡è¡¡å™¨/代ç�† | 使用外部 SSL ç»ˆæ¢æ—¶çš„ Rancher UI/API |
+| TCP | 443 | Server 节点 Agent 节点 托管/注册的 Kubernetes 任何需�使用 Rancher UI 或 API 的� | Rancher Agent,Rancher UI/API,kubectl |
+| TCP | 6443 | K3s Server 节点 | Kubernetes API |
+| UDP | 8472 | K3s Server 和 Agent 节点 | 仅 Flannel VXLAN 需� |
+| TCP | 10250 | K3s Server 和 Agent 节点 | kubelet |
+
+Rancher 节点的出站规则
+
+| å��è®® | 端å�£ | ç›®æ ‡ | æ��è¿° |
+| -------- | ---- | -------------------------------------------------------- | --------------------------------------------- |
+| TCP | 22 | 使用 Node Driver 创建的节点的任何节点 IP | 使用 Node Driver SSH �置节点 |
+| TCP | 443 | git.rancher.io | Rancher catalog |
+| TCP | 2376 | 使用 Node Driver 创建的节点的任何节点 IP | Docker Machine 使用的 Docker daemon TLS 端� |
+| TCP | 6443 | 托管/导入的 Kubernetes API | Kubernetes API Server |
+
+
+
+### RKE 上 Rancher Server 节点的端�
+
+
+ �击展开
+
+通常情况下,Rancher 安装在三个 RKE 节点上,这些节点都有 etcd�controlplane 和 worker 角色。
+
+
+
+下表�述了 Rancher 节点之间��的端��求:
+
+Rancher 节点的��规则
+
+| �议 | 端� | �述 |
+|-----|-----|----------------|
+| TCP | 443 | Rancher Agents |
+| TCP | 2379 | etcd 客户端请求 |
+| TCP | 2380 | etcd 对ç‰é€šä¿¡ |
+| TCP | 6443 | Kubernetes apiserver |
+| TCP | 8443 | NGINX Ingress 的验� Webhook |
+| UDP | 8472 | Canal/Flannel VXLAN 覆盖网络 |
+| TCP | 9099 | Canal/Flannel livenessProbe/readinessProbe |
+| TCP | 10250 | Metrics Server 与所有节点的通信 |
+| TCP | 10254 | Ingress controller livenessProbe/readinessProbe |
+
+下表�述了入站和出站��的端��求:
+
+Rancher 节点的入站规则
+
+| �议 | 端� | � | �述 |
+|-----|-----|----------------|---|
+| TCP | 22 | RKE CLI | RKE 通过 SSH �置节点 |
+| TCP | 80 | 负载�衡器/��代� | 到 Rancher UI/API 的 HTTP �� |
+| TCP | 443 | 负载�衡器/��代� 所有集群节点和其他 API/UI 客户端的 IP | 到 Rancher UI/API 的 HTTPS �� |
+| TCP | 6443 | Kubernetes API 客户端 | 到 Kubernetes API 的 HTTPS �� |
+
+Rancher 节点的出站规则
+
+| å��è®® | 端å�£ | ç›®æ ‡ | æ��è¿° |
+|-----|-----|----------------|---|
+| TCP | 443 | git.rancher.io | Rancher catalog |
+| TCP | 22 | 使用 Node Driver 创建的任何节点 | Node Driver 通过 SSH �置节点 |
+| TCP | 2376 | 使用 Node Driver 创建的任何节点 | Node Driver 使用的 Docker daemon TLS 端� |
+| TCP | 6443 | 托管/导入的 Kubernetes API | Kubernetes API Server |
+| TCP | æ��供商ä¾�èµ– | æ‰˜ç®¡é›†ç¾¤ä¸ Kubernetes API 端点的端å�£ | Kubernetes API |
+
+
+
+### RKE2 上 Rancher Server 节点的端�
+
+
+ �击展开
+
+RKE2 server 需è¦�开放端å�£ 6443 å’Œ 9345 æ‰�能供集群ä¸çš„其他节点访问。
+
+使用 Flannel VXLAN 时,所有节点都需�能够通过 UDP 端� 8472 访问其他节点。
+
+如果�使用 Metrics Server,则需�在�个节点上打开端� 10250。
+
+:::note ���示:
+
+节点上的 VXLAN 端å�£ä¼šå¼€æ”¾é›†ç¾¤ç½‘络,让任何人å�‡èƒ½è®¿é—®é›†ç¾¤ã€‚å› æ¤ï¼Œä¸�è¦�å°† VXLAN 端å�£æš´éœ²ç»™å¤–界。请使用ç¦�用 8472 端å�£çš„防ç�«å¢™/安全组æ�¥è¿�行节点。
+
+:::
+
+RKE2 Server 节点的入站规则
+
+| �议 | 端� | � | �述 |
+|-----|-----|----------------|---|
+| TCP | 9345 | RKE2 Server å’Œ Agent 节点 | 节点注册。需è¦�在所有 Server 节点上将端å�£å¼€æ”¾ç»™é›†ç¾¤ä¸çš„æ‰€æœ‰å…¶ä»–节点。 |
+| TCP | 6443 | RKE2 Agent 节点 | Kubernetes API |
+| UDP | 8472 | RKE2 Server 和 Agent 节点 | 仅 Flannel VXLAN 需� |
+| TCP | 10250 | RKE2 Server 和 Agent 节点 | kubelet |
+| TCP | 2379 | RKE2 Server 节点 | etcd 客户端端� |
+| TCP | 2380 | RKE2 Server 节点 | etcd 对ç‰ç«¯å�£ |
+| TCP | 30000-32767 | RKE2 Server 和 Agent 节点 | NodePort 端�范围。�以使用 TCP 或 UDP。 |
+| TCP | 5473 | Calico-node pod 连接到 typha pod | 使用 Calico 部署时需� |
+| HTTP | 80 | 执行外部 SSL 终æ¢çš„è´Ÿè½½å�‡è¡¡å™¨/代ç�† | 使用外部 SSL ç»ˆæ¢æ—¶çš„ Rancher UI/API |
+| HTTPS | 443 | 托管/注册的 Kubernetes 任何需è¦�使用 Rancher UI 或 API çš„æº� | Rancher Agent,Rancher UI/API,kubectl。如果负载å�‡è¡¡å™¨æ‰§è¡Œ TLS 终æ¢ï¼Œåˆ™ä¸�需è¦�。 |
+
+所有出站��通常都是�许的。
+
+
+### Docker 安装的 Rancher Server 的端�
+
+
+ �击展开
+
+下表�述了 Rancher 节点入站和出站��的端��求:
+
+Rancher 节点的入站规则
+
+| �议 | 端� | � | �述 |
+|-----|-----|----------------|---|
+| TCP | 80 | 执行外部 SSL 终æ¢çš„è´Ÿè½½å�‡è¡¡å™¨/代ç�† | 使用外部 SSL ç»ˆæ¢æ—¶çš„ Rancher UI/API |
+| TCP | 443 | 托管/注册的 Kubernetes 任何需�使用 Rancher UI 或 API 的� | Rancher Agent,Rancher UI/API,kubectl |
+
+Rancher 节点的出站规则
+
+| �议 | 端� | � | �述 |
+|-----|-----|----------------|---|
+| TCP | 22 | 使用 Node Driver 创建的节点的任何节点 IP | 使用 Node Driver SSH �置节点 |
+| TCP | 443 | git.rancher.io | Rancher catalog |
+| TCP | 2376 | 使用 Node Driver 创建的节点的任何节点 IP | Docker Machine 使用的 Docker daemon TLS 端� |
+| TCP | 6443 | 托管/导入的 Kubernetes API | Kubernetes API Server |
+
+
+
+## 下游 Kubernetes 集群节点
+
+下游 Kubernetes 集群用于è¿�è¡Œä½ çš„åº”ç”¨å’Œæœ�务。本节介ç»�了哪些端å�£éœ€è¦�在下游集群的节点上打开,以便 Rancher 能够与它们进行通信。
+
+ä¸�å�Œçš„下游集群的å�¯åŠ¨æ–¹å¼�有ä¸�å�Œçš„端å�£è¦�求。下é�¢çš„æ¯�ä¸ªæ ‡ç¾éƒ½åˆ—出了ä¸�å�Œ[集群类型](../../../pages-for-subheaders/kubernetes-clusters-in-rancher-setup.md)所需打开的端å�£ã€‚
+
+下图�述了为�个[集群类型](../../../pages-for-subheaders/kubernetes-clusters-in-rancher-setup.md)打开的端�。
+
+Rancher 管���的端��求
+
+
+
+:::tip
+
+å¦‚æžœä½ å¯¹å®‰å…¨æ€§çš„å…³æ³¨ä¸�是太高,而且也愿æ„�å¤šæ‰“å¼€å‡ ä¸ªç«¯å�£ï¼Œä½ å�¯ä»¥å�‚考[常用端å�£](#常用端å�£)ä¸åˆ—出的端å�£ï¼Œè€Œä¸�是å�‚è€ƒä¸‹æ–¹çš„è¡¨æ ¼ã€‚
+
+:::
+
+### Harvester 集群的端�
+
+有关 Harvester 端å�£è¦�求的更多信æ�¯ï¼Œè¯·å�‚阅[æ¤å¤„](../../../integrations-in-rancher/harvester.md#端å�£è¦�求)。
+
+
+### Rancher ä½¿ç”¨èŠ‚ç‚¹æ± å�¯åЍ Kubernetes 集群的端å�£
+
+
+ �击展开
+
+下表æ��述了节点在[云æ��供商](../../../pages-for-subheaders/use-new-nodes-in-an-infra-provider.md)ä¸åˆ›å»ºçš„æƒ…况下,[Rancher å�¯åЍ Kubernetes](../../../pages-for-subheaders/launch-kubernetes-with-rancher.md) 的端å�£è¦�求。
+
+:::note
+
+在 AWS EC2 或 DigitalOcean ç‰äº‘æ��供商ä¸åˆ›å»ºé›†ç¾¤æœŸé—´ï¼ŒRancher 会自动打开所需的端å�£ã€‚
+
+:::
+
+
+
+
+
+### Rancher 使用自定义节点�动 Kubernetes 集群的端�
+
+
+ �击展开
+
+下表�述了使用[自定义节点](../../../pages-for-subheaders/use-existing-nodes.md)的情况下,[Rancher �动 Kubernetes](../../../pages-for-subheaders/launch-kubernetes-with-rancher.md) 的端��求。
+
+
+
+
+
+### 托管 Kubernetes 集群的端�
+
+
+ �击展开
+
+下表�述了[托管集群](../../../pages-for-subheaders/set-up-clusters-from-hosted-kubernetes-providers.md)的端��求。
+
+
+
+
+
+### 已注册集群的端�
+
+:::note
+
+在 Rancher 2.5 之�,注册集群被称为导入集群。
+
+:::
+
+
+ �击展开
+
+下表�述了[注册集群](../../../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/register-existing-clusters.md)的端��求。
+
+
+
+
+
+
+## 其他端�注�事项
+
+### 常用端�
+
+æ— è®ºé›†ç¾¤æ˜¯ä»€ä¹ˆç±»åž‹ï¼Œå¸¸ç”¨ç«¯å�£é€šå¸¸åœ¨ä½ çš„ Kubernetes 节点上打开。
+
+import CommonPortsTable from '../../../shared-files/_common-ports-table.md';
+
+
+
+----
+
+### 本地节点��
+
+上述è¦�æ±‚ä¸æ ‡è®°ä¸º`本地æµ�é‡�`(例如 `9099 TCP`)的端å�£ä¼šç”¨äºŽ Kubernetes å�¥åº·æ£€æŸ¥ (`livenessProbe` å’Œ `readinessProbe`)。
+这些å�¥åº·æ£€æŸ¥æ˜¯åœ¨èŠ‚ç‚¹æœ¬èº«æ‰§è¡Œçš„ã€‚åœ¨å¤§å¤šæ•°äº‘çŽ¯å¢ƒä¸ï¼Œè¿™ç§�本地æµ�é‡�是默认å…�许的。
+
+但是,在以下情况下å�¯èƒ½ä¼šé˜»æ¢æ¤æµ�é‡�:
+
+- ä½ å·²åœ¨èŠ‚ç‚¹ä¸Šåº”ç”¨äº†ä¸¥æ ¼çš„ä¸»æœºé˜²ç�«å¢™ç–略。
+- ä½ æ£åœ¨ä½¿ç”¨æœ‰å¤šä¸ªæŽ¥å�£ï¼ˆå¤šå®¿ä¸»ï¼‰çš„节点。
+
+åœ¨è¿™äº›æƒ…å†µä¸‹ï¼Œä½ å¿…é¡»åœ¨ä½ çš„ä¸»æœºé˜²ç�«å¢™ä¸ä¸»åЍå…�许这ç§�æµ�é‡�,如果是公共/ç§�有云托管的主机(例如 AWS 或 OpenStackï¼‰ï¼Œä½ éœ€è¦�åœ¨ä½ çš„å®‰å…¨ç»„é…�ç½®ä¸ä¸»åЍå…�è®¸æ¤æµ�é‡�。请记ä½�ï¼Œå¦‚æžœä½ åœ¨å®‰å…¨ç»„ä¸ä½¿ç”¨å®‰å…¨ç»„作为æº�æˆ–ç›®æ ‡ï¼Œä¸»åŠ¨å¼€æ”¾ç«¯å�£å�ªé€‚用于节点/实例的ç§�有接å�£ã€‚
+
+### Rancher AWS EC2 安全组
+
+å½“ä½ ä½¿ç”¨ [AWS EC2 Node Driver](../../../how-to-guides/new-user-guides/launch-kubernetes-with-rancher/use-new-nodes-in-an-infra-provider/create-an-amazon-ec2-cluster.md) 在 Rancher ä¸é…�ç½®é›†ç¾¤èŠ‚ç‚¹æ—¶ï¼Œä½ å�¯ä»¥è®© Rancher 创建一个å��为 `rancher-nodes` çš„å®‰å…¨ç»„ã€‚ä»¥ä¸‹è§„åˆ™ä¼šè‡ªåŠ¨æ·»åŠ åˆ°è¯¥å®‰å…¨ç»„ä¸ã€‚
+
+| 类型 | å��è®® | 端å�£èŒƒå›´ | æº�/ç›®æ ‡ | 规则类型 |
+|-----------------|:--------:|:-----------:|------------------------|:---------:|
+| SSH | TCP | 22 | 0.0.0.0/0 | 入站 |
+| HTTP | TCP | 80 | 0.0.0.0/0 | 入站 |
+| 自定义 TCP 规则 | TCP | 443 | 0.0.0.0/0 | 入站 |
+| 自定义 TCP 规则 | TCP | 2376 | 0.0.0.0/0 | 入站 |
+| 自定义 TCP 规则 | TCP | 2379-2380 | sg-xxx (rancher-nodes) | 入站 |
+| 自定义 UDP 规则 | UDP | 4789 | sg-xxx (rancher-nodes) | 入站 |
+| 自定义 TCP 规则 | TCP | 6443 | 0.0.0.0/0 | 入站 |
+| 自定义 UDP 规则 | UDP | 8472 | sg-xxx (rancher-nodes) | 入站 |
+| 自定义 TCP 规则 | TCP | 10250-10252 | sg-xxx (rancher-nodes) | 入站 |
+| 自定义 TCP 规则 | TCP | 10256 | sg-xxx (rancher-nodes) | 入站 |
+| 自定义 TCP 规则 | TCP | 30000-32767 | 0.0.0.0/0 | 入站 |
+| 自定义 UDP 规则 | UDP | 30000-32767 | 0.0.0.0/0 | 入站 |
+| 所有�� | 全部 | 全部 | 0.0.0.0/0 | 出站 |
+
+### 打开 SUSE Linux 端�
+
+SUSE Linux å�¯èƒ½æœ‰ä¸€ä¸ªé˜²ç�«å¢™ï¼Œé»˜è®¤æƒ…å†µä¸‹ä¼šé˜»æ¢æ‰€æœ‰ç«¯å�£ã€‚è¦�æ‰“å¼€å°†ä¸»æœºæ·»åŠ åˆ°è‡ªå®šä¹‰é›†ç¾¤æ‰€éœ€çš„ç«¯å�£ï¼š
+
+
+
+
+1. SSH 进入实例。
+1. 以文本模��动 YaST:
+ ```
+ sudo yast2
+ ```
+
+1. 导航到**安全和用户** > **防�墙** > **区域:公共** > **端�**。�在界�内导航,请�照[说明](https://doc.opensuse.org/documentation/leap/reference/html/book-reference/cha-yast-text.html#sec-yast-cli-navigate)。
+1. è¦�打开所需的端å�£ï¼ŒæŠŠå®ƒä»¬è¾“入到 **TCP 端å�£** å’Œ **UDP 端å�£** å—æ®µã€‚在这个例å�ä¸ï¼Œç«¯å�£ 9796 å’Œ 10250 也被打开,用于监控。由æ¤äº§ç”Ÿçš„å—æ®µåº”类似于以下内容:
+ ```yaml
+ TCP Ports
+ 22, 80, 443, 2376, 2379, 2380, 6443, 9099, 9796, 10250, 10254, 30000-32767
+ UDP Ports
+ 8472, 30000-32767
+ ```
+
+1. 所有必须端�都输入�,选择**接�**。
+
+
+
+
+1. SSH 进入实例。
+1. 编辑 `/etc/sysconfig/SuSEfirewall2` 并打开所需的端å�£ã€‚在这个例å�ä¸ï¼Œç«¯å�£ 9796 å’Œ 10250 也被打开,用于监控。
+ ```
+ FW_SERVICES_EXT_TCP="22 80 443 2376 2379 2380 6443 9099 9796 10250 10254 30000:32767"
+ FW_SERVICES_EXT_UDP="8472 30000:32767"
+ FW_ROUTE=yes
+ ```
+1. 用新的端���防�墙:
+ ```
+ SuSEfirewall2
+ ```
+
+
+
+
+**结果** ï¼šè¯¥èŠ‚ç‚¹å·²æ‰“å¼€æ·»åŠ åˆ°è‡ªå®šä¹‰é›†ç¾¤æ‰€éœ€çš„ç«¯å�£ã€‚
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/other-installation-methods/air-gapped-helm-cli-install/docker-install-commands.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/other-installation-methods/air-gapped-helm-cli-install/docker-install-commands.md
new file mode 100644
index 00000000000..a639349d8cf
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/other-installation-methods/air-gapped-helm-cli-install/docker-install-commands.md
@@ -0,0 +1,149 @@
+---
+title: Docker 安装命令
+---
+
+Docker 安装适用于想�测试 Rancher 的用户。
+
+ä½ å�¯ä»¥ä½¿ç”¨ `docker run`命令,把 Rancher Server 组件安装到å�•个节点上,而ä¸�需è¦�è¿�行 Kubernetes 集群。由于å�ªæœ‰ä¸€ä¸ªèŠ‚ç‚¹å’Œä¸€ä¸ª Docker å®¹å™¨ï¼Œå› æ¤ï¼Œå¦‚果该节点å�‘生故障,由于其他节点上没有å�¯ç”¨çš„ etcd æ•°æ�®å‰¯æœ¬ï¼Œä½ 将丢失 Rancher Server 的所有数æ�®ã€‚
+
+ä½ å�¯ä»¥ä½¿ç”¨å¤‡ä»½åº”用,按照[这些æ¥éª¤](../../../../how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/migrate-rancher-to-new-cluster.md),将 Rancher Server 从 Docker 安装è¿�移到 Kubernetes 安装。
+
+出于安全考虑,使用 Rancher 时请使用 SSL(Secure Sockets Layer)。SSL �护所有 Rancher 网络通信(如登录和与集群交互)的安全。
+
+| 环境��键 | 环境��值 | �述 |
+| -------------------------------- | -------------------------------- | ---- |
+| `CATTLE_SYSTEM_DEFAULT_REGISTRY` | `` | å°† Rancher Server é…�ç½®æˆ�在é…�置集群时,始终从ç§�有镜åƒ�ä»“åº“ä¸æ‹‰å�–镜åƒ�。 |
+| `CATTLE_SYSTEM_CATALOG` | `bundled` | é…�ç½® Rancher Server 使用打包的 Helm System Chart 副本。[system charts](https://github.com/rancher/system-charts) 仓库包å�«æ‰€æœ‰ Monitoring,Logging,告è¦å’Œå…¨å±€ DNS ç‰åŠŸèƒ½æ‰€éœ€çš„åº”ç”¨å•†åº—é¡¹ç›®ã€‚è¿™äº› [Helm Chart](https://github.com/rancher/system-charts) ä½�于 GitHub ä¸ã€‚ä½†æ˜¯ç”±äºŽä½ å¤„åœ¨ç¦»çº¿çŽ¯å¢ƒï¼Œå› æ¤ä½¿ç”¨ Rancher 内置的 Chart 会比设置 Git mirror 容易得多。 |
+
+:::note ä½ æ˜¯å�¦éœ€è¦�:
+
+- é…�置自定义 CA æ ¹è¯�书以访问æœ�务。å�‚è§�[自定义 CA æ ¹è¯�书](../../resources/custom-ca-root-certificates.md)。
+- 记录所有 Rancher API 的事务。�� [API 审计](../../../../reference-guides/single-node-rancher-in-docker/advanced-options.md#api-审计日志)。
+
+:::
+
+选择以下的选项之一:
+
+### 选项 A:使用 Rancher 默认的自ç¾å��è¯�书
+
+
+ �击展开
+
+å¦‚æžœä½ åœ¨ä¸�考虑身份验è¯�的开å�‘或测试环境ä¸å®‰è£… Rancher,å�¯ä»¥ä½¿ç”¨ Rancher 生æˆ�的自ç¾å��è¯�书安装 Rancher。这ç§�安装方å¼�é�¿å…�了自己生æˆ�è¯�书的麻烦。
+
+ç™»å½•åˆ°ä½ çš„ Linux 主机,然å�Žè¿�行下é�¢çš„安装命令。输入命令时,å�‚考下表æ�¥æ›¿æ�¢æ¯�个å� ä½�符。
+
+| å� ä½�符 | æ��è¿° |
+| -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
+| `` | �有镜�仓库的 URL 和端�。 |
+| `` | ä½ æƒ³è¦�安装的 [Rancher 版本](../../installation-references/helm-chart-options.md)çš„ç‰ˆæœ¬æ ‡ç¾ã€‚ |
+
+特�访问是[必须](./install-rancher-ha.md#rancher-特�访问)的。
+
+```
+docker run -d --restart=unless-stopped \
+ -p 80:80 -p 443:443 \
+ -e CATTLE_SYSTEM_DEFAULT_REGISTRY= \ # 设置在 Rancher ä¸ä½¿ç”¨çš„默认ç§�有镜åƒ�仓库
+ -e CATTLE_SYSTEM_CATALOG=bundled \ # 使用打包的 Rancher System Chart
+ --privileged \
+ /rancher/rancher:
+```
+
+
+
+### 选项 Bï¼šä½¿ç”¨ä½ è‡ªå·±çš„è¯�书 - 自ç¾å��
+
+
+ �击展开
+
+åœ¨ä½ å›¢é˜Ÿè®¿é—® Rancher Server 的开å�‘或测试环境ä¸ï¼Œåˆ›å»ºä¸€ä¸ªç”¨äºŽä½ 的安装的自ç¾å��è¯�书,以便团队验è¯�他们对实例的连接。
+
+:::note 先决�件:
+
+从能连接到互è�”网的计算机上,使用 [OpenSSL](https://www.openssl.org/) 或其他方法创建自ç¾å��è¯�书。
+
+- è¯�ä¹¦æ–‡ä»¶çš„æ ¼å¼�必须是 PEM。
+- åœ¨ä½ çš„è¯�书文件ä¸ï¼ŒåŒ…括链ä¸çš„æ‰€æœ‰ä¸é—´è¯�ä¹¦ã€‚ä½ éœ€è¦�å¯¹ä½ çš„è¯�书进行排åº�ï¼ŒæŠŠä½ çš„è¯�书放在最å‰�é�¢ï¼Œå�Žé�¢è·Ÿç�€ä¸é—´è¯�书。如需查看示例,请å�‚è§�[è¯�书故障排除](../rancher-on-a-single-node-with-docker/certificate-troubleshooting.md)。
+
+:::
+
+创建è¯�书å�Žï¼Œç™»å½• Linux 主机,然å�Žè¿�行以下安装命令。输入命令时,å�‚考下表æ�¥æ›¿æ�¢æ¯�个å� ä½�符。使用 `-v` æ ‡å¿—å¹¶æ��ä¾›è¯�书的路径,以将è¯�书挂载到容器ä¸ã€‚
+
+| å� ä½�符 | æ��è¿° |
+| -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
+| `` | 包��书文件的目录的路径。 |
+| `` | 完整�书链的路径。 |
+| `` | �书�钥的路径。 |
+| `` | CA �书的路径。 |
+| `` | �有镜�仓库的 URL 和端�。 |
+| `` | ä½ æƒ³è¦�安装的 [Rancher 版本](../../installation-references/helm-chart-options.md)çš„ç‰ˆæœ¬æ ‡ç¾ã€‚ |
+
+特�访问是[必须](./install-rancher-ha.md#rancher-特�访问)的。
+
+```
+docker run -d --restart=unless-stopped \
+ -p 80:80 -p 443:443 \
+ -v //:/etc/rancher/ssl/cert.pem \
+ -v //:/etc/rancher/ssl/key.pem \
+ -v //:/etc/rancher/ssl/cacerts.pem \
+ -e CATTLE_SYSTEM_DEFAULT_REGISTRY= \ # 设置在 Rancher ä¸ä½¿ç”¨çš„默认ç§�有镜åƒ�仓库
+ -e CATTLE_SYSTEM_CATALOG=bundled \ # 使用打包的 Rancher System Chart
+ --privileged \
+ /rancher/rancher:
+```
+
+
+
+### 选项 Cï¼šä½¿ç”¨ä½ è‡ªå·±çš„è¯�书 - å�¯ä¿¡ CA ç¾å��çš„è¯�书
+
+
+ �击展开
+
+在公开暴露应用的开å�‘或测试环境ä¸ï¼Œè¯·ä½¿ç”¨ç”±å�¯ä¿¡ CA ç¾å��çš„è¯�书,以é�¿å…�用户收到è¯�书安全è¦å‘Šã€‚
+
+:::note 先决�件:
+
+è¯�ä¹¦æ–‡ä»¶çš„æ ¼å¼�必须是 PEM。
+
+:::
+
+获å�–è¯�书å�Žï¼Œç™»å½• Linux 主机,然å�Žè¿�行以下安装命令。输入命令时,å�‚考下表æ�¥æ›¿æ�¢æ¯�个å� ä½�ç¬¦ã€‚å› ä¸ºä½ çš„è¯�书是由å�¯ä¿¡çš„ CA ç¾å��çš„ï¼Œå› æ¤ä½ ä¸�需è¦�安装é¢�外的 CA è¯�书文件。
+
+| å� ä½�符 | æ��è¿° |
+| -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
+| `` | 包��书文件的目录的路径。 |
+| `` | 完整�书链的路径。 |
+| `` | �书�钥的路径。 |
+| `` | �有镜�仓库的 URL 和端�。 |
+| `` | ä½ æƒ³è¦�安装的 [Rancher 版本](../../installation-references/helm-chart-options.md)çš„ç‰ˆæœ¬æ ‡ç¾ã€‚ |
+
+:::note
+
+使用 `--no-cacerts` 作为容器的�数,以�用 Rancher 生�的默认 CA �书。
+
+:::
+
+特�访问是[必须](./install-rancher-ha.md#rancher-特�访问)的。
+
+```
+docker run -d --restart=unless-stopped \
+ -p 80:80 -p 443:443 \
+ --no-cacerts \
+ -v //:/etc/rancher/ssl/cert.pem \
+ -v //:/etc/rancher/ssl/key.pem \
+ -e CATTLE_SYSTEM_DEFAULT_REGISTRY= \ # 设置在 Rancher ä¸ä½¿ç”¨çš„默认ç§�有镜åƒ�仓库
+ -e CATTLE_SYSTEM_CATALOG=bundled \ # 使用打包的 Rancher System Chart
+ --privileged
+ /rancher/rancher:
+```
+
+
+
+
+
+:::note
+
+å¦‚æžœä½ ä¸�想å�‘é€�é�¥æµ‹æ•°æ�®ï¼Œåœ¨é¦–次登录时退出[é�¥æµ‹](../../../../faq/telemetry.md)。
+
+:::
+
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/other-installation-methods/air-gapped-helm-cli-install/infrastructure-private-registry.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/other-installation-methods/air-gapped-helm-cli-install/infrastructure-private-registry.md
new file mode 100644
index 00000000000..e3e7be1a627
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/other-installation-methods/air-gapped-helm-cli-install/infrastructure-private-registry.md
@@ -0,0 +1,193 @@
+---
+title: '1. 设置基础设施和�有镜�仓库'
+---
+
+本文介ç»�如何在离线环境ä¸ï¼Œä¸º Rancher Management server é…�ç½®åº•å±‚åŸºç¡€è®¾æ–½ã€‚ä½ è¿˜å°†è®¾ç½® Rancher 节点ä¸å¿…é¡»å�¯ç”¨çš„ç§�有容器镜åƒ�仓库。
+
+离线环境是 Rancher Server 离线安装或安装在防�墙��的环境。
+
+Rancher 安装在 K3s Kubernetes 集群�RKE Kubernetes 集群还是�个 Docker 容器上对应的基础设施设置会有所��。如需了解�个安装方�的更多信�,请��[本页](../../../../pages-for-subheaders/installation-and-upgrade.md)。
+
+Rancher å�¯ä»¥å®‰è£…在任何 Kubernetes 集群上。为了阅读方便,我们在下文ä¸ä»�æ��供了 RKE å’Œ K3s Kubernetes 基础设施教程。
+
+
+
+
+为了实现高�用安装,我们建议设置以下的基础设施:
+
+- **2 个 Linux 节点**:å�¯ä»¥æ˜¯ä½ 的云æ��供商ä¸çš„虚拟机。
+- **1 个外部数æ�®åº“**:用于å˜å‚¨é›†ç¾¤æ•°æ�®ã€‚支æŒ� PostgreSQL, MySQL å’Œ etcd。
+- **1 个负载å�‡è¡¡å™¨**:用于将æµ�é‡�转å�‘到这两个节点ä¸ã€‚
+- **1 个 DNS 记录**:用于将 URL æ˜ å°„åˆ°è´Ÿè½½å�‡è¡¡å™¨ã€‚æ¤ DNS 记录将æˆ�为 Rancher Server çš„ URL,下游集群需è¦�å�¯ä»¥è®¿é—®åˆ°è¿™ä¸ªåœ°å�€ã€‚
+- **ç§�有镜åƒ�仓库**,用于将容器镜åƒ�分å�‘åˆ°ä½ çš„ä¸»æœºã€‚
+
+### 1. �置 Linux 节点
+
+这些主机会æ–开互è�”网链接,但需è¦�èƒ½ä¸Žä½ çš„ç§�有镜åƒ�仓库连接。
+
+请确ä¿�ä½ çš„èŠ‚ç‚¹æ»¡è¶³[æ“�作系统,容器è¿�行时,硬件和网络](../../../../pages-for-subheaders/installation-requirements.md)的常规è¦�求。
+
+如需获å�–é…�ç½® Linux 节点的示例,请å�‚è§�[在 Amazon EC2 ä¸é…�置节点](../../../../how-to-guides/new-user-guides/infrastructure-setup/nodes-in-amazon-ec2.md)的教程。
+
+### 2. �置外部数�库
+
+K3s 与其他 Kubernetes å�‘行版ä¸�å�Œï¼Œåœ¨äºŽå…¶æ”¯æŒ�使用 etcd 以外的数æ�®åº“æ�¥è¿�行 Kubernetes。该功能让 Kubernetes è¿�ç»´æ›´åŠ ç�µæ´»ã€‚ä½ å�¯ä»¥æ ¹æ�®å®žé™…情况选择å�ˆé€‚的数æ�®åº“。
+
+对于 K3s 高å�¯ç”¨å®‰è£…ï¼Œä½ éœ€è¦�é…�置以下的其ä¸ä¸€ä¸ªæ•°æ�®åº“:
+
+* [PostgreSQL](https://www.postgresql.org/)(10.7 和 11.5 已验�)
+* [MySQL](https://www.mysql.com/)(5.7 已验�)
+* [etcd](https://etcd.io/)(3.3.15 已验�)
+
+在安装 Kubernetes æ—¶ï¼Œä½ éœ€è¦�ä¼ å…¥ K3s 连接数æ�®åº“的详细信æ�¯ã€‚
+
+如需获å�–é…�置数æ�®åº“示例,请å�‚è§�[在 Amazon RDS æœ�务ä¸é…�ç½® MySQL æ•°æ�®åº“](../../../../how-to-guides/new-user-guides/infrastructure-setup/mysql-database-in-amazon-rds.md)的教程。
+
+如需获��置 K3s 集群数�库的所有�用选项,请�� [K3s 官方文档](https://rancher.com/docs/k3s/latest/en/installation/datastore/)。
+
+### 3. �置负载�衡器
+
+ä½ è¿˜éœ€è¦�设置一个负载å�‡è¡¡å™¨ï¼Œæ�¥å°†æµ�é‡�é‡�定å�‘到两个节点上的 Rancher 副本。é…�ç½®å�Žï¼Œå½“å�•个节点ä¸�å�¯ç”¨æ—¶ï¼Œç»§ç»ä¿�障与 Rancher Management Server 的通信。
+
+在å�Žç»æ¥éª¤ä¸é…�ç½® Kubernetes 时,K3s 工具会部署一个 Traefik Ingress Controller。该 Controller 将侦å�¬ worker 节点的 80 端å�£å’Œ 443 端å�£ï¼Œä»¥å“�应å�‘é€�给特定主机å��çš„æµ�é‡�。
+
+在安装 Rancher å�Žï¼ˆä¹Ÿæ˜¯åœ¨å�Žç»æ¥éª¤ä¸ï¼‰ï¼ŒRancher 系统将创建一个 Ingress 资æº�。该 Ingress 通知 Traefik Ingress Controller 监å�¬å�‘å¾€ Rancher 主机å��çš„æµ�é‡�。Traefik Ingress Controller 在收到å�‘å¾€ Rancher 主机å��çš„æµ�é‡�时,会将其转å�‘åˆ°é›†ç¾¤ä¸æ£åœ¨è¿�行的 Rancher Server Pod。
+
+åœ¨ä½ çš„å®žçŽ°ä¸ï¼Œä½ å�¯ä»¥è€ƒè™‘是å�¦éœ€è¦�使用 4 层或 7 层的负载å�‡è¡¡å™¨ï¼š
+
+- **4 层负载å�‡è¡¡å™¨**:两ç§�选择ä¸è¾ƒä¸ºç®€å�•的一ç§�,它将 TCP æµ�é‡�转å�‘åˆ°ä½ çš„èŠ‚ç‚¹ä¸ã€‚我们建议使用 4 层负载å�‡è¡¡å™¨ï¼Œå°†æµ�é‡�从 TCP/80 端å�£å’Œ TCP/443 端å�£è½¬å�‘到 Rancher Management 集群节点上。集群上的 Ingress Controller 会将 HTTP æµ�é‡�é‡�定å�‘到 HTTPS,并在 TCP/443 端å�£ä¸Šç»ˆæ¢ SSL/TLS。Ingress Controller 会将æµ�é‡�转å�‘到 Rancher deployment ä¸ Ingress Pod çš„ TCP/80 端å�£ã€‚
+- **7 层负载å�‡è¡¡å™¨**:相对比较å¤�æ�‚,但功能更全é�¢ã€‚例如,与 Rancher 本身进行 TLS 终æ¢ç›¸å��,7 层负载å�‡è¡¡å™¨èƒ½å¤Ÿåœ¨è´Ÿè½½å�‡è¡¡å™¨å¤„处ç�† TLS 终æ¢ã€‚å¦‚æžœä½ éœ€è¦�集ä¸åœ¨åŸºç¡€è®¾æ–½ä¸è¿›è¡Œ TLS 终æ¢ï¼Œ7 层负载å�‡è¡¡å�¯èƒ½ä¼šå¾ˆé€‚å�ˆä½ 。7 层负载å�‡è¡¡è¿˜èƒ½è®©ä½ 的负载å�‡è¡¡å™¨åŸºäºŽ HTTP 属性(例如 cookie ç‰ï¼‰å�šå‡ºå†³ç–,而 4 层负载å�‡è¡¡å™¨åˆ™ä¸�èƒ½ã€‚å¦‚æžœä½ é€‰æ‹©åœ¨ 7 层负载å�‡è¡¡å™¨ä¸Šç»ˆæ¢ SSL/TLS æµ�é‡�,则在安装 Rancher 时(å�Žç»æ¥éª¤ï¼‰éœ€è¦�使用 `--set tls=external` 选项。详情请å�‚è§� [Rancher Helm Chart 选项](../../installation-references/helm-chart-options.md#外部-tls-终æ¢)。
+
+如需获��置 NGINX 负载�衡器的示例,请��[本页](../../../../how-to-guides/new-user-guides/infrastructure-setup/nginx-load-balancer.md)。
+
+如需获�如何�置 Amazon ELB 网络负载�衡器的指�,请��[本页](../../../../how-to-guides/new-user-guides/infrastructure-setup/amazon-elb-load-balancer.md)。
+
+:::note ���示:
+
+安装å�Žï¼Œè¯·å‹¿å°†æ¤è´Ÿè½½å�‡è¡¡ï¼ˆä¾‹å¦‚ `local` 集群 Ingress)用于 Rancher ä»¥å¤–çš„åº”ç”¨ã€‚å¦‚æžœæ¤ Ingress 与其他应用共享,在其他应用的 Ingress é…�ç½®é‡�æ–°åŠ è½½å�Žï¼Œå�¯èƒ½å¯¼è‡´ Rancher 出现 websocket 错误。我们建议把 `local` 集群专用给 Rancher,ä¸�è¦�在集群内部署其他应用。
+
+:::
+
+### 4. �置 DNS 记录
+
+é…�置完负载å�‡è¡¡å™¨å�Žï¼Œä½ 将需è¦�创建 DNS 记录,以将æµ�é‡�å�‘é€�到该负载å�‡è¡¡å™¨ã€‚
+
+æ ¹æ�®ä½ 的环境,DNS 记录å�¯ä»¥æ˜¯æŒ‡å�‘è´Ÿè½½å�‡è¡¡å™¨ IP çš„ A 记录,也å�¯ä»¥æ˜¯æŒ‡å�‘è´Ÿè½½å�‡è¡¡å™¨ä¸»æœºå��çš„ CNAMEã€‚æ— è®ºæ˜¯å“ªç§�情况,请确ä¿�è¯¥è®°å½•æ˜¯ä½ è¦� Rancher 进行å“�应的主机å��。
+
+在安装 Rancher 时(å�Žç»æ¥éª¤ï¼‰ï¼Œä½ 需è¦�指定æ¤ä¸»æœºå��。请知悉,æ¤ä¸»æœºå��æ— æ³•ä¿®æ”¹ã€‚è¯·ç¡®ä¿�ä½ è®¾ç½®çš„ä¸»æœºå��æ˜¯ä½ æƒ³è¦�的。
+
+有关设置 DNS 记录以将域��转�到 Amazon ELB 负载�衡器的指�,请�� [AWS 官方文档](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-to-elb-load-balancer)。
+
+### 5. �置�有镜�仓库
+
+Rancher 支æŒ�使用ç§�有镜åƒ�ä»“åº“è¿›è¡Œç¦»çº¿å®‰è£…ã€‚ä½ å¿…é¡»æœ‰è‡ªå·±çš„ç§�有镜åƒ�仓库或使用其他方å¼�将容器镜åƒ�分å�‘到主机。
+
+在å�Žç»è®¾ç½® K3s Kubernetes é›†ç¾¤æ—¶ï¼Œä½ éœ€è¦�创建一个[ç§�有镜åƒ�仓库é…�置文件](https://rancher.com/docs/k3s/latest/en/installation/private-registry/),其ä¸åŒ…å�«æ¤é•œåƒ�仓库的信æ�¯ã€‚
+
+å¦‚æžœä½ éœ€è¦�创建ç§�有镜åƒ�仓库,请å�‚阅相应è¿�行时的文档:
+
+* [Containerd](https://github.com/containerd/containerd/blob/main/docs/cri/config.md#registry-configuration).
+ * [Nerdctl 命令和镜�仓库托管�务](https://github.com/containerd/nerdctl/blob/main/docs/registry.md)
+* [Docker](https://docs.docker.com/registry/deploying/).
+
+
+
+
+如需在高å�¯ç”¨ RKE 集群ä¸å®‰è£… Rancher Management Server,我们建议é…�置以下基础设施:
+
+- **3 个 Linux 节点**:å�¯ä»¥æ˜¯ä½ 的云æ��供商(例如 Amazon EC2,GCE 或 vSphere)ä¸çš„虚拟机。
+- **1 个负载å�‡è¡¡å™¨**:用于将å‰�端æµ�é‡�转å�‘到这三个节点ä¸ã€‚
+- **1 个 DNS 记录**:用于将 URL æ˜ å°„åˆ°è´Ÿè½½å�‡è¡¡å™¨ã€‚æ¤ DNS 记录将æˆ�为 Rancher Server çš„ URL,下游集群需è¦�å�¯ä»¥è®¿é—®åˆ°è¿™ä¸ªåœ°å�€ã€‚
+- **ç§�有镜åƒ�仓库**,用于将容器镜åƒ�分å�‘åˆ°ä½ çš„ä¸»æœºã€‚
+
+这些节点必须ä½�于å�Œä¸€ä¸ªåŒºåŸŸæˆ–æ•°æ�®ä¸å¿ƒã€‚ä½†æ˜¯ä½ å�¯ä»¥æŠŠè¿™äº›æœ�务器放在ä¸�å�Œçš„å�¯ç”¨åŒºã€‚
+
+### 为什么使用三个节点?
+
+在 RKE 集群ä¸ï¼ŒRancher Server 的数æ�®å˜å‚¨åœ¨ etcd ä¸ã€‚而这个 etcd æ•°æ�®åº“在这三个节点上è¿�行。
+
+为了选举出大多数 etcd 节点认å�¯çš„ etcd 集群 leader,etcd æ•°æ�®åº“需è¦�奇数个节点。如果 etcd æ•°æ�®åº“æ— æ³•é€‰å‡º leader,etcd å�¯èƒ½ä¼šå‡ºçް[脑裂(split brain)](https://www.quora.com/What-is-split-brain-in-distributed-systems)çš„é—®é¢˜ï¼Œæ¤æ—¶ä½ 需è¦�使用备份æ�¢å¤�集群。如果三个 etcd 节点之一å�‘生故障,其余两个节点å�¯ä»¥é€‰æ‹©ä¸€ä¸ª leaderï¼Œå› ä¸ºå®ƒä»¬æ˜¯ etcd 节点总数的大多数部分。
+
+### 1. �置 Linux 节点
+
+这些主机会æ–开互è�”网链接,但需è¦�èƒ½ä¸Žä½ çš„ç§�有镜åƒ�仓库连接。
+
+请确ä¿�ä½ çš„èŠ‚ç‚¹æ»¡è¶³[æ“�作系统,容器è¿�行时,硬件和网络](../../../../pages-for-subheaders/installation-requirements.md)的常规è¦�求。
+
+如需获å�–é…�ç½® Linux 节点的示例,请å�‚è§�[在 Amazon EC2 ä¸é…�置节点](../../../../how-to-guides/new-user-guides/infrastructure-setup/nodes-in-amazon-ec2.md)的教程。
+
+### 2. �置负载�衡器
+
+ä½ è¿˜éœ€è¦�设置一个负载å�‡è¡¡å™¨ï¼Œæ�¥å°†æµ�é‡�é‡�定å�‘到两个节点上的 Rancher 副本。é…�ç½®å�Žï¼Œå½“å�•个节点ä¸�å�¯ç”¨æ—¶ï¼Œç»§ç»ä¿�障与 Rancher Management Server 的通信。
+
+在å�Žç»æ¥éª¤ä¸é…�ç½® Kubernetes 时,RKE 工具会部署一个 NGINX Ingress Controller。该 Controller 将侦å�¬ worker 节点的 80 端å�£å’Œ 443 端å�£ï¼Œä»¥å“�应å�‘é€�给特定主机å��çš„æµ�é‡�。
+
+在安装 Rancher å�Žï¼ˆä¹Ÿæ˜¯åœ¨å�Žç»æ¥éª¤ä¸ï¼‰ï¼ŒRancher 系统将创建一个 Ingress 资æº�。该 Ingress 通知 NGINX Ingress Controller 监å�¬å�‘å¾€ Rancher 主机å��çš„æµ�é‡�。NGINX Ingress Controller 在收到å�‘å¾€ Rancher 主机å��çš„æµ�é‡�时,会将其转å�‘åˆ°é›†ç¾¤ä¸æ£åœ¨è¿�行的 Rancher Server Pod。
+
+åœ¨ä½ çš„å®žçŽ°ä¸ï¼Œä½ å�¯ä»¥è€ƒè™‘是å�¦éœ€è¦�使用 4 层或 7 层的负载å�‡è¡¡å™¨ï¼š
+
+- **4 层负载å�‡è¡¡å™¨**:两ç§�选择ä¸è¾ƒä¸ºç®€å�•的一ç§�,它将 TCP æµ�é‡�转å�‘åˆ°ä½ çš„èŠ‚ç‚¹ä¸ã€‚我们建议使用 4 层负载å�‡è¡¡å™¨ï¼Œå°†æµ�é‡�从 TCP/80 端å�£å’Œ TCP/443 端å�£è½¬å�‘到 Rancher Management 集群节点上。集群上的 Ingress Controller 会将 HTTP æµ�é‡�é‡�定å�‘到 HTTPS,并在 TCP/443 端å�£ä¸Šç»ˆæ¢ SSL/TLS。Ingress Controller 会将æµ�é‡�转å�‘到 Rancher deployment ä¸ Ingress Pod çš„ TCP/80 端å�£ã€‚
+- **7 层负载å�‡è¡¡å™¨**:相对比较å¤�æ�‚,但功能更全é�¢ã€‚例如,与 Rancher 本身进行 TLS 终æ¢ç›¸å��,7 层负载å�‡è¡¡å™¨èƒ½å¤Ÿåœ¨è´Ÿè½½å�‡è¡¡å™¨å¤„处ç�† TLS 终æ¢ã€‚å¦‚æžœä½ éœ€è¦�集ä¸åœ¨åŸºç¡€è®¾æ–½ä¸è¿›è¡Œ TLS 终æ¢ï¼Œ7 层负载å�‡è¡¡å�¯èƒ½ä¼šå¾ˆé€‚å�ˆä½ 。7 层负载å�‡è¡¡è¿˜èƒ½è®©ä½ 的负载å�‡è¡¡å™¨åŸºäºŽ HTTP 属性(例如 cookie ç‰ï¼‰å�šå‡ºå†³ç–,而 4 层负载å�‡è¡¡å™¨åˆ™ä¸�èƒ½ã€‚å¦‚æžœä½ é€‰æ‹©åœ¨ 7 层负载å�‡è¡¡å™¨ä¸Šç»ˆæ¢ SSL/TLS æµ�é‡�,则在安装 Rancher 时(å�Žç»æ¥éª¤ï¼‰éœ€è¦�使用 `--set tls=external` 选项。详情请å�‚è§� [Rancher Helm Chart 选项](../../installation-references/helm-chart-options.md#外部-tls-终æ¢)。
+
+如需获��置 NGINX 负载�衡器的示例,请��[本页](../../../../how-to-guides/new-user-guides/infrastructure-setup/nginx-load-balancer.md)。
+
+如需获�如何�置 Amazon ELB 网络负载�衡器的指�,请��[本页](../../../../how-to-guides/new-user-guides/infrastructure-setup/amazon-elb-load-balancer.md)。
+
+:::caution
+
+安装å�Žï¼Œè¯·å‹¿å°†æ¤è´Ÿè½½å�‡è¡¡ï¼ˆä¾‹å¦‚ `local` 集群 Ingress)用于 Rancher ä»¥å¤–çš„åº”ç”¨ã€‚å¦‚æžœæ¤ Ingress 与其他应用共享,在其他应用的 Ingress é…�ç½®é‡�æ–°åŠ è½½å�Žï¼Œå�¯èƒ½å¯¼è‡´ Rancher 出现 websocket 错误。我们建议把 `local` 集群专用给 Rancher,ä¸�è¦�在集群内部署其他应用。
+
+:::
+
+### 3. �置 DNS 记录
+
+é…�置完负载å�‡è¡¡å™¨å�Žï¼Œä½ 将需è¦�创建 DNS 记录,以将æµ�é‡�å�‘é€�到该负载å�‡è¡¡å™¨ã€‚
+
+æ ¹æ�®ä½ 的环境,DNS 记录å�¯ä»¥æ˜¯æŒ‡å�‘è´Ÿè½½å�‡è¡¡å™¨ IP çš„ A 记录,也å�¯ä»¥æ˜¯æŒ‡å�‘è´Ÿè½½å�‡è¡¡å™¨ä¸»æœºå��çš„ CNAMEã€‚æ— è®ºæ˜¯å“ªç§�情况,请确ä¿�è¯¥è®°å½•æ˜¯ä½ è¦� Rancher 进行å“�应的主机å��。
+
+在安装 Rancher 时(å�Žç»æ¥éª¤ï¼‰ï¼Œä½ 需è¦�指定æ¤ä¸»æœºå��。请知悉,æ¤ä¸»æœºå��æ— æ³•ä¿®æ”¹ã€‚è¯·ç¡®ä¿�ä½ è®¾ç½®çš„ä¸»æœºå��æ˜¯ä½ æƒ³è¦�的。
+
+有关设置 DNS 记录以将域��转�到 Amazon ELB 负载�衡器的指�,请�� [AWS 官方文档](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-to-elb-load-balancer)。
+
+### 4. �置�有镜�仓库
+
+Rancher 支æŒ�使用安全的ç§�有镜åƒ�ä»“åº“è¿›è¡Œç¦»çº¿å®‰è£…ã€‚ä½ å¿…é¡»æœ‰è‡ªå·±çš„ç§�有镜åƒ�仓库或使用其他方å¼�将容器镜åƒ�分å�‘到主机。
+
+在å�Žç»è®¾ç½® RKE Kubernetes é›†ç¾¤æ—¶ï¼Œä½ éœ€è¦�创建一个[ç§�有镜åƒ�仓库é…�置文件](https://rancher.com/docs/rke/latest/en/config-options/private-registries/),其ä¸åŒ…å�«æ¤é•œåƒ�仓库的信æ�¯ã€‚
+
+å¦‚æžœä½ éœ€è¦�创建ç§�有镜åƒ�仓库,请å�‚阅相应è¿�行时的文档:
+
+* [Containerd](https://github.com/containerd/containerd/blob/main/docs/cri/config.md#registry-configuration).
+ * [Nerdctl 命令和镜�仓库托管�务](https://github.com/containerd/nerdctl/blob/main/docs/registry.md)
+* [Docker](https://docs.docker.com/registry/deploying/).
+
+
+
+
+:::note 注�事项:
+
+- Docker 安装适用于想è¦�测试 Rancher 的用户。由于å�ªæœ‰ä¸€ä¸ªèŠ‚ç‚¹å’Œä¸€ä¸ª Docker å®¹å™¨ï¼Œå› æ¤å¦‚果该节点å�‘ç”Ÿæ•…éšœï¼Œä½ å°†ä¸¢å¤± Rancher Server 的所有数æ�®ã€‚
+
+- Rancher backup operator �将 Rancher 从�个 Docker 容器�移到高�用 Kubernetes 集群上。详情请��[把 Rancher �移到新集群](../../../../how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/migrate-rancher-to-new-cluster.md)。
+
+:::
+
+### 1. �置 Linux 节点
+
+æ¤ä¸»æœºä¼šæ–开互è�”网链接,但需è¦�èƒ½ä¸Žä½ çš„ç§�有镜åƒ�仓库连接。
+
+请确ä¿�ä½ çš„èŠ‚ç‚¹æ»¡è¶³[æ“�作系统,容器,硬件和网络](../../../../pages-for-subheaders/installation-requirements.md)的常规安装è¦�求。
+
+如需获å�–é…�ç½® Linux 节点的示例,请å�‚è§�[在 Amazon EC2 ä¸é…�置节点](../../../../how-to-guides/new-user-guides/infrastructure-setup/nodes-in-amazon-ec2.md)的教程。
+
+### 2. �置�有 Docker 镜�仓库
+
+Rancher 支æŒ�使用ç§�有镜åƒ�ä»“åº“åœ¨å ¡åž’æœ�务器ä¸è¿›è¡Œç¦»çº¿å®‰è£…ã€‚ä½ å¿…é¡»æœ‰è‡ªå·±çš„ç§�有镜åƒ�仓库或使用其他方å¼�将容器镜åƒ�分å�‘到主机。
+
+如需获得创建�有镜�仓库的帮助,请�� [Docker 官方文档](https://docs.docker.com/registry/)。
+
+
+
+
+### å�Žç»æ“�作
+[收集镜åƒ�å¹¶å�‘å¸ƒåˆ°ä½ çš„ç§�有镜åƒ�仓库](publish-images.md)
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/other-installation-methods/air-gapped-helm-cli-install/install-kubernetes.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/other-installation-methods/air-gapped-helm-cli-install/install-kubernetes.md
new file mode 100644
index 00000000000..3fcd8a992cf
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/other-installation-methods/air-gapped-helm-cli-install/install-kubernetes.md
@@ -0,0 +1,387 @@
+---
+title: '3. 安装 Kubernetes(Docker 安装请跳过)'
+---
+
+:::note
+
+å¦‚æžœä½ ä½¿ç”¨ Docker 在å�•个节点上安装 Rancher,请跳过本节。
+
+:::
+
+本文æ��è¿°äº†å¦‚ä½•æ ¹æ�® [Rancher Server 环境的最佳实践](../../../../reference-guides/rancher-manager-architecture/architecture-recommendations.md#kubernetes-安装环境)æ�¥å®‰è£… Kubernetes 集群。该集群需è¦�专用于è¿�行 Rancher Server。
+
+Rancher �以安装在任何 Kubernetes 集群上,包括托管的 Kubernetes。
+
+在 RKEã€�RKE2 或 K3s 上离线安装 Kubernetes 集群的æ¥éª¤å¦‚下所示:
+
+
+
+
+在本指å�—ä¸ï¼Œæˆ‘们å�‡è®¾ä½ å·²ç»�在离线环境ä¸åˆ›å»ºäº†èŠ‚ç‚¹ï¼Œå¹¶ä¸”åœ¨å ¡åž’æœ�务器上有一个安全的 Docker ç§�有镜åƒ�仓库。
+
+### 安装概�
+
+1. [准备镜�目录](#1-准备镜�目录)
+2. [创建镜�仓库 YAML](#2-创建镜�仓库-yaml)
+3. [安装 K3s](#3-安装-k3s)
+4. [ä¿�å˜å¹¶å¼€å§‹ä½¿ç”¨ kubeconfig 文件](#4-ä¿�å˜å¹¶å¼€å§‹ä½¿ç”¨-kubeconfig-文件)
+
+### 1. 准备镜�目录
+从 [Releases](https://github.com/k3s-io/k3s/releases) 页�获���行的 K3s 版本的镜� tar 文件。
+
+在æ¯�个节点上å�¯åЍ K3s 之å‰�,将这个 tar 文件放在 `images` 目录ä¸ï¼Œä¾‹å¦‚:
+
+```sh
+sudo mkdir -p /var/lib/rancher/k3s/agent/images/
+sudo cp ./k3s-airgap-images-$ARCH.tar /var/lib/rancher/k3s/agent/images/
+```
+
+### 2. 创建镜�仓库 YAML
+把 `registries.yaml` 文件创建到 `/etc/rancher/k3s/registries.yaml` ä¸ã€‚æ¤æ–‡ä»¶ä¸º K3s æ��ä¾›è¿žæŽ¥åˆ°ä½ çš„ç§�有镜åƒ�仓库的详细信æ�¯ã€‚
+
+åœ¨åŠ å…¥å¿…è¦�ä¿¡æ�¯ä¹‹å‰�,`registries.yaml` æ–‡ä»¶æ˜¯è¿™æ ·çš„ï¼š
+
+```yaml
+---
+mirrors:
+ customreg:
+ endpoint:
+ - "https://ip-to-server:5000"
+configs:
+ customreg:
+ auth:
+ username: xxxxxx # 镜�仓库的用户�
+ password: xxxxxx # 镜åƒ�仓库的密ç �
+ tls:
+ cert_file: <镜�仓库所用的�书文件路径>
+ key_file: <镜�仓库所用的密钥文件路径>
+ ca_file: <镜�仓库所用的 CA 文件路径>
+```
+
+请注�,目�,K3s 仅支�安全的镜�仓库(带有自定义 CA 的 SSL)。
+
+有关 K3s 的�有镜�仓库�置文件的详情,请�� [K3s 官方文档](https://rancher.com/docs/k3s/latest/en/installation/private-registry/)。
+
+### 3. 安装 K3s
+
+Rancher 需è¦�安装在支æŒ�çš„ Kubernetes ç‰ˆæœ¬ä¸Šã€‚å¦‚éœ€äº†è§£ä½ ä½¿ç”¨çš„ Rancher 版本支æŒ�哪些 Kubernetes 版本,请å�‚è§� [Rancher 支æŒ�矩阵](https://www.suse.com/suse-rancher/support-matrix/all-supported-versions/)。
+
+如需指定 K3s(Kubernetes)版本,在�行 K3s 安装脚本时使用 `INSTALL_K3S_VERSION` 环境��(例如 `INSTALL_K3S_VERSION="v1.24.10+k3s1"`)。
+
+从 [Releases](https://github.com/k3s-io/k3s/releases) 页�获� K3s 的二进制文件,该文件�匹�用于获�离线镜�的 tar 版本。
+访问 [K3s 安装脚本](https://get.k3s.io)以获� K3s 的安装脚本。
+
+将二进制文件放到æ¯�个节点的 `/usr/local/bin` ä¸ã€‚
+将安装脚本放在�个节点的任��置,并将脚本命�为 `install.sh`。
+
+在�个 Server 上安装 K3s:
+
+```
+INSTALL_K3S_SKIP_DOWNLOAD=true INSTALL_K3S_VERSION= ./install.sh
+```
+
+在�个 Agent 上安装 K3s:
+
+```
+INSTALL_K3S_SKIP_DOWNLOAD=true INSTALL_K3S_VERSION= K3S_URL=https://:6443 K3S_TOKEN= ./install.sh
+```
+
+å…¶ä¸ `` 是 Server çš„ IP 或有效 DNS,`` 是å�¯ä»¥åœ¨ `/var/lib/rancher/k3s/server/node-token` 䏿‰¾åˆ°çš„ Server node-token。
+
+:::note
+
+K3s 自动为 kubelets æ��ä¾› `--resolv-conf` æ ‡å¿—ï¼Œè¯¥æ ‡å¿—å�¯èƒ½å¯¹åœ¨ç¦»çº¿çŽ¯å¢ƒä¸é…�ç½® DNS 有帮助。
+
+:::
+
+### 4. ä¿�å˜å¹¶å¼€å§‹ä½¿ç”¨ kubeconfig 文件
+
+在æ¯�个 Rancher Server 节点安装 K3s 时,会在æ¯�个节点的 `/etc/rancher/k3s/k3s.yaml` ä¸ç”Ÿæˆ�一个 `kubeconfig` 文件。该文件包å�«è®¿é—®é›†ç¾¤çš„å‡è¯�。请将该文件ä¿�å˜åœ¨å®‰å…¨çš„ä½�置。
+
+如�使用该 `kubeconfig` 文件:
+
+1. 安装 Kubernetes 命令行工具 [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl)。
+2. å¤�制 `/etc/rancher/k3s/k3s.yaml` 文件并ä¿�å˜åˆ°æœ¬åœ°ä¸»æœºçš„ `~/.kube/config` 目录上。
+3. 在 kubeconfig 文件ä¸ï¼Œ`server` çš„å�‚数为 localhostã€‚ä½ éœ€è¦�å°† `server` é…�置为负载å�‡è¡¡å™¨çš„ DNS,并指定端å�£ 6443(通过端å�£ 6443 访问 Kubernetes API Server,通过端å�£ 80 å’Œ 443 访问 Rancher Server)。以下是一个 `k3s.yaml` 示例:
+
+```yaml
+apiVersion: v1
+clusters:
+- cluster:
+ certificate-authority-data: [CERTIFICATE-DATA]
+ server: [LOAD-BALANCER-DNS]:6443 # 编辑æ¤è¡Œ
+ name: default
+contexts:
+- context:
+ cluster: default
+ user: default
+ name: default
+current-context: default
+kind: Config
+preferences: {}
+users:
+- name: default
+ user:
+ password: [PASSWORD]
+ username: admin
+```
+
+**结果**ï¼šä½ å�¯ä»¥å¼€å§‹ä½¿ç”¨ `kubectl` æ�¥ç®¡ç�†ä½ çš„ K3s é›†ç¾¤ã€‚å¦‚æžœä½ æœ‰å¤šä¸ª `kubeconfig` 文件,在使用 `kubectl` æ—¶ï¼Œä½ å�¯ä»¥ä¼ 入文件路径æ�¥æŒ‡å®šè¦�使用的 `kubeconfig` 文件:
+
+```
+kubectl --kubeconfig ~/.kube/config/k3s.yaml get pods --all-namespaces
+```
+
+有关 `kubeconfig` 文件的详情,请å�‚è§� [K3s 官方文档](https://rancher.com/docs/k3s/latest/en/cluster-access/) 或 [ Kubernetes 官方文档](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/)ä¸å…³äºŽä½¿ç”¨ `kubeconfig` 文件管ç�†é›†ç¾¤è®¿é—®çš„部分。
+
+### �级注�事项
+
+ä½ å�¯ä»¥é€šè¿‡ä»¥ä¸‹æ–¹å¼�完æˆ�离线环境的å�‡çº§ï¼š
+
+1. 从 [Releases](https://github.com/k3s-io/k3s/releases) 页é�¢ä¸‹è½½è¦�å�‡çº§çš„ K3s 版本的新离线镜åƒ� tar 包。将 tar 文件放在æ¯�个节点上的 `/var/lib/rancher/k3s/agent/images/` 目录ä¸ã€‚åˆ é™¤æ—§çš„ tar 文件。
+2. å¤�制并替æ�¢æ¯�个节点上 `/usr/local/bin` ä¸çš„æ—§ K3s 二进制文件。å¤�制 [K3s 安装脚本](https://get.k3s.io)ï¼ˆå› ä¸ºè„šæœ¬å�¯èƒ½è‡ªä¸Šæ¬¡ç‰ˆæœ¬å�‘布以æ�¥å·²æ›´æ”¹ï¼‰ã€‚使用相å�Œçš„环境å�˜é‡�å†�次è¿�行脚本。
+3. �� K3s �务(如果安装程�没有自动�� K3s 的�)。
+
+
+
+
+在本指å�—ä¸ï¼Œæˆ‘们å�‡è®¾ä½ å·²ç»�在离线环境ä¸åˆ›å»ºäº†èŠ‚ç‚¹ï¼Œå¹¶ä¸”åœ¨å ¡åž’æœ�务器上有一个安全的 Docker ç§�有镜åƒ�仓库。
+
+### 安装概�
+
+1. [创建 RKE2 �置](#1-创建-rke2-�置)
+2. [创建镜�仓库 YAML](#2-创建镜�仓库-yaml)
+3. [安装 RKE2](#3-安装-rke2)
+4. [ä¿�å˜å¹¶å¼€å§‹ä½¿ç”¨ kubeconfig 文件](#4-ä¿�å˜å¹¶å¼€å§‹ä½¿ç”¨-kubeconfig-文件)
+
+### 1. 创建 RKE2 �置
+把 config.yaml 文件创建到 `/etc/rancher/rke2/config.yaml` ä¸ã€‚这将包å�«åˆ›å»ºé«˜å�¯ç”¨ RKE2 集群所需的所有é…�置选项。
+
+第一��务器的最低�置是:
+
+```
+token: my-shared-secret
+tls-san:
+ - loadbalancer-dns-domain.com
+```
+
+其他�务器的�置文件应该包�相�的令牌,并让 RKE2 知��连接到现有的第一��务器:
+
+```
+server: https://ip-of-first-server:9345
+token: my-shared-secret
+tls-san:
+ - loadbalancer-dns-domain.com
+```
+
+有关详细信�,请�阅 [RKE2 文档](https://docs.rke2.io/install/ha)。
+
+:::note
+
+RKE2 自动为 kubelets æ��ä¾› `resolv-conf` é€‰é¡¹ï¼Œè¯¥æ ‡å¿—å�¯èƒ½å¯¹åœ¨ç¦»çº¿çŽ¯å¢ƒä¸é…�ç½® DNS 有帮助。
+
+:::
+
+### 2. 创建镜�仓库 YAML
+把 `registries.yaml` 文件创建到 `/etc/rancher/rke2/registries.yaml` ä¸ã€‚æ¤æ–‡ä»¶ä¸º RKE2 æ��ä¾›è¿žæŽ¥åˆ°ä½ çš„ç§�有镜åƒ�仓库的详细信æ�¯ã€‚
+
+åœ¨åŠ å…¥å¿…è¦�ä¿¡æ�¯ä¹‹å‰�,`registries.yaml` æ–‡ä»¶æ˜¯è¿™æ ·çš„ï¼š
+
+```
+---
+mirrors:
+ customreg:
+ endpoint:
+ - "https://ip-to-server:5000"
+configs:
+ customreg:
+ auth:
+ username: xxxxxx # 镜�仓库的用户�
+ password: xxxxxx # 镜åƒ�仓库的密ç �
+ tls:
+ cert_file: <镜�仓库所用的�书文件路径>
+ key_file: <镜�仓库所用的密钥文件路径>
+ ca_file: <镜�仓库所用的 CA 文件路径>
+```
+
+有关 RKE2 的�有镜�仓库�置文件的详情,请�� [RKE2 官方文档](https://docs.rke2.io/install/containerd_registry_configuration)。
+
+### 3. 安装 RKE2
+
+Rancher 需è¦�安装在支æŒ�çš„ Kubernetes ç‰ˆæœ¬ä¸Šã€‚å¦‚éœ€äº†è§£ä½ ä½¿ç”¨çš„ Rancher 版本支æŒ�哪些 Kubernetes 版本,请å�‚è§�[支æŒ�维护æ�¡æ¬¾](https://rancher.com/support-maintenance-terms/)。
+
+从 Release 页é�¢ä¸‹è½½å®‰è£…脚本ã€�rke2ã€�rke2-images å’Œ sha256sum å˜æ¡£ï¼Œå¹¶å°†å®ƒä»¬ä¸Šä¼ 到æ¯�个æœ�务器上的目录ä¸ï¼š
+
+```
+mkdir /tmp/rke2-artifacts && cd /tmp/rke2-artifacts/
+wget https://github.com/rancher/rke2/releases/download/v1.21.5%2Brke2r2/rke2-images.linux-amd64.tar.zst
+wget https://github.com/rancher/rke2/releases/download/v1.21.5%2Brke2r2/rke2.linux-amd64.tar.gz
+wget https://github.com/rancher/rke2/releases/download/v1.21.5%2Brke2r2/sha256sum-amd64.txt
+curl -sfL https://get.rke2.io --output install.sh
+```
+
+接下�,使用�个�务器上的目录�行 install.sh,如下例所示:
+
+```
+INSTALL_RKE2_ARTIFACT_PATH=/tmp/rke2-artifacts sh install.sh
+```
+
+然�在所有�务器上�用并�动该�务:
+
+``
+systemctl enable rke2-server.service
+systemctl start rke2-server.service
+``
+
+有关详细信�,请�阅 [RKE2 文档](https://docs.rke2.io/install/airgap)。
+
+### 4. ä¿�å˜å¹¶å¼€å§‹ä½¿ç”¨ kubeconfig 文件
+
+在æ¯�个 Rancher Server 节点安装 RKE2 时,会在æ¯�个节点的 `/etc/rancher/rke2/rke2.yaml` ä¸ç”Ÿæˆ�一个 `kubeconfig` 文件。该文件包å�«è®¿é—®é›†ç¾¤çš„å‡è¯�。请将该文件ä¿�å˜åœ¨å®‰å…¨çš„ä½�置。
+
+如�使用该 `kubeconfig` 文件:
+
+1. 安装 [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl)(Kubernetes 命令行工具)。
+2. å¤�制 `/etc/rancher/rke2/rke2.yaml` 文件并ä¿�å˜åˆ°æœ¬åœ°ä¸»æœºçš„ `~/.kube/config` 目录上。
+3. 在 kubeconfig 文件ä¸ï¼Œ`server` çš„å�‚数为 localhostã€‚ä½ éœ€è¦�å°† `server` é…�置为负载å�‡è¡¡å™¨çš„ DNS,并指定端å�£ 6443(通过端å�£ 6443 访问 Kubernetes API Server,通过端å�£ 80 å’Œ 443 访问 Rancher Server)。以下是一个 `rke2.yaml` 示例:
+
+```
+apiVersion: v1
+clusters:
+- cluster:
+ certificate-authority-data: [CERTIFICATE-DATA]
+ server: [LOAD-BALANCER-DNS]:6443 # 编辑æ¤è¡Œ
+ name: default
+contexts:
+- context:
+ cluster: default
+ user: default
+ name: default
+current-context: default
+kind: Config
+preferences: {}
+users:
+- name: default
+ user:
+ password: [PASSWORD]
+ username: admin
+```
+
+**结果**ï¼šä½ å�¯ä»¥å¼€å§‹ä½¿ç”¨ `kubectl` æ�¥ç®¡ç�†ä½ çš„ RKE2 é›†ç¾¤ã€‚å¦‚æžœä½ æœ‰å¤šä¸ª `kubeconfig` 文件,在使用 `kubectl` æ—¶ï¼Œä½ å�¯ä»¥ä¼ 入文件路径æ�¥æŒ‡å®šè¦�使用的 `kubeconfig` 文件:
+
+```
+kubectl --kubeconfig ~/.kube/config/rke2.yaml get pods --all-namespaces
+```
+
+有关 `kubeconfig` 文件的详情,请å�‚è§� [RKE2 官方文档](https://docs.rke2.io/cluster_access)或 [ Kubernetes 官方文档](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/)ä¸å…³äºŽä½¿ç”¨ `kubeconfig` 文件管ç�†é›†ç¾¤è®¿é—®çš„部分。
+
+### �级注�事项
+
+ä½ å�¯ä»¥é€šè¿‡ä»¥ä¸‹æ–¹å¼�完æˆ�离线环境的å�‡çº§ï¼š
+
+1. 从 [Releases](https://github.com/rancher/rke2/releases) 页�下载新的离线工件,并安装�级 RKE2 版本的脚本。
+2. 使用相�的环境���次�行脚本。
+3. �� RKE2 �务。
+
+
+
+我们将使用 Rancher Kubernetes Engine (RKE) 创建一个 Kubernetes 集群。在å�¯åЍ Kubernetes 集群之å‰�ï¼Œä½ éœ€è¦�安装 RKE 并创建 RKE é…�置文件。
+
+### 1. 安装 RKE
+
+�照 [RKE 官方文档](https://rancher.com/docs/rke/latest/en/installation/)的说明安装 RKE。
+
+:::note
+
+ä½ å�¯ä»¥åœ¨ [Rancher 支æŒ�矩阵](https://www.suse.com/suse-rancher/support-matrix/all-supported-versions/)䏿‰¾åˆ°åŸºäºŽ Rancher 版本的 RKE 认è¯�版本。
+
+:::
+
+### 2. 创建 RKE �置文件
+
+在å�¯è®¿é—®ä½ Linux 主机节点上的 22/TCP 端å�£å’Œ 6443/TCP 端å�£çš„系统上,使用以下示例创建一个å��为 `rancher-cluster.yml` 的新文件。
+
+该文件是 RKE é…�置文件,用于é…�ç½®ä½ è¦�部署 Rancher 的集群。
+
+å�‚考下方的 _RKE 选项_ è¡¨æ ¼ï¼Œä¿®æ”¹ä»£ç �示例ä¸çš„å�‚æ•°ã€‚ä½¿ç”¨ä½ åˆ›å»ºçš„ä¸‰ä¸ªèŠ‚ç‚¹çš„ IP 地å�€æˆ– DNS å��称。
+
+:::tip
+
+如需获��用选项的详情,请�� RKE [�置选项](https://rancher.com/docs/rke/latest/en/config-options/)。
+
+:::
+
+RKE 选项
+
+| 选项 | 必填 | �述 |
+| ------------------ | -------------------- | --------------------------------------------------------------------------------------- |
+| `address` | ✓ | 离线环境ä¸èŠ‚ç‚¹çš„ DNS 或 IP 地å�€ |
+| `user` | ✓ | ��行 Docker 命令的用户 |
+| `role` | ✓ | 分�给节点的 Kubernetes 角色列表 |
+| `internal_address` | �选1 | 用于集群内部��的 DNS 或 IP 地� |
+| `ssh_key_path` | | 用�验�节点的 SSH �钥文件路径(默认值为 `~/.ssh/id_rsa`) |
+
+> 1 å¦‚æžœä½ æƒ³ä½¿ç”¨å¼•ç”¨å®‰å…¨ç»„æˆ–é˜²ç�«å¢™ï¼ŒæŸ�些æœ�务(如 AWS EC2)è¦�求设置 `internal_address`。
+
+```yaml
+nodes:
+ - address: 10.10.3.187 # 离线环境节点 IP
+ internal_address: 172.31.7.22 # 节点内网 IP
+ user: rancher
+ role: ['controlplane', 'etcd', 'worker']
+ ssh_key_path: /home/user/.ssh/id_rsa
+ - address: 10.10.3.254 # 离线环境节点 IP
+ internal_address: 172.31.13.132 # 节点内网 IP
+ user: rancher
+ role: ['controlplane', 'etcd', 'worker']
+ ssh_key_path: /home/user/.ssh/id_rsa
+ - address: 10.10.3.89 # 离线环境节点 IP
+ internal_address: 172.31.3.216 # 节点内网 IP
+ user: rancher
+ role: ['controlplane', 'etcd', 'worker']
+ ssh_key_path: /home/user/.ssh/id_rsa
+
+private_registries:
+ - url: # �有镜�仓库 URL
+ user: rancher
+ password: '*********'
+ is_default: true
+```
+
+### 3. �行 RKE
+
+é…�ç½® `rancher-cluster.yml`å�Žï¼Œå�¯åŠ¨ä½ çš„ Kubernetes 集群:
+
+```
+rke up --config ./rancher-cluster.yml
+```
+
+### 4. ä¿�å˜ä½ 的文件
+
+:::note ���示:
+
+维护�排除问题和�级集群需�用到以下文件,请妥善�管这些文件:
+
+:::
+
+将以下文件的副本ä¿�å˜åœ¨å®‰å…¨ä½�置:
+
+- `rancher-cluster.yml`:RKE 集群�置文件。
+- `kube_config_cluster.yml`:集群的 [Kubeconfig 文件](https://rancher.com/docs/rke/latest/en/kubeconfig/)。该文件包å�«å�¯å®Œå…¨è®¿é—®é›†ç¾¤çš„å‡è¯�。
+- `rancher-cluster.rkestate`:[Kubernetes 集群状�文件](https://rancher.com/docs/rke/latest/en/installation/#kubernetes-cluster-state)。该文件包�集群的当�状�,包括 RKE �置以��书 。 _Kubernetes 集群状�文件仅在使用 RKE 0.2.0 或更高版本时创建。_
+
+
+
+
+:::note
+
+å�Žä¸¤ä¸ªæ–‡ä»¶å��ä¸çš„ `rancher-cluster` 部分å�–å†³äºŽä½ å‘½å�� RKE 集群é…�置文件的方å¼�。
+
+:::
+
+### 故障排除
+
+��[故障排除](../../install-upgrade-on-a-kubernetes-cluster/troubleshooting.md)页�。
+
+### å�Žç»æ“�作
+[安装 Rancher](install-rancher-ha.md)
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/other-installation-methods/air-gapped-helm-cli-install/install-rancher-ha.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/other-installation-methods/air-gapped-helm-cli-install/install-rancher-ha.md
new file mode 100644
index 00000000000..0aa220051f7
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/other-installation-methods/air-gapped-helm-cli-install/install-rancher-ha.md
@@ -0,0 +1,246 @@
+---
+title: 4. 安装 Rancher
+---
+
+本文介�如何在高�用 Kubernetes 安装的离线环境部署 Rancher。离线环境�以是 Rancher Server 离线安装�防�墙��或代���。
+
+### Rancher 特�访问
+
+当 Rancher Server 部署在 Docker 容噍䏿—¶ï¼Œå®¹å™¨å†…会安装一个本地 Kubernetes 集群供 Rancher 使用。为 Rancher 的很多功能都是以 deployment 的方å¼�è¿�行的,而在容器内è¿�行容器是需è¦�特æ�ƒæ¨¡å¼�çš„ï¼Œå› æ¤ä½ 需è¦�在安装 Rancher æ—¶æ·»åŠ `--privileged` 选项。
+
+## Docker 说明
+
+å¦‚æžœä½ æƒ³ä½¿ç”¨ Docker 命令进行离线安装,请跳过本页的剩余部分,并按照[æ¤é¡µ](docker-install-commands.md)进行æ“�作。
+
+## Kubernetes 说明
+
+我们建议在 Kubernetes 集群上安装 Rancher。高å�¯ç”¨çš„ Kubernetes 安装的情况下,一个 Kubernetes 集群包å�«ä¸‰ä¸ªè¿�行 Rancher Server 组件的节点。æŒ�久层(etcd)也在这三个节点上进行å¤�制,以便在其ä¸ä¸€ä¸ªèŠ‚ç‚¹å�‘生故障时æ��供冗余和数æ�®å¤�制。
+
+### 1. æ·»åŠ Helm Chart 仓库
+
+从å�¯ä»¥è®¿é—®äº’è�”网的系统ä¸ï¼ŒèŽ·å�–最新的 Helm Chart,然å�Žå°† manifest å¤�制到å�¯è®¿é—® Rancher Server 集群的系统ä¸ã€‚
+
+1. å¦‚æžœä½ è¿˜æ²¡æœ‰å®‰è£… `helm`,请在å�¯è®¿é—®äº’è�”网的工作站上进行本地安装。注æ„�:å�‚考 [Helm 版本è¦�求](../../resources/helm-version-requirements.md)选择 Helm 版本æ�¥å®‰è£… Rancher。
+
+2. 执行 `helm repo add` å‘½ä»¤ï¼Œä»¥æ·»åŠ åŒ…å�«å®‰è£… Rancher çš„ Chart çš„ Helm Chart 仓库。有关如何选择仓库,以å�Šå“ªä¸ªä»“库最适å�ˆä½ 的用例,请å�‚è§�[选择 Rancher 版本](../../resources/choose-a-rancher-version.md)。
+ - Latest:建议用于试用最新功能
+ ```
+ helm repo add rancher-latest https://releases.rancher.com/server-charts/latest
+ ```
+ - Stable:建议用于生产环境
+ ```
+ helm repo add rancher-stable https://releases.rancher.com/server-charts/stable
+ ```
+ - Alpha:�将�布的实验性预览。
+ ```
+ helm repo add rancher-alpha https://releases.rancher.com/server-charts/alpha
+ ```
+ 注�:�支��级到 Alpha 版�从 Alpha 版�级或在 Alpha 版之间�级。
+
+3. 获å�–最新的 Rancher Chartã€‚æ¤æ“�作将获å�– Chart 并将其作为 `.tgz` 文件ä¿�å˜åœ¨å½“å‰�目录ä¸ã€‚
+ ```plain
+ helm fetch rancher-/rancher
+ ```
+
+ 如需下载特定的 Rancher ç‰ˆæœ¬ï¼Œä½ å�¯ä»¥ç”¨ Helm `--version` å�‚数指定版本,如下:
+ ```plain
+ helm fetch rancher-stable/rancher --version=v2.4.8
+ ```
+
+### 2. 选择 SSL �置
+
+Rancher Server 默认设计为安全的,并且需� SSL/TLS �置。
+
+å¦‚æžœä½ åœ¨ç¦»çº¿çš„ Kubernetes 集群ä¸å®‰è£… Rancher,我们建议使用以下两ç§�è¯�书生æˆ�æ–¹å¼�。
+
+:::note
+
+å¦‚æžœä½ æƒ³åœ¨å¤–éƒ¨ç»ˆæ¢ SSL/TLS,请å�‚è§�[外部负载å�‡è¡¡å™¨çš„ TLS 终æ¢](../../installation-references/helm-chart-options.md#外部-tls-终æ¢)。
+
+:::
+
+| �置 | Chart 选项 | �述 | 是�需� cert-manager |
+| ------------------------------------------ | ---------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------- |
+| Rancher 生æˆ�的自ç¾å��è¯�书 | `ingress.tls.source=rancher` | 使用 Rancher 生æˆ�çš„ CA ç¾å�‘的自ç¾å��è¯�书。æ¤é¡¹æ˜¯**默认选项**。在渲染 Helm 模æ�¿çš„æ—¶å€™ä¸�需è¦�ä¼ é€’æ¤é¡¹ã€‚ | 是 |
+| ä½ å·²æœ‰çš„è¯�书 | `ingress.tls.source=secret` | 通过创建 Kubernetes å¯†æ–‡ä½¿ç”¨ä½ è‡ªå·±çš„è¯�书文件。 在渲染 Rancher Helm 模æ�¿æ—¶å¿…é¡»ä¼ é€’æ¤é€‰é¡¹ã€‚ | å�¦ |
+
+### 离线安装的 Helm Chart 选项
+
+在é…�ç½® Rancher Helm 模æ�¿æ—¶ï¼ŒHelm Chart 䏿œ‰å‡ 个专为离线安装设计的选项,如下表:
+
+| Chart 选项 | Chart 值 | �述 |
+| ----------------------- | -------------------------------- | ---- |
+| `certmanager.version` | `` | æ ¹æ�®è¿�行的 cert-manager 版本é…�置适当的 Rancher TLS é¢�å�‘者。 |
+| `systemDefaultRegistry` | `` | å°† Rancher Server é…�ç½®æˆ�在é…�置集群时,始终从ç§�有镜åƒ�ä»“åº“ä¸æ‹‰å�–镜åƒ�。 |
+| `useBundledSystemChart` | `true` | é…�ç½® Rancher Server 使用打包的 Helm System Chart 副本。[system charts](https://github.com/rancher/system-charts) 仓库包å�«æ‰€æœ‰ Monitoring,Logging,告è¦å’Œå…¨å±€ DNS ç‰åŠŸèƒ½æ‰€éœ€çš„åº”ç”¨å•†åº—é¡¹ç›®ã€‚è¿™äº› [Helm Chart](https://github.com/rancher/system-charts) ä½�于 GitHub ä¸ã€‚ä½†æ˜¯ç”±äºŽä½ å¤„åœ¨ç¦»çº¿çŽ¯å¢ƒï¼Œå› æ¤ä½¿ç”¨ Rancher 内置的 Chart 会比设置 Git mirror 容易得多。 |
+
+### 3. 获� Cert-Manager Chart
+
+æ ¹æ�®ä½ 在[2:选择 SSL é…�ç½®](#2-选择-ssl-é…�ç½®)ä¸çš„选择,完æˆ�以下æ¥éª¤ä¹‹ä¸€ï¼š
+
+#### 选项 A:使用 Rancher 默认的自ç¾å��è¯�书
+
+默认情况下,Rancher 会生�一个 CA 并使用 cert-manager ���书以访问 Rancher Server 界�。
+
+:::note
+
+由于 cert-manager çš„æœ€æ–°æ”¹åŠ¨ï¼Œä½ éœ€è¦�å�‡çº§ cert-manager ç‰ˆæœ¬ã€‚å¦‚æžœä½ éœ€è¦�å�‡çº§ Rancher 并使用低于 0.11.0 çš„ cert-manager 版本,请å�‚è§� [cert-manager å�‡çº§æ–‡æ¡£](../../resources/upgrade-cert-manager.md)。
+
+:::
+
+##### 1. æ·»åŠ cert-manager 仓库
+
+在å�¯ä»¥è¿žæŽ¥äº’è�”网的系统ä¸ï¼Œå°† cert-manager ä»“åº“æ·»åŠ åˆ° Helm:
+
+```plain
+helm repo add jetstack https://charts.jetstack.io
+helm repo update
+```
+
+##### 2. 获� cert-manager Chart
+
+从 [Helm Chart 仓库](https://artifacthub.io/packages/helm/cert-manager/cert-manager)ä¸èŽ·å�–最新å�¯ç”¨çš„ cert-manager Chart:
+
+```plain
+helm fetch jetstack/cert-manager --version v1.11.0
+```
+
+##### 3. 检索 Cert-Manager CRD
+
+为 cert-manager 下载所需的 CRD 文件:
+```plain
+curl -L -o cert-manager-crd.yaml https://github.com/cert-manager/cert-manager/releases/download/v1.11.0/cert-manager.crds.yaml
+```
+
+### 4. 安装 Rancher
+
+将获�的 Chart �制到有�访问 Rancher Server 集群的系统以完�安装。
+
+##### 1. 安装 Cert-Manager
+
+使用è¦�用于安装 Chart 的选项æ�¥å®‰è£… cert-manager。记ä½�è¦�设置 `image.repository` é€‰é¡¹ï¼Œä»¥ä»Žä½ çš„ç§�有镜åƒ�仓库拉å�–镜åƒ�ã€‚æ¤æ“�作会创建一个包å�« Kubernetes manifest 文件的 `cert-manager` 目录。
+
+:::note
+
+�查看自定义 cert-manager 安装的选项(包括集群使用 PodSecurityPolicies 的情况),请�阅 [cert-manager 文档](https://artifacthub.io/packages/helm/cert-manager/cert-manager#configuration)。
+
+:::
+
+
+ �击展开
+
+å¦‚æžœä½ ä½¿ç”¨è‡ªç¾å��è¯�书,安装 cert-manager:
+
+1. 为 cert-manager 创建命�空间:
+
+ ```plain
+ kubectl create namespace cert-manager
+ ```
+
+2. 创建 cert-manager CustomResourceDefinition (CRD)。
+
+ ```plain
+ kubectl apply -f cert-manager/cert-manager-crd.yaml
+ ```
+
+3. 安装 cert-manager。
+
+ ```plain
+ helm install cert-manager ./cert-manager-v1.11.0.tgz \
+ --namespace cert-manager \
+ --set image.repository=/quay.io/jetstack/cert-manager-controller \
+ --set webhook.image.repository=/quay.io/jetstack/cert-manager-webhook \
+ --set cainjector.image.repository=/quay.io/jetstack/cert-manager-cainjector \
+ --set startupapicheck.image.repository=/quay.io/jetstack/cert-manager-ctl
+ ```
+
+
+
+##### 2. 安装 Rancher
+首先,å�‚è§�[æ·»åŠ TLS 密文](../../resources/add-tls-secrets.md)å�‘布è¯�书文件,以便 Rancher å’Œ Ingress Controller å�¯ä»¥ä½¿ç”¨å®ƒä»¬ã€‚
+
+然�,使用 kubectl 为 Rancher 创建命�空间:
+
+```plain
+kubectl create namespace cattle-system
+```
+
+ç„¶å�Žå®‰è£… Rancherï¼Œå¹¶å£°æ˜Žä½ é€‰æ‹©çš„é€‰é¡¹ã€‚å�‚考下表æ�¥æ›¿æ�¢æ¯�个å� ä½�符。Rancher 需è¦�é…�置为使用ç§�有镜åƒ�仓库,以便é…�置所有 Rancher å�¯åŠ¨çš„ Kubernetes 集群或 Rancher 工具。
+
+对于 Kubernetes v1.25 或更高版本,使用 Rancher v2.7.2-v2.7.4 时,将 `global.cattle.psp.enabled` 设置为 `false`。对于 Rancher v2.7.5 å�Šæ›´é«˜ç‰ˆæœ¬æ�¥è¯´ï¼Œè¿™ä¸�æ˜¯å¿…éœ€çš„ï¼Œä½†ä½ ä»�ç„¶å�¯ä»¥æ‰‹åŠ¨è®¾ç½®è¯¥é€‰é¡¹ã€‚
+
+| å� ä½�符 | æ��è¿° |
+------------|-------------
+| `` | 输出压缩包的版本�。 |
+| `` | 指�负载�衡器的 DNS �称。 |
+| `` | ä½ çš„ç§�有镜åƒ�仓库的 DNS å��称。 |
+| `` | 在 K8s 集群上�行的 cert-manager 版本。 |
+
+```plain
+ helm install rancher ./rancher-.tgz \
+ --namespace cattle-system \
+ --set hostname= \
+ --set certmanager.version= \
+ --set rancherImage=/rancher/rancher \
+ --set systemDefaultRegistry= \ # 设置在 Rancher ä¸ä½¿ç”¨çš„默认ç§�有镜åƒ�仓库
+ --set useBundledSystemChart=true # 使用打包的 Rancher System Chart
+```
+
+**�选**:如需安装特定的 Rancher 版本,设置`rancherImageTag` 的值,例如:`--set rancherImageTag=v2.5.8`
+
+#### 选项 B:使用 Kubernetes 密文从文件ä¸èŽ·å�–è¯�书
+
+##### 1. 创建密文
+
+ä½¿ç”¨ä½ è‡ªå·±çš„è¯�书æ�¥åˆ›å»º Kubernetes 密文,以供 Rancher 使用。è¯�书的 common name 需è¦�与以下命令ä¸çš„ `hostname` 选项匹é…�,å�¦åˆ™ Ingress Controller å°†æ— æ³•ä¸º Rancher é…�置站点。
+
+##### 2. 安装 Rancher
+
+安装 Rancherï¼Œå¹¶å£°æ˜Žä½ é€‰æ‹©çš„é€‰é¡¹ã€‚å�‚考下表æ�¥æ›¿æ�¢æ¯�个å� ä½�符。Rancher 需è¦�é…�置为使用ç§�有镜åƒ�仓库,以便é…�置所有 Rancher å�¯åŠ¨çš„ Kubernetes 集群或 Rancher 工具。
+
+对于 Kubernetes v1.25 或更高版本,使用 Rancher v2.7.2-v2.7.4 时,将 `global.cattle.psp.enabled` 设置为 `false`。对于 Rancher v2.7.5 å�Šæ›´é«˜ç‰ˆæœ¬æ�¥è¯´ï¼Œè¿™ä¸�æ˜¯å¿…éœ€çš„ï¼Œä½†ä½ ä»�ç„¶å�¯ä»¥æ‰‹åŠ¨è®¾ç½®è¯¥é€‰é¡¹ã€‚
+
+| å� ä½�符 | æ��è¿° |
+| -------------------------------- | ----------------------------------------------- |
+| `` | 输出压缩包的版本�。 |
+| `` | 指�负载�衡器的 DNS �称。 |
+| `` | ä½ çš„ç§�有镜åƒ�仓库的 DNS å��称。 |
+
+```plain
+ helm install rancher ./rancher-.tgz \
+ --namespace cattle-system \
+ --set hostname= \
+ --set rancherImage=/rancher/rancher \
+ --set ingress.tls.source=secret \
+ --set systemDefaultRegistry= \ # 设置在 Rancher ä¸ä½¿ç”¨çš„默认ç§�有镜åƒ�仓库
+ --set useBundledSystemChart=true # 使用打包的 Rancher System Chart
+```
+
+å¦‚æžœä½ ä½¿ç”¨çš„æ˜¯ç§�有 CA ç¾å��çš„è¯�书,请在 `--set ingress.tls.source=secret` å�ŽåŠ ä¸Š `--set privateCA=true`:
+
+```plain
+ helm install rancher ./rancher-.tgz \
+ --namespace cattle-system \
+ --set hostname= \
+ --set rancherImage=/rancher/rancher \
+ --set ingress.tls.source=secret \
+ --set privateCA=true \
+ --set systemDefaultRegistry= \ # 设置在 Rancher ä¸ä½¿ç”¨çš„默认ç§�有镜åƒ�仓库
+ --set useBundledSystemChart=true # 使用打包的 Rancher System Chart
+```
+
+
+安装已完�。
+:::caution
+
+å¦‚æžœä½ ä¸�想å�‘é€�é�¥æµ‹æ•°æ�®ï¼Œåœ¨é¦–次登录时退出[é�¥æµ‹](../../../../faq/telemetry.md)。如果在离线安装的环境ä¸è®©è¿™ä¸ªåŠŸèƒ½å¤„äºŽ active 状æ€�,socket å�¯èƒ½æ— 法打开。
+
+:::
+
+## 其他资�
+
+以下资��能对安装 Rancher 有帮助:
+
+- [Rancher Helm Chart 选项](../../installation-references/helm-chart-options.md)
+- [æ·»åŠ TLS 密文](../../resources/add-tls-secrets.md)
+- [Rancher Kubernetes 安装的故障排除](../../install-upgrade-on-a-kubernetes-cluster/troubleshooting.md)
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/other-installation-methods/air-gapped-helm-cli-install/publish-images.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/other-installation-methods/air-gapped-helm-cli-install/publish-images.md
new file mode 100644
index 00000000000..c64f7132d1d
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/other-installation-methods/air-gapped-helm-cli-install/publish-images.md
@@ -0,0 +1,305 @@
+---
+title: '2. 收集镜�并�布到�有仓库'
+---
+
+本文介ç»�如何é…�ç½®ç§�有镜åƒ�仓库,以便在安装 Rancher 时,Rancher å�¯ä»¥ä»Žæ¤ç§�有镜åƒ�ä»“åº“ä¸æ‹‰å�–所需的镜åƒ�。
+
+默认情况下,所有用于[é…�ç½® Kubernetes 集群](../../../../pages-for-subheaders/kubernetes-clusters-in-rancher-setup.md)或å�¯åЍ Rancher ä¸çš„工具(如监控,æµ�水线,告è¦ç‰ï¼‰çš„镜åƒ�都是从 Docker Hub 䏿‹‰å�–的。在 Rancher 的离线安装ä¸ï¼Œä½ 需è¦�一个ç§�有仓库,该仓库ä½�äºŽä½ çš„ Rancher Server 䏿Ÿ�个å�¯è®¿é—®çš„ä½�置。然å�Žï¼Œä½ å�¯åŠ è½½è¯¥å˜æœ‰æ‰€æœ‰é•œåƒ�的镜åƒ�仓库。
+
+使用 Docker 安装 Rancher,和把 Rancher 安装到 Kubernetes 集群,其对应的推é€�镜åƒ�到ç§�有镜åƒ�仓库æ¥éª¤æ˜¯ä¸€æ ·çš„。
+
+ä½ ä½¿ç”¨ Rancher é…�置的下游集群是å�¦æœ‰è¿�行 Windows 的节点,决定了本文涉å�Šçš„æ¥éª¤ã€‚æˆ‘ä»¬æ��供的推é€�镜åƒ�到ç§�有镜åƒ�仓库æ¥éª¤ï¼Œæ˜¯åŸºäºŽå�‡è®¾ Rancher ä»…é…�ç½®è¿�行 Linux 节点的下游 Kubernetes é›†ç¾¤çš„ã€‚ä½†æ˜¯ï¼Œå¦‚æžœä½ è®¡åˆ’[在下游 Kubernetes 集群ä¸ä½¿ç”¨ Windows 节点](../../../../pages-for-subheaders/use-windows-clusters.md),我们有å�•独的文档æ�¥ä»‹ç»�如何为需è¦�的镜åƒ�æ��供支æŒ�。
+
+:::note 先决�件:
+
+ä½ å¿…é¡»æœ‰ä¸€ä¸ªå�¯ç”¨çš„[ç§�有镜åƒ�仓库](https://docs.docker.com/registry/deploying/#run-an-externally-accessible-registry)。
+
+如果镜åƒ�仓库有è¯�书,请å�‚è§� [K3s 文档ä¸å¿ƒ](https://rancher.com/docs/k3s/latest/en/installation/private-registry/)äº†è§£æ·»åŠ ç§�有镜åƒ�仓库的详情。è¯�书和镜åƒ�仓库é…�置文件å�‡éœ€è¦�挂载到 Rancher 容器ä¸ã€‚
+
+:::
+
+
+
+
+如果 Rancher Server 用于é…�置仅有 Linux 节点的集群,请按以下æ¥éª¤å°†ä½ 的镜åƒ�推é€�到ç§�有镜åƒ�仓库。
+
+1. [æ‰¾åˆ°ä½ çš„ Rancher 版本所需的资æº�](#1-æ‰¾åˆ°ä½ çš„-rancher-版本所需的资æº�)
+2. [收集 cert-manager 镜åƒ�](#2-收集-cert-manager-镜åƒ�)(除é�žä½ 使用自己的è¯�书,或在负载å�‡è¡¡å™¨ä¸Šç»ˆæ¢ TLS)
+3. [把镜åƒ�ä¿�å˜åˆ°ä½ 的工作站](#3-将镜åƒ�ä¿�å˜åˆ°ä½ 的工作站ä¸)
+4. [推�镜�到�有镜�仓库](#4-推�镜�到�有镜�仓库)
+
+### 先决�件
+
+这些æ¥éª¤è¦�æ±‚ä½ ä½¿ç”¨ä¸€ä¸ª Linux 工作站,该工作站需è¦�å�¯è®¿é—®äº’è�”ç½‘å’Œä½ çš„ç§�有镜åƒ�仓库,且至少有 20GB çš„å�¯ç”¨ç£�盘空间。
+
+å¦‚æžœä½ çš„ä¸»æœºæž¶æž„æ˜¯ ARM64,镜åƒ�仓库必须支æŒ� Manifestã€‚è¿™æ˜¯å› ä¸ºä»Ž 2020 å¹´ 4 月开始, Amazon Elastic Container Registry å·²ç»�ä¸�å†�支æŒ� Manifest。
+
+### 1. æ‰¾åˆ°ä½ çš„ Rancher 版本所需的资æº�
+
+1. 访问 Rancher çš„[å�‘布说明](https://github.com/rancher/rancher/releases)页é�¢ï¼Œæ‰¾åˆ°ä½ 需è¦�安装的 Rancher v2.x.x 版本,然å�Žç‚¹å‡» **Assets**。注æ„�ä¸�è¦�使用带有 `rc` 或 `Pre-release` æ ‡è®°çš„ç‰ˆæœ¬ï¼Œå› ä¸ºè¿™äº›ç‰ˆæœ¬åœ¨ç”Ÿäº§çŽ¯å¢ƒä¸ä¸�够稳定。
+
+2. ä»Žä½ æ‰€éœ€ç‰ˆæœ¬çš„ **Assets** 处下载以下文件,这些文件是在离线环境ä¸å®‰è£… Rancher 所必须的:
+
+| Release 文件 | �述 |
+| ---------------- | -------------- |
+| `rancher-images.txt` | æ¤æ–‡ä»¶åŒ…å�«å®‰è£… Rancherã€�é…�置集群和用户 Rancher 工具所需的镜åƒ�。 |
+| `rancher-save-images.sh` | 该脚本从 Docker Hub 䏿‹‰å�–在文件 `rancher-images.txt` ä¸è®°å½•的所有镜åƒ�,并把这些镜åƒ�ä¿�å˜ä¸º `rancher-images.tar.gz`。 |
+| `rancher-load-images.sh` | 该脚本从 `rancher-images.tar.gz` 文件ä¸åŠ è½½é•œåƒ�,并把镜åƒ�推é€�åˆ°ä½ çš„ç§�有镜åƒ�仓库。 |
+
+### 2. 收集 cert-manager 镜�
+
+:::note
+
+å¦‚æžœä½ ä½¿ç”¨è‡ªå·±çš„è¯�书,或è¦�在外部负载å�‡è¡¡å™¨ä¸Šç»ˆæ¢ TLSï¼Œè¯·è·³è¿‡æ¤æ¥éª¤ã€‚
+
+:::
+
+在 Kubernetes 安装ä¸ï¼Œå¦‚æžœä½ ä½¿ç”¨çš„æ˜¯ Rancher 默认的自ç¾å�� TLS è¯�书,则必须将 [`cert-manager`](https://artifacthub.io/packages/helm/cert-manager/cert-manager) 镜åƒ�æ·»åŠ åˆ° `rancher-images.txt` 文件ä¸ã€‚
+
+1. 获�最新的 `cert-manager` Helm Chart,并解�模�以获�镜�的详情信�:
+
+ :::note
+
+ 由于 cert-manager çš„æœ€æ–°æ”¹åŠ¨ï¼Œä½ éœ€è¦�å�‡çº§ cert-manager ç‰ˆæœ¬ã€‚å¦‚æžœä½ éœ€è¦�å�‡çº§ Rancher 并使用低于 0.12.0 çš„ cert-manager 版本,请å�‚è§�[å�‡çº§æ–‡æ¡£](../../resources/upgrade-cert-manager.md)。
+
+ :::
+
+ ```plain
+ helm repo add jetstack https://charts.jetstack.io
+ helm repo update
+ helm fetch jetstack/cert-manager --version v1.11.0
+ helm template ./cert-manager-.tgz | awk '$1 ~ /image:/ {print $2}' | sed s/\"//g >> ./rancher-images.txt
+ ```
+
+2. 对镜�列表进行排�和唯一化,以去除��的镜��:
+
+ ```plain
+ sort -u rancher-images.txt -o rancher-images.txt
+ ```
+
+### 3. 将镜åƒ�ä¿�å˜åˆ°ä½ 的工作站ä¸
+
+1. 为 `rancher-save-images.sh` æ–‡ä»¶æ·»åŠ å�¯æ‰§è¡Œæ�ƒé™�:
+ ```
+ chmod +x rancher-save-images.sh
+ ```
+
+1. 使用 `rancher-images.txt` 镜�列表执行 `rancher-save-images.sh` 脚本,以创建包�所有所需镜�的压缩包:
+ ```plain
+ ./rancher-save-images.sh --image-list ./rancher-images.txt
+ ```
+ **结果**:Docker 开始拉å�–用于离线安装的镜åƒ�。请è€�心ç‰å¾…。这个过程需è¦�å‡ åˆ†é’Ÿã€‚å®Œæˆ�æ—¶ï¼Œä½ çš„å½“å‰�目录会输出å��为 `rancher-images.tar.gz` 的压缩包。请确认输出文件是å�¦å˜åœ¨ã€‚
+
+### 4. 推�镜�到�有镜�仓库
+
+下一æ¥ï¼Œä½ 将使用脚本将 `rancher-images.tar.gz` ä¸çš„镜åƒ�ç§»åŠ¨åˆ°ä½ çš„ç§�有镜åƒ�ä»“åº“ï¼Œä»¥æ–¹ä¾¿åŠ è½½é•œåƒ�。
+
+使用脚本将 `rancher-images.tar.gz` ä¸çš„镜åƒ�ç§»åŠ¨åˆ°ä½ çš„ç§�有镜åƒ�ä»“åº“ï¼Œä»¥æ–¹ä¾¿åŠ è½½é•œåƒ�。
+
+`rancher-images.txt` 需è¦�ä½�于工作站ä¸è¿�行 `rancher-load-images.sh` 脚本的å�Œä¸€ç›®å½•ä¸ã€‚`rancher-images.tar.gz` 也需è¦�ä½�于å�Œä¸€ç›®å½•ä¸ã€‚
+
+1. ç™»å½•åˆ°ä½ çš„ç§�有镜åƒ�仓库:
+```plain
+docker login
+```
+1. 为 `rancher-load-images.sh` æ·»åŠ å�¯æ‰§è¡Œæ�ƒé™�:
+```
+chmod +x rancher-load-images.sh
+```
+
+1. 使用 `rancher-load-images.sh` 脚本æ�¥æ��å�–ï¼Œæ ‡è®°å’ŒæŽ¨é€� `rancher-images.txt` å�Š `rancher-images.tar.gz` åˆ°ä½ çš„ç§�有镜åƒ�仓库:
+```plain
+./rancher-load-images.sh --image-list ./rancher-images.txt --registry
+```
+
+
+
+
+å¦‚æžœä½ çš„ Rancher Server 将用于é…�ç½® Linux å’Œ Windows é›†ç¾¤ï¼Œä½ éœ€è¦�执行ä¸�å�Œçš„æ¥éª¤ï¼Œæ�¥å°† Windows 镜åƒ�å’Œ Linux 镜åƒ�推é€�åˆ°ä½ çš„ç§�有镜åƒ�仓库。由于 Windows 集群å�Œæ—¶åŒ…å�« Linux å’Œ Windows èŠ‚ç‚¹ï¼Œå› æ¤æŽ¨é€�到ç§�有镜åƒ�仓库的 Linux 镜åƒ�是 Manifest。
+
+## Windows æ¥éª¤
+
+从 Windows Server å·¥ä½œç«™ä¸æ”¶é›†å’ŒæŽ¨é€� Windows 镜åƒ�。
+
+1. æ‰¾åˆ°ä½ çš„ Rancher 版本所需的资æº�
+2. 将镜åƒ�ä¿�å˜åˆ°ä½ çš„ Windows Server 工作站
+3. 准备 Docker daemon
+4. 推�镜�到�有镜�仓库
+
+### 先决�件
+
+以下æ¥éª¤å�‡è®¾ä½ 使用 Windows Server 1809 工作站,该工作站能访问网络å�Šä½ çš„ç§�有镜åƒ�仓库,且至少拥有 50GB çš„ç£�盘空间。
+
+工作站必须安装 Docker 18.02+ 版本以�供 manifest 支�。Manifest 支�是�置 Windows 集群所必须的。
+
+ä½ çš„é•œåƒ�仓库必须支æŒ� Manifestã€‚è¿™æ˜¯å› ä¸ºä»Ž 2020 å¹´ 4 月开始, Amazon Elastic Container Registry å·²ç»�ä¸�å†�支æŒ� Manifest。
+
+
+
+### 1. æ‰¾åˆ°ä½ çš„ Rancher 版本所需的资æº�
+
+1. 访问 Rancher çš„[å�‘布说明](https://github.com/rancher/rancher/releases)页é�¢ï¼Œæ‰¾åˆ°ä½ 需è¦�安装的 Rancher v2.x.x 版本。ä¸�è¦�下载带有 `rc` 或 `Pre-release` æ ‡è®°çš„ç‰ˆæœ¬ï¼Œå› ä¸ºè¿™äº›ç‰ˆæœ¬åœ¨ç”Ÿäº§çŽ¯å¢ƒä¸ä¸�够稳定。
+
+2. ä»Žä½ æ‰€éœ€ç‰ˆæœ¬çš„ **Assets** 处下载以下文件:
+
+| Release 文件 | �述 |
+|----------------------------|------------------|
+| `rancher-windows-images.txt` | æ¤æ–‡ä»¶åŒ…å�«é…�ç½® Windows 集群所需的 Windows 镜åƒ�。 |
+| `rancher-save-images.ps1` | 该脚本从 Docker Hub 䏿‹‰å�–在文件 `rancher-windows-images.txt` ä¸è®°å½•的所有镜åƒ�,并把这些镜åƒ�ä¿�å˜ä¸º `rancher-windows-images.tar.gz`。 |
+| `rancher-load-images.ps1` | 该脚本从 `rancher-windows-images.tar.gz` 文件ä¸åŠ è½½é•œåƒ�,并把镜åƒ�推é€�åˆ°ä½ çš„ç§�有镜åƒ�仓库。 |
+
+
+
+### 2. 将镜åƒ�ä¿�å˜åˆ°ä½ çš„ Windows Server 工作站
+
+1. 在 `powershell` ä¸ï¼Œè¿›å…¥ä¸Šä¸€æ¥ä¸‹è½½çš„æ–‡ä»¶æ‰€åœ¨çš„目录。
+
+1. �行 `rancher-save-images.ps1` 以创建包�所有所需镜�的压缩包:
+ ```plain
+ ./rancher-save-images.ps1
+ ```
+
+ **结果**:Docker 开始拉å�–用于离线安装的镜åƒ�。请è€�心ç‰å¾…。这个过程需è¦�å‡ åˆ†é’Ÿã€‚å®Œæˆ�æ—¶ï¼Œä½ çš„å½“å‰�目录会输出å��为 `rancher-windows-images.tar.gz` 的压缩包。请确认输出文件是å�¦å˜åœ¨ã€‚
+
+
+
+### 3. 准备 Docker daemon
+
+å°†ä½ çš„ç§�有镜åƒ�仓库地å�€å°¾é™„到 Docker daemon (`C:\\ProgramData\\Docker\\config\\daemon.json`) çš„ `allow-nondistributable-artifacts` é…�ç½®å—æ®µä¸ã€‚Windows 镜åƒ�的基础镜åƒ�是由 `mcr.microsoft.com` 镜åƒ�仓库维护的,而 Docker Hub ä¸ç¼ºå°‘ Microsoft 镜åƒ�仓库层,且需è¦�将其拉入ç§�有镜åƒ�ä»“åº“ï¼Œå› æ¤è¿™ä¸€æ¥éª¤æ˜¯å¿…须的。
+
+```json
+{
+ ...
+ "allow-nondistributable-artifacts": [
+ ...
+ ""
+ ]
+ ...
+}
+```
+
+
+
+### 4. 推�镜�到�有镜�仓库
+
+使用脚本将 `rancher-windows-images.tar.gz` ä¸çš„镜åƒ�ç§»åŠ¨åˆ°ä½ çš„ç§�有镜åƒ�ä»“åº“ï¼Œä»¥æ–¹ä¾¿åŠ è½½é•œåƒ�。
+
+`rancher-windows-images.txt` 需è¦�ä½�于工作站ä¸è¿�行 `rancher-load-images.ps1` 脚本的å�Œä¸€ç›®å½•ä¸ã€‚`rancher-windows-images.tar.gz` 也需è¦�ä½�于å�Œä¸€ç›®å½•ä¸ã€‚
+
+1. 使用 `powershell` ç™»å½•åˆ°ä½ çš„ç§�有镜åƒ�仓库:
+ ```plain
+ docker login
+ ```
+
+1. 在 `powershell` ä¸ï¼Œä½¿ç”¨ `rancher-load-images.ps1` 脚本æ�¥æ��å�–ï¼Œæ ‡è®°å’ŒæŽ¨é€� `rancher-images.tar.gz` ä¸çš„镜åƒ�åˆ°ä½ çš„ç§�有镜åƒ�仓库:
+ ```plain
+ ./rancher-load-images.ps1 --registry
+ ```
+
+## Linux æ¥éª¤
+
+Linux 镜åƒ�需è¦�在 Linux 主机上收集和推é€�ï¼Œä½†æ˜¯ä½ å¿…é¡»å…ˆå°† Windows 镜åƒ�推é€�到ç§�有镜åƒ�仓库,然å�Žå†�推é€� Linux 镜åƒ�。由于被推é€�çš„ Linux 镜åƒ�实际上是支æŒ� Windows å’Œ Linux 镜åƒ�çš„ manifestï¼Œå› æ¤æ¶‰å�Šçš„æ¥éª¤ä¸�å�ŒäºŽå�ªåŒ…å�« Linux 节点的集群。
+
+1. æ‰¾åˆ°ä½ çš„ Rancher 版本所需的资æº�
+2. 收集所有需�的镜�
+3. 将镜åƒ�ä¿�å˜åˆ°ä½ çš„ Linux 工作站ä¸
+4. 推�镜�到�有镜�仓库
+
+### 先决�件
+
+在将 Linux 镜åƒ�推é€�到ç§�有镜åƒ�仓库之å‰�ï¼Œä½ å¿…é¡»å…ˆæŠŠ Windows 镜åƒ�推é€�到ç§�有镜åƒ�ä»“åº“ã€‚å¦‚æžœä½ å·²ç»�把 Linux 镜åƒ�推é€�到ç§�有镜åƒ�仓库,则需è¦�å†�次按照说明é‡�新推é€�ï¼Œå› ä¸ºå®ƒä»¬éœ€è¦�å�‘布支æŒ� Windows å’Œ Linux 镜åƒ�çš„ manifest。
+
+这些æ¥éª¤è¦�æ±‚ä½ ä½¿ç”¨ä¸€ä¸ª Linux 工作站,该工作站需è¦�å�¯è®¿é—®äº’è�”ç½‘å’Œä½ çš„ç§�有镜åƒ�仓库,且至少有 20GB çš„å�¯ç”¨ç£�盘空间。
+
+工作站必须安装 Docker 18.02+ 版本以�供 manifest 支�。Manifest 支�是�置 Windows 集群所必须的。
+
+
+
+### 1. æ‰¾åˆ°ä½ çš„ Rancher 版本所需的资æº�
+
+1. 访问 Rancher çš„[å�‘布说明](https://github.com/rancher/rancher/releases)页é�¢ï¼Œæ‰¾åˆ°ä½ 需è¦�安装的 Rancher v2.x.x 版本。ä¸�è¦�下载带有 `rc` 或 `Pre-release` æ ‡è®°çš„ç‰ˆæœ¬ï¼Œå› ä¸ºè¿™äº›ç‰ˆæœ¬åœ¨ç”Ÿäº§çŽ¯å¢ƒä¸ä¸�够稳定。点击 **Assets**。
+
+2. ä»Žä½ æ‰€éœ€ç‰ˆæœ¬çš„ **Assets** 处下载以下文件:
+
+| Release 文件 | �述 |
+|----------------------------| -------------------------- |
+| `rancher-images.txt` | æ¤æ–‡ä»¶åŒ…å�«å®‰è£… Rancherã€�é…�置集群和用户 Rancher 工具所需的镜åƒ�。 |
+| `rancher-windows-images.txt` | æ¤æ–‡ä»¶åŒ…å�«é…�ç½® Windows 集群所需的镜åƒ�。 |
+| `rancher-save-images.sh` | 该脚本从 Docker Hub 䏿‹‰å�–在文件 `rancher-images.txt` ä¸è®°å½•的所有镜åƒ�,并把这些镜åƒ�ä¿�å˜ä¸º `rancher-images.tar.gz`。 |
+| `rancher-load-images.sh` | 该脚本从 `rancher-images.tar.gz` 文件ä¸åŠ è½½é•œåƒ�,并把镜åƒ�推é€�åˆ°ä½ çš„ç§�有镜åƒ�仓库。 |
+
+
+
+### 2. 收集所有需�的镜�
+
+**在 Kubernetes 安装ä¸ï¼Œå¦‚æžœä½ ä½¿ç”¨çš„æ˜¯ Rancher 默认的自ç¾å�� TLS è¯�书**,则必须将 [`cert-manager`](https://artifacthub.io/packages/helm/cert-manager/cert-manager) 镜åƒ�æ·»åŠ åˆ° `rancher-images.txt` 文件ä¸ã€‚å¦‚æžœä½ ä½¿ç”¨è‡ªå·±çš„è¯�书,则å�¯è·³è¿‡æ¤æ¥éª¤ã€‚
+
+
+1. 获�最新的 `cert-manager` Helm Chart,并解�模�以获�镜�的详情信�:
+
+ :::note
+
+ 由于 cert-manager çš„æœ€æ–°æ”¹åŠ¨ï¼Œä½ éœ€è¦�å�‡çº§ cert-manager ç‰ˆæœ¬ã€‚å¦‚æžœä½ éœ€è¦�å�‡çº§ Rancher 并使用低于 0.12.0 çš„ cert-manager 版本,请å�‚è§�[å�‡çº§æ–‡æ¡£](../../resources/upgrade-cert-manager.md)。
+
+ :::
+
+ ```plain
+ helm repo add jetstack https://charts.jetstack.io
+ helm repo update
+ helm fetch jetstack/cert-manager --version v1.11.0
+ helm template ./cert-manager-.tgz | awk '$1 ~ /image:/ {print $2}' | sed s/\"//g >> ./rancher-images.txt
+ ```
+
+2. 对镜�列表进行排�和唯一化,以去除��的镜��:
+ ```plain
+ sort -u rancher-images.txt -o rancher-images.txt
+ ```
+
+
+
+### 3. 将镜åƒ�ä¿�å˜åˆ°ä½ 的工作站ä¸
+
+1. 为 `rancher-save-images.sh` æ–‡ä»¶æ·»åŠ å�¯æ‰§è¡Œæ�ƒé™�:
+ ```
+ chmod +x rancher-save-images.sh
+ ```
+
+1. 使用 `rancher-images.txt` 镜�列表执行 `rancher-save-images.sh` 脚本,以创建包�所有所需镜�的压缩包:
+ ```plain
+ ./rancher-save-images.sh --image-list ./rancher-images.txt
+ ```
+
+**结果**:Docker 开始拉å�–用于离线安装的镜åƒ�。请è€�心ç‰å¾…。这个过程需è¦�å‡ åˆ†é’Ÿã€‚å®Œæˆ�æ—¶ï¼Œä½ çš„å½“å‰�目录会输出å��为 `rancher-images.tar.gz` 的压缩包。请确认输出文件是å�¦å˜åœ¨ã€‚
+
+
+
+### 4. 推�镜�到�有镜�仓库
+
+使用 `rancher-load-images.sh script` 脚本将 `rancher-images.tar.gz` ä¸çš„镜åƒ�ç§»åŠ¨åˆ°ä½ çš„ç§�有镜åƒ�ä»“åº“ï¼Œä»¥æ–¹ä¾¿åŠ è½½é•œåƒ�。
+
+镜åƒ�列表,å�³ `rancher-images.txt` 或 `rancher-windows-images.txt` 需è¦�ä½�于工作站ä¸è¿�行 `rancher-load-images.sh` 脚本的å�Œä¸€ç›®å½•ä¸ã€‚`rancher-images.tar.gz` 也需è¦�ä½�于å�Œä¸€ç›®å½•ä¸ã€‚
+
+1. ç™»å½•åˆ°ä½ çš„ç§�有镜åƒ�仓库:
+ ```plain
+ docker login
+ ```
+
+1. 为 `rancher-load-images.sh` æ·»åŠ å�¯æ‰§è¡Œæ�ƒé™�:
+ ```
+ chmod +x rancher-load-images.sh
+ ```
+
+1. 使用 `rancher-load-images.sh` 脚本æ�¥æ��å�–ï¼Œæ ‡è®°å’ŒæŽ¨é€� `rancher-images.tar.gz` ä¸çš„镜åƒ�åˆ°ä½ çš„ç§�有镜åƒ�仓库:
+
+```plain
+./rancher-load-images.sh --image-list ./rancher-images.txt \
+ --windows-image-list ./rancher-windows-images.txt \
+ --registry
+```
+
+
+
+
+### [Kubernetes 安装的å�Žç»æ¥éª¤ - å�¯åЍ Kubernetes 集群](install-kubernetes.md)
+
+### [Docker 安装的å�Žç»æ¥éª¤ - 安装 Rancher](install-rancher-ha.md)
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/other-installation-methods/rancher-behind-an-http-proxy/install-kubernetes.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/other-installation-methods/rancher-behind-an-http-proxy/install-kubernetes.md
new file mode 100644
index 00000000000..d3628dea33f
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/other-installation-methods/rancher-behind-an-http-proxy/install-kubernetes.md
@@ -0,0 +1,249 @@
+---
+title: '2. 安装 Kubernetes'
+---
+
+基础设施é…�置好å�Žï¼Œä½ å�¯ä»¥è®¾ç½®ä¸€ä¸ª Kubernetes 集群æ�¥å®‰è£… Rancher。
+
+设置 RKEã€�RKE2 或 K3s çš„æ¥éª¤å¦‚下所示。
+
+为方便起è§�,将代ç�†çš„ IP 地å�€å’Œç«¯å�£å¯¼å‡ºåˆ°ä¸€ä¸ªçŽ¯å¢ƒå�˜é‡�ä¸ï¼Œå¹¶åœ¨æ¯�ä¸ªèŠ‚ç‚¹ä¸Šä¸ºä½ å½“å‰�çš„ shell 设置 HTTP_PROXY å�˜é‡�:
+
+```
+export proxy_host="10.0.0.5:8888"
+export HTTP_PROXY=http://${proxy_host}
+export HTTPS_PROXY=http://${proxy_host}
+export NO_PROXY=127.0.0.0/8,10.0.0.0/8,cattle-system.svc,172.16.0.0/12,192.168.0.0/16
+```
+
+
+
+
+首先在 K3s systemd �务上�置 HTTP 代�设置,让 K3s 的 containerd �以通过代�拉�镜�:
+
+```
+cat <<'EOF' | sudo tee /etc/default/k3s > /dev/null
+HTTP_PROXY=http://${proxy_host}
+HTTPS_PROXY=http://${proxy_host}"
+NO_PROXY=127.0.0.0/8,10.0.0.0/8,cattle-system.svc,172.16.0.0/12,192.168.0.0/16,.svc,.cluster.local
+EOF
+```
+
+Rancher 需è¦�安装在支æŒ�çš„ Kubernetes ç‰ˆæœ¬ä¸Šã€‚å¦‚éœ€äº†è§£ä½ ä½¿ç”¨çš„ Rancher 版本支æŒ�哪些 Kubernetes 版本,请å�‚è§� [Rancher 支æŒ�矩阵](https://www.suse.com/suse-rancher/support-matrix/all-supported-versions/)。
+
+如需指定 K3s(Kubernetes)版本,在�行 K3s 安装脚本时使用 `INSTALL_K3S_VERSION` 环境��(例如 `INSTALL_K3S_VERSION="v1.24.10+k3s1"`)。
+
+在第一个节点上,创建一个新集群:
+```
+curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION= K3S_TOKEN= sh -s - server --cluster-init
+```
+
+ç„¶å�ŽåŠ å…¥å…¶ä»–èŠ‚ç‚¹ï¼š
+```
+curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION= K3S_TOKEN= sh -s - server --server https://:6443
+```
+
+å…¶ä¸ `` 是 Server çš„ IP 或有效 DNS,`` 是å�¯ä»¥åœ¨ `/var/lib/rancher/k3s/server/node-token` 䏿‰¾åˆ°çš„ Server node-token。
+
+有关安装 K3s 的更多信�,请�阅 [K3s 安装文档](https://docs.k3s.io/installation)。
+
+如需查看集群,请�行以下命令:
+
+```
+kubectl cluster-info
+kubectl get pods --all-namespaces
+```
+
+
+
+
+在æ¯�个节点上,è¿�行 RKE2 安装脚本。确ä¿�ä½ å®‰è£…çš„ RKE2 版本å�— [Rancher 支æŒ�](https://www.suse.com/suse-rancher/support-matrix/all-supported-versions/)。
+
+```
+curl -sfL https://get.rke2.io | INSTALL_RKE2_CHANNEL=v1.xx sh -
+```
+
+ç„¶å�Žï¼Œä½ 必须在 RKE2 systemd æœ�务上é…�ç½® HTTP 代ç�†è®¾ç½®ï¼Œè®© RKE2 çš„ containerd å�¯ä»¥é€šè¿‡ä»£ç�†æ‹‰å�–镜åƒ�:
+
+```
+cat <<'EOF' | sudo tee /etc/default/rke2-server > /dev/null
+HTTP_PROXY=http://${proxy_host}
+HTTPS_PROXY=http://${proxy_host}"
+NO_PROXY=127.0.0.0/8,10.0.0.0/8,cattle-system.svc,172.16.0.0/12,192.168.0.0/16,.svc,.cluster.local
+EOF
+```
+
+接下�,按照 [RKE2 高�用性文档](https://docs.rke2.io/install/ha)在�个节点上创建 RKE2 �置文件。
+
+之��动并�用 `rke2-server` �务:
+
+```
+systemctl enable rke2-server.service
+systemctl start rke2-server.service
+```
+
+有关安装 RKE2 的更多信�,请�阅 [RKE2 文档](https://docs.rke2.io)。
+
+如需查看集群,请�行以下命令:
+
+```
+export KUBECONFIG=/etc/rancher/rke2/rke2.yaml
+alias kubectl=/var/lib/rancher/rke2/bin/kubectl
+kubectl cluster-info
+kubectl get pods --all-namespaces
+```
+
+
+
+
+é¦–å…ˆï¼Œä½ éœ€è¦�在所有三个 Linux 节点上安装 Docker 并设置 HTTP 代ç�†ã€‚å› æ¤ï¼Œä½ å�¯ä»¥åœ¨è¿™ä¸‰ä¸ªèŠ‚ç‚¹ä¸Šæ‰§è¡Œä»¥ä¸‹æ¥éª¤ã€‚
+
+接下æ�¥é…�ç½® apt 以在安装包时使用这个代ç�†ã€‚å¦‚æžœä½ ä½¿ç”¨çš„ä¸�是 Ubuntu,请相应调整æ¥éª¤ã€‚
+
+```
+cat <<'EOF' | sudo tee /etc/apt/apt.conf.d/proxy.conf > /dev/null
+Acquire::http::Proxy "http://${proxy_host}/";
+Acquire::https::Proxy "http://${proxy_host}/";
+EOF
+```
+
+安装 Docker:
+
+```
+curl -sL https://releases.rancher.com/install-docker/19.03.sh | sh
+```
+
+ç„¶å�Žï¼Œç¡®ä¿�ä½ çš„å½“å‰�用户能够在没有 sudo 的情况下访问 Docker Daemon:
+
+```
+sudo usermod -aG docker YOUR_USERNAME
+```
+
+�置 Docker Daemon 使用代��拉�镜�:
+
+```
+sudo mkdir -p /etc/systemd/system/docker.service.d
+cat <<'EOF' | sudo tee /etc/systemd/system/docker.service.d/http-proxy.conf > /dev/null
+[Service]
+Environment="HTTP_PROXY=http://${proxy_host}"
+Environment="HTTPS_PROXY=http://${proxy_host}"
+Environment="NO_PROXY=127.0.0.0/8,10.0.0.0/8,cattle-system.svc,172.16.0.0/12,192.168.0.0/16"
+EOF
+```
+
+�应用�置,请�新�动 Docker Daemon:
+
+```
+sudo systemctl daemon-reload
+sudo systemctl restart docker
+```
+
+#### 离线代�
+
+ä½ çŽ°åœ¨å�¯ä»¥åœ¨é…�置的离线集群ä¸é…�置主机驱动集群,以使用代ç�†è¿›è¡Œå‡ºç«™è¿žæŽ¥ã€‚
+
+除了为代ç�†æœ�åŠ¡å™¨è®¾ç½®é»˜è®¤è§„åˆ™å¤–ï¼Œä½ è¿˜éœ€è¦�é¢�å¤–æ·»åŠ å¦‚ä¸‹æ‰€ç¤ºçš„è§„åˆ™ï¼Œä»¥ä»Žä»£ç�†çš„ Rancher 环境ä¸é…�置主机驱动集群。
+
+æ ¹æ�®ä½ 的设置é…�置文件路径,例如 `/etc/apt/apt.conf.d/proxy.conf`:
+
+```
+acl SSL_ports port 22
+acl SSL_ports port 2376
+
+acl Safe_ports port 22 # ssh
+acl Safe_ports port 2376 # docker port
+```
+
+### 创建 RKE 集群
+
+在能通过 SSH 访问 Linux èŠ‚ç‚¹çš„ä¸»æœºä¸Šï¼Œä½ éœ€è¦�æœ‰å‡ ä¸ªå‘½ä»¤è¡Œå·¥å…·ï¼Œæ�¥åˆ›å»ºé›†ç¾¤å¹¶ä¸Žä¹‹äº¤äº’:
+
+* [RKE CLI binary](https://rancher.com/docs/rke/latest/en/installation/#download-the-rke-binary)
+
+```
+sudo curl -fsSL -o /usr/local/bin/rke https://github.com/rancher/rke/releases/download/v1.1.4/rke_linux-amd64
+sudo chmod +x /usr/local/bin/rke
+```
+
+* [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/)
+
+```
+curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl"
+chmod +x ./kubectl
+sudo mv ./kubectl /usr/local/bin/kubectl
+```
+
+接下æ�¥ï¼Œåˆ›å»ºä¸€ä¸ªæ��è¿° RKE 集群的 YAML 文件。确ä¿�节点的 IP 地å�€å’Œ SSH 用户å��是æ£ç¡®çš„。有关集群 YAML 的详情,请å�‚è§� [RKE 官方文档](https://rancher.com/docs/rke/latest/en/example-yamls/)。
+
+```yml
+nodes:
+ - address: 10.0.1.200
+ user: ubuntu
+ role: [controlplane,worker,etcd]
+ - address: 10.0.1.201
+ user: ubuntu
+ role: [controlplane,worker,etcd]
+ - address: 10.0.1.202
+ user: ubuntu
+ role: [controlplane,worker,etcd]
+
+services:
+ etcd:
+ backup_config:
+ interval_hours: 12
+ retention: 6
+```
+
+之å�Žï¼Œä½ å�¯ä»¥é€šè¿‡è¿�行以下命令æ�¥åˆ›å»º Kubernetes 集群:
+
+```
+rke up --config rancher-cluster.yaml
+```
+
+RKE 会创建一个å��为 `rancher-cluster.rkestate` 的状æ€�æ–‡ä»¶ã€‚å¦‚æžœä½ éœ€è¦�更新或修改集群é…�置,或使用备份æ�¢å¤�集群,则需è¦�使用该文件。RKE 还会创建一个 `kube_config_cluster.yaml` æ–‡ä»¶ï¼Œä½ å�¯ä»¥ä½¿ç”¨è¯¥æ–‡ä»¶åœ¨æœ¬åœ°ä½¿ç”¨ kubectl 或 Helm ç‰å·¥å…·è¿žæŽ¥åˆ°è¿œç«¯çš„ Kubernetes 集群。请将这些文件ä¿�å˜åœ¨å®‰å…¨çš„ä½�置,例如版本控制系统ä¸ã€‚
+
+如需查看集群,请�行以下命令:
+
+```
+export KUBECONFIG=kube_config_cluster.yaml
+kubectl cluster-info
+kubectl get pods --all-namespaces
+```
+
+ä½ ä¹Ÿå�¯ä»¥éªŒè¯�ä½ çš„å¤–éƒ¨è´Ÿè½½å�‡è¡¡å™¨æ˜¯å�¦å·¥ä½œï¼ŒDNS æ�¡ç›®æ˜¯å�¦è®¾ç½®æ£ç¡®ã€‚å¦‚æžœä½ å�‘å…¶ä¸ä¹‹ä¸€å�‘é€�è¯·æ±‚ï¼Œä½ ä¼šæ”¶åˆ°æ�¥è‡ª Ingress Controller çš„ HTTP 404 å“�应:
+
+```
+$ curl 10.0.1.100
+default backend - 404
+$ curl rancher.example.com
+default backend - 404
+```
+
+### ä¿�å˜ä½ 的文件
+
+:::note ���示:
+
+维护�排除问题和�级集群需�用到以下文件,请妥善�管这些文件:
+
+:::
+
+将以下文件的副本ä¿�å˜åœ¨å®‰å…¨ä½�置:
+
+- `rancher-cluster.yml`:RKE 集群�置文件。
+- `kube_config_cluster.yml`:集群的 [Kubeconfig 文件](https://rancher.com/docs/rke/latest/en/kubeconfig/)。该文件包å�«å�¯å®Œå…¨è®¿é—®é›†ç¾¤çš„å‡è¯�。
+- `rancher-cluster.rkestate`:[Kubernetes 集群状æ€�文件](https://rancher.com/docs/rke/latest/en/installation/#kubernetes-cluster-state)ã€‚æ¤æ–‡ä»¶åŒ…å�«é›†ç¾¤çš„当å‰�状æ€�,包括 RKE é…�置和è¯�书。
+
+:::note
+
+å�Žä¸¤ä¸ªæ–‡ä»¶å��ä¸çš„ `rancher-cluster` 部分å�–å†³äºŽä½ å‘½å�� RKE 集群é…�置文件的方å¼�。
+
+:::
+
+
+
+
+### 故障排除
+
+��[故障排除](../../install-upgrade-on-a-kubernetes-cluster/troubleshooting.md)页�。
+
+### å�Žç»æ“�作
+[安装 Rancher](install-rancher.md)
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/other-installation-methods/rancher-behind-an-http-proxy/install-rancher.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/other-installation-methods/rancher-behind-an-http-proxy/install-rancher.md
new file mode 100644
index 00000000000..da7bd9fb728
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/other-installation-methods/rancher-behind-an-http-proxy/install-rancher.md
@@ -0,0 +1,104 @@
+---
+title: 3. 安装 Rancher
+---
+
+在å‰�文的æ“�作å�Žï¼Œä½ å·²ç»�有了一个è¿�行的 RKE 集群,现在å�¯ä»¥åœ¨å…¶ä¸å®‰è£… Rancher 了。出于安全考虑,所有到 Rancher çš„æµ�é‡�都必须使用 TLS åŠ å¯†ã€‚åœ¨æœ¬æ•™ç¨‹ä¸ï¼Œä½ 将使用 [cert-manager](https://cert-manager.io/)自动é¢�å�‘自ç¾å��è¯�ä¹¦ã€‚åœ¨å®žé™…ä½¿ç”¨æƒ…å†µä¸‹ï¼Œä½ å�¯ä½¿ç”¨ Let's Encrypt 或自己的è¯�书。
+
+### 安装 Helm CLI
+
+在具有 kubeconfig 的主机上安装 [Helm](https://helm.sh/docs/intro/install/) CLI 以访问 Kubernetes 集群:
+
+```
+curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
+chmod +x get_helm.sh
+sudo ./get_helm.sh
+```
+
+### 安装 cert-manager
+
+æ·»åŠ cert-manager Helm 仓库:
+
+```
+helm repo add jetstack https://charts.jetstack.io
+```
+
+为 cert-manager 创建命�空间:
+
+```
+kubectl create namespace cert-manager
+```
+
+安装 cert-manager 的 CustomResourceDefinitions:
+
+```
+kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.11.0/cert-manager.crds.yaml
+```
+
+使用 Helm 安装 cert-manager。请注æ„�,cert-manager 还需è¦�ä½ é…�置代ç�†ï¼Œä»¥é˜²å®ƒéœ€è¦�与 Let's Encrypt 或其他外部è¯�书é¢�å�‘商进行通信:
+
+:::note
+
+�查看自定义 cert-manager 安装的选项(包括集群使用 PodSecurityPolicies 的情况),请�阅 [cert-manager 文档](https://artifacthub.io/packages/helm/cert-manager/cert-manager#configuration)。
+
+:::
+
+```
+helm upgrade --install cert-manager jetstack/cert-manager \
+ --namespace cert-manager --version v1.11.0 \
+ --set http_proxy=http://${proxy_host} \
+ --set https_proxy=http://${proxy_host} \
+ --set no_proxy=127.0.0.0/8\\,10.0.0.0/8\\,cattle-system.svc\\,172.16.0.0/12\\,192.168.0.0/16\\,.svc\\,.cluster.local
+```
+
+ç‰å¾… cert-manager 完æˆ�å�¯åŠ¨ï¼š
+
+```
+kubectl rollout status deployment -n cert-manager cert-manager
+kubectl rollout status deployment -n cert-manager cert-manager-webhook
+```
+
+### 安装 Rancher
+
+接下æ�¥ï¼Œä½ å�¯ä»¥å®‰è£… Rancher äº†ã€‚é¦–å…ˆï¼Œæ·»åŠ Helm 仓库:
+
+```
+helm repo add rancher-latest https://releases.rancher.com/server-charts/latest
+```
+
+创建命�空间:
+
+```
+kubectl create namespace cattle-system
+```
+
+ç„¶å�Žä½¿ç”¨ Helm 安装 Rancher:Rancher 也需è¦�ä½ é…�置代ç�†ï¼Œä»¥ä¾¿å®ƒå�¯ä»¥ä¸Žå¤–部应用商店通信,或检索 Kubernetes 版本更新元数æ�®ï¼š
+
+```
+helm upgrade --install rancher rancher-latest/rancher \
+ --namespace cattle-system \
+ --set hostname=rancher.example.com \
+ --set proxy=http://${proxy_host} \
+ --set noProxy=127.0.0.0/8\\,10.0.0.0/8\\,cattle-system.svc\\,172.16.0.0/12\\,192.168.0.0/16\\,.svc\\,.cluster.local
+```
+
+ç‰å¾…部署完æˆ�:
+
+```
+kubectl rollout status deployment -n cattle-system rancher
+```
+
+çŽ°åœ¨ï¼Œä½ å�¯ä»¥å¯¼èˆªåˆ° `https://rancher.example.com` 并开始使用 Rancher。
+
+:::caution
+
+å¦‚æžœä½ ä¸�想å�‘é€�é�¥æµ‹æ•°æ�®ï¼Œåœ¨é¦–次登录时退出[é�¥æµ‹](../../../../faq/telemetry.md)。如果在离线安装的环境ä¸è®©è¿™ä¸ªåŠŸèƒ½å¤„äºŽ active 状æ€�,socket å�¯èƒ½æ— 法打开。
+
+:::
+
+### 其他资�
+
+以下资��能对安装 Rancher 有帮助:
+
+- [Rancher Helm Chart 选项](../../installation-references/helm-chart-options.md)
+- [æ·»åŠ TLS 密文](../../resources/add-tls-secrets.md)
+- [Rancher Kubernetes 安装的故障排除](../../install-upgrade-on-a-kubernetes-cluster/troubleshooting.md)
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/other-installation-methods/rancher-behind-an-http-proxy/set-up-infrastructure.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/other-installation-methods/rancher-behind-an-http-proxy/set-up-infrastructure.md
new file mode 100644
index 00000000000..58414b8ed1d
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/other-installation-methods/rancher-behind-an-http-proxy/set-up-infrastructure.md
@@ -0,0 +1,64 @@
+---
+title: '1. �置基础设施'
+---
+
+在本节ä¸ï¼Œä½ 将为 Rancher Management Server é…�置底层基础设施,并使其通过 HTTP 代ç�†è®¿é—®äº’è�”网。
+
+如需在高å�¯ç”¨ RKE 集群ä¸å®‰è£… Rancher Management Server,我们建议é…�置以下基础设施:
+
+- **3 个 Linux 节点**:å�¯ä»¥æ˜¯ä½ 的云æ��供商(例如 Amazon EC2,GCE 或 vSphere)ä¸çš„虚拟机。
+- **1 个负载å�‡è¡¡å™¨**:用于将å‰�端æµ�é‡�转å�‘到这三个节点ä¸ã€‚
+- **1 个 DNS 记录**:用于将 URL æ˜ å°„åˆ°è´Ÿè½½å�‡è¡¡å™¨ã€‚æ¤ DNS 记录将æˆ�为 Rancher Server çš„ URL,下游集群需è¦�å�¯ä»¥è®¿é—®åˆ°è¿™ä¸ªåœ°å�€ã€‚
+
+这些节点必须ä½�于å�Œä¸€ä¸ªåŒºåŸŸæˆ–æ•°æ�®ä¸å¿ƒã€‚ä½†æ˜¯ä½ å�¯ä»¥æŠŠè¿™äº›æœ�务器放在ä¸�å�Œçš„å�¯ç”¨åŒºã€‚
+
+### 为什么使用三个节点?
+
+在 RKE 集群ä¸ï¼ŒRancher Server 的数æ�®å˜å‚¨åœ¨ etcd ä¸ã€‚而这个 etcd æ•°æ�®åº“在这三个节点上è¿�行。
+
+为了选举出大多数 etcd 节点认å�¯çš„ etcd 集群 leader,etcd æ•°æ�®åº“需è¦�奇数个节点。如果 etcd æ•°æ�®åº“æ— æ³•é€‰å‡º leader,etcd å�¯èƒ½ä¼šå‡ºçް[脑裂(split brain)](https://www.quora.com/What-is-split-brain-in-distributed-systems)çš„é—®é¢˜ï¼Œæ¤æ—¶ä½ 需è¦�使用备份æ�¢å¤�集群。如果三个 etcd 节点之一å�‘生故障,其余两个节点å�¯ä»¥é€‰æ‹©ä¸€ä¸ª leaderï¼Œå› ä¸ºå®ƒä»¬æ˜¯ etcd 节点总数的大多数部分。
+
+### 1. �置 Linux 节点
+
+这些主机将通过 HTTP 代�连接到互�网。
+
+请确ä¿�ä½ çš„èŠ‚ç‚¹æ»¡è¶³[æ“�作系统,容器è¿�行时,硬件和网络](../../../../pages-for-subheaders/installation-requirements.md)的常规è¦�求。
+
+如需获å�–é…�ç½® Linux 节点的示例,请å�‚è§�[在 Amazon EC2 ä¸é…�置节点](../../../../how-to-guides/new-user-guides/infrastructure-setup/nodes-in-amazon-ec2.md)的教程。
+
+### 2. �置负载�衡器
+
+ä½ è¿˜éœ€è¦�设置一个负载å�‡è¡¡å™¨ï¼Œæ�¥å°†æµ�é‡�é‡�定å�‘到两个节点上的 Rancher 副本。é…�ç½®å�Žï¼Œå½“å�•个节点ä¸�å�¯ç”¨æ—¶ï¼Œç»§ç»ä¿�障与 Rancher Management Server 的通信。
+
+在å�Žç»æ¥éª¤ä¸é…�ç½® Kubernetes 时,RKE 工具会部署一个 NGINX Ingress Controller。该 Controller 将侦å�¬ worker 节点的 80 端å�£å’Œ 443 端å�£ï¼Œä»¥å“�应å�‘é€�给特定主机å��çš„æµ�é‡�。
+
+在安装 Rancher å�Žï¼ˆä¹Ÿæ˜¯åœ¨å�Žç»æ¥éª¤ä¸ï¼‰ï¼ŒRancher 系统将创建一个 Ingress 资æº�。该 Ingress 通知 NGINX Ingress Controller 监å�¬å�‘å¾€ Rancher 主机å��çš„æµ�é‡�。NGINX Ingress Controller 在收到å�‘å¾€ Rancher 主机å��çš„æµ�é‡�时,会将其转å�‘åˆ°é›†ç¾¤ä¸æ£åœ¨è¿�行的 Rancher Server Pod。
+
+åœ¨ä½ çš„å®žçŽ°ä¸ï¼Œä½ å�¯ä»¥è€ƒè™‘是å�¦éœ€è¦�使用 4 层或 7 层的负载å�‡è¡¡å™¨ï¼š
+
+- **4 层负载å�‡è¡¡å™¨**:两ç§�选择ä¸è¾ƒä¸ºç®€å�•的一ç§�,它将 TCP æµ�é‡�转å�‘åˆ°ä½ çš„èŠ‚ç‚¹ä¸ã€‚我们建议使用 4 层负载å�‡è¡¡å™¨ï¼Œå°†æµ�é‡�从 TCP/80 端å�£å’Œ TCP/443 端å�£è½¬å�‘到 Rancher Management 集群节点上。集群上的 Ingress Controller 会将 HTTP æµ�é‡�é‡�定å�‘到 HTTPS,并在 TCP/443 端å�£ä¸Šç»ˆæ¢ SSL/TLS。Ingress Controller 会将æµ�é‡�转å�‘到 Rancher deployment ä¸ Ingress Pod çš„ TCP/80 端å�£ã€‚
+- **7 层负载å�‡è¡¡å™¨**:相对比较å¤�æ�‚,但功能更全é�¢ã€‚例如,与 Rancher 本身进行 TLS 终æ¢ç›¸å��,7 层负载å�‡è¡¡å™¨èƒ½å¤Ÿåœ¨è´Ÿè½½å�‡è¡¡å™¨å¤„处ç�† TLS 终æ¢ã€‚å¦‚æžœä½ éœ€è¦�集ä¸åœ¨åŸºç¡€è®¾æ–½ä¸è¿›è¡Œ TLS 终æ¢ï¼Œ7 层负载å�‡è¡¡å�¯èƒ½ä¼šå¾ˆé€‚å�ˆä½ 。7 层负载å�‡è¡¡è¿˜èƒ½è®©ä½ 的负载å�‡è¡¡å™¨åŸºäºŽ HTTP 属性(例如 cookie ç‰ï¼‰å�šå‡ºå†³ç–,而 4 层负载å�‡è¡¡å™¨åˆ™ä¸�èƒ½ã€‚å¦‚æžœä½ é€‰æ‹©åœ¨ 7 层负载å�‡è¡¡å™¨ä¸Šç»ˆæ¢ SSL/TLS æµ�é‡�,则在安装 Rancher 时(å�Žç»æ¥éª¤ï¼‰éœ€è¦�使用 `--set tls=external` 选项。详情请å�‚è§� [Rancher Helm Chart 选项](../../installation-references/helm-chart-options.md#外部-tls-终æ¢)。
+
+如需获��置 NGINX 负载�衡器的示例,请��[本页](../../../../how-to-guides/new-user-guides/infrastructure-setup/nginx-load-balancer.md)。
+
+如需获�如何�置 Amazon ELB 网络负载�衡器的指�,请��[本页](../../../../how-to-guides/new-user-guides/infrastructure-setup/amazon-elb-load-balancer.md)。
+
+:::note ���示:
+
+安装å�Žï¼Œè¯·å‹¿å°†æ¤è´Ÿè½½å�‡è¡¡ï¼ˆä¾‹å¦‚ `local` 集群 Ingress)用于 Rancher ä»¥å¤–çš„åº”ç”¨ã€‚å¦‚æžœæ¤ Ingress 与其他应用共享,在其他应用的 Ingress é…�ç½®é‡�æ–°åŠ è½½å�Žï¼Œå�¯èƒ½å¯¼è‡´ Rancher 出现 websocket 错误。我们建议把 `local` 集群专用给 Rancher,ä¸�è¦�在集群内部署其他应用。
+
+:::
+
+### 3. �置 DNS 记录
+
+é…�置完负载å�‡è¡¡å™¨å�Žï¼Œä½ 将需è¦�创建 DNS 记录,以将æµ�é‡�å�‘é€�到该负载å�‡è¡¡å™¨ã€‚
+
+æ ¹æ�®ä½ 的环境,DNS 记录å�¯ä»¥æ˜¯æŒ‡å�‘è´Ÿè½½å�‡è¡¡å™¨ IP çš„ A 记录,也å�¯ä»¥æ˜¯æŒ‡å�‘è´Ÿè½½å�‡è¡¡å™¨ä¸»æœºå��çš„ CNAMEã€‚æ— è®ºæ˜¯å“ªç§�情况,请确ä¿�è¯¥è®°å½•æ˜¯ä½ è¦� Rancher 进行å“�应的主机å��。
+
+在安装 Rancher 时(å�Žç»æ¥éª¤ï¼‰ï¼Œä½ 需è¦�指定æ¤ä¸»æœºå��。请知悉,æ¤ä¸»æœºå��æ— æ³•ä¿®æ”¹ã€‚è¯·ç¡®ä¿�ä½ è®¾ç½®çš„ä¸»æœºå��æ˜¯ä½ æƒ³è¦�的。
+
+有关设置 DNS 记录以将域��转�到 Amazon ELB 负载�衡器的指�,请�� [AWS 官方文档](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-to-elb-load-balancer)。
+
+
+### å�Žç»æ“�作
+[�置 Kubernetes 集群](install-kubernetes.md)
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/other-installation-methods/rancher-on-a-single-node-with-docker/certificate-troubleshooting.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/other-installation-methods/rancher-on-a-single-node-with-docker/certificate-troubleshooting.md
new file mode 100644
index 00000000000..6e1ac8ee365
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/other-installation-methods/rancher-on-a-single-node-with-docker/certificate-troubleshooting.md
@@ -0,0 +1,90 @@
+---
+title: �书故障排除
+---
+
+### 如何确定我的è¯�ä¹¦æ ¼å¼�是å�¦ä¸º PEM?
+
+ä½ å�¯ä»¥é€šè¿‡ä»¥ä¸‹ç‰¹å¾�识别 PEM æ ¼å¼�:
+
+- æ–‡ä»¶å¼€å§‹çš„æ ‡å¤´ï¼š
+ ```
+ -----BEGIN CERTIFICATE-----
+ ```
+- 表头å�Žè·Ÿä¸€é•¿ä¸²å—符。
+- 文件结�的页脚:
+ ```
+ -----END CERTIFICATE-----
+ ```
+
+PEM �书示例:
+
+```
+----BEGIN CERTIFICATE-----
+MIIGVDCCBDygAwIBAgIJAMiIrEm29kRLMA0GCSqGSIb3DQEBCwUAMHkxCzAJBgNV
+... more lines
+VWQqljhfacYPgp8KJUJENQ9h5hZ2nSCrI+W00Jcw4QcEdCI8HL5wmg==
+-----END CERTIFICATE-----
+```
+
+PEM �书密钥示例:
+
+```
+-----BEGIN RSA PRIVATE KEY-----
+MIIGVDCCBDygAwIBAgIJAMiIrEm29kRLMA0GCSqGSIb3DQEBCwUAMHkxCzAJBgNV
+... more lines
+VWQqljhfacYPgp8KJUJENQ9h5hZ2nSCrI+W00Jcw4QcEdCI8HL5wmg==
+-----END RSA PRIVATE KEY-----
+```
+
+å¦‚æžœä½ çš„å¯†é’¥ä¸Žä»¥ä¸‹ç¤ºä¾‹ç±»ä¼¼ï¼Œè¯·å�‚è§�[å°† PKCS8 è¯�书密钥转æ�¢ä¸º PKCS1](#å°†-pkcs8-è¯�书密钥转æ�¢ä¸º-pkcs1)。
+
+```
+-----BEGIN PRIVATE KEY-----
+MIIGVDCCBDygAwIBAgIJAMiIrEm29kRLMA0GCSqGSIb3DQEBCwUAMHkxCzAJBgNV
+... more lines
+VWQqljhfacYPgp8KJUJENQ9h5hZ2nSCrI+W00Jcw4QcEdCI8HL5wmg==
+-----END PRIVATE KEY-----
+```
+
+### 将 PKCS8 �书密钥转�为 PKCS1
+
+å¦‚æžœä½ ä½¿ç”¨çš„æ˜¯ PKCS8 è¯�书密钥文件,Rancher 将打å�°ä»¥ä¸‹æ—¥å¿—:
+
+```
+ListenConfigController cli-config [listener] failed with : failed to read private key: asn1: structure error: tags don't match (2 vs {class:0 tag:16 length:13 isCompound:true})
+```
+
+为了能æ£å¸¸å·¥ä½œï¼Œä½ 需è¦�è¿�行以下命令,将密钥从 PKCS8 转æ�¢ä¸º PKCS1:
+
+```
+openssl rsa -in key.pem -out convertedkey.pem
+```
+
+ä½ å�¯ä½¿ç”¨ `convertedkey.pem` 作为 Rancher è¯�书密钥文件。
+
+### æ·»åŠ ä¸é—´è¯�书的顺åº�是什么?
+
+æ·»åŠ è¯�书的顺åº�如下:
+
+```
+-----BEGIN CERTIFICATE-----
+%YOUR_CERTIFICATE%
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+%YOUR_INTERMEDIATE_CERTIFICATE%
+-----END CERTIFICATE-----
+```
+
+### 如何验�我的�书链?
+
+ä½ å�¯ä½¿ç”¨ `openssl` 二进制文件æ�¥éªŒè¯�è¯�书链。如果命令的输出以 `Verify return code: 0 (ok)` 结尾(å�‚è§�ä»¥ä¸‹ç¤ºä¾‹ï¼‰ï¼Œä½ çš„è¯�书链是有效的。`ca.pem` æ–‡ä»¶å¿…é¡»ä¸Žä½ æ·»åŠ åˆ° `rancher/rancher` 容器ä¸çš„æ–‡ä»¶ä¸€è‡´ã€‚
+
+å¦‚æžœä½ ä½¿ç”¨ç”±å�¯ä¿¡çš„ CA ç¾å�‘çš„è¯�书,å�¯çœ�ç•¥ `-CAfile` å�‚数。
+
+命令:
+
+```
+openssl s_client -CAfile ca.pem -connect rancher.yourdomain.com:443
+...
+ Verify return code: 0 (ok)
+```
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/other-installation-methods/rancher-on-a-single-node-with-docker/roll-back-docker-installed-rancher.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/other-installation-methods/rancher-on-a-single-node-with-docker/roll-back-docker-installed-rancher.md
new file mode 100644
index 00000000000..32fbf2f4254
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/other-installation-methods/rancher-on-a-single-node-with-docker/roll-back-docker-installed-rancher.md
@@ -0,0 +1,91 @@
+---
+title: 回滚 Docker 安装的 Rancher
+---
+
+如果 Rancher å�‡çº§æ²¡æœ‰æˆ�功完æˆ�ï¼Œä½ éœ€è¦�å›žæ»šåˆ°ä½ åœ¨ [Docker å�‡çº§](upgrade-docker-installed-rancher.md)之å‰�使用的 Rancher 设置。回滚å�¯ä»¥æ�¢å¤�:
+
+- 先�版本的 Rancher。
+- �级�创建的数�备份。
+
+## åœ¨ä½ å¼€å§‹å‰�
+
+在回滚到先å‰� Rancher 版本的过程ä¸ï¼Œä½ å°†è¾“å…¥ä¸€ç³»åˆ—å‘½ä»¤ã€‚è¯·æŒ‰ç…§ä½ çŽ¯å¢ƒçš„å®žé™…æƒ…å†µæ›¿æ�¢å� ä½�符。å� ä½�符用尖括å�·å’Œå¤§å†™å—æ¯�(如 ``)表示。以下是带有å� ä½�符的命令示例:
+
+```
+docker pull rancher/rancher:
+```
+
+在æ¤å‘½ä»¤ä¸ï¼Œ`` 是å�‡çº§å¤±è´¥ä¹‹å‰�è¿�行的 Rancher 版本,如 `v2.0.5`。
+
+请交å�‰å�‚è€ƒä¸‹æ–¹çš„å›¾ç‰‡å’Œè¡¨æ ¼ï¼Œäº†è§£èŽ·å�–æ¤å� ä½�符数æ�®çš„æ–¹æ³•。在开始以下æ¥éª¤ä¹‹å‰�,请先记下或å¤�制æ¤ä¿¡æ�¯ã€‚
+
+终端 docker ps 命令,显示如何找到 <PRIOR_RANCHER_VERSION> å’Œ <RANCHER_CONTAINER_NAME> 
+
+| å� ä½�符 | 示例 | æ��è¿° |
+| -------------------------- | -------------------------- | ------------------------------------------------------- |
+| `` | `v2.0.5` | �级�使用的 rancher/rancher 镜�。 |
+| `` | `festive_mestorf` | ä½ çš„ Rancher 容器的å��称。 |
+| `` | `v2.0.5` | 备份对应的 Rancher 版本。 |
+| `` | `9-27-18` | 数�容器或备份的创建日期。 |
+
+
+å�¯ä»¥é€šè¿‡è¿œç¨‹è¿žæŽ¥ç™»å½•到 Rancher Server 所在的主机并输入命令 `docker ps` 以查看æ£åœ¨è¿�行的容器,从而获得 `` å’Œ `` ã€‚ä½ è¿˜å�¯ä»¥è¿�行 `docker ps -a` 命令查看å�œæ¢äº†çš„å®¹å™¨ã€‚åœ¨åˆ›å»ºå¤‡ä»½æœŸé—´ï¼Œä½ éš�æ—¶å�¯ä»¥è¿�行这些命令æ�¥èŽ·å¾—å¸®åŠ©ã€‚
+
+## 回滚 Rancher
+
+å¦‚æžœä½ åœ¨å�‡çº§ Rancher æ—¶é�‡åˆ°é—®é¢˜ï¼Œä½ å�¯æ‹‰å�–å…ˆå‰�使用的镜åƒ�å¹¶æ�¢å¤�在å�‡çº§å‰�所å�šçš„备份,从而将 Rancher 回滚到之å‰�çš„æ£å¸¸å·¥ä½œçжæ€�。
+
+:::danger
+
+回滚到先å‰�çš„ Rancher ç‰ˆæœ¬ä¼šç ´å��ä½ åœ¨å�‡çº§å�Žå¯¹ Rancher å�šå‡ºçš„æ‰€æœ‰æ›´æ”¹ã€‚丢失的数æ�®å�¯èƒ½æ— 法æ�¢å¤�。
+
+:::
+
+1. 使用远程终端连接,登录到�行 Rancher Server 的节点。
+
+1. 拉��级��行的 Rancher 版本。把 `` 替�为该版本。
+
+ 例如,如果�级之��行的是 Rancher v2.0.5,请拉� v2.0.5。
+
+ ```
+ docker pull rancher/rancher:
+ ```
+
+1. å�œæ¢å½“å‰�è¿�行 Rancher Server 的容器。将 `` 替æ�¢ä¸ºä½ çš„ Rancher 容器的å��称:
+
+ ```
+ docker stop
+ ```
+ ä½ å�¯è¾“å…¥ `docker ps`获å�– Rancher 容器的å��称。
+
+1. å°†ä½ åœ¨ [Docker å�‡çº§](upgrade-docker-installed-rancher.md)时创建的备份压缩包移动到 Rancher Server。切æ�¢åˆ°ä½ 将其移动到的目录。输入 `dir` 以确认它在该ä½�置。
+
+ å¦‚æžœä½ é�µå¾ªäº†æˆ‘们在 [Docker å�‡çº§](upgrade-docker-installed-rancher.md)䏿ލè��的命å��æ–¹å¼�,它的å��称会与 `rancher-data-backup--.tar.gz` 类似。
+
+1. 替æ�¢å� ä½�符æ�¥è¿�行以下命令,将 `rancher-data` 容器ä¸çš„æ•°æ�®æ›¿æ�¢ä¸ºå¤‡ä»½åŽ‹ç¼©åŒ…ä¸çš„æ•°æ�®ã€‚ä¸�è¦�忘记关é—引å�·ã€‚
+
+ ```
+ docker run --volumes-from rancher-data \
+ -v $PWD:/backup busybox sh -c "rm /var/lib/rancher/* -rf \
+ && tar zxvf /backup/rancher-data-backup--.tar.gz"
+ ```
+
+1. å°† `` å� ä½�符指å�‘æ•°æ�®å®¹å™¨ï¼Œå�¯åŠ¨ä¸€ä¸ªæ–°çš„ Rancher Server 容器。
+ ```
+ docker run -d --volumes-from rancher-data \
+ --restart=unless-stopped \
+ -p 80:80 -p 443:443 \
+ --privileged \
+ rancher/rancher:
+ ```
+ 特�访问是[必须](../../../../pages-for-subheaders/rancher-on-a-single-node-with-docker.md#rancher-特�访问)的。
+
+ :::danger
+
+ å�¯åŠ¨å›žæ»šå�Žï¼Œå�³ä½¿å›žæ»šè€—时比预期长,也 **_ä¸�è¦�_** å�œæ¢å›žæ»šã€‚å¦‚æžœä½ å�œæ¢å›žæ»šï¼Œå�¯èƒ½ä¼šå¯¼è‡´ä¹‹å�Žçš„å�‡çº§ä¸å‡ºçŽ°æ•°æ�®åº“错误。
+
+ :::
+
+1. ç‰å¾…片刻,然å�Žåœ¨æµ�è§ˆå™¨ä¸æ‰“å¼€ Rancher。确认回滚æˆ�åŠŸå¹¶ä¸”ä½ çš„æ•°æ�®å·²æ�¢å¤�。
+
+**结果**:Rancher 回滚到�级�的版本和数�状�。
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/other-installation-methods/rancher-on-a-single-node-with-docker/upgrade-docker-installed-rancher.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/other-installation-methods/rancher-on-a-single-node-with-docker/upgrade-docker-installed-rancher.md
new file mode 100644
index 00000000000..68d23b34c33
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/other-installation-methods/rancher-on-a-single-node-with-docker/upgrade-docker-installed-rancher.md
@@ -0,0 +1,393 @@
+---
+title: �级 Docker 安装的 Rancher
+---
+
+本文介�如何�级通过 Docker 安装的 Rancher Server。
+
+:::caution
+
+**生产环境ä¸�支æŒ� Docker 安装**。这些说明仅适用于测试和开å�‘ã€‚å¦‚æžœä½ å·²ç»�在生产环境ä¸éƒ¨ç½²äº† Docker 安装并且需è¦�å�‡çº§åˆ°æ–°çš„ Rancher ç‰ˆæœ¬ï¼Œæˆ‘ä»¬å»ºè®®ä½ åœ¨å�‡çº§å‰�å…ˆ[è¿�移到 Helm Chart 安装](../../../../how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/migrate-rancher-to-new-cluster.md)。
+
+:::
+
+## 先决�件
+
+- 在 Rancher 文档ä¸**检查[已知å�‡çº§é—®é¢˜](../../install-upgrade-on-a-kubernetes-cluster/upgrades.md#已知å�‡çº§é—®é¢˜)**,了解å�‡çº§ Rancher 时最需è¦�注æ„�çš„é—®é¢˜ã€‚ä½ å�¯ä»¥åœ¨ [GitHub](https://github.com/rancher/rancher/releases) å�‘布说明以å�Š [Rancher 论å�›](https://forums.rancher.com/c/announcements/12)䏿‰¾åˆ°æ¯�个 Rancher 版本的已知问题。ä¸�支æŒ�å�‡çº§æˆ–å�‡çº§åˆ° [rancher-alpha 仓库](../../resources/choose-a-rancher-version.md#helm-chart-仓库)ä¸çš„任何 Chart。
+- **[仅适用于离线安装](../../../../pages-for-subheaders/air-gapped-helm-cli-install.md):为新的 Rancher Server 版本收集和推é€�镜åƒ�**。按照指å�—ä¸ºä½ æƒ³è¦�å�‡çº§çš„ç›®æ ‡ Rancher 版本[推é€�镜åƒ�到ç§�有镜åƒ�仓库](../air-gapped-helm-cli-install/publish-images.md)。
+
+## å� ä½�符
+
+在å�‡çº§è¿‡ç¨‹ä¸ï¼Œä½ å°†è¾“å…¥ä¸€ç³»åˆ—å‘½ä»¤ã€‚è¯·æŒ‰ç…§ä½ çŽ¯å¢ƒçš„å®žé™…æƒ…å†µæ›¿æ�¢å� ä½�符。å� ä½�符用尖括å�·å’Œå¤§å†™å—æ¯�(如 ``)表示。
+
+以下是带有å� ä½�符的命令**示例**:
+
+```
+docker stop
+```
+
+在æ¤å‘½ä»¤ä¸ï¼Œ`` æ˜¯ä½ çš„ Rancher 容器的å��称。
+
+## 获��级命令的数�
+
+è¦�获å�–替æ�¢å� ä½�符的数æ�®ï¼Œè¯·è¿�行:
+
+```
+docker ps
+```
+
+在开始å�‡çº§ä¹‹å‰�记下或å¤�制æ¤ä¿¡æ�¯ã€‚
+
+终端 docker ps 命令,显示如何找到 <RANCHER_CONTAINER_TAG> 和 <RANCHER_CONTAINER_NAME>
+
+
+
+| å� ä½�符 | 示例 | æ��è¿° |
+| -------------------------- | -------------------------- | --------------------------------------------------------- |
+| `` | `v2.1.3` | 首次安装拉�的 rancher/rancher 镜�。 |
+| `` | `festive_mestorf` | ä½ çš„ Rancher 容器的å��称。 |
+| `` | `v2.1.3` | ä½ ä¸ºå…¶åˆ›å»ºå¤‡ä»½çš„ Rancher 版本。 |
+| `` | `2018-12-19` | 数�容器或备份的创建日期。 |
+
+
+å�¯ä»¥é€šè¿‡è¿œç¨‹è¿žæŽ¥ç™»å½•到 Rancher Server 所在的主机并输入命令 `docker ps` 以查看æ£åœ¨è¿�行的容器,从而获得 `` å’Œ ``ã€‚ä½ è¿˜å�¯ä»¥è¿�行 `docker ps -a` 命令查看å�œæ¢äº†çš„å®¹å™¨ã€‚åœ¨åˆ›å»ºå¤‡ä»½æœŸé—´ï¼Œä½ éš�æ—¶å�¯ä»¥è¿�行这些命令æ�¥èŽ·å¾—å¸®åŠ©ã€‚
+
+## �级
+
+在å�‡çº§æœŸé—´ï¼Œä½ å�¯ä»¥ä¸ºå½“å‰� Rancher 容器创建数æ�®çš„副本å�Šå¤‡ä»½ï¼Œä»¥ç¡®ä¿�å�¯ä»¥åœ¨å�‡çº§å‡ºçŽ°é—®é¢˜æ—¶å�¯ä»¥è¿›è¡Œå›žæ»šã€‚ç„¶å�Žï¼Œä½ å�¯ä½¿ç”¨çŽ°æœ‰æ•°æ�®å°†æ–°ç‰ˆæœ¬çš„ Rancher 部署到新容器ä¸ã€‚
+### 1. 创建 Rancher Server 容器的数�副本
+
+1. 使用远程终端连接,登录到�行 Rancher Server 的节点。
+
+1. å�œæ¢æ£åœ¨è¿�行 Rancher Server 的容器。将 `` 替æ�¢ä¸ºä½ çš„ Rancher 容器的å��称:
+
+ ```
+ docker stop
+ ```
+
+1. è¿�行以下命令,从刚æ‰�å�œæ¢çš„ Rancher 容器创建一个数æ�®å®¹å™¨ã€‚请替æ�¢å‘½ä»¤ä¸çš„å� ä½�符:
+
+ ```
+ docker create --volumes-from --name rancher-data rancher/rancher:
+ ```
+
+### 2. 创建备份压缩包
+
+1. ä»Žä½ åˆšåˆšåˆ›å»ºçš„æ•°æ�®å®¹å™¨ï¼ˆrancher-data)ä¸ï¼Œåˆ›å»ºä¸€ä¸ªå¤‡ä»½ tar 包(rancher-data-backup-<RANCHER_VERSION>-<DATE>.tar.gz)。
+
+ 如果å�‡çº§æœŸé—´å‡ºçŽ°é—®é¢˜ï¼Œæ¤åŽ‹ç¼©åŒ…å�¯ä»¥ç”¨ä½œå›žæ»šç‚¹ã€‚替æ�¢å� ä½�符æ�¥è¿�行以下命令。
+ ```
+ docker run --volumes-from rancher-data -v "$PWD:/backup" --rm busybox tar zcvf /backup/rancher-data-backup--.tar.gz /var/lib/rancher
+ ```
+
+ **æ¥éª¤ç»“æžœ**ï¼šä½ è¾“å…¥æ¤å‘½ä»¤æ—¶ï¼Œä¼šè¿�行一系列命令。
+
+1. 输入 `ls` 命令,确认备份压缩包已创建æˆ�功。压缩包的å��ç§°æ ¼å¼�类似 `rancher-data-backup--.tar.gz`。
+
+ ```
+ [rancher@ip-10-0-0-50 ~]$ ls
+ rancher-data-backup-v2.1.3-20181219.tar.gz
+ ```
+
+1. 将备份压缩包移动到 Rancher Server 外的安全�置。
+
+### 3. 拉�新的 Docker 镜�
+
+拉å�–ä½ éœ€è¦�å�‡çº§åˆ°çš„ Rancher 版本镜åƒ�。
+
+| å� ä½�符 | æ��è¿° |
+------------|-------------
+| `` | ä½ æƒ³è¦�å�‡çº§åˆ°çš„ [Rancher 版本](../../installation-references/helm-chart-options.md)çš„ç‰ˆæœ¬æ ‡ç¾ã€‚ |
+
+```
+docker pull rancher/rancher:
+```
+
+### 4. �动新的 Rancher Server 容器
+
+使用 `rancher-data` 容器ä¸çš„æ•°æ�®å�¯åŠ¨ä¸€ä¸ªæ–°çš„ Rancher Server 容器。记ä½�è¦�ä¼ å…¥å�¯åŠ¨åŽŸå§‹å®¹å™¨æ—¶ä½¿ç”¨çš„æ‰€æœ‰çŽ¯å¢ƒå�˜é‡�。
+
+:::danger
+
+å�¯åЍå�‡çº§å�Žï¼Œå�³ä½¿å�‡çº§è€—时比预期长,也 **_ä¸�è¦�_** å�œæ¢å�‡çº§ã€‚å¦‚æžœä½ å�œæ¢å�‡çº§ï¼Œå�¯èƒ½ä¼šå¯¼è‡´ä¹‹å�Žçš„å�‡çº§ä¸å‡ºçŽ°æ•°æ�®åº“è¿�移错误。
+
+:::
+
+å¦‚æžœä½ ä½¿ç”¨ä»£ç�†ï¼Œè¯·å�‚è§� [HTTP 代ç�†é…�ç½®](../../../../reference-guides/single-node-rancher-in-docker/http-proxy-configuration.md)。
+
+å¦‚æžœä½ é…�置了自定义 CA æ ¹è¯�书æ�¥è®¿é—®æœ�务,请å�‚è§�[自定义 CA æ ¹è¯�书](../../../../reference-guides/single-node-rancher-in-docker/advanced-options.md#自定义-ca-è¯�书)。
+
+å¦‚æžœä½ è¦�记录所有 Rancher API 的事务,请å�‚è§� [API 审计](../../../../reference-guides/single-node-rancher-in-docker/advanced-options.md#api-审计日志)。
+
+如需查看å�¯åŠ¨æ–° Rancher Server 容器时使用的命令,从以下的选项ä¸è¿›è¡Œé€‰æ‹©ï¼š
+
+- Docker �级
+- 离线安装的 Docker �级
+
+
+
+
+é€‰æ‹©ä½ å®‰è£… Rancher Server 时用的选项
+
+#### 选项 A:使用 Rancher 默认的自ç¾å��è¯�书
+
+
+ �击展开
+
+å¦‚æžœä½ ä½¿ç”¨ Rancher 生æˆ�的自ç¾å��è¯�书,则将 `--volumes-from rancher-data` æ·»åŠ åˆ°ä½ å�¯åŠ¨åŽŸå§‹ Rancher Server 容器的命令ä¸ã€‚
+
+| å� ä½�符 | æ��è¿° |
+------------|-------------
+| `` | ä½ æƒ³è¦�å�‡çº§åˆ°çš„ [Rancher 版本](../../installation-references/helm-chart-options.md)çš„ç‰ˆæœ¬æ ‡ç¾ã€‚ |
+
+```
+docker run -d --volumes-from rancher-data \
+ --restart=unless-stopped \
+ -p 80:80 -p 443:443 \
+ --privileged \
+ rancher/rancher:
+```
+
+特�访问是[必须](../../../../pages-for-subheaders/rancher-on-a-single-node-with-docker.md#rancher-特�访问)的。
+
+
+
+#### 选项 Bï¼šä½¿ç”¨ä½ è‡ªå·±çš„è¯�书 - 自ç¾å��
+
+
+�击展开
+
+å¦‚æžœä½ é€‰æ‹©ä½¿ç”¨è‡ªå·±çš„è‡ªç¾å��è¯�书,则在å�¯åŠ¨åŽŸå§‹ Rancher Server å®¹å™¨çš„å‘½ä»¤ä¸æ·»åŠ `--volumes-from rancher-data`。æ¤å¤–ï¼Œä½ éœ€è¦�èƒ½å¤Ÿè®¿é—®ä½ åŽŸå§‹å®‰è£…æ—¶ä½¿ç”¨çš„è¯�书。
+
+:::note �书�求�示:
+
+è¯�ä¹¦æ–‡ä»¶çš„æ ¼å¼�必须是 PEMã€‚åœ¨ä½ çš„è¯�书文件ä¸ï¼ŒåŒ…括链ä¸çš„æ‰€æœ‰ä¸é—´è¯�ä¹¦ã€‚ä½ éœ€è¦�å¯¹ä½ çš„è¯�书进行排åº�ï¼ŒæŠŠä½ çš„è¯�书放在最å‰�é�¢ï¼Œå�Žé�¢è·Ÿç�€ä¸é—´è¯�书。
+
+:::
+
+| å� ä½�符 | æ��è¿° |
+------------|-------------
+| `` | 包��书文件的目录的路径。 |
+| `` | 完整�书链的路径。 |
+| `` | �书�钥的路径。 |
+| `` | CA �书的路径。 |
+| `` | ä½ æƒ³è¦�å�‡çº§åˆ°çš„ [Rancher 版本](../../installation-references/helm-chart-options.md)çš„ç‰ˆæœ¬æ ‡ç¾ã€‚ |
+
+```
+docker run -d --volumes-from rancher-data \
+ --restart=unless-stopped \
+ -p 80:80 -p 443:443 \
+ -v //:/etc/rancher/ssl/cert.pem \
+ -v //:/etc/rancher/ssl/key.pem \
+ -v //:/etc/rancher/ssl/cacerts.pem \
+ --privileged \
+ rancher/rancher:
+```
+
+特�访问是[必须](../../../../pages-for-subheaders/rancher-on-a-single-node-with-docker.md#rancher-特�访问)的。
+
+
+
+#### 选项 Cï¼šä½¿ç”¨ä½ è‡ªå·±çš„è¯�书 - å�¯ä¿¡ CA ç¾å��çš„è¯�书
+
+
+ �击展开
+
+å¦‚æžœä½ é€‰æ‹©ä½¿ç”¨å�¯ä¿¡ CA ç¾å��çš„è¯�书,则在å�¯åŠ¨åŽŸå§‹ Rancher Server å®¹å™¨çš„å‘½ä»¤ä¸æ·»åŠ `--volumes-from rancher-data`。æ¤å¤–ï¼Œä½ éœ€è¦�èƒ½å¤Ÿè®¿é—®ä½ åŽŸå§‹å®‰è£…æ—¶ä½¿ç”¨çš„è¯�书。注æ„�è¦�使用 `--no-cacerts` 作为容器的å�‚数,以ç¦�用 Rancher 生æˆ�的默认 CA è¯�书。
+
+:::note �书�求�示:
+
+è¯�ä¹¦æ–‡ä»¶çš„æ ¼å¼�必须是 PEMã€‚åœ¨ä½ çš„è¯�书文件ä¸ï¼ŒåŒ…括å�¯ä¿¡ CA æ��供的所有ä¸é—´è¯�ä¹¦ã€‚ä½ éœ€è¦�å¯¹ä½ çš„è¯�书进行排åº�ï¼ŒæŠŠä½ çš„è¯�书放在最å‰�é�¢ï¼Œå�Žé�¢è·Ÿç�€ä¸é—´è¯�书。如需查看示例,请å�‚è§�[è¯�书故障排除](certificate-troubleshooting.md)。
+
+:::
+
+| å� ä½�符 | æ��è¿° |
+------------|-------------
+| `` | 包��书文件的目录的路径。 |
+| `` | 完整�书链的路径。 |
+| `` | �书�钥的路径。 |
+| `` | ä½ æƒ³è¦�å�‡çº§åˆ°çš„ [Rancher 版本](../../installation-references/helm-chart-options.md)çš„ç‰ˆæœ¬æ ‡ç¾ã€‚ |
+
+```
+docker run -d --volumes-from rancher-data \
+ --restart=unless-stopped \
+ -p 80:80 -p 443:443 \
+ -v //:/etc/rancher/ssl/cert.pem \
+ -v //:/etc/rancher/ssl/key.pem \
+ --privileged \
+ rancher/rancher: \
+ --no-cacerts
+```
+
+特�访问是[必须](../../../../pages-for-subheaders/rancher-on-a-single-node-with-docker.md#rancher-特�访问)的。
+
+
+#### 选项 D:Let's Encrypt �书
+
+
+ �击展开
+
+:::caution
+
+Let's Encrypt 对新è¯�书请求有频率é™�åˆ¶ã€‚å› æ¤ï¼Œè¯·é™�制创建或销æ¯�容器的频率。详情请å�‚è§� [Let's Encrypt 官方文档 - 频率é™�制](https://letsencrypt.org/docs/rate-limits/)。
+
+:::
+
+å¦‚æžœä½ é€‰æ‹©ä½¿ç”¨ [Let's Encrypt](https://letsencrypt.org/) è¯�书,则在å�¯åŠ¨åŽŸå§‹ Rancher Server å®¹å™¨çš„å‘½ä»¤ä¸æ·»åŠ `--volumes-from rancher-data`,并且æ��供最åˆ�安装 Rancher 时使用的域å��。
+
+:::note �书�求�示:
+
+- 在 DNS ä¸åˆ›å»ºä¸€æ�¡è®°å½•,将 Linux 主机 IP 地å�€ç»‘定到è¦�用于访问 Rancher 的主机å��(例如,`rancher.mydomain.com`)。
+- 在 Linux 主机上打开 `TCP/80` 端å�£ã€‚Let's Encrypt çš„ HTTP-01 质询å�¯ä»¥æ�¥è‡ªä»»ä½•æº� IP 地å�€ï¼Œå› æ¤ç«¯å�£ `TCP/80` 必须开放开所有 IP 地å�€ã€‚
+
+:::
+
+| å� ä½�符 | æ��è¿° |
+------------|-------------
+| `` | ä½ æƒ³è¦�å�‡çº§åˆ°çš„ [Rancher 版本](../../installation-references/helm-chart-options.md)çš„ç‰ˆæœ¬æ ‡ç¾ã€‚ |
+| `` | ä½ æœ€åˆ�使用的域å�� |
+
+```
+docker run -d --volumes-from rancher-data \
+ --restart=unless-stopped \
+ -p 80:80 -p 443:443 \
+ --privileged \
+ rancher/rancher: \
+ --acme-domain
+```
+
+特�访问是[必须](../../../../pages-for-subheaders/rancher-on-a-single-node-with-docker.md#rancher-特�访问)的。
+
+
+
+
+
+
+出于安全考虑,使用 Rancher 时请使用 SSL(Secure Sockets Layer)。SSL �护所有 Rancher 网络通信(如登录和与集群交互)的安全。
+
+å�¯åŠ¨æ–°çš„ Rancher Server 容器时,从以下的选项ä¸è¿›è¡Œé€‰æ‹©ï¼š
+
+#### 选项 A:使用 Rancher 默认的自ç¾å��è¯�书
+
+
+ �击展开
+
+å¦‚æžœä½ ä½¿ç”¨ Rancher 生æˆ�的自ç¾å��è¯�书,则将 `--volumes-from rancher-data` æ·»åŠ åˆ°ä½ å�¯åŠ¨åŽŸå§‹ Rancher Server 容器的命令ä¸ã€‚
+
+| å� ä½�符 | æ��è¿° |
+------------|-------------
+| `` | �有镜�仓库的 URL 和端�。 |
+| `` | ä½ æƒ³è¦�å�‡çº§åˆ°çš„ [Rancher 版本](../../installation-references/helm-chart-options.md)çš„ç‰ˆæœ¬æ ‡ç¾ã€‚ |
+
+```
+ docker run -d --volumes-from rancher-data \
+ --restart=unless-stopped \
+ -p 80:80 -p 443:443 \
+ -e CATTLE_SYSTEM_DEFAULT_REGISTRY= \ # 设置在 Rancher ä¸ä½¿ç”¨çš„默认ç§�有镜åƒ�仓库
+ -e CATTLE_SYSTEM_CATALOG=bundled \ # 使用打包的 Rancher System Chart
+ --privileged \
+ /rancher/rancher:
+```
+
+特�访问是[必须](../../../../pages-for-subheaders/rancher-on-a-single-node-with-docker.md#rancher-特�访问)的。
+
+
+#### 选项 Bï¼šä½¿ç”¨ä½ è‡ªå·±çš„è¯�书 - 自ç¾å��
+
+
+ �击展开
+
+å¦‚æžœä½ é€‰æ‹©ä½¿ç”¨è‡ªå·±çš„è‡ªç¾å��è¯�书,则在å�¯åŠ¨åŽŸå§‹ Rancher Server å®¹å™¨çš„å‘½ä»¤ä¸æ·»åŠ `--volumes-from rancher-data`。æ¤å¤–ï¼Œä½ éœ€è¦�èƒ½å¤Ÿè®¿é—®ä½ åŽŸå§‹å®‰è£…æ—¶ä½¿ç”¨çš„è¯�书。
+
+:::note �书�求�示:
+
+è¯�ä¹¦æ–‡ä»¶çš„æ ¼å¼�必须是 PEMã€‚åœ¨ä½ çš„è¯�书文件ä¸ï¼ŒåŒ…括链ä¸çš„æ‰€æœ‰ä¸é—´è¯�ä¹¦ã€‚ä½ éœ€è¦�å¯¹ä½ çš„è¯�书进行排åº�ï¼ŒæŠŠä½ çš„è¯�书放在最å‰�é�¢ï¼Œå�Žé�¢è·Ÿç�€ä¸é—´è¯�书。如需查看示例,请å�‚è§�[è¯�书故障排除](certificate-troubleshooting.md)。
+
+:::
+
+| å� ä½�符 | æ��è¿° |
+------------|-------------
+| `` | 包��书文件的目录的路径。 |
+| `` | 完整�书链的路径。 |
+| `` | �书�钥的路径。 |
+| `` | CA �书的路径。 |
+| `` | �有镜�仓库的 URL 和端�。 |
+| `` | ä½ æƒ³è¦�å�‡çº§åˆ°çš„ [Rancher 版本](../../installation-references/helm-chart-options.md)çš„ç‰ˆæœ¬æ ‡ç¾ã€‚ |
+
+```
+docker run -d --restart=unless-stopped \
+ -p 80:80 -p 443:443 \
+ -v //:/etc/rancher/ssl/cert.pem \
+ -v //:/etc/rancher/ssl/key.pem \
+ -v //:/etc/rancher/ssl/cacerts.pem \
+ -e CATTLE_SYSTEM_DEFAULT_REGISTRY= \ # 设置在 Rancher ä¸ä½¿ç”¨çš„默认ç§�有镜åƒ�仓库
+ -e CATTLE_SYSTEM_CATALOG=bundled \ # 使用打包的 Rancher System Chart
+ --privileged \
+ /rancher/rancher:
+```
+特�访问是[必须](../../../../pages-for-subheaders/rancher-on-a-single-node-with-docker.md#rancher-特�访问)的。
+
+
+#### 选项 Cï¼šä½¿ç”¨ä½ è‡ªå·±çš„è¯�书 - å�¯ä¿¡ CA ç¾å��çš„è¯�书
+
+
+ �击展开
+
+å¦‚æžœä½ é€‰æ‹©ä½¿ç”¨å�¯ä¿¡ CA ç¾å��çš„è¯�书,则在å�¯åŠ¨åŽŸå§‹ Rancher Server å®¹å™¨çš„å‘½ä»¤ä¸æ·»åŠ `--volumes-from rancher-data`。æ¤å¤–ï¼Œä½ éœ€è¦�èƒ½å¤Ÿè®¿é—®ä½ åŽŸå§‹å®‰è£…æ—¶ä½¿ç”¨çš„è¯�书。
+
+:::note �书�求�示:
+
+è¯�ä¹¦æ–‡ä»¶çš„æ ¼å¼�必须是 PEMã€‚åœ¨ä½ çš„è¯�书文件ä¸ï¼ŒåŒ…括å�¯ä¿¡ CA æ��供的所有ä¸é—´è¯�ä¹¦ã€‚ä½ éœ€è¦�å¯¹ä½ çš„è¯�书进行排åº�ï¼ŒæŠŠä½ çš„è¯�书放在最å‰�é�¢ï¼Œå�Žé�¢è·Ÿç�€ä¸é—´è¯�书。如需查看示例,请å�‚è§�[è¯�书故障排除](certificate-troubleshooting.md)。
+
+:::
+
+| å� ä½�符 | æ��è¿° |
+------------|-------------
+| `` | 包��书文件的目录的路径。 |
+| `` | 完整�书链的路径。 |
+| `` | �书�钥的路径。 |
+| `` | �有镜�仓库的 URL 和端�。 |
+| `` | ä½ æƒ³è¦�å�‡çº§åˆ°çš„ [Rancher 版本](../../installation-references/helm-chart-options.md)çš„ç‰ˆæœ¬æ ‡ç¾ã€‚ |
+
+:::note
+
+使用 `--no-cacerts` 作为容器的�数,以�用 Rancher 生�的默认 CA �书。
+
+:::
+
+```
+docker run -d --volumes-from rancher-data \
+ --restart=unless-stopped \
+ -p 80:80 -p 443:443 \
+ --no-cacerts \
+ -v //:/etc/rancher/ssl/cert.pem \
+ -v //:/etc/rancher/ssl/key.pem \
+ -e CATTLE_SYSTEM_DEFAULT_REGISTRY= \ # 设置在 Rancher ä¸ä½¿ç”¨çš„默认ç§�有镜åƒ�仓库
+ -e CATTLE_SYSTEM_CATALOG=bundled \ # 使用打包的 Rancher System Chart
+ --privileged
+ /rancher/rancher:
+```
+特�访问是[必须](../../../../pages-for-subheaders/rancher-on-a-single-node-with-docker.md#rancher-特�访问)的。
+
+
+
+
+
+**结果**ï¼šä½ å·²å�‡çº§ Rancher。已å�‡çº§ Server ä¸çš„æ•°æ�®å°†ä¿�å˜åœ¨ `rancher-data` 容器ä¸ï¼Œç”¨äºŽå°†æ�¥çš„å�‡çº§ã€‚
+
+### 5. 验��级
+
+登录到 Rancher。通过检查�览器左下角的版本�,确认�级是��功。
+
+:::note �级�下游集群出现网络问题?
+
+请��[��集群网络](/versioned_docs/version-2.0-2.4/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/upgrades/namespace-migration.md)。
+
+:::
+
+### 6. 清�旧的 Rancher Server 容器
+
+移除旧的 Rancher Server å®¹å™¨ã€‚å¦‚æžœä½ ä»…å�œæ¢äº†æ—§çš„ Rancher Server 容器,但没有移除它,该容器还å�¯èƒ½åœ¨æœ�务器下次é‡�å�¯å�Žé‡�æ–°å�¯åŠ¨ã€‚
+
+## 回滚
+
+如果å�‡çº§æ²¡æœ‰æˆ�功完æˆ�ï¼Œä½ å�¯ä»¥å°† Rancher Server å�Šå…¶æ•°æ�®å›žæ»šåˆ°ä¸Šæ¬¡çš„å�¥åº·çжæ€�。详情请å�‚è§� [Docker 回滚](roll-back-docker-installed-rancher.md)。
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/resources/add-tls-secrets.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/resources/add-tls-secrets.md
new file mode 100644
index 00000000000..dc58f216be0
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/resources/add-tls-secrets.md
@@ -0,0 +1,45 @@
+---
+title: æ·»åŠ TLS 密文
+---
+
+我们使用è¯�书和密钥将 `cattle-system` 命å��空间ä¸çš„ `tls-rancher-ingress` 密文é…�置好å�Žï¼ŒKubernetes 会为 Rancher 创建对象和æœ�务。
+
+å°†æœ�务器è¯�书和所需的所有ä¸é—´è¯�书å�ˆå¹¶åˆ°å��为 `tls.crt`的文件ä¸ã€‚å°†è¯�书密钥å¤�制到å��为 `tls.key` 的文件ä¸ã€‚
+
+例如,[acme.sh](https://acme.sh) 在 `fullchain.cer` æ–‡ä»¶ä¸æ��ä¾›æœ�务器è¯�书和 CA 链。
+请将 `fullchain.cer` 命�为 `tls.crt`,将�书密钥文件命�为 `tls.key`。
+
+使用 `kubectl` 创建 `tls` 类型的密文。
+
+```
+kubectl -n cattle-system create secret tls tls-rancher-ingress \
+ --cert=tls.crt \
+ --key=tls.key
+```
+
+:::note
+
+如需替æ�¢è¯�ä¹¦ï¼Œä½ å�¯ä»¥è¿�行 `kubectl -n cattle-system delete secret tls-rancher-ingress` æ�¥åˆ 除 `tls-rancher-ingress` 密文,然å�Žè¿�行上方命令æ�¥æ·»åŠ æ–°çš„å¯†æ–‡ã€‚å¦‚æžœä½ ä½¿ç”¨çš„æ˜¯ç§�有 CA ç¾å��è¯�书,仅当新è¯�书与当å‰�è¯�书是由å�Œä¸€ä¸ª CA ç¾å�‘的,æ‰�å�¯ä»¥æ›¿æ�¢ã€‚
+
+:::
+
+## 使用ç§�有 CA ç¾å��è¯�书
+
+å¦‚æžœä½ ä½¿ç”¨çš„æ˜¯ç§�有 CA,Rancher 需è¦�ç§�有 CA çš„æ ¹è¯�书或è¯�书链的副本,Rancher Agent 使用它æ�¥æ ¡éªŒä¸Ž Server 的连接。
+
+创建一个å��为 `cacerts.pem` 的文件,该文件仅包å�«ç§�有 CA çš„æ ¹ CA è¯�书或è¯�书链,并使用 `kubectl` 在 `cattle-system` 命å��空间ä¸åˆ›å»º `tls-ca` Secret。
+
+```
+kubectl -n cattle-system create secret generic tls-ca \
+ --from-file=cacerts.pem=./cacerts.pem
+```
+
+:::note
+
+Rancher å�¯åŠ¨æ—¶ä¼šæ£€ç´¢é…�置的 `tls-ca` 密文。如果 Rancher 在è¿�行ä¸ï¼Œæ›´æ–°çš„ CA 会在新的 Rancher Pod å�¯åЍå�Žç”Ÿæ•ˆã€‚
+
+:::
+
+## 更新�有 CA �书
+
+按照[æ¥éª¤](update-rancher-certificate.md)æ›´æ–° [Rancher 高å�¯ç”¨ Kubernetes 安装](../../../pages-for-subheaders/install-upgrade-on-a-kubernetes-cluster.md)ä¸çš„ Ingress,或从默认自ç¾å��è¯�书切æ�¢åˆ°è‡ªå®šä¹‰è¯�书。
\ No newline at end of file
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/resources/bootstrap-password.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/resources/bootstrap-password.md
new file mode 100644
index 00000000000..249b14115a0
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/resources/bootstrap-password.md
@@ -0,0 +1,27 @@
+---
+title: 引导密ç �
+---
+
+Rancher 首次å�¯åŠ¨æ—¶ï¼Œä¼šä¸ºç¬¬ä¸€ä¸ªç®¡ç�†å‘˜ç”¨æˆ·éš�机生æˆ�一个密ç �。当管ç�†å‘˜é¦–次登录 Rancher 时,用于获å�–引导密ç �(Bootstrap)的命令会在 UI 上显示。管ç�†å‘˜éœ€è¦�è¿�行命令并使用引导密ç �登录。然å�Ž Rancher 会让管ç�†å‘˜é‡�置密ç �。
+
+å¦‚æžœä½ åœ¨å®‰è£…è¿‡ç¨‹ä¸æ²¡æœ‰ä½¿ç”¨å�˜é‡�æ�¥è®¾ç½®å¼•导密ç �,则会éš�机生æˆ�引导密ç �。如需了解使用å�˜é‡�设置引导密ç �的详情,请å�‚è§�下文。
+
+### 在 Helm å®‰è£…ä¸æŒ‡å®šå¼•导密ç �
+
+Helm å®‰è£…çš„æƒ…å†µä¸‹ï¼Œä½ å�¯ä»¥ä½¿ç”¨ `.Values.bootstrapPassword` 在 Helm Chart 值䏿Œ‡å®šå¼•导密ç �å�˜é‡�。
+
+密ç �å°†å˜å‚¨åœ¨ Kubernetes 密文ä¸ã€‚安装 Rancher å�Žï¼Œå¦‚何使用 kubectl 获å�–密ç �的说明将会在 UI 䏿˜¾ç¤ºï¼š
+
+```
+kubectl get secret --namespace cattle-system bootstrap-secret -o go-template='{{ .data.bootstrapPassword|base64decode}}{{ "\n" }}'
+```
+
+### 在 Docker å®‰è£…ä¸æŒ‡å®šå¼•导密ç �
+
+如果 Rancher 是使用 Docker å®‰è£…çš„ï¼Œä½ å�¯ä»¥é€šè¿‡åœ¨ Docker 安装命令ä¸ä¼ 递 `-e CATTLE_BOOTSTRAP_PASSWORD=password` æ�¥æŒ‡å®šå¼•导密ç �。
+
+密ç �å°†å˜å‚¨åœ¨ Docker 容器日志ä¸ã€‚安装 Rancher å�Žï¼Œå¦‚何使用 Docker 容器 ID 获å�–密ç �的说明将会在 UI 䏿˜¾ç¤ºï¼š
+
+```
+docker logs container-id 2>&1 | grep "Bootstrap Password:"
+```
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/resources/choose-a-rancher-version.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/resources/choose-a-rancher-version.md
new file mode 100644
index 00000000000..b168ecdcb05
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/resources/choose-a-rancher-version.md
@@ -0,0 +1,118 @@
+---
+title: 选择 Rancher 版本
+---
+
+本节介�如何选择 Rancher 版本。
+
+在我们推è��用于生产环境的 Rancher 高å�¯ç”¨å®‰è£…ä¸ï¼ŒRancher Server 是通过 Kubernetes 集群上的 **Helm Chart** 安装的。请å�‚è§� [Helm 版本è¦�求](helm-version-requirements.md)选择 Helm 版本æ�¥å®‰è£… Rancher。
+
+å¦‚æžœä½ åœ¨å¼€å�‘和测试ä¸ä½¿ç”¨ Docker æ�¥å®‰è£… Rancherï¼Œä½ éœ€è¦�把 Rancher 作为一个 **Docker 镜åƒ�**æ�¥å®‰è£…。
+
+
+
+
+如果 Rancher Server 是[安装在 Kubernetes 集群上](../../../pages-for-subheaders/install-upgrade-on-a-kubernetes-cluster.md)的,Rancher Server 的安装,å�‡çº§å’Œå›žæ»šä¸ï¼Œéƒ½æ˜¯ä½¿ç”¨ Kubernetes 集群上的 Helm Chart æ�¥å®‰è£… Rancher çš„ã€‚å› æ¤ï¼Œåœ¨å‡†å¤‡å®‰è£…或å�‡çº§ Rancher 高å�¯ç”¨æ—¶ï¼Œå¿…é¡»æ·»åŠ åŒ…å�«ç”¨äºŽå®‰è£… Rancher çš„ Chart çš„ Helm Chart 仓库。
+
+请�� [Helm 版本�求](helm-version-requirements.md)选择 Helm 版本�安装 Rancher。
+
+### Helm Chart 仓库
+
+Rancher æ��ä¾›å‡ ä¸ªå�¯é€‰çš„ Helm Chart ä»“åº“ä¾›ä½ é€‰æ‹©ã€‚æœ€æ–°ç‰ˆæˆ–ç¨³å®šç‰ˆçš„ Helm Chart 仓库与用于 Docker 安装ä¸çš„ Docker æ ‡ç¾å¯¹åº”ã€‚å› æ¤ï¼Œ`rancher-latest` 仓库包å�«æ‰€æœ‰æ ‡è®°ä¸º `rancher/rancher:latest` çš„ Rancher 版本 Chart。当 Rancher 版本å�‡çº§åˆ° `rancher/rancher:stable`ï¼Œå®ƒä¼šè¢«æ·»åŠ åˆ° `rancher-stable` 仓库ä¸ã€‚
+
+| 类型 | æ·»åŠ ä»“åº“çš„å‘½ä»¤ | 仓库æ��è¿° |
+| -------------- | ------------ | ----------------- |
+| rancher-latest | `helm repo add rancher-latest https://releases.rancher.com/server-charts/latest` | æ·»åŠ æœ€æ–°ç‰ˆæœ¬çš„ Rancher çš„ Helm Chart 仓库。建议使用æ¤ä»“库æ�¥æµ‹è¯•新版本的 Rancher。 |
+| rancher-stable | `helm repo add rancher-stable https://releases.rancher.com/server-charts/stable` | æ·»åŠ è¾ƒæ—§çš„ï¼Œç¨³å®šçš„ç‰ˆæœ¬çš„ Rancher çš„ Helm Chart 仓库。建议在生产环境ä¸ä½¿ç”¨æ¤ä»“库。 |
+| rancher-alpha | `helm repo add rancher-alpha https://releases.rancher.com/server-charts/alpha` | æ·»åŠ alpha 版本的 Rancher çš„ Helm Chart 仓库,以预览å�³å°†å�‘布的版本。ä¸�建议在生产环境ä¸ä½¿ç”¨è¿™äº›ç‰ˆæœ¬ã€‚æ— è®ºæ˜¯ä»€ä¹ˆä»“åº“ï¼Œå�‡ä¸�支æŒ� _å�‡çº§_ 或 _å�‡çº§åˆ°_ rancher-alpha 仓库ä¸çš„任何 Chart。 |
+
+了解何时选择这些仓库,请��[切�到�� Helm Chart 仓库](#切�到��-helm-chart-仓库)。
+
+:::note
+
+`rancher-stable` 仓库ä¸çš„æ‰€æœ‰ Chart 都与 `stable` æ ‡è®°çš„ Rancher 版本对应。
+
+:::
+
+### Helm Chart 版本
+
+Rancher Helm Chart 版本与 Rancher 版本(å�³ `appVersion`ï¼‰å¯¹åº”ã€‚æ·»åŠ ä»“åº“å�Žï¼Œä½ å�¯ä»¥è¿�行以下命令æ�œç´¢å�¯ç”¨ç‰ˆæœ¬ï¼š
+ `helm search repo --versions`
+
+å¦‚æžœä½ æœ‰å¤šä¸ªä»“åº“ï¼Œä½ å�¯æŒ‡å®šä»“库å��称,å�³ï¼š`helm search repo rancher-stable/rancher --versions`
+详情请访问 https://helm.sh/docs/helm/helm_search_repo/
+
+�获�所选仓库的指定版本,��如下示例指定 `--version` �数:
+ `helm fetch rancher-stable/rancher --version=2.4.8`
+
+### 切�到�� Helm Chart 仓库
+
+安装 Rancher å�Žï¼Œå¦‚果想修改安装 Rancher çš„ Helm Chart 仓库,按照以下æ¥éª¤æ“�作。
+
+:::note
+
+由于 rancher-alpha 仓库å�ªåŒ…å�« alpha 版本 Chartï¼Œå› æ¤ä¸�支æŒ�从 rancher alpha 仓库切æ�¢åˆ° rancher-stable 或 rancher-latest 仓库以进行å�‡çº§ã€‚
+
+:::
+
+- Latest:建议用于试用最新功能
+ ```
+ helm repo add rancher-latest https://releases.rancher.com/server-charts/latest
+ ```
+- Stable:建议用于生产环境
+ ```
+ helm repo add rancher-stable https://releases.rancher.com/server-charts/stable
+ ```
+- Alpha:�将�布的实验性预览。
+ ```
+ helm repo add rancher-alpha https://releases.rancher.com/server-charts/alpha
+ ```
+ 注�:�支��级到 Alpha 版�从 Alpha 版�级或在 Alpha 版之间�级。
+
+1. 列出当� Helm Chart 仓库。
+
+ ```plain
+ helm repo list
+
+ NAME URL
+ stable https://charts.helm.sh/stable
+ rancher- https://releases.rancher.com/server-charts/
+ ```
+
+2. åˆ é™¤åŒ…å�«å®‰è£… Rancher 时用的 Chart çš„ Helm Chart 仓库。是 `rancher-stable` 或 `rancher-latest` å�–å†³äºŽä½ åˆ�始安装时的选择。
+
+ ```plain
+ helm repo remove rancher-
+ ```
+
+3. æ·»åŠ ä½ è¦�用于安装 Rancher çš„ Helm Chart 仓库。
+
+ ```plain
+ helm repo add rancher- https://releases.rancher.com/server-charts/
+ ```
+
+4. 按照以下æ¥éª¤ï¼Œä»Žæ–°çš„ Helm Chart 仓库[å�‡çº§ Rancher](../install-upgrade-on-a-kubernetes-cluster/upgrades.md)。
+
+
+
+
+在执行 [Docker 安装](../../../pages-for-subheaders/rancher-on-a-single-node-with-docker.md)ã€�å�‡çº§æˆ–å›žæ»šæ—¶ï¼Œä½ å�¯ä»¥ä½¿ç”¨ _tags_ æ�¥å®‰è£…特定版本的 Rancher。
+
+### Server æ ‡ç¾
+
+Rancher Server 以 Docker 镜åƒ�的形å¼�分å�‘å¹¶é™„æœ‰æ ‡ç¾ã€‚ä½ å�¯ä»¥åœ¨è¾“入命令部署 Rancher æ—¶æŒ‡å®šæ ‡ç¾ã€‚请记ä½�ï¼Œå¦‚æžœä½ æŒ‡å®šäº†æ ‡ç¾ï¼Œä½†æ˜¯æ²¡æœ‰æŒ‡å®šç‰ˆæœ¬ï¼ˆå¦‚ `latest` 或 `stable`ï¼‰ï¼Œä½ å¿…é¡»æ˜¾å¼�拉å�–该镜åƒ�æ ‡ç¾çš„æ–°ç‰ˆæœ¬ã€‚å�¦åˆ™ï¼Œå°†ä½¿ç”¨ç¼“å˜åœ¨ä¸»æœºä¸Šçš„镜åƒ�。
+
+| æ ‡ç¾ | æ��è¿° |
+| -------------------------- | ------ |
+| `rancher/rancher:latest` | 最新的开�版本。这些版本通过了我们的 CI 自动化验�。�推�在生产环境使用这些版本。 |
+| `rancher/rancher:stable` | 最新的稳定版本。推è��å°†æ¤æ ‡ç¾ç”¨äºŽç”Ÿäº§çŽ¯å¢ƒã€‚ |
+| `rancher/rancher:` | ä½ å�¯ä»¥ä½¿ç”¨ä»¥å‰�版本ä¸çš„æ ‡ç¾æ�¥æŒ‡å®šè¦�安装的 Rancher 版本。访问 DockerHub 查看å�¯ç”¨çš„版本。 |
+
+:::note
+
+- `master` 和带有 `-rc` 或其他å�Žç¼€çš„æ ‡ç¾æ˜¯ä¾› Rancher 测试团队验è¯�ç”¨çš„ã€‚è¿™äº›æ ‡ç¾ä¸�å�—官方支æŒ�ï¼Œå› æ¤è¯·ä¸�è¦�ä½¿ç”¨è¿™äº›æ ‡ç¾ã€‚
+- 安装 alpha 版本进行预览:使用我们的[公告页é�¢](https://forums.rancher.com/c/announcements)ä¸åˆ—出的 alpha æ ‡ç¾ï¼ˆä¾‹å¦‚,`v2.2.0-alpha1`)进行安装。ä¸�支æŒ�å�‡çº§æˆ–å�‡çº§åˆ° Alpha 版本。
+
+:::
+
+
+
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/resources/custom-ca-root-certificates.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/resources/custom-ca-root-certificates.md
new file mode 100644
index 00000000000..d454197c8a5
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/resources/custom-ca-root-certificates.md
@@ -0,0 +1,24 @@
+---
+title: 自定义 CA æ ¹è¯�书
+---
+
+å¦‚æžœä½ åœ¨å†…éƒ¨ç”Ÿäº§çŽ¯å¢ƒä½¿ç”¨ Rancher,且ä¸�æ‰“ç®—å…¬å¼€æš´éœ²åº”ç”¨ï¼Œä½ å�¯ä»¥ä½¿ç”¨ä½¿ç”¨ç§�有 CA é¢�å�‘çš„è¯�书。
+
+Rancher å�¯èƒ½ä¼šè®¿é—®é…�置了自定义/内部 CA æ ¹è¯�书(也称为自ç¾å��è¯�书)的æœ�务。如果 Rancher æ— æ³•éªŒè¯�æœ�务的è¯�书,则会显示错误信æ�¯ `x509: certificate signed by unknown authority`。
+
+如需验è¯�è¯�ä¹¦ï¼Œä½ éœ€è¦�把 CA æ ¹è¯�ä¹¦æ·»åŠ åˆ° Rancher。由于 Rancher 是用 Go 编写的,我们å�¯ä»¥ä½¿ç”¨çŽ¯å¢ƒå�˜é‡� `SSL_CERT_DIR` 指å�‘å®¹å™¨ä¸ CA æ ¹è¯�书所在的目录。å�¯åЍ Rancher 容器时,å�¯ä»¥ä½¿ç”¨ Docker å�·é€‰é¡¹ï¼ˆ`-v host-source-directory:container-destination-directory`)æ�¥æŒ‚è½½ CA æ ¹è¯�书目录。
+
+Rancher �以访问的�务示例:
+
+- 应用商店
+- 验��供程�
+- 使用 Node Driver 访问托管/云 API
+
+## 使用自定义 CA �书安装
+
+有关�动挂载了�有 CA �书的 Rancher 容器的详情,请��安装文档:
+
+- [Docker 安装的自定义 CA �书选项](../../../reference-guides/single-node-rancher-in-docker/advanced-options.md#自定义-ca-�书)
+
+- [Kubernetes 安装的其他�信 CA 选项](../installation-references/helm-chart-options.md#�外的授信-ca)
+
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/resources/helm-version-requirements.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/resources/helm-version-requirements.md
new file mode 100644
index 00000000000..273711a4de0
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/resources/helm-version-requirements.md
@@ -0,0 +1,12 @@
+---
+title: Helm 版本�求
+---
+
+本文介� Helm 的�求。Helm 是用于把 Rancher 安装在高�用 Kubernetes 集群上的工具。
+
+> 我们已针对 Helm 3 更新了安装指å�—ã€‚å¦‚æžœä½ ä½¿ç”¨ Helm 2 进行安装,请å�‚è§� [Helm 2 è¿�移到 Helm 3 文档](https://helm.sh/blog/migrate-from-helm-v2-to-helm-v3/)。[本文](/versioned_docs/version-2.0-2.4/pages-for-subheaders/helm2.md)æ��供了较早的使用 Helm 2 çš„ Rancher 高å�¯ç”¨å®‰è£…指å�—çš„å‰¯æœ¬ã€‚å¦‚æžœä½ å¦‚æžœæ— æ³•å�‡çº§åˆ° Helm 3,å�¯ä»¥ä½¿ç”¨è¿™ä¸ªè¯´æ˜Žå®‰è£…。
+
+- 如需安装或�级 Rancher 2.5,请使用 Helm 3.2.x 或更高版本。
+- Kubernetes 1.16 �求 Helm 2.16.0 或更高版本。如果使用的是默认 Kubernetes 版本,请��[�行说明](https://github.com/rancher/rke/releases)获�所使用的 RKE 版本。
+- 请ä¸�è¦�使用 Helm 2.15.0ï¼Œå› ä¸ºè¿™ä¸ªç‰ˆæœ¬æœ‰è½¬æ�¢/比较数å—的问题。
+- 请ä¸�è¦�使用 Helm 2.12.0ï¼Œå› ä¸ºè¯¥ç‰ˆæœ¬æœ‰ `cert-manager` 的兼容问题。
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/resources/local-system-charts.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/resources/local-system-charts.md
new file mode 100644
index 00000000000..4048c5b2566
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/resources/local-system-charts.md
@@ -0,0 +1,13 @@
+---
+title: 离线安装ä¸è®¾ç½®æœ¬åœ° System Charts
+---
+
+[Charts](https://github.com/rancher/charts) 仓库包å�« Monitoringã€�Loggingã€�告è¦å’Œ Istio ç‰åŠŸèƒ½æ‰€éœ€çš„æ‰€æœ‰ Helm 目录项。
+
+在 Rancher 的离线安装ä¸ï¼Œä½ 需è¦�é…�ç½® Rancher 以使用 System Charts 的本地副本。本节介ç»�如何通过 CLI æ ‡å¿—ä½¿ç”¨æœ¬åœ° System Charts。
+
+## 使用本地 System Charts
+
+`system-charts` 的一个本地副本已ç»�打包到 `rancher/rancher` 容器ä¸ã€‚为了在离线安装ä¸ä½¿ç”¨è¿™äº›åŠŸèƒ½ï¼Œä½ éœ€è¦�使用é¢�外的环境å�˜é‡� `CATTLE_SYSTEM_CATALOG=bundled` æ�¥è¿�行 Rancher 安装命令,该环境å�˜é‡�告诉 Rancher 使用 Chart 的本地副本,而ä¸�是å°�试从 GitHub 获å�– Chart。
+
+带有 `system-charts` çš„ Rancher 安装命令示例包å�«åœ¨ Docker å’Œ Helm çš„[离线安装说明](../../../pages-for-subheaders/air-gapped-helm-cli-install.md)ä¸ã€‚
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/resources/update-rancher-certificate.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/resources/update-rancher-certificate.md
new file mode 100644
index 00000000000..3d11417cda6
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/resources/update-rancher-certificate.md
@@ -0,0 +1,263 @@
+---
+title: 更新 Rancher �书
+---
+
+## 更新�有 CA �书
+
+按照以下æ¥éª¤è½®æ�¢[安装在 Kubernetes 集群上](../../../pages-for-subheaders/install-upgrade-on-a-kubernetes-cluster.md)ã€�ç”± Rancher 使用的 SSL è¯�书和ç§�有 CA,或转用由ç§�有 CA ç¾å�‘çš„ SSL è¯�书。
+
+æ¥éª¤æ¦‚述:
+
+1. 使用新�书和�钥创建或更新 `tls-rancher-ingress` Kubernetes Secret 对象。
+1. ä½¿ç”¨æ ¹ CA è¯�书创建或更新 `tls-ca` Kubernetes Secret 对象(仅在使用ç§�有 CA 时需è¦�)。
+1. 使用 Helm CLI 更新 Rancher 安装。
+1. �新�置 Rancher Agent 以信任新的 CA �书。
+1. 选择 Fleet 集群的强制更新,�将 fleet-agent 连接到 Rancher。
+
+å�„个æ¥éª¤çš„详细说明如下。
+
+### 1. 创建/更新�书 Secret 对象
+
+首先,将æœ�务器è¯�书和所有ä¸é—´è¯�书å�ˆå¹¶åˆ°å��为 `tls.crt` 的文件,并在å��为 `tls.key` çš„æ–‡ä»¶ä¸æ��供相应的è¯�书密钥。
+
+使用以下命令在 Rancher(本地)管ç�†é›†ç¾¤ä¸åˆ›å»º `tls-rancher-ingress` Secret 对象:
+
+```bash
+kubectl -n cattle-system create secret tls tls-rancher-ingress \
+ --cert=tls.crt \
+ --key=tls.key
+```
+
+或者,更新现有的 `tls-rancher-ingress` Secret:
+
+```bash
+kubectl -n cattle-system create secret tls tls-rancher-ingress \
+ --cert=tls.crt \
+ --key=tls.key \
+ --dry-run --save-config -o yaml | kubectl apply -f -
+```
+
+### 2. 创建/更新�书 CA Secret 对象
+
+如果新è¯�书由ç§�有 CA ç¾å�‘çš„ï¼Œä½ éœ€è¦�å°†ç›¸åº”çš„æ ¹ CA è¯�书å¤�制到å��为 `cacerts.pem` 的文件ä¸ï¼Œå¹¶åˆ›å»ºæˆ–æ›´æ–° `cattle-system` 命å��空间ä¸çš„ `tls-ca` Secret。如果è¯�书由ä¸é—´ CA ç¾å��,则 `cacerts.pem` 必须按顺åº�å�Œæ—¶åŒ…å�«ä¸é—´ CA è¯�ä¹¦å’Œæ ¹ CA è¯�书。
+
+创建�始 `tls-ca` Secret:
+
+```bash
+kubectl -n cattle-system create secret generic tls-ca \
+ --from-file=cacerts.pem
+```
+
+�更新现有的 `tls-ca` Secret:
+
+```bash
+kubectl -n cattle-system create secret generic tls-ca \
+ --from-file=cacerts.pem \
+ --dry-run --save-config -o yaml | kubectl apply -f -
+```
+
+### 3. �新�置 Rancher 部署
+
+如果è¯�书æº�ä¿�æŒ�ä¸�å�˜ï¼ˆä¾‹å¦‚,`secret`),请按照æ¥éª¤ 3a ä¸çš„æ¥éª¤æ“�作。
+
+但是,如果è¯�书æº�å�‘生å�˜åŒ–(例如,`letsEncrypt` 更改为 `secret`),请按照 3b ä¸çš„æ¥éª¤æ“�作。
+
+#### 3a. �新部署 Rancher pod
+
+当è¯�书æº�ä¿�æŒ�ä¸�å�˜ï¼Œä½†éœ€è¦�æ›´æ–° CA è¯�书时,需è¦�æ‰§è¡Œæ¤æ¥éª¤ã€‚
+
+在这ç§�情况下,由于 `tls-ca` secret 在å�¯åŠ¨æ—¶ç”± Rancher pod 读å�–ï¼Œå› æ¤ä½ 需è¦�é‡�新部署 Rancher pod。
+
+ä½ å�¯ä»¥è¿�行以下命令é‡�新部署 Rancher pod:
+```bash
+kubectl rollout restart deploy/rancher -n cattle-system
+```
+
+修改完æˆ�å�Žï¼Œè®¿é—® `https:///v3/settings/cacerts`,验è¯�该值是å�¦ä¸Žå…ˆå‰�写入 `tls-ca` Secret ä¸çš„ CA è¯�书匹é…�。在所有é‡�新部署的 Rancher pod å�¯åЍ之å‰�,CA `cacerts` 值å�¯èƒ½ä¸�会更新。
+
+#### 3b. 更新 Rancher 的 Helm 值
+
+如果è¯�书æº�有更改,则需è¦�æ‰§è¡Œæ¤æ¥éª¤ã€‚å¦‚æžœä½ çš„ Rancher 之å‰�使用默认的自ç¾å��è¯�书 (`ingress.tls.source=rancher`) 或 Let's Encrypt (`ingress.tls.source=letsEncrypt`) è¯�书,并且现在æ£åœ¨ä½¿ç”¨ç”±ç§�有 CA (`ingress.tls.source=secret`) ç¾å��çš„è¯�书。
+
+以下æ¥éª¤æ›´æ–°äº† Rancher Chart çš„ Helm å€¼ï¼Œå› æ¤ Rancher pod å’Œ ingress 会使用在æ¥éª¤ 1 å’Œ 2 ä¸åˆ›å»ºçš„æ–°ç§�有 CA è¯�书。
+
+1. 调整åˆ�始安装期间使用的值,将当å‰�值å˜å‚¨ä¸ºï¼š
+```bash
+helm get values rancher -n cattle-system -o yaml > values.yaml
+```
+1. 检索当å‰�部署的 Rancher Chart 的版本å—符串:
+```bash
+helm ls -n cattle-system
+```
+1. æ›´æ–° `values.yaml` 文件ä¸çš„当å‰� Helm 值以包å�«ä¸‹æ–¹å†…容:
+```yaml
+ingress:
+ tls:
+ source: secret
+privateCA: true
+```
+:::note ��:
+由于è¯�书由ç§�有 CA ç¾å�‘ï¼Œå› æ¤ç¡®ä¿�在 `values.yaml` 文件ä¸è®¾ç½®äº† [`privateCA: true`](../installation-references/helm-chart-options.md#常用选项) 是é�žå¸¸é‡�è¦�的。
+:::
+1. 使用 `values.yaml` 文件和当å‰� Chart 版本å�‡çº§ Helm 应用程åº�实例。版本必须匹é…�ä»¥é˜²æ¢ Rancher å�‡çº§ã€‚
+```bash
+ helm upgrade rancher rancher-stable/rancher \
+ --namespace cattle-system \
+ -f values.yaml \
+ --version
+```
+
+修改完æˆ�å�Žï¼Œè®¿é—® `https:///v3/settings/cacerts`,验è¯�该值是å�¦ä¸Žå…ˆå‰�写入 `tls-ca` Secret ä¸çš„ CA è¯�书匹é…�。在所有 Rancher pod å�¯åЍ之å‰�,CA `cacerts` 值å�¯èƒ½ä¸�会更新。
+
+### 4. �新�置 Rancher Agent 以信任�有 CA
+
+本节介ç»�了é‡�æ–°é…�ç½® Rancher Agent 以信任ç§�有 CA 的三ç§�æ–¹æ³•ã€‚å¦‚æžœä½ çš„å®žé™…æƒ…å†µç¬¦å�ˆä»¥ä¸‹ä»»æ„�一个æ�¡ä»¶ï¼Œè¯·æ‰§è¡Œæ¤æ¥éª¤ï¼š
+
+- Rancher 在先å‰�çš„é…�ç½®ä¸ä½¿ç”¨äº† Rancher 自ç¾å��è¯�书 (`ingress.tls.source=rancher`) 或 Let's Encrypt è¯�书 (`ingress.tls.source=letsEncrypt`)。
+- 该è¯�书由ä¸�å�Œçš„ç§�有 CA ç¾å�‘
+
+#### 为什么è¦�执行这一æ¥éª¤ï¼Ÿ
+
+如果 Rancher é…�置了ç§�有 CA ç¾å��çš„è¯�书时,CA è¯�书链将å�—到 Rancher agent 容器的信任。Agent 会对下载è¯�ä¹¦çš„æ ¡éªŒå’Œå�Š `CATTLE_CA_CHECKSUM` 环境å�˜é‡�进行比较。æ�¢è¨€ä¹‹ï¼Œå¦‚æžœ Rancher 使用的ç§�有 CA è¯�书å�‘生å�˜åŒ–,环境å�˜é‡� `CATTLE_CA_CHECKSUM` 必须相应更新。
+
+#### �使用的方法
+
+- 方法 1(最简å�•的方法):在轮æ�¢è¯�书å�Žå°†æ‰€æœ‰é›†ç¾¤è¿žæŽ¥åˆ° Rancher。适用于更新或é‡�新部署 Rancher 部署(æ¥éª¤ 3)å�Žç«‹å�³æ‰§è¡Œçš„æƒ…况。
+
+- 方法 2:适用于集群与 Rancher 失去连接,但所有集群都�用了 [Authorized Cluster Endpoint](../../../how-to-guides/new-user-guides/manage-clusters/access-clusters/authorized-cluster-endpoint.md) (ACE) 的情况。
+
+- 方法 3:如果方法 1 和 2 ��行,则�使用方法 3 进行回退。
+
+#### 方法 1:强制�新部署 Rancher Agent
+
+对于�个下游集群,使用 Rancher(本地)管�集群的 Kubeconfig 文件�行以下命令。
+
+```bash
+kubectl annotate clusters.management.cattle.io io.cattle.agent.force.deploy=true
+```
+
+:::note
+找到下游集群的集群 ID (c-xxxxx)ã€‚ä½ å�¯ä»¥åœ¨ Rancher UI çš„**集群管ç�†**䏿Ÿ¥çœ‹é›†ç¾¤æ—¶åœ¨æµ�览器 URL 䏿‰¾åˆ° ID。
+:::
+
+æ¤å‘½ä»¤å°†ä½¿ Agent 清å�•é‡�新应用新è¯�ä¹¦çš„æ ¡éªŒå’Œã€‚
+
+#### æ–¹æ³•äºŒï¼šæ‰‹åŠ¨æ›´æ–°æ ¡éªŒå’ŒçŽ¯å¢ƒå�˜é‡�
+
+å°† `CATTLE_CA_CHECKSUM` 环境å�˜é‡�更新为匹é…�æ–° CA è¯�ä¹¦æ ¡éªŒå’Œçš„å€¼ï¼Œä»Žè€Œæ‰‹åŠ¨ä¸º Agent Kubernetes 对象打上补ä¸�。通过以下æ“�作生æˆ�æ–°çš„æ ¡éªŒå’Œï¼š
+
+```bash
+curl -k -s -fL /v3/settings/cacerts | jq -r .value | sha256sum | awk '{print $1}'
+```
+
+为æ¯�个下游集群使用 Kubeconfig 更新两个 Agent 部署的环境å�˜é‡�。如果集群å�¯ç”¨äº† [ACE](../../../how-to-guides/new-user-guides/manage-clusters/access-clusters/authorized-cluster-endpoint.md)ï¼Œä½ å�¯ä»¥[调整 kubectl 上下文](../../../how-to-guides/new-user-guides/manage-clusters/access-clusters/use-kubectl-and-kubeconfig.md#直接使用下游集群进行身份验è¯�),从而直接连接到下游集群。
+
+```bash
+kubectl edit -n cattle-system ds/cattle-node-agent
+kubectl edit -n cattle-system deployment/cattle-cluster-agent
+```
+
+#### 方法三:手动�新部署 Rancher agent
+
+该方法通过在�个下游集群的 control plane 节点上�行一组命令,从而�新应用 Rancher agent。
+
+对æ¯�个下游集群é‡�å¤�以下æ¥éª¤ï¼š
+
+1. 检索 agent 注册 kubectl 命令:
+ 1. 找到下游集群的集群 ID (c-xxxxx)ã€‚ä½ å�¯ä»¥åœ¨ Rancher UI çš„**集群管ç�†**䏿Ÿ¥çœ‹é›†ç¾¤æ—¶åœ¨æµ�览器 URL 䏿‰¾åˆ° ID。
+ 1. å°† Rancher Server URL 和集群 ID æ·»åŠ åˆ°ä»¥ä¸‹ URL:`https:///v3/clusterregistrationtokens?clusterId=`。
+ 1. å¤�制 `insecureCommand` å—æ®µä¸çš„命令,使用æ¤å‘½ä»¤æ˜¯å› 为未使用ç§�有 CA。
+
+2. 使用以下其ä¸ä¸€ç§�方法,使用 kubeconfig 为下游集群è¿�行上一æ¥ä¸çš„ kubectl 命令:
+ 1. 如果集群å�¯ç”¨äº† [ACE](../../../how-to-guides/new-user-guides/manage-clusters/access-clusters/authorized-cluster-endpoint.md)ï¼Œä½ å�¯ä»¥[调整上下文](../../../how-to-guides/new-user-guides/manage-clusters/access-clusters/use-kubectl-and-kubeconfig.md#直接使用下游集群进行身份验è¯�),从而直接连接到下游集群。
+ 1. 或者,SSH 到 control plane 节点:
+ - RKE:使用[æ¤å¤„文档ä¸çš„æ¥éª¤](https://github.com/rancherlabs/support-tools/tree/master/how-to-retrieve-kubeconfig-from-custom-cluster)生æˆ� kubeconfig
+ - RKE2/K3s:使用安装时填充的 kubeconfig
+
+### 5. 强制更新 Fleet 集群,从而将 fleet-agent �新连接到 Rancher
+
+在 Rancher UI çš„[æŒ�ç»äº¤ä»˜](../../../how-to-guides/new-user-guides/deploy-apps-across-clusters/fleet.md#在-rancher-ui-ä¸è®¿é—®-fleet)ä¸ï¼Œä¸ºé›†ç¾¤é€‰æ‹©â€œå¼ºåˆ¶æ›´æ–°â€�,æ�¥å…�许下游集群ä¸çš„ fleet-agent æˆ�功连接到 Rancher。
+
+#### 为什么è¦�执行这一æ¥éª¤ï¼Ÿ
+
+Rancher 管ç�†çš„集群ä¸çš„ Fleet agent å˜å‚¨äº†ç”¨äºŽè¿žæŽ¥åˆ° Rancher çš„ kubeconfig。kubeconfig 包å�«ä¸€ä¸ª `certificate-authority-data` å—æ®µï¼Œè¯¥å—段包å�« Rancher 使用的è¯�书的 CA。更改 CA æ—¶ï¼Œä½ éœ€è¦�æ›´æ–°æ¤å�—æ�¥å…�许 fleet-agent ä¿¡ä»» Rancher 使用的è¯�书。
+
+## 将�有 CA �书更改为公共�书
+
+按照以下æ¥éª¤æ‰§è¡Œä¸Žä¸Šé�¢ç›¸å��çš„æ“�作,将ç§�有 CA é¢�å�‘çš„è¯�书更改为公共或自ç¾å�� CA。
+
+### 1. 创建/更新�书 Secret 对象
+
+首先,将æœ�务器è¯�书和所有ä¸é—´è¯�书å�ˆå¹¶åˆ°å��为 `tls.crt` 的文件,并在å��为 `tls.key` çš„æ–‡ä»¶ä¸æ��供相应的è¯�书密钥。
+
+使用以下命令在 Rancher(本地)管ç�†é›†ç¾¤ä¸åˆ›å»º `tls-rancher-ingress` Secret 对象:
+
+```bash
+kubectl -n cattle-system create secret tls tls-rancher-ingress \
+ --cert=tls.crt \
+ --key=tls.key
+```
+
+或者,更新现有的 `tls-rancher-ingress` Secret:
+
+```bash
+kubectl -n cattle-system create secret tls tls-rancher-ingress \
+ --cert=tls.crt \
+ --key=tls.key \
+ --dry-run --save-config -o yaml | kubectl apply -f -
+```
+
+### 2. åˆ é™¤ CA è¯�书 Secret 对象
+
+ä½ éœ€è¦�åˆ é™¤ `cattle-system` 命å��空间ä¸çš„ `tls-ca secret`(ä¸�å†�需è¦�它)。如果需è¦�ï¼Œä½ è¿˜å�¯ä»¥é€‰æ‹©ä¿�å˜ `tls-ca` secret 的副本。
+
+è¦�ä¿�å˜çŽ°æœ‰çš„ `tls-ca` Secret:
+
+```bash
+kubectl -n cattle-system get secret tls-ca -o yaml > tls-ca.yaml
+```
+
+è¦�åˆ é™¤çŽ°æœ‰çš„ `tls-ca` 密文:
+
+```bash
+kubectl -n cattle-system delete secret tls-ca
+```
+
+### 3. �新�置 Rancher 部署
+
+如果è¯�书æº�有更改,则需è¦�æ‰§è¡Œæ¤æ¥éª¤ã€‚在这ç§�情况下,它å�˜åŒ–çš„åŽŸå› å¾ˆå�¯èƒ½æ˜¯å› 为 Rancher 之å‰�é…�置为使用默认的自ç¾å��è¯�书 (`ingress.tls.source=rancher`)。
+
+以下æ¥éª¤æ›´æ–°äº† Rancher Chart çš„ Helm å€¼ï¼Œå› æ¤ Rancher pod å’Œ Ingress 会使用在æ¥éª¤ 1 ä¸åˆ›å»ºçš„æ–°è¯�书。
+
+1. 调整åˆ�始安装期间使用的值,将当å‰�值å˜å‚¨ä¸ºï¼š
+```bash
+helm get values rancher -n cattle-system -o yaml > values.yaml
+```
+1. 获å�–当å‰�部署的 Rancher Chart 的版本å—符串:
+```bash
+helm ls -n cattle-system
+```
+1. æ›´æ–° `values.yaml` 文件ä¸çš„当å‰� Helm 值:
+ 1. 由于ä¸�å†�使用ç§�有 CAï¼Œåˆ é™¤ `privateCA: true` å—æ®µï¼Œæˆ–将其设置为 `false`。
+ 1. æ ¹æ�®éœ€è¦�调整 `ingress.tls.source` å—æ®µã€‚有关更多信æ�¯ï¼Œè¯·å�‚阅 [Chart 选项](../installation-references/helm-chart-options.md#常用选项)。以下是一些示例:
+ 1. 如果使用公共 CA,继ç»ä½¿ç”¨ `secret`
+ 1. 如果使用 Let's Encrypt,将值更新为 `letsEncrypt`
+1. 使用 `values.yaml` 文件更新 Rancher Chart çš„ Helm 值,并使用当å‰� Chart 版本防æ¢å�‡çº§ï¼š
+```bash
+ helm upgrade rancher rancher-stable/rancher \
+ --namespace cattle-system \
+ -f values.yaml \
+ --version
+```
+
+### 4. 为��有/通用�书�新�置 Rancher Agent
+
+由于ä¸�å†�使用ç§�有 CAï¼Œå› æ¤ä½ 需è¦�åˆ é™¤ä¸‹æ¸¸é›†ç¾¤ agent 上的 `CATTLE_CA_CHECKSUM` 环境å�˜é‡�,或将其设置为 ""(空å—符串)。
+
+### 5. 强制更新 Fleet 集群,从而将 fleet-agent �新连接到 Rancher
+
+在 Rancher UI çš„[æŒ�ç»äº¤ä»˜](../../../how-to-guides/new-user-guides/deploy-apps-across-clusters/fleet.md#在-rancher-ui-ä¸è®¿é—®-fleet)ä¸ï¼Œä¸ºé›†ç¾¤é€‰æ‹©â€œå¼ºåˆ¶æ›´æ–°â€�,æ�¥å…�许下游集群ä¸çš„ fleet-agent æˆ�功连接到 Rancher。
+
+#### 为什么è¦�执行这一æ¥éª¤ï¼Ÿ
+
+Rancher 管ç�†çš„集群ä¸çš„ Fleet agent å˜å‚¨äº†ç”¨äºŽè¿žæŽ¥åˆ° Rancher çš„ kubeconfig。kubeconfig 包å�«ä¸€ä¸ª `certificate-authority-data` å—æ®µï¼Œè¯¥å—段包å�« Rancher 使用的è¯�书的 CA。更改 CA æ—¶ï¼Œä½ éœ€è¦�æ›´æ–°æ¤å�—æ�¥å…�许 fleet-agent ä¿¡ä»» Rancher 使用的è¯�书。
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/resources/upgrade-cert-manager.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/resources/upgrade-cert-manager.md
new file mode 100644
index 00000000000..40267b47065
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/resources/upgrade-cert-manager.md
@@ -0,0 +1,281 @@
+---
+title: �级 Cert-Manager
+---
+
+Rancher 使用 cert-manager 为 Rancher 高å�¯ç”¨éƒ¨ç½²è‡ªåŠ¨ç”Ÿæˆ�å’Œç»æœŸ TLS è¯�书。从 2019 ç§‹å£å¼€å§‹ï¼Œcert-manager å�‘生了以下的三个é‡�è¦�å�˜æ›´ã€‚å¦‚æžœä½ åœ¨æ¤æ—¶é—´æ®µå‰�创建了 Rancher 高å�¯ç”¨éƒ¨ç½²ï¼Œè¯·è¿›è¡Œç›¸å…³æ“�作。
+
+1. [从 2019 å¹´ 11 月 1 日开始,Let's Encrypt 已阻æ¢ä½ŽäºŽ 0.8.0 çš„ cert-manager 实例。](https://community.letsencrypt.org/t/blocking-old-cert-manager-versions/98753)
+1. [Cert-manager æ£åœ¨å¼ƒç”¨å’Œæ›¿æ�¢ certificate.spec.acme.solvers å—æ®µ](https://cert-manager.io/docs/installation/upgrading/upgrading-0.7-0.8/)ã€‚æ¤æ›´æ”¹æš‚æ—¶æ²¡æœ‰ç¡®åˆ‡çš„æˆªæ¢æ—¥æœŸã€‚
+1. [Cert-manager æ£åœ¨å¼ƒç”¨ `v1alpha1` API 和替æ�¢å®ƒçš„ API 组](https://cert-manager.io/docs/installation/upgrading/upgrading-0.10-0.11/)。
+
+ä¸ºäº†å¸®åŠ©ä½ åº”å¯¹è¿™äº›å�˜åŒ–,本文将:
+
+1. æ��ä¾›å�‡çº§ cert-manager æ¥éª¤çš„æ–‡æ¡£ã€‚
+1. é˜�è¿° cert-manager API çš„å�˜æ›´ï¼Œå¹¶æ��ä¾› cert-manager å®˜æ–¹æ–‡æ¡£çš„é“¾æŽ¥ï¼ŒåŠ©ä½ å®žçŽ°æ•°æ�®è¿�移。
+
+:::note ���示:
+
+å¦‚æžœä½ è¦�å°† cert-manager 从早于 1.5 的版本å�‡çº§åˆ°æœ€æ–°ç‰ˆæœ¬ï¼Œè¯·æŒ‰ç…§ä»¥ä¸‹[选项 C](#选项-cå�‡çº§-15-å�Šä»¥ä¸‹ç‰ˆæœ¬çš„-cert-manager) ä¸çš„æ¥éª¤è¿›è¡Œæ“�作。请注æ„�ï¼Œä½ æ— éœ€é‡�新安装 Rancher å�³å�¯æ‰§è¡Œæ¤å�‡çº§ã€‚
+
+:::
+
+## �级 Cert-Manager
+
+以下说明ä¸ä½¿ç”¨çš„命å��空间是由当å‰�安装了 cert-manager 的命å��空间决定的。如果它在 kube-system ä¸ï¼Œåœ¨ä»¥ä¸‹è¯´æ˜Žæ¥éª¤ä¸ä½¿ç”¨ã€‚ä½ å�¯ä»¥è¿�行 `kubectl get pods --all-namespaces` æ�¥éªŒè¯�,并检查 cert-manager-\* pods 列在哪个命å��空间ä¸ã€‚ä¸�è¦�更改è¿�行 cert-manager 的命å��空间,å�¦åˆ™å�¯èƒ½ä¼šå‡ºçŽ°é”™è¯¯ã€‚
+
+è¦�å�‡çº§ cert-manager,请é�µå¾ªæ¥éª¤æ“�作。
+
+### 选项 A:�网�级 cert-manager
+
+
+ �击展开
+
+1. [备份现有资�](https://cert-manager.io/docs/tutorials/backup/):
+
+ ```plain
+ kubectl get -o yaml --all-namespaces \
+ issuer,clusterissuer,certificates,certificaterequests > cert-manager-backup.yaml
+ ```
+
+ :::note ���示:
+
+ å¦‚æžœä½ ä»Žä½ŽäºŽ 0.11.0 的版本å�‡çº§ï¼Œè¯·å°†æ‰€æœ‰å¤‡ä»½èµ„æº�上的 apiVersion 从 `certmanager.k8s.io/v1alpha1` å�‡çº§åˆ° `cert-manager.io/v1alpha2`ã€‚å¦‚æžœä½ éœ€è¦�在其他资æº�上使用 cert-manager 注释,请对其进行更新以å��æ˜ æ–°çš„ API 组。详情请å�‚è§�[é™„åŠ æ³¨é‡Šå�˜æ›´](https://cert-manager.io/docs/installation/upgrading/upgrading-0.10-0.11/#additional-annotation-changes)。
+
+ :::
+
+1. [�载现有部署](https://cert-manager.io/docs/installation/uninstall/kubernetes/#uninstalling-with-helm):
+
+ ```plain
+ helm uninstall cert-manager
+ ```
+
+ ä½¿ç”¨ä½ å®‰è£…çš„ vX.Y.Z ç‰ˆæœ¬çš„é“¾æŽ¥åˆ é™¤ CustomResourceDefinition:
+
+ ```plain
+ kubectl delete -f https://github.com/cert-manager/cert-manager/releases/download/vX.Y.Z/cert-manager.crds.yaml
+
+ ```
+
+1. �独安装 CustomResourceDefinition 资�:
+
+ ```plain
+ kubectl apply --validate=false -f https://github.com/cert-manager/cert-manager/releases/download/vX.Y.Z/cert-manager.crds.yaml
+
+ ```
+
+ :::note
+
+ å¦‚æžœä½ è¿�行的 Kubernetes 版本是 1.15 æˆ–æ›´ä½Žç‰ˆæœ¬ï¼Œä½ éœ€è¦�在以上的 `kubectl apply` 命令䏿·»åŠ `--validate=false`。å�¦åˆ™ä½ 将看到 cert-manager CRD 资æº�ä¸çš„ `x-kubernetes-preserve-unknown-fields` å—æ®µæ ¡éªŒé”™è¯¯æ��示。这是 kubectl 执行资æº�æ ¡éªŒæ–¹å¼�产生的良性错误。
+
+ :::
+
+1. æ ¹æ�®éœ€è¦�为 cert-manager 创建命å��空间:
+
+ ```plain
+ kubectl create namespace cert-manager
+ ```
+
+1. æ·»åŠ Jetstack Helm 仓库:
+
+ ```plain
+ helm repo add jetstack https://charts.jetstack.io
+ ```
+
+1. æ›´æ–° Helm Chart 仓库本地缓å˜ï¼š
+
+ ```plain
+ helm repo update
+ ```
+
+1. 安装新版本的 cert-manager:
+
+ ```plain
+ helm install \
+ cert-manager jetstack/cert-manager \
+ --namespace cert-manager \
+ --version v1.11.0
+ ```
+
+1. [��备份资�](https://cert-manager.io/docs/tutorials/backup/#restoring-resources):
+
+ ```plain
+ kubectl apply -f cert-manager-backup.yaml
+ ```
+
+
+
+### 选项 B:在离线环境ä¸å�‡çº§ Cert-Manager
+
+
+ �击展开
+
+### 先决�件
+
+在执行å�‡çº§ä¹‹å‰�,先将所需的容器镜åƒ�æ·»åŠ åˆ°ç§�有镜åƒ�仓库ä¸ï¼Œå¹¶ä¸‹è½½/渲染所需的 Kubernetes manifest 文件æ�¥å‡†å¤‡ç¦»çº¿çŽ¯å¢ƒã€‚
+
+1. ��[准备�有镜�仓库](../other-installation-methods/air-gapped-helm-cli-install/publish-images.md)指�,将�级所需的镜�推�到镜�仓库。
+
+1. 在å�¯ä»¥è¿žæŽ¥äº’è�”网的系统ä¸ï¼Œå°† cert-manager ä»“åº“æ·»åŠ åˆ° Helm:
+
+ ```plain
+ helm repo add jetstack https://charts.jetstack.io
+ helm repo update
+ ```
+
+1. 从 [Helm Chart 仓库](https://artifacthub.io/packages/helm/cert-manager/cert-manager)ä¸èŽ·å�–最新å�¯ç”¨çš„ cert-manager Chart:
+
+ ```plain
+ helm fetch jetstack/cert-manager --version v1.11.0
+ ```
+
+1. 使用安装 Chart 的选项æ�¥æ¸²æŸ“ cert-manager 模æ�¿ã€‚è®°ä½�è¦�设置 `image.repository` é€‰é¡¹ï¼Œä»¥ä»Žä½ çš„ç§�有镜åƒ�仓库拉å�–镜åƒ�ã€‚æ¤æ“�作会创建一个包å�« Kubernetes manifest 文件的 `cert-manager` 目录。
+
+ Helm 3 命令如下:
+
+ ```plain
+ helm template cert-manager ./cert-manager-v0.12.0.tgz --output-dir . \
+ --namespace cert-manager \
+ --set image.repository=/quay.io/jetstack/cert-manager-controller
+ --set webhook.image.repository=/quay.io/jetstack/cert-manager-webhook
+ --set cainjector.image.repository=/quay.io/jetstack/cert-manager-cainjector
+ ```
+
+ Helm 2 命令如下:
+
+ ```plain
+ helm template ./cert-manager-v0.12.0.tgz --output-dir . \
+ --name cert-manager --namespace cert-manager \
+ --set image.repository=/quay.io/jetstack/cert-manager-controller
+ --set webhook.image.repository=/quay.io/jetstack/cert-manager-webhook
+ --set cainjector.image.repository=/quay.io/jetstack/cert-manager-cainjector
+ ```
+
+1. 下载新旧版 cert-manager 所需的 CRD 文件:
+
+ ```plain
+ curl -L -o cert-manager-crd.yaml https://raw.githubusercontent.com/cert-manager/cert-manager/release-0.12/deploy/manifests/00-crds.yaml
+ curl -L -o cert-manager/cert-manager-crd-old.yaml https://raw.githubusercontent.com/cert-manager/cert-manager/release-X.Y/deploy/manifests/00-crds.yaml
+ ```
+
+### 安装 cert-manager
+
+1. 备份现有资�:
+
+ ```plain
+ kubectl get -o yaml --all-namespaces \
+ issuer,clusterissuer,certificates,certificaterequests > cert-manager-backup.yaml
+ ```
+
+ :::note ���示:
+
+ å¦‚æžœä½ ä»Žä½ŽäºŽ 0.11.0 的版本å�‡çº§ï¼Œè¯·å°†æ‰€æœ‰å¤‡ä»½èµ„æº�上的 apiVersion 从 `certmanager.k8s.io/v1alpha1` å�‡çº§åˆ° `cert-manager.io/v1alpha2`ã€‚å¦‚æžœä½ éœ€è¦�在其他资æº�上使用 cert-manager 注释,请对其进行更新以å��æ˜ æ–°çš„ API 组。详情请å�‚è§�[é™„åŠ æ³¨é‡Šå�˜æ›´](https://cert-manager.io/docs/installation/upgrading/upgrading-0.10-0.11/#additional-annotation-changes)。
+
+ :::
+
+1. åˆ é™¤çŽ°æœ‰çš„ cert-manager 安装包:
+
+ ```plain
+ kubectl -n cert-manager \
+ delete deployment,sa,clusterrole,clusterrolebinding \
+ -l 'app=cert-manager' -l 'chart=cert-manager-v0.5.2'
+ ```
+
+ ä½¿ç”¨ä½ å®‰è£…çš„ vX.Y ç‰ˆæœ¬çš„é“¾æŽ¥åˆ é™¤ CustomResourceDefinition:
+
+ ```plain
+ kubectl delete -f cert-manager/cert-manager-crd-old.yaml
+ ```
+
+1. �独安装 CustomResourceDefinition 资�:
+
+ ```plain
+ kubectl apply -f cert-manager/cert-manager-crd.yaml
+ ```
+
+ :::note ���示:
+
+ å¦‚æžœä½ è¿�行的 Kubernetes 版本是 1.15 æˆ–æ›´ä½Žç‰ˆæœ¬ï¼Œä½ éœ€è¦�在以上的 `kubectl apply` 命令䏿·»åŠ `--validate=false`。å�¦åˆ™ä½ 将看到 cert-manager CRD 资æº�ä¸çš„ `x-kubernetes-preserve-unknown-fields` å—æ®µæ ¡éªŒé”™è¯¯æ��示。这是 kubectl 执行资æº�æ ¡éªŒæ–¹å¼�产生的良性错误。
+
+ :::
+
+1. 为 cert-manager 创建命�空间:
+
+ ```plain
+ kubectl create namespace cert-manager
+ ```
+
+1. 安装 cert-manager
+
+ ```plain
+ kubectl -n cert-manager apply -R -f ./cert-manager
+ ```
+
+1. [��备份资�](https://cert-manager.io/docs/tutorials/backup/#restoring-resources):
+
+ ```plain
+ kubectl apply -f cert-manager-backup.yaml
+ ```
+
+
+
+### 选项 C:�级 1.5 �以下版本的 cert-manager
+
+
+ �击展开
+
+以å‰�,è¦�å�‡çº§æ—§ç‰ˆæœ¬çš„ cert-manager,我们建议å�¸è½½å¹¶é‡�新安装 Rancherã€‚ä½¿ç”¨ä»¥ä¸‹æ–¹æ³•ï¼Œä½ å�¯ä»¥å�‡çº§ cert-manager è€Œæ— éœ€æ‰§è¡Œæ¤é¢�外æ¥éª¤ï¼Œä»Žè€Œæ›´å¥½åœ°ä¿�æŠ¤ä½ çš„ç”Ÿäº§çŽ¯å¢ƒï¼š
+
+1. 按照[安装指�](https://cert-manager.io/docs/usage/cmctl/#installation)安装 `cmctl`(cert-manager CLI 工具)。
+
+1. ç¡®ä¿�所有以已弃用的 API 版本å˜å‚¨åœ¨ etcd ä¸çš„ cert-manager 自定义资æº�都è¿�移到 v1:
+
+ ```
+ cmctl upgrade migrate-api-version
+ ```
+ 有关详细信�,请�阅 [API 版本�移文档](https://cert-manager.io/docs/usage/cmctl/#migrate-api-version)。�请�阅[将 1.5 �级到 1.6](https://cert-manager.io/docs/installation/upgrading/upgrading-1.5-1.6/) 和[将 1.6 �级到到 1.7](https://cert-manager.io/docs/installation/upgrading/upgrading-1.6-1.7/)。
+
+1. æ£å¸¸ä½¿ç”¨ `helm upgrade` å°† cert-manager å�‡çº§åˆ° 1.7.1。如果需è¦�ï¼Œä½ å�¯ä»¥ç›´æŽ¥ä»Žç‰ˆæœ¬ 1.5 转到 1.7。
+
+1. 按照 Helm 教程[更新�布清�的 API 版本](https://helm.sh/docs/topics/kubernetes_apis/#updating-api-versions-of-a-release-manifest)。Chart �布�称为 `release_name=rancher`,�布命�空​​间为 `release_namespace=cattle-system`。
+
+1. 在解ç �å�Žçš„æ–‡ä»¶ä¸ï¼Œæ�œç´¢ `cert-manager.io/v1beta1` 并将其**替æ�¢**为 `cert-manager.io/v1`。
+
+1. 使用 `helm upgrade` æ£å¸¸å�‡çº§ Rancher。
+
+
+
+### 验�部署
+
+安装完 cert-manager å�Žï¼Œä½ å�¯ä»¥é€šè¿‡æ£€æŸ¥ kube-system 命å��ç©ºé—´ä¸æ£åœ¨è¿�行的 Pod æ�¥éªŒè¯�它是å�¦å·²æ£ç¡®éƒ¨ç½²ï¼š
+
+```
+kubectl get pods --namespace cert-manager
+
+NAME READY STATUS RESTARTS AGE
+cert-manager-5c6866597-zw7kh 1/1 Running 0 2m
+cert-manager-cainjector-577f6d9fd7-tr77l 1/1 Running 0 2m
+cert-manager-webhook-787858fcdb-nlzsq 1/1 Running 0 2m
+```
+
+## Cert-Manager API �更和数��移
+
+---
+
+Rancher 现在支æŒ� cert-manager 1.6.2 å’Œ 1.7.1。推è��使用 v1.7.xï¼Œå› ä¸º v 1.6.x 将在 2022 å¹´ 3 月 30 日结æ�Ÿç”Ÿå‘½å‘¨æœŸã€‚详情请å�‚è§� [cert-manager 文档](../../../pages-for-subheaders/install-upgrade-on-a-kubernetes-cluster.md#4-安装-cert-manager)。有关将 cert-manager 从 1.5 å�‡çº§åˆ° 1.6 的说明,请å�‚è§�上游的 [cert-manager 文档](https://cert-manager.io/docs/installation/upgrading/upgrading-1.5-1.6/)。有关将 cert-manager 从 1.6 å�‡çº§åˆ° 1.7 的说明,请å�‚è§�上游的 [cert-manager 文档](https://cert-manager.io/docs/installation/upgrading/upgrading-1.6-1.7/)。
+
+---
+
+Cert-manager å·²ç»�弃用 `certificate.spec.acme.solvers` å—æ®µï¼Œè€Œä¸”会在未æ�¥çš„ç‰ˆæœ¬ä¸æ”¾å¼ƒå¯¹è¯¥å—段的支æŒ�。
+
+æ ¹æ�® cert-manager 文档,v0.8 引入了é…�ç½® ACME è¯�书资æº�çš„æ–°æ ¼å¼�。具体æ�¥è¯´ï¼Œå°±æ˜¯ç§»åŠ¨äº† challenge solver å—æ®µã€‚v0.9 æ–°æ—§æ ¼å¼�å�‡æ”¯æŒ�。请知悉,之å�Žå�‘布的新 cert-manager ç‰ˆæœ¬ä¼šæ”¾å¼ƒå¯¹æ—§æ ¼å¼�的支æŒ�。Cert-Manager æ–‡æ¡£å»ºè®®ä½ åœ¨æ›´æ–°å�Žï¼Œå°† ACME é¢�å�‘者和è¯�书资æº�æ›´æ–°åˆ°æ–°æ ¼å¼�。
+
+如需了解�更细节以��移说明,请��[将 Cert-Manager 从 v0.7 �级到 v0.8](https://cert-manager.io/docs/installation/upgrading/upgrading-0.7-0.8/)。
+
+v0.11 ç‰ˆæœ¬æ ‡å¿—ç�€åˆ 除先å‰� Cert-Manager 版本ä¸ä½¿ç”¨çš„ v1alpha1 API,以å�Šå°† API 组从 certmanager.k8s.io 更改到 cert-manager.io。
+
+æ¤å¤–,我们已ä¸�å†�支æŒ� v0.8 版本ä¸å·²å¼ƒç”¨çš„æ—§é…�ç½®æ ¼å¼�。æ�¢è¨€ä¹‹ï¼Œåœ¨å�‡çº§åˆ° v0.11 之å‰�ï¼Œä½ å¿…é¡»å…ˆä¸º ACME å�‘行者使用新的 solver æ ·å¼�é…�ç½®æ ¼å¼�作为过渡。详情请å�‚è§�[å�‡çº§åˆ° v0.8](https://cert-manager.io/docs/installation/upgrading/upgrading-0.7-0.8/)。
+
+如需了解�更细节以��移说明,请��[将 Cert-Manager 从 v0.10 �级到 v0.11](https://cert-manager.io/docs/installation/upgrading/upgrading-0.10-0.11/)。
+
+如需获得更多信�,请�� [Cert-Manager �级](https://cert-manager.io/docs/installation/upgrading/)。
+
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/upgrade-and-roll-back-kubernetes.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/upgrade-and-roll-back-kubernetes.md
new file mode 100644
index 00000000000..aa851f3a50c
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/upgrade-and-roll-back-kubernetes.md
@@ -0,0 +1,126 @@
+---
+title: �级和回滚 Kubernetes
+---
+
+�级到最新版本的 Rancher 之�,下游 Kubernetes 集群�以�级为 Rancher 支�的最新的 Kubernetes 版本。
+
+Rancher 使用 RKE(Rancher Kubernetes Engine)æ�¥é¢„置和编辑 RKE 集群。有关为 RKE 集群é…�ç½®å�‡çº§ç–略的更多信æ�¯ï¼Œè¯·å�‚阅 [RKE 文档](https://rancher.com/docs/rke/latest/en/)。
+
+
+## �过测试的 Kubernetes 版本
+
+Rancher 在�布新版本之�,会对其与 Kubernetes 的最新次�版本进行测试,以确�兼容性。有关�个 Rancher 版本测试了哪些 Kubernetes 版本的详细信�,请�阅[支�维护�款](https://rancher.com/support-maintenance-terms/all-supported-versions/rancher-v2.6.0/)。
+
+## �级的工作原�
+
+RKE v1.1.0 改�了集群�级的方�。
+
+在 [RKE 文档](https://rancher.com/docs/rke/latest/en/upgrades/how-upgrades-work)ä¸ï¼Œä½ 将了解编辑或å�‡çº§ RKE Kubernetes 集群时会å�‘生的情况。
+
+
+## �级的最佳实践
+
+在å�‡çº§é›†ç¾¤çš„ Kubernetes ç‰ˆæœ¬æ—¶ï¼Œæˆ‘ä»¬å»ºè®®ä½ ï¼š
+
+1. æ‹�ä¸€å¼ å¿«ç…§ã€‚
+1. �动 Kubernetes �级。
+1. 如果å�‡çº§å¤±è´¥ï¼Œè¯·å°†é›†ç¾¤æ�¢å¤�到å�‡çº§å‰�çš„ Kubernetes 版本。这å�¯ä»¥é€šè¿‡é€‰æ‹©**æ�¢å¤� etcd å’Œ Kubernetes 版本**选项æ�¥å®žçŽ°ã€‚åœ¨æ�¢å¤� etcd å¿«ç…§ 之å‰�ï¼Œè¿™ä¼šå°†ä½ çš„é›†ç¾¤æ�¢å¤�到å�‡çº§å‰�çš„ kubernetes 版本。
+
+���作将在�处于�康或 active 状�的集群上�行。
+
+## �级 Kubernetes 版本
+
+:::note 先决�件:
+
+- 以下选项适用于 [Rancher å�¯åŠ¨çš„ Kubernetes 集群](../../pages-for-subheaders/launch-kubernetes-with-rancher.md)å’Œ[注册的 K3s Kubernetes 集群](../../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/register-existing-clusters.md#已注册-rke2-å’Œ-k3s-é›†ç¾¤çš„é™„åŠ åŠŸèƒ½)。
+- 以下选项也适用于导入且已注册的 RKE2 é›†ç¾¤ã€‚å¦‚æžœä½ ä»Žå¤–éƒ¨äº‘å¹³å�°å¯¼å…¥é›†ç¾¤ä½†ä¸�æ³¨å†Œï¼Œä½ å°†æ— æ³•åœ¨ Rancher ä¸å�‡çº§ Kubernetes 版本。
+- 在å�‡çº§ Kubernetes 之å‰�,先[å¤‡ä»½ä½ çš„é›†ç¾¤](../../pages-for-subheaders/backup-restore-and-disaster-recovery.md)。
+
+:::
+
+1. 在左上角,�击 **☰ > 集群管�**。
+1. 在**集群**页é�¢ä¸ï¼Œè¿›å…¥è¦�å�‡çº§çš„集群,然å�Žç‚¹å‡» **â‹® > 编辑é…�ç½®**。
+1. 从 **Kubernetes 版本** 下拉列表ä¸ï¼Œé€‰æ‹©è¦�用于集群的 Kubernetes 版本。
+1. å�•击**ä¿�å˜**。
+
+**结果**:已开始为集群�级 Kubernetes。
+
+## 回滚
+
+ä½ å�¯ä»¥å°†é›†ç¾¤æ�¢å¤�到使用先å‰� Kubernetes 版本的备份。有关详细信æ�¯ï¼Œè¯·å�‚阅:
+
+- [备份集群](../../how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/back-up-rancher-launched-kubernetes-clusters.md#快照工作原�)
+- [使用备份��集群](../../how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/restore-rancher-launched-kubernetes-clusters-from-backup.md#使用快照��集群)
+
+## é…�ç½®å�‡çº§ç–ç•¥
+
+从 RKE v1.1.0 开始,我们æ��供了é¢�外的å�‡çº§é€‰é¡¹ï¼Œè®©ä½ 更精细地控制å�‡çº§è¿‡ç¨‹ã€‚如果满足[æ�¡ä»¶å’Œè¦�求](https://rancher.com/docs/rke/latest/en/upgrades/maintaining-availability)ï¼Œä½ å�¯ä»¥ä½¿ç”¨è¿™äº›é€‰é¡¹ï¼Œä»Žè€Œåœ¨é›†ç¾¤å�‡çº§æœŸé—´ç»´æŒ�应用的å�¯ç”¨æ€§ã€‚
+
+ä½ å�¯ä»¥åœ¨ Rancher UI ä¸é…�ç½®å�‡çº§ç–略,也å�¯ä»¥é€šè¿‡ç¼–辑 `cluster.yml` æ�¥é…�ç½®ç–略。编辑 `cluster.yml` å�¯ä»¥é…�置更多高级选项。
+
+### 在 Rancher UI ä¸é…�置最大ä¸�å�¯ç”¨çš„ Worker 节点
+
+ä½ å�¯ä»¥åœ¨ Rancher UI ä¸é…�ç½®ä¸�å�¯ç”¨ worker 节点的最大数é‡�。在集群å�‡çº§æœŸé—´ï¼Œworker 节点将按æ¤å¤§å°�批é‡�å�‡çº§ã€‚
+
+默认情况下,ä¸�å�¯ç”¨ worker 节点的最大数é‡�为所有 worker 节点的 10%ã€‚æ¤æ•°å—å�¯ä»¥é…�置为百分比或整数。当定义为百分比时,批大å°�会被四èˆ�五入到最近的节点,最å°�为一个节点。
+
+�更改 worker 节点的默认数�或百分比:
+
+1. 在左上角,�击 **☰ > 集群管�**。
+1. 在**集群**页é�¢ä¸ï¼Œè¿›å…¥è¦�å�‡çº§çš„集群,然å�Žç‚¹å‡» **â‹® > 编辑é…�ç½®**。
+1. 在**å�‡çº§ç–ç•¥**选项å�¡ä¸ï¼Œè¾“å…¥ **Worker å¹¶å�‘**ä½œä¸ºå›ºå®šçš„æ•°å—æˆ–ç™¾åˆ†æ¯”ã€‚ä½ å�¯ä»¥é€šè¿‡å°†é›†ç¾¤ä¸çš„节点数å‡�去最大ä¸�å�¯ç”¨èŠ‚ç‚¹æ•°æ�¥èŽ·å�–该数å—。
+1. å�•击**ä¿�å˜**。
+
+**结果**:集群更新为使用新的å�‡çº§ç–略。
+
+### 使用 Rancher UI 在�级期间�用节点清空
+
+默认情况下,RKE 会在å�‡çº§ä¹‹å‰�[å°�é”�](https://kubernetes.io/docs/concepts/architecture/nodes/#manual-node-administration)æ¯�个节点。默认情况下,[清空](https://kubernetes.io/docs/tasks/administer-cluster/safely-drain-node/)会在å�‡çº§æœŸé—´è¢«ç¦�用。如果在集群é…�ç½®ä¸å�¯ç”¨äº†æ¸…空​​,RKE 将在å�‡çº§ä¹‹å‰�对节点进行å°�é”�和清空。
+
+�在集群�级期间清空�个节点:
+
+1. 在左上角,�击 **☰ > 集群管�**。
+1. 在**集群**页é�¢ä¸ï¼Œè¿›å…¥è¦�å�¯ç”¨èŠ‚ç‚¹æ¸…ç©ºçš„é›†ç¾¤ï¼Œç„¶å�Žç‚¹å‡» **â‹® > 编辑é…�ç½®**。
+1. �击 **⋮ > 编辑**。
+1. 在**å�‡çº§ç–ç•¥**选项å�¡ä¸ï¼Œè½¬åˆ°**清空节点**å—æ®µå¹¶å�•击**是**。controlplane å’Œ worker 节点的清空是å�•独é…�置的。
+1. é…�ç½®å¦‚ä½•åˆ é™¤ pod 的选项。有关æ¯�个选项的详细信æ�¯ï¼Œè¯·å�‚阅[本节](../../how-to-guides/new-user-guides/manage-clusters/nodes-and-node-pools.md#激进和安全的清空选项)。
+1. (å�¯é€‰ï¼‰é…�置宽é™�期。宽é™�期是给æ¯�个 pod 进行清ç�†çš„超时时间,能让 pod 有机会优雅地退出。Pod å�¯èƒ½éœ€è¦�完æˆ�任何未完æˆ�的请求ã€�回滚事务或将状æ€�ä¿�å˜åˆ°æŸ�些外部å˜å‚¨ã€‚如果该值为负数,将使用 pod 䏿Œ‡å®šçš„默认值。
+1. (å�¯é€‰ï¼‰é…�置超时,这是在清空放弃之å‰�应该继ç»ç‰å¾…的时间。
+1. å�•击**ä¿�å˜**。
+
+**结果**:集群更新为使用新的å�‡çº§ç–略。
+
+:::note
+
+ç›®å‰�å˜åœ¨ä¸€ä¸ª[已知问题](https://github.com/rancher/rancher/issues/25478),å�³ä½¿ etcd å’Œ controlplane æ£åœ¨è¢«æ¸…空, Rancher UI 也ä¸�会将它们的状æ€�显示为 drained。
+
+:::
+
+### 在�级期间维护应用的�用性
+
+_从 RKE v1.1.0 起�用_
+
+在 [RKE 文档](https://rancher.com/docs/rke/latest/en/upgrades/maintaining-availability/)ä¸ï¼Œä½ 将了解在å�‡çº§é›†ç¾¤æ—¶é˜²æ¢åº”用å�œæœºçš„è¦�求。
+
+### 在 cluster.yml ä¸é…�ç½®å�‡çº§ç–ç•¥
+
+ä½ é€šè¿‡ç¼–è¾‘ `cluster.yml` æ�¥èŽ·å¾—æ›´é«˜çº§çš„å�‡çº§ç–ç•¥é…�置选项。
+
+有关详细信æ�¯ï¼Œè¯·å�‚阅 RKE 文档ä¸çš„[é…�ç½®å�‡çº§ç–ç•¥](https://rancher.com/docs/rke/latest/en/upgrades/configuring-strategy)。这部分还包括一个用于é…�ç½®å�‡çº§ç–略的示例 `cluster.yml`。
+
+## 故障排除
+
+如果�级�节点没有出现,`rke up` 命令会出错。
+
+如果��用节点的数�超过�置的最大值,则�会进行�级。
+
+如果å�‡çº§å�œæ¢ï¼Œä½ å�¯èƒ½éœ€è¦�ä¿®å¤�ä¸�å�¯ç”¨èŠ‚ç‚¹æˆ–å°†å…¶ä»Žé›†ç¾¤ä¸åˆ 除,然å�Žæ‰�能继ç»å�‡çº§ã€‚
+
+失败的节点�能处于许多��的状�:
+
+- 关机
+- ��用
+- 用户在å�‡çº§è¿‡ç¨‹ä¸æ¸…ç©ºäº†èŠ‚ç‚¹ï¼Œå› æ¤èŠ‚ç‚¹ä¸Šæ²¡æœ‰ kubelet
+- �级本身失败
+
+如果在å�‡çº§è¿‡ç¨‹ä¸è¾¾åˆ°æœ€å¤§ä¸�å�¯ç”¨èŠ‚ç‚¹æ•°ï¼ŒRancher 的下游集群将å�œç•™åœ¨æ›´æ–°ä¸çš„状æ€�,并且ä¸�会继ç»å�‡çº§å…¶ä»– controlplane 节点。它将继ç»è¯„ä¼°ä¸�å�¯ç”¨çš„节点集,以防其ä¸ä¸€ä¸ªèŠ‚ç‚¹å�˜å¾—å�¯ç”¨ã€‚å¦‚æžœæ— æ³•ä¿®å¤�节点,则必须移除节点æ‰�能继ç»å�‡çº§ã€‚
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/upgrade-kubernetes-without-upgrading-rancher.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/upgrade-kubernetes-without-upgrading-rancher.md
new file mode 100644
index 00000000000..2d9c0f00918
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/installation-and-upgrade/upgrade-kubernetes-without-upgrading-rancher.md
@@ -0,0 +1,91 @@
+---
+title: 在��级 Rancher 的情况下�级 Kubernetes
+---
+
+RKE 元数æ�®åŠŸèƒ½å…�è®¸ä½ åœ¨æ–°ç‰ˆæœ¬ Kubernetes å�‘布å�Žç«‹å�³ä¸ºé›†ç¾¤é…�ç½®æ–°ç‰ˆæœ¬ï¼Œè€Œæ— éœ€å�‡çº§ Rancher。æ¤åŠŸèƒ½å¯¹äºŽä½¿ç”¨ Kubernetes 的补ä¸�版本é�žå¸¸æœ‰ç”¨ï¼Œä¾‹å¦‚,在原本支æŒ� Kubernetes v1.14.6 çš„ Rancher Server 版本ä¸ï¼Œå°† Kubernetes å�‡çº§åˆ° v1.14.7。
+
+:::note
+
+Kubernetes API å�¯ä»¥åœ¨æ¬¡è¦�ç‰ˆæœ¬ä¹‹é—´æ›´æ”¹ã€‚å› æ¤ï¼Œæˆ‘们ä¸�支æŒ�引入 Kubernetes 次è¦�版本,例如在 Rancher 支æŒ� v1.14 的情况下引入 v1.15。在这ç§�æƒ…å†µä¸‹ï¼Œä½ éœ€è¦�å�‡çº§ Rancher ä»¥æ·»åŠ å¯¹ Kubernetes 次è¦�版本的支æŒ�。
+
+:::
+
+Rancher çš„ Kubernetes 元数æ�®åŒ…å�« Rancher 用于é…�ç½® [RKE 集群](../../pages-for-subheaders/launch-kubernetes-with-rancher.md)çš„ Kubernetes 版本信æ�¯ã€‚Rancher 会定期å�Œæ¥æ•°æ�®å¹¶ä¸º **系统镜åƒ�**ã€�**æœ�务选项**å’Œ**æ�’件模æ�¿**创建自定义资æº�定义 (CRD)ã€‚å› æ¤ï¼Œå½“æ–°çš„ Kubernetes 版本与 Rancher Server 版本兼容时,Kubernetes 元数æ�®å�¯ä»¥ä½¿ Rancher 使用新版本æ�¥é…�置集群。元数æ�®æ¦‚述了 [Rancher Kubernetes Engine](https://rancher.com/docs/rke/latest/en/) (RKE) 用于部署å�„ç§� Kubernetes 版本的信æ�¯ã€‚
+
+下表æ��述了å�—周期性数æ�®å�Œæ¥å½±å“�çš„ CRD。
+
+:::note
+
+�有管�员�以编辑元数� CRD。除�明确需�,�则建议��更新现有对象。
+
+:::
+
+| 资� | �述 | Rancher API URL |
+|----------|-------------|-----------------|
+| 系统镜� | 用于通过 RKE 部署 Kubernetes 集群的系统镜�列表。 | `/v3/rkek8ssystemimages` |
+| æœ�务选项 | ä¼ é€’ç»™ Kubernetes 组件的默认选项,例如 `kube-api`ã€�`scheduler`ã€�`kubelet`ã€�`kube-proxy` å’Œ `kube-controller-manager` | `/v3/rkek8sserviceoptions` |
+| �件模� | 用于部署�件组件的 YAML 定义,例如 Canal�Calico�Flannel�Weave�Kube-dns�CoreDNS�`metrics-server`�`nginx-ingress` | `/v3/rkeaddons` |
+
+管�员�以通过�置 RKE 元数�设置�执行以下�作:
+
+- 刷新 Kubernetes 元数�。适用于有新的 Kubernetes 补�版本�布,而用户希望在��级 Rancher 的情况下为集群�置最新版本的 Kubernetes 的情景。
+- 更改 Rancher 用于å�Œæ¥å…ƒæ•°æ�®çš„ URL。适用于è¦�让 Rancher 从本地å�Œæ¥è€Œä¸�是与 GitHub å�Œæ¥çš„æƒ…况。这在离线环境下é�žå¸¸æœ‰ç”¨ã€‚
+- é˜²æ¢ Rancher 自动å�Œæ¥å…ƒæ•°æ�®ã€‚è¿™å�¯ä»¥é˜²æ¢åœ¨ Rancher ä¸ä½¿ç”¨æ–°çš„/ä¸�å�—支æŒ�çš„ Kubernetes 版本。
+
+### 刷新 Kubernetes 元数�
+
+默认情况下,管�员或具有**管�集群驱动**[全局角色](../../how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/global-permissions.md)的用户,�以刷新 Kubernetes 元数�。
+
+�强制 Rancher 刷新 Kubernetes 元数�,�以执行手动刷新�作:
+
+1. 在左上角,�击 **☰ > 集群管�**。
+1. 在左侧导航è�œå�•ä¸ï¼Œå�•击**驱动**。
+1. �击**刷新 Kubernetes 元数�**。
+
+ä½ å�¯ä»¥å°† `refresh-interval-minutes` 设置为 `0`(è§�下文),将 Rancher é…�置为仅在需è¦�时刷新元数æ�®ï¼Œå¹¶åœ¨éœ€è¦�æ—¶ä½¿ç”¨æ¤æŒ‰é’®æ‰‹åŠ¨æ‰§è¡Œå…ƒæ•°æ�®åˆ·æ–°ã€‚
+
+### é…�置元数æ�®å�Œæ¥
+
+:::caution
+
+�有管​​�员�以更改这些设置。
+
+:::
+
+RKE 元数æ�®çš„é…�置控制 Rancher å�Œæ¥å…ƒæ•°æ�®çš„频率以å�Šä»Žä½•处下载数æ�®ã€‚ä½ å�¯ä»¥é€šè¿‡ Rancher UI 或通过 Rancher API 端点 `v3/settings/rke-metadata-config` é…�置元数æ�®ã€‚
+
+元数�的�置方��决于 Rancher 版本。
+
+è¦�在 Rancher ä¸ç¼–辑元数æ�®é…�置:
+
+1. 在左上角,�击 **☰ > 全局设置**。
+1. 转到 **rke-metadata-config**。�击 **⋮ > 编辑设置**。
+1. ä½ å�¯ä»¥é€‰æ‹©å¡«å†™ä»¥ä¸‹å�‚数:
+
+- `refresh-interval-minutes`:Rancher ç‰å¾…å�Œæ¥å…ƒæ•°æ�®çš„æ—¶é—´ã€‚如果è¦�ç¦�用定期刷新,请将 `refresh-interval-minutes` 设置为 0。
+- `url`:Rancher 从ä¸èŽ·å�–æ•°æ�®çš„ HTTP 路径。该路径必须是 JSON 文件的直接路径。例如,Rancher v2.4 的默认 URL 是 `https://releases.rancher.com/kontainer-driver-metadata/release-v2.4/data.json`。
+1. å�•击**ä¿�å˜**。
+
+å¦‚æžœä½ æ²¡æœ‰ç¦»çº¿è®¾ç½®ï¼Œåˆ™æ— éœ€æŒ‡å®š Rancher 获å�–元数æ�®çš„ URLï¼Œå› ä¸ºé»˜è®¤æ˜¯ä»Ž [Rancher 的元数æ�® Git 仓库获å�–](https://github.com/rancher/kontainer-driver-metadata/blob/dev-v2.5/data/data.json)的。
+
+ä½†æ˜¯ï¼Œå¦‚æžœä½ æœ‰[离线设置](#离线设置)éœ€æ±‚ï¼Œä½ éœ€è¦�å°† Kubernetes 元数æ�®ä»“库镜åƒ�到 Rancher å�¯ç”¨çš„ä½�置。然å�Žï¼Œä½ 需è¦�更改 URL æ�¥æŒ‡å�‘ JSON 文件的新ä½�置。
+
+### 离线设置
+
+Rancher Server 会定期刷新 `rke-metadata-config` �下载新的 Kubernetes 版本元数�。有关 Kubernetes 和 Rancher 版本的兼容性表,请�阅[�务�款](https://rancher.com/support-maintenance-terms/all-supported-versions/rancher-v2.2.8/)。
+
+å¦‚æžœä½ ä½¿ç”¨ç¦»çº¿è®¾ç½®ï¼Œåˆ™å�¯èƒ½æ— 法从 Rancher çš„ Git 仓库自动定期刷新 Kubernetes 元数æ�®ã€‚在这ç§�情况下,应该ç¦�用定期刷新以防æ¢åœ¨æ—¥å¿—䏿˜¾ç¤ºç›¸å…³é”™è¯¯ã€‚æˆ–è€…ï¼Œä½ å�¯ä»¥é…�置元数æ�®ï¼Œä»¥ä¾¿ Rancher 与本地的 RKE 元数æ�®å‰¯æœ¬è¿›è¡Œå�Œæ¥ã€‚
+
+è¦�å°† Rancher 与 RKE 元数æ�®çš„æœ¬åœ°é•œåƒ�å�Œæ¥ï¼Œç®¡ç�†å‘˜éœ€è¦�é…�ç½® `rke-metadata-config` æ�¥æŒ‡å�‘镜åƒ�。详情请å�‚考[é…�置元数æ�®å�Œæ¥](#é…�置元数æ�®å�Œæ¥)
+
+在将新的 Kubernetes ç‰ˆæœ¬åŠ è½½åˆ° Rancher Server ä¸ä¹‹å�Žï¼Œéœ€è¦�执行其他æ¥éª¤æ‰�能使用它们å�¯åŠ¨é›†ç¾¤ã€‚Rancher 需è¦�访问更新的系统镜åƒ�。虽然å�ªæœ‰ç®¡ç�†å‘˜å�¯ä»¥æ›´æ”¹å…ƒæ•°æ�®è®¾ç½®ï¼Œä½†ä»»ä½•用户都å�¯ä»¥ä¸‹è½½ Rancher 系统镜åƒ�并为镜åƒ�准备ç§�有容器镜åƒ�仓库。
+
+�下载�有镜�仓库的系统镜�:
+
+1. 点击左上角的 **☰**。
+1. 点击左侧导航底部的**简介**。
+1. 下载适用于 Linux 或 Windows �作系统的镜�。
+1. 下载 `rancher-images.txt`。
+1. 使用[离线环境安装](other-installation-methods/air-gapped-helm-cli-install/publish-images.md)时使用的æ¥éª¤å‡†å¤‡ç§�有镜åƒ�仓库,但ä¸�è¦�使用å�‘布页é�¢ä¸çš„ `rancher-images.txt`,而是使用上一个æ¥éª¤ä¸èŽ·å�–的文件。
+
+**结果**:Rancher 的离线安装现在å�¯ä»¥å�Œæ¥ Kubernetes 元数æ�®ã€‚å¦‚æžœä½ åœ¨å�‘布新版本的 Kubernetes 时更新了ç§�有镜åƒ�ä»“åº“ï¼Œä½ å�¯ä»¥ä½¿ç”¨æ–°ç‰ˆæœ¬é…�ç½®é›†ç¾¤ï¼Œè€Œæ— éœ€å�‡çº§ Rancher。
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/overview.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/overview.md
new file mode 100644
index 00000000000..903c8c28bd2
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/overview.md
@@ -0,0 +1,65 @@
+---
+title: 概述
+---
+
+Rancher 是一个为使用容器的公å�¸æ‰“é€ çš„å®¹å™¨ç®¡ç�†å¹³å�°ã€‚Rancher 使得开å�‘者å�¯ä»¥éš�处è¿�行 Kubernetes(Run Kubernetes Everywhere),满足 IT 需求规范,赋能 DevOps 团队。
+
+## Run Kubernetes Everywhere
+
+Kubernetes å·²ç»�æˆ�ä¸ºå®¹å™¨ç¼–æŽ’æ ‡å‡†ã€‚çŽ°åœ¨ï¼Œå¤§å¤šæ•°äº‘å’Œè™šæ‹ŸåŒ–æ��供商都æ��供容器编排æœ�务。Rancher 用户å�¯ä»¥é€‰æ‹©ä½¿ç”¨ Rancher Kubernetes Engine(RKE)或云 Kubernetes æœ�务(例如 GKEã€�AKS å’Œ EKS)创建 Kubernetes 集群,还å�¯ä»¥å¯¼å…¥å’Œç®¡ç�†ä½¿ç”¨ä»»ä½• Kubernetes å�‘行版或安装程åº�创建的现有 Kubernetes 集群。
+
+## 满足 IT 需求规范
+
+Rancher 支æŒ�对其控制的所有 Kubernetes 集群进行集ä¸è®¤è¯�ã€�è®¿é—®æŽ§åˆ¶å’Œç›‘æŽ§ã€‚ä¾‹å¦‚ï¼Œä½ å�¯ä»¥ï¼š
+
+- ä½¿ç”¨ä½ çš„ Active Directory å‡è¯�访问由云æ��供商(例如 GKE)托管的 Kubernetes 集群。
+- 设置所有用户ã€�组ã€�项目ã€�集群和云æœ�务的æ�ƒé™�控制ç–略和安全ç–略。
+- 一站�查看 Kubernetes 集群的�行状况和容�。
+
+## 赋能 DevOps 团队
+
+Rancher 为 DevOps 工程师æ��供简å�•直接的用户界é�¢ï¼Œä»¥ç®¡ç�†å…¶åº”用负载。用户ä¸�需è¦�对 Kubernetes 有é�žå¸¸æ·±å…¥çš„了解,å�³å�¯ä½¿ç”¨ Rancher。Rancher 应用商店包å�«ä¸€å¥—实用的 DevOps å¼€å�‘工具。Rancher 获得了多ç§�云原生生æ€�系统产å“�的认è¯�,包括安全工具ã€�监控系统ã€�容器镜åƒ�仓库ã€�å˜å‚¨å’Œç½‘络驱动ç‰ã€‚
+
+下图讲述了 Rancher 在 IT 管�团队和 DevOps 开�团队之间扮演的角色。DevOps 团队把他们的应用部署在他们选择的公有云或�有云上。IT 管�员负责查看并管�用户�集群�云�务的��。
+
+
+
+## Rancher API Server 的功能
+
+Rancher API Server 是基于嵌入� Kubernetes API Server 和 etcd 数�库建立的,它�供了以下功能:
+
+### 授�和基于角色的��控制(RBAC)
+
+- **用户管ç�†**:Rancher API Server 除了管ç�†æœ¬åœ°ç”¨æˆ·ï¼Œè¿˜[管ç�†ç”¨æˆ·ç”¨æ�¥è®¿é—®å¤–部æœ�务所需的认è¯�ä¿¡æ�¯](../pages-for-subheaders/authentication-config.md),如登录 Active Directory å’Œ GitHub 所需的账å�·å¯†ç �。
+- **授æ�ƒ**:Rancher API Server å�¯ä»¥ç®¡ç�†[访问控制ç–ç•¥](../pages-for-subheaders/manage-role-based-access-control-rbac.md)å’Œ[安全ç–ç•¥](../how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/create-pod-security-policies.md)。
+
+### 使用 Kubernetes 的功能
+
+- **�置 Kubernetes 集群**:Rancher API Server �以在已有节点上[�置 Kubernetes](../pages-for-subheaders/kubernetes-clusters-in-rancher-setup.md),或进行 [Kubernetes 版本�级](installation-and-upgrade/upgrade-and-roll-back-kubernetes.md)。
+- **管�应用商店**:Rancher 支�使用 [Helm Chart 应用商店](../pages-for-subheaders/helm-charts-in-rancher.md)实现轻���部署应用。
+- **管ç�†é¡¹ç›®**:项目由集群ä¸å¤šä¸ªå‘½å��空间和访问控制ç–略组æˆ�,是 Rancher ä¸çš„一个概念,Kubernetes ä¸å¹¶æ²¡æœ‰è¿™ä¸ªæ¦‚å¿µã€‚ä½ å�¯ä»¥ä½¿ç”¨é¡¹ç›®å®žçŽ°ä»¥ç»„ä¸ºå�•ä½�,管ç�†å¤šä¸ªå‘½å��空间,并进行 Kubernetes 相关æ“�作。Rancher UI æ��供用于[项目管ç�†](../pages-for-subheaders/manage-projects.md)å’Œ[项目内应用管ç�†](../pages-for-subheaders/kubernetes-resources-setup.md)的功能。
+- **Fleet æŒ�ç»äº¤ä»˜**:在 Rancher ä¸ï¼Œä½ å�¯ä»¥ä½¿ç”¨ [Fleet æŒ�ç»äº¤ä»˜](../pages-for-subheaders/fleet-gitops-at-scale.md)将应用程åº�从 Git ä»“åº“éƒ¨ç½²åˆ°ç›®æ ‡ä¸‹æ¸¸ Kubernetes é›†ç¾¤ï¼Œæ— éœ€ä»»ä½•æ‰‹åŠ¨æ“�作。
+- **Istio**:[Rancher 与 Istio 集æˆ�](../pages-for-subheaders/istio.md),使得管ç�†å‘˜æˆ–集群所有者å�¯ä»¥å°† Istio 交给开å�‘者,然å�Žå¼€å�‘者使用 Istio 执行安全ç–略,排查问题,或为è“�绿部署,金ä¸�雀部署,和 A/B 测试进行æµ�é‡�管ç�†ã€‚
+
+### �置云基础设施
+
+- **å�Œæ¥èŠ‚ç‚¹ä¿¡æ�¯**:Rancher API Server å�¯ä»¥å�Œæ¥æ‰€æœ‰é›†ç¾¤ä¸å…¨éƒ¨[节点](../how-to-guides/new-user-guides/manage-clusters/nodes-and-node-pools.md)的信æ�¯ã€‚
+- **é…�置云基础设施**ï¼šå¦‚æžœä½ ä¸º Rancher é…�置了云æ��供商,Rancher å�¯ä»¥åœ¨äº‘端动æ€�é…�ç½®[新节点](../pages-for-subheaders/use-new-nodes-in-an-infra-provider.md)å’Œ[æŒ�久化å˜å‚¨](../pages-for-subheaders/create-kubernetes-persistent-storage.md)。
+
+### 查看集群信�
+
+- **日志管�**:Rancher �以与多� Kubernetes 集群之外的主�日志管�工具集�。
+- **监控**ï¼šä½ å�¯ä»¥ä½¿ç”¨ Rancher,通过业界领先并开æº�çš„ Prometheus æ�¥ç›‘控集群节点ã€�Kubernetes 组件和软件部署的状æ€�和进程。
+- **告è¦**:为了ä¿�è¯�集群和应用的æ£å¸¸è¿�行,æ��高公å�¸çš„ç”Ÿäº§æ•ˆçŽ‡ï¼Œä½ éœ€è¦�éš�时了解集群和项目的计划内和é�žè®¡åˆ’事件。
+
+## 使用 Rancher 编辑下游集群
+
+对于已有集群而言,å�¯æ��供的选项和设置å�–å†³äºŽä½ é…�置集群的方法。例如,å�ªæœ‰[通过 RKE å�¯åЍ](../pages-for-subheaders/launch-kubernetes-with-rancher.md)的集群æ‰�有å�¯ç¼–辑的**集群选项**。
+
+使用 Rancher 创建集群å�Žï¼Œé›†ç¾¤ç®¡ç�†å‘˜å�¯ä»¥ç®¡ç�†é›†ç¾¤æˆ�员,管ç�†èŠ‚ç‚¹æ± ï¼Œæˆ–è¿›è¡Œ[å…¶ä»–æ“�作](../pages-for-subheaders/cluster-configuration.md)。
+
+下表总结了�一�类型的集群和对应的�编辑的选项和设置:
+
+import ClusterCapabilitiesTable from '../shared-files/_cluster-capabilities-table.md';
+
+
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/quick-start-guides/deploy-rancher-manager/aws-marketplace.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/quick-start-guides/deploy-rancher-manager/aws-marketplace.md
new file mode 100644
index 00000000000..2fc1ce0bd33
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/quick-start-guides/deploy-rancher-manager/aws-marketplace.md
@@ -0,0 +1,6 @@
+---
+title: Rancher AWS Marketplace 快速入门
+description: 使用 Amazon EKS 部署 Rancher Server。
+---
+
+Amazon Elastic Kubernetes Service (EKS) �以快速[将 Rancher 部署到 Amazon Web Services (AWS)](https://documentation.suse.com/trd/kubernetes/single-html/gs_rancher_aws-marketplace/)。详情请��我们的 [Amazon Marketplace 列表](https://aws.amazon.com/marketplace/pp/prodview-go7ent7goo5ae)。观看 [demo](https://youtu.be/9dznJ7Ons0M),了解 AWS Marketplace SUSE Rancher 设置的演练。
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/quick-start-guides/deploy-rancher-manager/aws.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/quick-start-guides/deploy-rancher-manager/aws.md
new file mode 100644
index 00000000000..cb47333ce32
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/quick-start-guides/deploy-rancher-manager/aws.md
@@ -0,0 +1,95 @@
+---
+title: Rancher AWS 快速入门指�
+description: 阅读æ¤åˆ†æ¥ Rancher AWS 指å�—,以快速部署带有å�•节点下游 Kubernetes 集群的 Rancher Server。
+---
+
+ä½ å�¯ä»¥å�‚考以下æ¥éª¤ï¼Œåœ¨ AWS çš„å�•节点 K3s Kubernetes 集群ä¸å¿«é€Ÿéƒ¨ç½² Rancher Serverï¼Œå¹¶é™„åŠ ä¸€ä¸ªå�•节点下游 Kubernetes 集群。
+
+:::caution
+
+æœ¬ç« èŠ‚ä¸æ��供的指å�—ï¼Œæ—¨åœ¨å¸®åŠ©ä½ å¿«é€Ÿå�¯åŠ¨ä¸€ä¸ªç”¨äºŽ Rancher 的沙盒,以评估 Rancher 是å�¦èƒ½æ»¡è¶³ä½ 的使用需求。快速入门指å�—ä¸�é€‚ç”¨äºŽç”Ÿäº§çŽ¯å¢ƒã€‚å¦‚æžœä½ éœ€è¦�获å�–生产环境的æ“�作指导,请å�‚è§�[安装](../../../pages-for-subheaders/installation-and-upgrade.md)。
+
+:::
+
+## 先决�件
+
+:::caution
+
+部署到 Amazon AWS 会产生费用。
+
+:::
+
+- [Amazon AWS 账�](https://aws.amazon.com/account/): 用于创建部署 Rancher Server 和 Kubernetes 的资�。
+- [Amazon AWS 访问密钥](https://docs.aws.amazon.com/general/latest/gr/managing-aws-access-keys.html)ï¼šå¦‚æžœä½ æ²¡æœ‰çš„è¯�,请访问æ¤é“¾æŽ¥æŸ¥çœ‹ç›¸å…³æŒ‡å�—。
+- [已创建 IAM ç–ç•¥](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-start)ï¼šå®šä¹‰é™„åŠ æ¤ç–略的账å�·æ‰€å…·æœ‰çš„æ�ƒé™�。
+- [Terraform](https://www.terraform.io/downloads.html): 用于在 Amazon AWS ä¸é…�ç½®æœ�务器和集群。
+
+### IAM ç–略示例
+
+AWS 模å�—å�ªåˆ›å»ºä¸€ä¸ª EC2 密钥对ã€�一个 EC2 安全组和一个 EC2 实例。以下是一个简å�•çš„ç–略:
+
+```json
+{
+ "Version": "2012-10-17",
+ "Statement": [
+ {
+ "Effect": "Allow",
+ "Action": "ec2:*",
+ "Resource": "*"
+ }
+ ]
+}
+```
+
+## 开始使用
+
+1. 使用命令行工具,执行 `git clone https://github.com/rancher/quickstart` 把 [Rancher Quickstart](https://github.com/rancher/quickstart) 克隆到本地。
+
+2. 执行 `cd quickstart/rancher/aws` 命令,进入包� Terraform 文件的 AWS 文件夹。
+
+3. 把 `terraform.tfvars.example` 文件�命�为 `terraform.tfvars`。
+
+4. 编辑 `terraform.tfvars` 文件,并替�以下��:
+
+ - `aws_access_key` - 替�为 Amazon AWS 访问密钥
+ - `aws_secret_key` - 替�为 Amazon AWS Secret 密钥
+ - `rancher_server_admin_password` - 替æ�¢ä¸ºåˆ›å»º Rancher Server çš„ admin è´¦å�·çš„密ç �(最少 12 å—符)
+
+5. **å�¯é€‰**:修改 `terraform.tfvars` ä¸çš„å�¯é€‰å�‚数。å�‚è§� [Quickstart Readme](https://github.com/rancher/quickstart) 以å�Š [AWS Quickstart Readme](https://github.com/rancher/quickstart/tree/master/rancher/aws) 了解更多信æ�¯ã€‚
+ 建议包括:
+
+ - `aws_region` - Amazon AWS 区域。AWS 的默认区域 (`us-east-1`) ä¸�一定是è·�ç¦»ä½ æœ€è¿‘çš„åŒºåŸŸã€‚å»ºè®®ä¿®æ”¹ä¸ºè·�ç¦»ä½ æœ€è¿‘çš„åŒºåŸŸã€‚
+ - `prefix` - 所有创建资�的�缀
+ - `instance_type` - EC2 ä½¿ç”¨çš„å®žä¾‹è§„æ ¼ï¼Œæœ€å°�è§„æ ¼ä¸º `t3a.medium` 。如果在预算范围内,å�¯ä»¥ä½¿ç”¨ `t3a.large` 或 `t3a.xlarge`。
+ - `add_windows_node` - 如果设为 true,一个é¢�外的 Windows worker èŠ‚ç‚¹ä¼šæ·»åŠ åˆ°å·¥ä½œè´Ÿè½½é›†ç¾¤ä¸ã€‚
+
+6. 执行 `terraform init`。
+
+7. 执行 `terraform apply --auto-approve` 以åˆ�始化环境。然å�Žï¼Œç‰å¾…命令行工具返回以下信æ�¯ï¼š
+
+ ```
+ Apply complete! Resources: 16 added, 0 changed, 0 destroyed.
+
+ Outputs:
+
+ rancher_node_ip = xx.xx.xx.xx
+ rancher_server_url = https://rancher.xx.xx.xx.xx.sslip.io
+ workload_node_ip = yy.yy.yy.yy
+ ```
+
+8. 将以上输出ä¸çš„ `rancher_server_url` 粘贴到æµ�览器ä¸ã€‚在登录页é�¢ä¸ç™»å½•(默认用户å��为 `admin`,密ç �为在 `rancher_server_admin_password` ä¸è®¾ç½®çš„密ç �)。
+9. 使用 `quickstart/rancher/aws` ä¸ç”Ÿæˆ�çš„ `id_rsa` 密钥 SSH 到 Rancher Server。
+
+##### 结果
+
+两个 Kubernetes é›†ç¾¤å·²éƒ¨ç½²åˆ°ä½ çš„ AWS 账户ä¸ï¼Œä¸€ä¸ªè¿�行 Rancher Server,å�¦ä¸€ä¸ªä¸ºå®žéªŒéƒ¨ç½²å�šå¥½å‡†å¤‡ã€‚请注æ„�,虽然这ç§�设置是探索 Rancher 功能的好方法,但在生产环境ä¸ï¼Œåº”é�µå¾ªæˆ‘们的高å�¯ç”¨è®¾ç½®æŒ‡å�—。用于虚拟机的 SSH 密钥是自动生æˆ�的,å˜å‚¨åœ¨æ¨¡å�—目录ä¸ã€‚
+
+## å�Žç»æ“�作
+
+使用 Rancher 创建 deployment。详情请��[创建 Deployment](../../../pages-for-subheaders/deploy-rancher-workloads.md)。
+
+## 销�环境
+
+1. 进入 `quickstart/rancher/aws` 文件夹,然�执行 `terraform destroy --auto-approve`。
+
+2. ç‰å¾…命令行界é�¢æ˜¾ç¤ºèµ„æº�å·²åˆ é™¤çš„æ¶ˆæ�¯ã€‚
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/quick-start-guides/deploy-rancher-manager/azure.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/quick-start-guides/deploy-rancher-manager/azure.md
new file mode 100644
index 00000000000..33a8d411ba0
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/quick-start-guides/deploy-rancher-manager/azure.md
@@ -0,0 +1,81 @@
+---
+title: Rancher Azure 快速入门指�
+description: 阅读æ¤åˆ†æ¥ Rancher Azure 指å�—,以快速部署带有å�•节点下游 Kubernetes 集群的 Rancher Server。
+---
+
+ä½ å�¯ä»¥å�‚考以下æ¥éª¤ï¼Œåœ¨ Azure çš„å�•节点 K3s Kubernetes 集群ä¸å¿«é€Ÿéƒ¨ç½² Rancher Serverï¼Œå¹¶é™„åŠ ä¸€ä¸ªå�•节点下游 Kubernetes 集群。
+
+:::caution
+
+æœ¬ç« èŠ‚ä¸æ��供的指å�—ï¼Œæ—¨åœ¨å¸®åŠ©ä½ å¿«é€Ÿå�¯åŠ¨ä¸€ä¸ªç”¨äºŽ Rancher 的沙盒,以评估 Rancher 是å�¦èƒ½æ»¡è¶³ä½ 的使用需求。快速入门指å�—ä¸�é€‚ç”¨äºŽç”Ÿäº§çŽ¯å¢ƒã€‚å¦‚æžœä½ éœ€è¦�获å�–生产环境的æ“�作指导,请å�‚è§�[安装](../../../pages-for-subheaders/installation-and-upgrade.md)。
+
+:::
+
+## 先决�件
+
+:::caution
+
+部署到 Microsoft Azure 会产生费用。
+
+:::
+
+- [Microsoft Azure 账�](https://azure.microsoft.com/en-us/free/):用于创建部署 Rancher 和 Kubernetes 的资�。
+- [Microsoft Azure 订阅](https://docs.microsoft.com/en-us/azure/cost-management-billing/manage/create-subscription#create-a-subscription-in-the-azure-portal)ï¼šå¦‚æžœä½ æ²¡æœ‰çš„è¯�,请访问æ¤é“¾æŽ¥æŸ¥çœ‹å¦‚何创建 Microsoft Azure 订阅。
+- [Micsoroft Azure 租户](https://docs.microsoft.com/en-us/azure/active-directory/develop/quickstart-create-new-tenant):访问æ¤é“¾æŽ¥å¹¶å�‚考教程以创建 Microsoft Azure 租户。
+- [Microsoft Azure 客户端 ID/密文](https://docs.microsoft.com/en-us/azure/active-directory/develop/howto-create-service-principal-portal):访问æ¤é“¾æŽ¥å¹¶å�‚考教程以创建 Microsoft Azure 客户端和密文。
+- [Terraform](https://www.terraform.io/downloads.html):用于在 Microsoft Azure ä¸é…�ç½®æœ�务器和集群。
+
+
+## 开始使用
+
+1. 使用命令行工具,执行 `git clone https://github.com/rancher/quickstart` 把 [Rancher Quickstart](https://github.com/rancher/quickstart) 克隆到本地。
+
+2. 执行 `cd quickstart/rancher/azure` 命令,进入包� Terraform 文件的 Azure 文件夹。
+
+3. 把 `terraform.tfvars.example` 文件�命�为 `terraform.tfvars`。
+
+4. 编辑 `terraform.tfvars` 文件,并替�以下��:
+ - `azure_subscription_id` - 替�为 Microsoft Azure 订阅 ID。
+ - `azure_client_id` - 替�为 Microsoft Azure 客户端 ID。
+ - `azure_client_secret` - 替�为 Microsoft Azure 客户端密文。
+ - `azure_tenant_id` - 替�为 Microsoft Azure 租户 ID。
+ - `rancher_server_admin_password` - 替æ�¢ä¸ºåˆ›å»º Rancher Server çš„ admin è´¦å�·çš„密ç �(最少 12 å—符)
+
+5. **å�¯é€‰**:修改 `terraform.tfvars` ä¸çš„å�¯é€‰å�‚数。
+ �� [Quickstart Readme](https://github.com/rancher/quickstart) 以� [Azure Quickstart Readme](https://github.com/rancher/quickstart/tree/master/rancher/azure) 了解更多信�。建议包括:
+ - `azure_location` - Microsoft Azure 区域。Azure 的默认区域 (`East US`) ä¸�一定是è·�ç¦»ä½ æœ€è¿‘çš„åŒºåŸŸã€‚å»ºè®®ä¿®æ”¹ä¸ºè·�ç¦»ä½ æœ€è¿‘çš„åŒºåŸŸã€‚
+ - `prefix` - 所有创建资�的�缀
+ - `instance_type` - 使用的计算实例大å°�,最å°�è§„æ ¼ä¸º `Standard_DS2_v2`。如果在预算范围内,å�¯ä»¥ä½¿ç”¨ `Standard_DS2_v3` 或 `Standard_DS3_v2`。
+ - `add_windows_node` - 如果设为 true,一个é¢�外的 Windows worker èŠ‚ç‚¹ä¼šæ·»åŠ åˆ°å·¥ä½œè´Ÿè½½é›†ç¾¤ä¸ã€‚
+ - `windows_admin_password` - Windows worker 节点管ç�†å‘˜çš„密ç �
+
+6. 执行 `terraform init`。
+
+7. 执行 `terraform apply --auto-approve` 以åˆ�始化环境。然å�Žï¼Œç‰å¾…命令行工具返回以下信æ�¯ï¼š
+
+ ```
+ Apply complete! Resources: 16 added, 0 changed, 0 destroyed.
+
+ Outputs:
+
+ rancher_node_ip = xx.xx.xx.xx
+ rancher_server_url = https://rancher.xx.xx.xx.xx.sslip.io
+ workload_node_ip = yy.yy.yy.yy
+ ```
+
+8. 将以上输出ä¸çš„ `rancher_server_url` 粘贴到æµ�览器ä¸ã€‚在登录页é�¢ä¸ç™»å½•(默认用户å��为 `admin`,密ç �为在 `rancher_server_admin_password` ä¸è®¾ç½®çš„密ç �)。
+9. 使用 `quickstart/rancher/azure` ä¸ç”Ÿæˆ�çš„ `id_rsa` 密钥 SSH 到 Rancher Server。
+
+#### 结果
+
+两个 Kubernetes é›†ç¾¤å·²éƒ¨ç½²åˆ°ä½ çš„ Azure 账户ä¸ï¼Œä¸€ä¸ªè¿�行 Rancher Server,å�¦ä¸€ä¸ªä¸ºå®žéªŒéƒ¨ç½²å�šå¥½å‡†å¤‡ã€‚请注æ„�,虽然这ç§�设置是探索 Rancher 功能的好方法,但在生产环境ä¸ï¼Œåº”é�µå¾ªæˆ‘们的高å�¯ç”¨è®¾ç½®æŒ‡å�—。用于虚拟机的 SSH 密钥是自动生æˆ�的,å˜å‚¨åœ¨æ¨¡å�—目录ä¸ã€‚
+
+### å�Žç»æ“�作
+
+使用 Rancher 创建 deployment。详情请��[创建 Deployment](../../../pages-for-subheaders/deploy-rancher-workloads.md)。
+
+## 销�环境
+
+1. 进入 `quickstart/rancher/azure` 文件夹,然�执行 `terraform destroy --auto-approve`。
+
+2. ç‰å¾…命令行界é�¢æ˜¾ç¤ºèµ„æº�å·²åˆ é™¤çš„æ¶ˆæ�¯ã€‚
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/quick-start-guides/deploy-rancher-manager/digitalocean.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/quick-start-guides/deploy-rancher-manager/digitalocean.md
new file mode 100644
index 00000000000..e87f17c26d0
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/quick-start-guides/deploy-rancher-manager/digitalocean.md
@@ -0,0 +1,74 @@
+---
+title: Rancher DigitalOcean 快速入门指�
+description: 阅读æ¤åˆ†æ¥ Rancher DigitalOcean 指å�—,以快速部署带有å�•节点下游 Kubernetes 集群的 Rancher Server。
+---
+
+ä½ å�¯ä»¥å�‚考以下æ¥éª¤ï¼Œåœ¨ DigitalOcean çš„å�•节点 K3s Kubernetes 集群ä¸å¿«é€Ÿéƒ¨ç½² Rancher Serverï¼Œå¹¶é™„åŠ ä¸€ä¸ªå�•节点下游 Kubernetes 集群。
+
+:::caution
+
+æœ¬ç« èŠ‚ä¸æ��供的指å�—ï¼Œæ—¨åœ¨å¸®åŠ©ä½ å¿«é€Ÿå�¯åŠ¨ä¸€ä¸ªç”¨äºŽ Rancher 的沙盒,以评估 Rancher 是å�¦èƒ½æ»¡è¶³ä½ 的使用需求。快速入门指å�—ä¸�é€‚ç”¨äºŽç”Ÿäº§çŽ¯å¢ƒã€‚å¦‚æžœä½ éœ€è¦�获å�–生产环境的æ“�作指导,请å�‚è§�[安装](../../../pages-for-subheaders/installation-and-upgrade.md)。
+
+:::
+
+## 先决�件
+
+:::caution
+
+部署到 DigitalOcean 会产生费用。
+
+:::
+
+- [DigitalOcean 账�](https://www.digitalocean.com):用于�行�务器和集群。
+- [DigitalOcean 访问密钥](https://www.digitalocean.com/community/tutorials/how-to-create-a-digitalocean-space-and-api-key)ï¼šå¦‚æžœä½ æ²¡æœ‰çš„è¯�,请访问æ¤é“¾æŽ¥åˆ›å»ºä¸€ä¸ªã€‚
+- [Terraform](https://www.terraform.io/downloads.html):用于在 DigitalOcean ä¸é…�ç½®æœ�务器和集群。
+
+
+## 开始使用
+
+1. 使用命令行工具,执行 `git clone https://github.com/rancher/quickstart` 把 [Rancher Quickstart](https://github.com/rancher/quickstart) 克隆到本地。
+
+2. 执行 `cd quickstart/rancher/do` 命令,进入包� Terraform 文件的 DigitalOcean 文件夹。
+
+3. 把 `terraform.tfvars.example` 文件�命�为 `terraform.tfvars`。
+
+4. 编辑 `terraform.tfvars` 文件,并替�以下��:
+ - `do_token` - 替�为 DigitalOcean 访问密钥
+ - `rancher_server_admin_password` - 替æ�¢ä¸ºåˆ›å»º Rancher Server çš„ admin è´¦å�·çš„密ç �(最少 12 å—符)
+
+5. **å�¯é€‰**:修改 `terraform.tfvars` ä¸çš„å�¯é€‰å�‚数。
+ �� [Quickstart Readme](https://github.com/rancher/quickstart) 以� [DO Quickstart Readme](https://github.com/rancher/quickstart/tree/master/rancher/do) 了解更多信�。建议包括:
+ - `do_region` - DigitalOcean 区域。DigitalOcean 的默认区域ä¸�一定是è·�ç¦»ä½ æœ€è¿‘çš„åŒºåŸŸã€‚å»ºè®®ä¿®æ”¹ä¸ºè·�ç¦»ä½ æœ€è¿‘çš„åŒºåŸŸã€‚
+ - `prefix` - 所有创建资�的�缀
+ - `droplet_size` - ä½¿ç”¨çš„è®¡ç®—å®žä¾‹è§„æ ¼ï¼Œæœ€å°�è§„æ ¼ä¸º`s-2vcpu-4gb`。如果在预算范围内,å�¯ä»¥ä½¿ç”¨ `s-4vcpu-8gb`。
+
+6. 执行 `terraform init`。
+
+7. 执行 `terraform apply --auto-approve` 以åˆ�始化环境。然å�Žï¼Œç‰å¾…命令行工具返回以下信æ�¯ï¼š
+
+ ```
+ Apply complete! Resources: 15 added, 0 changed, 0 destroyed.
+
+ Outputs:
+
+ rancher_node_ip = xx.xx.xx.xx
+ rancher_server_url = https://rancher.xx.xx.xx.xx.sslip.io
+ workload_node_ip = yy.yy.yy.yy
+ ```
+
+8. 将以上输出ä¸çš„ `rancher_server_url` 粘贴到æµ�览器ä¸ã€‚在登录页é�¢ä¸ç™»å½•(默认用户å��为 `admin`,密ç �为在 `rancher_server_admin_password` ä¸è®¾ç½®çš„密ç �)。
+9. 使用 `quickstart/rancher/do` ä¸ç”Ÿæˆ�çš„ `id_rsa` 密钥 SSH 到 Rancher Server。
+
+#### 结果
+
+两个 Kubernetes é›†ç¾¤å·²éƒ¨ç½²åˆ°ä½ çš„ DigitalOcean 账户ä¸ï¼Œä¸€ä¸ªè¿�行 Rancher Server,å�¦ä¸€ä¸ªä¸ºå®žéªŒéƒ¨ç½²å�šå¥½å‡†å¤‡ã€‚请注æ„�,虽然这ç§�设置是探索 Rancher 功能的好方法,但在生产环境ä¸ï¼Œåº”é�µå¾ªæˆ‘们的高å�¯ç”¨è®¾ç½®æŒ‡å�—。用于虚拟机的 SSH 密钥是自动生æˆ�的,å˜å‚¨åœ¨æ¨¡å�—目录ä¸ã€‚
+
+### å�Žç»æ“�作
+
+使用 Rancher 创建 deployment。详情请��[创建 Deployment](../../../pages-for-subheaders/deploy-rancher-workloads.md)。
+
+## 销�环境
+
+1. 进入 `quickstart/rancher/do` 文件夹,然�执行 `terraform destroy --auto-approve`。
+
+2. ç‰å¾…命令行界é�¢æ˜¾ç¤ºèµ„æº�å·²åˆ é™¤çš„æ¶ˆæ�¯ã€‚
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/quick-start-guides/deploy-rancher-manager/equinix-metal.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/quick-start-guides/deploy-rancher-manager/equinix-metal.md
new file mode 100644
index 00000000000..c7316352cc2
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/quick-start-guides/deploy-rancher-manager/equinix-metal.md
@@ -0,0 +1,106 @@
+---
+title: Rancher Equinix Metal 快速入门
+---
+
+## æœ¬ç« èŠ‚å¼•å¯¼ä½ ï¼š
+
+- �置 Equinix Metal server
+- 安装 Rancher 2.x
+- åˆ›å»ºä½ çš„ç¬¬ä¸€ä¸ªé›†ç¾¤
+- 部署一个 Nginx 应用
+
+:::caution
+
+æœ¬ç« èŠ‚ä¸æ��供的指å�—ï¼Œæ—¨åœ¨å¸®åŠ©ä½ å¿«é€Ÿå�¯åŠ¨ä¸€ä¸ªç”¨äºŽ Rancher 的沙盒,以评估 Rancher 是å�¦èƒ½æ»¡è¶³ä½ 的使用需求。ä¸�建议将 Docker å®‰è£…ç”¨äºŽç”Ÿäº§çŽ¯å¢ƒã€‚å¦‚æžœä½ éœ€è¦�获å�–生产环境的æ“�作指导,请å�‚è§�[安装](../../../pages-for-subheaders/installation-and-upgrade.md)。
+
+:::
+
+## 快速入门概述
+
+本指�划分为��任务,以便于使用。
+
+
+
+## 先决�件
+
+- [Equinix Metal 账�](https://metal.equinix.com/developers/docs/accounts/users/)
+- [Equinix Metal 项目](https://metal.equinix.com/developers/docs/accounts/projects/)
+
+
+### 1. �置 Equinix Metal 主机
+
+开始部署 Equinix Metal ä¸»æœºã€‚ä½ å�¯ä»¥ä½¿ç”¨ Equinix Metal 控制å�°ã€�CLI 或 API æ�¥é…�ç½® Equinix Metal Serverã€‚å¦‚æžœä½ éœ€è¦�了解æ¯�ç§� Deployment 类型的说明,请å�‚è§� [Equinix Metal 部署](https://metal.equinix.com/developers/docs/deploy/on-demand/)。以下链接介ç»� Equinix Metal Server 的类型以å�Šä»·æ ¼ï¼š
+- [Equinix Metal Server 类型](https://metal.equinix.com/developers/docs/servers/about/)
+- [Equinix Metal ä»·æ ¼](https://metal.equinix.com/developers/docs/servers/server-specs/)
+
+:::note 注�事项:
+
+- 如果使用 CLI 或 API é…�置新的 Equinix Metal Serverï¼Œä½ éœ€è¦�æ��供项目 IDã€�计划ã€�metro å’Œæ“�作系统。
+- å½“ä½¿ç”¨äº‘ä¸»æœºçš„è™šæ‹Ÿæœºæ—¶ï¼Œä½ éœ€è¦�å…�许 80 å’Œ 443 端å�£çš„入站 TCP 通信。有关端å�£é…�置的信æ�¯ï¼Œè¯·å�‚è§�ä½ çš„äº‘ä¸»æœºçš„æ–‡æ¡£ã€‚
+- 如需了解所有端��求,请�� [Docker 安装](../../../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/node-requirements-for-rancher-managed-clusters.md)。
+- æ ¹æ�®æˆ‘们的[è¦�求](../../../pages-for-subheaders/installation-requirements.md)é…�置主机。
+
+:::
+### 2. 安装 Rancher
+
+�在 Equinix Metal 主机上安装 Rancher,先与它连接,然�使用 shell 进行安装。
+
+1. ä½¿ç”¨ä½ æƒ¯ç”¨çš„ shell(例如 PuTTy æˆ–è¿œç¨‹ç»ˆç«¯ï¼‰ç™»å½•åˆ°ä½ çš„ Equinix Metal 主机。
+
+2. 在 shell 䏿‰§è¡Œä»¥ä¸‹å‘½ä»¤ï¼š
+
+ ```
+ sudo docker run -d --restart=unless-stopped -p 80:80 -p 443:443 --privileged rancher/rancher
+ ```
+
+**结果**:Rancher 已安装。
+
+### 3. 登录
+
+登录到 Rancher å�Žï¼Œä½ 还需è¦�进行一些一次性é…�置。
+
+1. 打开 Web �览器并输入主机的 IP 地�`https://`。
+
+ å°† `` 替æ�¢ä¸ºä½ 的主机 IP 地å�€ã€‚
+
+2. 出现æ��示时,为默认 `admin` è´¦å�·åˆ›å»ºå¯†ç �。
+
+3. 设置 **Rancher Server URL**。URL å�¯ä»¥æ˜¯ IP 地å�€æˆ–主机å��。需è¦�注æ„�ï¼Œæ·»åŠ åˆ°é›†ç¾¤ä¸çš„æ¯�ä¸ªèŠ‚ç‚¹éƒ½å¿…é¡»èƒ½å¤Ÿè¿žæŽ¥åˆ°æ¤ URL。 å¦‚æžœä½ åœ¨ URL ä¸ä½¿ç”¨ä¸»æœºå��,则æ¤ä¸»æœºå��必须在 DNS ä¸è§£æž�åˆ°ä½ éœ€è¦�æ·»åŠ åˆ°é›†ç¾¤çš„èŠ‚ç‚¹ä¸Šã€‚
+
+
+
+### 4. 创建集群
+
+欢迎使用 Rancherï¼�çŽ°åœ¨ï¼Œä½ å�¯ä»¥åˆ›å»ºä½ 的第一个 Kubernetes 集群了。
+
+在æ¤ä»»åŠ¡ä¸ï¼Œä½ å�¯ä»¥ä½¿ç”¨**自定义**选项。æ¤é€‰é¡¹å…�è®¸ä½ æŠŠ _ä»»æ„�_ Linux 主机(云虚拟机ã€�æœ¬åœ°è™šæ‹Ÿæœºæˆ–è£¸æœºï¼‰æ·»åŠ åˆ°é›†ç¾¤ä¸ã€‚
+
+1. 点击 **☰ > 集群管�**。
+1. 在**集群**页�,点击**创建**。
+1. 选择**自定义**。
+1. 输入**集群�称**。
+1. 点击**下一æ¥**。
+1. 在**节点角色**ä¸ï¼Œé€‰æ‹© _全部_ 角色,å�³ **etcd**,**Control** å’Œ **Worker**。
+ - **å�¯é€‰**:Rancher 会自动检测用于 Rancher 通信和集群通信的 IP 地å�€ã€‚ä½ å�¯ä»¥ä½¿ç”¨**节点地å�€**处的`公有地å�€`å’Œ`内网地å�€`进行覆盖。
+1. 将注册命令�制到剪贴�。
+1. ä½¿ç”¨ä½ æƒ¯ç”¨çš„ shell(例如 PuTTy æˆ–è¿œç¨‹ç»ˆç«¯ï¼‰ç™»å½•åˆ°ä½ çš„ Linux 主机。粘贴剪贴æ�¿çš„命令并è¿�行。
+1. 在 Linux 主机上�行完命令�,�击**完�**。
+
+**结果**:
+
+ä½ å·²åˆ›å»ºé›†ç¾¤ï¼Œé›†ç¾¤çš„çŠ¶æ€�是**é…�ç½®ä¸**。Rancher å·²åœ¨ä½ çš„é›†ç¾¤ä¸ã€‚
+
+当集群状æ€�å�˜ä¸º **Active** å�Žï¼Œä½ å�¯è®¿é—®é›†ç¾¤ã€‚
+
+**Active** 状�的集群会分�到两个项目:
+
+- `Default`:包� `default` 命�空间
+- `System`:包� `cattle-system`,`ingress-nginx`,`kube-public` 和 `kube-system` 命�空间。
+
+#### 已完��
+
+æ�å–œï¼�ä½ å·²åˆ›å»ºç¬¬ä¸€ä¸ªé›†ç¾¤ã€‚
+
+#### å�Žç»æ“�作
+
+使用 Rancher 创建 deployment。详情请��[创建 Deployment](../../../pages-for-subheaders/deploy-rancher-workloads.md)。
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/quick-start-guides/deploy-rancher-manager/gcp.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/quick-start-guides/deploy-rancher-manager/gcp.md
new file mode 100644
index 00000000000..5c113fc447c
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/quick-start-guides/deploy-rancher-manager/gcp.md
@@ -0,0 +1,77 @@
+---
+title: Rancher GCP 快速入门指�
+description: 阅读æ¤åˆ†æ¥ Rancher GCP 指å�—,以快速部署带有å�•节点下游 Kubernetes 集群的 Rancher Server。
+---
+
+ä½ å�¯ä»¥å�‚考以下æ¥éª¤ï¼Œåœ¨ GCP çš„å�•节点 K3s Kubernetes 集群ä¸å¿«é€Ÿéƒ¨ç½² Rancher Serverï¼Œå¹¶é™„åŠ ä¸€ä¸ªå�•节点下游 Kubernetes 集群。
+
+:::caution
+
+æœ¬ç« èŠ‚ä¸æ��供的指å�—ï¼Œæ—¨åœ¨å¸®åŠ©ä½ å¿«é€Ÿå�¯åŠ¨ä¸€ä¸ªç”¨äºŽ Rancher 的沙盒,以评估 Rancher 是å�¦èƒ½æ»¡è¶³ä½ 的使用需求。快速入门指å�—ä¸�é€‚ç”¨äºŽç”Ÿäº§çŽ¯å¢ƒã€‚å¦‚æžœä½ éœ€è¦�获å�–生产环境的æ“�作指导,请å�‚è§�[安装](../../../pages-for-subheaders/installation-and-upgrade.md)。
+
+:::
+
+## 先决�件
+
+:::caution
+
+部署到 Google GCP 会产生费用。
+
+:::
+
+- [Google GCP Account](https://console.cloud.google.com/):用于创建部署 Rancher 和 Kubernetes 的资�。
+- [Google GCP 项目](https://cloud.google.com/appengine/docs/standard/nodejs/building-app/creating-project)ï¼šå¦‚æžœä½ æ²¡æœ‰çš„è¯�,请访问æ¤é“¾æŽ¥æŸ¥çœ‹å¦‚何创建 GCP 项目。
+- [Google GCP ServiceAccount](https://cloud.google.com/iam/docs/creating-managing-service-account-keys):请访问æ¤é“¾æŽ¥æŸ¥çœ‹å¦‚何创建 GCP ServiceAccount å’Œ Token 文件。
+- [Terraform](https://www.terraform.io/downloads.html):用于在 Google GCP ä¸é…�ç½®æœ�务器和集群。
+
+
+## 开始使用
+
+1. 使用命令行工具,执行 `git clone https://github.com/rancher/quickstart` 把 [Rancher Quickstart](https://github.com/rancher/quickstart) 克隆到本地。
+
+2. 执行 `cd quickstart/rancher/gcp` 命令,进入包� Terraform 文件的 GCP 文件夹。
+
+3. 把 `terraform.tfvars.example` 文件�命�为 `terraform.tfvars`。
+
+4. 编辑 `terraform.tfvars` 文件,并替�以下��:
+ - `gcp_account_json` - 替�为 GCP ServiceAccount 文件路径和文件�。
+ - `rancher_server_admin_password` - 替æ�¢ä¸ºåˆ›å»º Rancher Server çš„ admin è´¦å�·çš„密ç �(最少 12 å—符)
+
+5. **å�¯é€‰**:修改 `terraform.tfvars` ä¸çš„å�¯é€‰å�‚数。
+ �� [Quickstart Readme](https://github.com/rancher/quickstart) 以� [GCP Quickstart Readme](https://github.com/rancher/quickstart/tree/master/rancher/gcp) 了解更多信�。
+ 建议包括:
+ - `gcp_region` - Google GCP 区域。GCP 的默认区域 (`us-east4`) ä¸�一定是è·�ç¦»ä½ æœ€è¿‘çš„åŒºåŸŸã€‚å»ºè®®ä¿®æ”¹ä¸ºè·�ç¦»ä½ æœ€è¿‘çš„åŒºåŸŸã€‚
+ - `gcp_zone` - Google GCP 区域。GCP 的默认区域 (`us-east4-a`) ä¸�一定是è·�ç¦»ä½ æœ€è¿‘çš„åŒºåŸŸã€‚å»ºè®®ä¿®æ”¹ä¸ºè·�ç¦»ä½ æœ€è¿‘çš„åŒºåŸŸã€‚
+ - `prefix` - 所有创建资�的�缀
+ - `machine_type` - 使用的计算实例大å°�,最å°�è§„æ ¼ä¸º `n1-standard-1`。如果在预算范围内,å�¯ä»¥ä½¿ç”¨ `n1-standard-2` 或 `n1-standard-4`。
+
+6. 执行 `terraform init`。
+
+7. 执行 `terraform apply --auto-approve` 以åˆ�始化环境。然å�Žï¼Œç‰å¾…命令行工具返回以下信æ�¯ï¼š
+
+ ```
+ Apply complete! Resources: 16 added, 0 changed, 0 destroyed.
+
+ Outputs:
+
+ rancher_node_ip = xx.xx.xx.xx
+ rancher_server_url = https://rancher.xx.xx.xx.xx.sslip.io
+ workload_node_ip = yy.yy.yy.yy
+ ```
+
+8. 将以上输出ä¸çš„ `rancher_server_url` 粘贴到æµ�览器ä¸ã€‚在登录页é�¢ä¸ç™»å½•(默认用户å��为 `admin`,密ç �为在 `rancher_server_admin_password` ä¸è®¾ç½®çš„密ç �)。
+9. 使用 `quickstart/rancher/gcp` ä¸ç”Ÿæˆ�çš„ `id_rsa` 密钥 SSH 到 Rancher Server。
+
+#### 结果
+
+两个 Kubernetes é›†ç¾¤å·²éƒ¨ç½²åˆ°ä½ çš„ GCP 账户ä¸ï¼Œä¸€ä¸ªè¿�行 Rancher Server,å�¦ä¸€ä¸ªä¸ºå®žéªŒéƒ¨ç½²å�šå¥½å‡†å¤‡ã€‚请注æ„�,虽然这ç§�设置是探索 Rancher 功能的好方法,但在生产环境ä¸ï¼Œåº”é�µå¾ªæˆ‘们的高å�¯ç”¨è®¾ç½®æŒ‡å�—。用于虚拟机的 SSH 密钥是自动生æˆ�的,å˜å‚¨åœ¨æ¨¡å�—目录ä¸ã€‚
+
+### å�Žç»æ“�作
+
+使用 Rancher 创建 deployment。详情请��[创建 Deployment](../../../pages-for-subheaders/deploy-rancher-workloads.md)。
+
+## 销�环境
+
+1. 进入 `quickstart/rancher/gcp` 文件夹,然�执行 `terraform destroy --auto-approve`。
+
+2. ç‰å¾…命令行界é�¢æ˜¾ç¤ºèµ„æº�å·²åˆ é™¤çš„æ¶ˆæ�¯ã€‚
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/quick-start-guides/deploy-rancher-manager/helm-cli.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/quick-start-guides/deploy-rancher-manager/helm-cli.md
new file mode 100644
index 00000000000..b3acb4f9ecc
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/quick-start-guides/deploy-rancher-manager/helm-cli.md
@@ -0,0 +1,154 @@
+---
+title: Helm CLI 快速入门
+---
+
+本文�供了快速安装 Rancher 的方法。
+
+这些说明å�‡è®¾ä½ 有一个 Linux 虚拟机,并能从本地工作站与之通信。Rancher 将安装在 Linux ä¸»æœºä¸Šã€‚ä½ å°†éœ€è¦�检索该主机的 IP 地å�€ï¼Œä»¥ä¾¿ä»Žæœ¬åœ°å·¥ä½œç«™è®¿é—® Rancher。Rancher 旨在远程管ç�† Kubernetes é›†ç¾¤ï¼Œå› æ¤ Rancher 管ç�†çš„任何 Kubernetes 集群也都需è¦�能够访问该 IP 地å�€ã€‚
+
+我们ä¸�建议在本地安装 Rancherï¼Œå› ä¸ºå®ƒä¼šäº§ç”Ÿç½‘ç»œé—®é¢˜ã€‚å¦‚æžœä½ åœ¨ localhost 上安装 Rancher,Rancher æ— æ³•ä¸Žä¸‹æ¸¸ Kubernetes é›†ç¾¤é€šä¿¡ï¼Œå› æ¤åœ¨ localhost ä¸Šä½ æ— æ³•æµ‹è¯• Rancher 的集群é…�置和集群管ç�†åŠŸèƒ½ã€‚
+
+ä½ çš„ Linux 主机å�¯ä»¥ä½�于任何地方。例如,它å�¯ä»¥æ˜¯ Amazon EC2 实例ã€�Digital Ocean Droplet 或 Azure 虚拟机。其他 Rancher 文档也ç»�常称它们为“节点â€�。部署 Linux 主机的一ç§�方法是设置一个 Amazon EC2 实例,如[本教程](../../../how-to-guides/new-user-guides/infrastructure-setup/nodes-in-amazon-ec2.md)䏿‰€ç¤ºã€‚
+
+完整的安装�求在[这里](../../../pages-for-subheaders/installation-requirements.md)。
+
+## 在 Linux 上安装 K3s
+
+Rancher 需è¦�安装在支æŒ�çš„ Kubernetes ç‰ˆæœ¬ä¸Šã€‚å¦‚éœ€äº†è§£ä½ ä½¿ç”¨çš„ Rancher 版本支æŒ�哪些 Kubernetes 版本,请å�‚è§� [Rancher 支æŒ�矩阵](https://www.suse.com/suse-rancher/support-matrix/all-supported-versions/)。
+
+如需指定 K3s(Kubernetes)版本,在�行 K3s 安装脚本时使用 `INSTALL_K3S_VERSION` 环境��(例如 `INSTALL_K3S_VERSION="v1.24.10+k3s1"`)。
+
+在 Linux 主机上�行以下命令�安装 K3s 集群:
+
+```
+curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION= sh -s - server --cluster-init
+```
+
+`--cluster-init` å…�许 K3s 使用嵌入å¼� etcd 作为数æ�®å˜å‚¨ï¼Œå¹¶èƒ½å¤Ÿè½¬æ�¢ä¸º HA 设置。请å�‚阅[嵌入å¼�æ•°æ�®åº“的高å�¯ç”¨æ€§](https://rancher.com/docs/k3s/latest/en/installation/ha-embedded/)。
+
+ä¿�å˜ Linux 主机的 IP。
+
+## å°† kubeconfig ä¿�å˜åˆ°ä½ 的工作站
+
+kubeconfig 文件对于访问 Kubernetes 集群é�žå¸¸é‡�è¦�。从 Linux 主机å¤�制 `/etc/rancher/k3s/k3s.yaml` ä¸çš„æ–‡ä»¶ï¼Œå¹¶å°†å…¶ä¿�å˜åˆ°æœ¬åœ°å·¥ä½œç«™çš„ `~/.kube/config` 目录ä¸ã€‚一ç§�方法是使用 `scp` 工具并在本地计算机上è¿�行æ¤å‘½ä»¤ï¼š
+
+
+
+
+```
+scp root@:/etc/rancher/k3s/k3s.yaml ~/.kube/config
+```
+
+在æŸ�些情况下,它å�¯èƒ½éœ€è¦�ç¡®ä¿�ä½ çš„ shell 定义了环境å�˜é‡� `KUBECONFIG=~/.kube/config`,例如,它å�¯ä»¥åœ¨ä½ çš„é…�置文件或 rc 文件ä¸å¯¼å‡ºã€‚
+
+
+
+
+默认情况下�能识别“scp�命令,所以我们需�先安装一个模�。
+
+在 Windows Powershell ä¸ï¼š
+
+```
+Find-Module Posh-SSH
+Install-Module Posh-SSH
+
+## 获�远程 kubeconfig 文件
+scp root@:/etc/rancher/k3s/k3s.yaml $env:USERPROFILE\.kube\config
+```
+
+
+
+
+## 在 kubeconfig ä¸ç¼–辑 Rancher Server URL
+
+在 kubeconfig 文件ä¸ï¼Œä½ 需è¦�å°† `server` å—æ®µçš„值更改为 `:6443`ã€‚ä½ å�¯ä»¥é€šè¿‡ç«¯å�£ 6443 访问 Kubernetes API Server,通过端å�£ 80 å’Œ 443 访问 Rancher Serverã€‚ä½ éœ€è¦�进行æ¤ç¼–è¾‘ï¼Œä»¥ä¾¿ä½ ä»Žæœ¬åœ°å·¥ä½œç«™è¿�行 Helm 或 kubectl 命令时,能够与安装了 Rancher çš„ Kubernetes 集群进行通信。
+
+
+
+
+打开 kubeconfig 文件进行编辑的一�方法是使用 Vim:
+
+```
+vi ~/.kube/config
+```
+
+输入 `i` 以打开 Vim çš„æ�’入模å¼�。è¦�ä¿�å˜ä½ 的工作,请按 `Esc`。然å�Žè¾“å…¥ `:wq` 并按 `Enter`。
+
+
+
+
+
+在 Windows Powershell ä¸ï¼Œä½ å�¯ä»¥ä½¿ç”¨ `notepad.exe` æ�¥ç¼–辑 kubeconfig 文件:
+
+```
+notepad.exe $env:USERPROFILE\.kube\config
+```
+
+编辑完æˆ�å�Žï¼ŒæŒ‰ `ctrl+s` 或转到 `File > Save` æ�¥ä¿�å˜ä½ 的工作。
+
+
+
+
+## 使用 Helm �安装 Rancher
+
+从本地工作站è¿�è¡Œä»¥ä¸‹å‘½ä»¤ã€‚ä½ éœ€è¦�先安装 [kubectl](https://kubernetes.io/docs/tasks/tools/#kubectl) å’Œ [helm](https://helm.sh/docs/intro/install/):
+
+:::note
+
+�查看自定义 cert-manager 安装的选项(包括集群使用 PodSecurityPolicies 的情况),请�阅 [cert-manager 文档](https://artifacthub.io/packages/helm/cert-manager/cert-manager#configuration)。
+
+:::
+
+```
+helm repo add rancher-latest https://releases.rancher.com/server-charts/latest
+
+kubectl create namespace cattle-system
+
+kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.11.0/cert-manager.crds.yaml
+
+helm repo add jetstack https://charts.jetstack.io
+
+helm repo update
+
+helm install cert-manager jetstack/cert-manager \
+ --namespace cert-manager \
+ --create-namespace \
+ --version v1.11.0
+
+# Windows Powershell
+helm install cert-manager jetstack/cert-manager `
+ --namespace cert-manager `
+ --create-namespace `
+ --version v1.11.0
+```
+
+安装 Rancher 的最终命令如下。该命令需è¦�一个将æµ�é‡�转å�‘到 Linux 主机的域å��ã€‚ä¸ºäº†ç®€åŒ–æœ¬æ•™ç¨‹ï¼Œä½ å�¯ä»¥ä½¿ç”¨å�‡åŸŸå��。`.sslip.io` 是一个å�‡åŸŸå��的例å�。
+
+è¦�安装特定的 Rancher 版本,请使用 `--version` æ ‡å¿—ï¼ˆä¾‹å¦‚ï¼Œ`--version 2.6.6`)。å�¦åˆ™ï¼Œé»˜è®¤å®‰è£…最新的 Rancher。请å�‚阅[选择 Rancher 版本](../../installation-and-upgrade/resources/choose-a-rancher-version.md)。
+
+对于 Kubernetes v1.25 或更高版本,使用 Rancher v2.7.2-v2.7.4 时,将 `global.cattle.psp.enabled` 设置为 `false`。对于 Rancher v2.7.5 å�Šæ›´é«˜ç‰ˆæœ¬æ�¥è¯´ï¼Œè¿™ä¸�æ˜¯å¿…éœ€çš„ï¼Œä½†ä½ ä»�ç„¶å�¯ä»¥æ‰‹åŠ¨è®¾ç½®è¯¥é€‰é¡¹ã€‚
+
+请注æ„�,密ç �至少需è¦� 12 个å—符。
+
+```
+helm install rancher rancher-latest/rancher \
+ --namespace cattle-system \
+ --set hostname=.sslip.io \
+ --set replicas=1 \
+ --set bootstrapPassword=
+
+# Windows Powershell
+helm install rancher rancher-latest/rancher `
+ --namespace cattle-system `
+ --set hostname=.sslip.io `
+ --set replicas=1 `
+ --set bootstrapPassword=
+```
+
+çŽ°åœ¨ï¼Œå¦‚æžœä½ åœ¨ Web æµ�览器ä¸å¯¼èˆªåˆ° `.sslip.io`ï¼Œä½ åº”è¯¥ä¼šçœ‹åˆ° Rancher UI。
+
+为了简化说明,我们使用了一个å�‡åŸŸå��和自ç¾å��è¯�书æ�¥è¿›è¡Œå®‰è£…ã€‚å› æ¤ï¼Œä½ å�¯èƒ½éœ€è¦�在 Web æµ�è§ˆå™¨ä¸æ·»åŠ ä¸€ä¸ªå®‰å…¨ä¾‹å¤–æ�¥æŸ¥çœ‹ Rancher UI。请注æ„�ï¼Œå¯¹äºŽç”Ÿäº§å®‰è£…ï¼Œä½ éœ€è¦�具有负载å�‡è¡¡å™¨ã€�真实域å��和真实è¯�书的高å�¯ç”¨æ€§è®¾ç½®ã€‚
+
+这些说明还çœ�略了完整的安装è¦�æ±‚å’Œå…¶ä»–å®‰è£…é€‰é¡¹ã€‚å¦‚æžœä½ å¯¹è¿™äº›æ¥éª¤æœ‰ä»»ä½•疑问,请å�‚阅完整的 [Helm CLI 安装文档](../../../pages-for-subheaders/install-upgrade-on-a-kubernetes-cluster.md)。
+
+è¦�使用新的 Rancher Server æ�¥å�¯åŠ¨æ–°çš„ Kubernetes é›†ç¾¤ï¼Œä½ å�¯èƒ½éœ€è¦�在 Rancher ä¸è®¾ç½®äº‘å‡è¯�。有关更多信æ�¯ï¼Œè¯·å�‚阅[使用 Rancher å�¯åЍ Kubernetes 集群](../../../pages-for-subheaders/launch-kubernetes-with-rancher.md)。
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/quick-start-guides/deploy-rancher-manager/hetzner-cloud.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/quick-start-guides/deploy-rancher-manager/hetzner-cloud.md
new file mode 100644
index 00000000000..585353441b2
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/quick-start-guides/deploy-rancher-manager/hetzner-cloud.md
@@ -0,0 +1,76 @@
+---
+title: Rancher Hetzner Cloud 快速入门指�
+description: 阅读æ¤åˆ†æ¥ Rancher Hetzner Cloud 指å�—,以快速部署带有å�•节点下游 Kubernetes 集群的 Rancher Server。
+---
+
+ä½ å�¯ä»¥å�‚考以下æ¥éª¤ï¼Œåœ¨ Hetzner Cloud çš„å�•节点 K3s Kubernetes 集群ä¸å¿«é€Ÿéƒ¨ç½² Rancher Serverï¼Œå¹¶é™„åŠ ä¸€ä¸ªå�•节点下游 Kubernetes 集群。
+
+:::caution
+
+æœ¬ç« èŠ‚ä¸æ��供的指å�—ï¼Œæ—¨åœ¨å¸®åŠ©ä½ å¿«é€Ÿå�¯åŠ¨ä¸€ä¸ªç”¨äºŽ Rancher 的沙盒,以评估 Rancher 是å�¦èƒ½æ»¡è¶³ä½ 的使用需求。快速入门指å�—ä¸�é€‚ç”¨äºŽç”Ÿäº§çŽ¯å¢ƒã€‚å¦‚æžœä½ éœ€è¦�获å�–生产环境的æ“�作指导,请å�‚è§�[安装](../../../pages-for-subheaders/installation-and-upgrade.md)。
+
+:::
+
+## 先决�件
+
+:::caution
+
+部署到 Hetzner Cloud 会产生费用。
+
+:::
+
+- [Hetzner Cloud 账�](https://www.hetzner.com):用于�行�务器和集群。
+- [Hetzner API 访问密钥](https://docs.hetzner.cloud/#getting-started)ï¼šå¦‚æžœä½ æ²¡æœ‰çš„è¯�,请å�‚考说明创建一个。
+- [Terraform](https://www.terraform.io/downloads.html):用于在 Hetzner ä¸é…�ç½®æœ�务器和集群。
+
+
+## 开始使用
+
+1. 使用命令行工具,执行 `git clone https://github.com/rancher/quickstart` 把 [Rancher Quickstart](https://github.com/rancher/quickstart) 克隆到本地。
+
+2. 执行 `cd quickstart/rancher/hcloud` 命令,进入包� Terraform 文件的 Hetzner 文件夹。
+
+3. 把 `terraform.tfvars.example` 文件�命�为 `terraform.tfvars`。
+
+4. 编辑 `terraform.tfvars` 文件,并替�以下��:
+ - `hcloud_token` - 替�为 Hetzner API 访问密钥。
+ - `rancher_server_admin_password` - 替æ�¢ä¸ºåˆ›å»º Rancher Server çš„ admin è´¦å�·çš„密ç �(最少 12 å—符)
+
+5. **å�¯é€‰**:修改 `terraform.tfvars` ä¸çš„å�¯é€‰å�‚数。
+ �� [Quickstart Readme](https://github.com/rancher/quickstart) 以� [Hetzner Quickstart Readme](https://github.com/rancher/quickstart/tree/master/rancher/hcloud) 了解更多信�。
+ 建议包括:
+
+ - `prefix` - 所有创建资�的�缀
+ - `instance_type` - 实例类型,至少需�是 `cx21`。
+ - `hcloud_location`- Hetzner Cloud �置。选择最近的�置,而�是使用默认�置(`fsn1`)。
+
+6. 执行 `terraform init`。
+
+7. 执行 `terraform apply --auto-approve` 以åˆ�始化环境。然å�Žï¼Œç‰å¾…命令行工具返回以下信æ�¯ï¼š
+
+ ```
+ Apply complete! Resources: 15 added, 0 changed, 0 destroyed.
+
+ Outputs:
+
+ rancher_node_ip = xx.xx.xx.xx
+ rancher_server_url = https://rancher.xx.xx.xx.xx.sslip.io
+ workload_node_ip = yy.yy.yy.yy
+ ```
+
+8. 将以上输出ä¸çš„ `rancher_server_url` 粘贴到æµ�览器ä¸ã€‚在登录页é�¢ä¸ç™»å½•(默认用户å��为 `admin`,密ç �为在 `rancher_server_admin_password` ä¸è®¾ç½®çš„密ç �)。
+9. 使用 `quickstart/rancher/hcloud` ä¸ç”Ÿæˆ�çš„ `id_rsa` 密钥 SSH 到 Rancher Server。
+
+#### 结果
+
+两个 Kubernetes é›†ç¾¤å·²éƒ¨ç½²åˆ°ä½ çš„ Hetzner 账户ä¸ï¼Œä¸€ä¸ªè¿�行 Rancher Server,å�¦ä¸€ä¸ªä¸ºå®žéªŒéƒ¨ç½²å�šå¥½å‡†å¤‡ã€‚请注æ„�,虽然这ç§�设置是探索 Rancher 功能的好方法,但在生产环境ä¸ï¼Œåº”é�µå¾ªæˆ‘们的高å�¯ç”¨è®¾ç½®æŒ‡å�—。用于虚拟机的 SSH 密钥是自动生æˆ�的,å˜å‚¨åœ¨æ¨¡å�—目录ä¸ã€‚
+
+### å�Žç»æ“�作
+
+使用 Rancher 创建 deployment。详情请��[创建 Deployment](../../../pages-for-subheaders/deploy-rancher-workloads.md)。
+
+## 销�环境
+
+1. 进入 `quickstart/rancher/hcloud` 文件夹,然�执行 `terraform destroy --auto-approve`。
+
+2. ç‰å¾…命令行界é�¢æ˜¾ç¤ºèµ„æº�å·²åˆ é™¤çš„æ¶ˆæ�¯ã€‚
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/quick-start-guides/deploy-rancher-manager/outscale-qs.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/quick-start-guides/deploy-rancher-manager/outscale-qs.md
new file mode 100644
index 00000000000..46b42901db9
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/quick-start-guides/deploy-rancher-manager/outscale-qs.md
@@ -0,0 +1,76 @@
+---
+title: Rancher Outscale 快速入门指�
+description: 阅读æ¤åˆ†æ¥ Rancher Outscale 指å�—,以快速部署带有å�•节点下游 Kubernetes 集群的 Rancher Server。
+---
+
+ä½ å�¯ä»¥å�‚考以下æ¥éª¤ï¼Œåœ¨ Outscale çš„å�•节点 K3s Kubernetes 集群ä¸å¿«é€Ÿéƒ¨ç½² Rancher Serverï¼Œå¹¶é™„åŠ ä¸€ä¸ªå�•节点下游 Kubernetes 集群。
+
+:::note
+
+æœ¬ç« èŠ‚ä¸æ��供的指å�—ï¼Œæ—¨åœ¨å¸®åŠ©ä½ å¿«é€Ÿå�¯åŠ¨ä¸€ä¸ªç”¨äºŽ Rancher 的沙盒,以评估 Rancher 是å�¦èƒ½æ»¡è¶³ä½ 的使用需求。快速入门指å�—ä¸�é€‚ç”¨äºŽç”Ÿäº§çŽ¯å¢ƒã€‚å¦‚æžœä½ éœ€è¦�获å�–生产环境的æ“�作指导,请å�‚è§�[安装](../../../pages-for-subheaders/installation-and-upgrade.md)。
+
+:::
+
+## 先决�件
+
+:::caution
+
+部署到 Outscale 会产生费用。
+
+:::
+
+- [Outscale 账�](https://en.outscale.com/):用于�行�务器和集群。
+- [Outscale 访问密钥](https://docs.outscale.com/en/userguide/About-Access-Keys.html)ï¼šå¦‚æžœä½ æ²¡æœ‰çš„è¯�,请按照说明创建一个 Outscale 访问密钥。
+- [Terraform](https://www.terraform.io/downloads.html):用于在 Outscale ä¸é…�ç½®æœ�务器和集群。
+
+
+## 开始使用
+
+1. 使用命令行工具,执行 `git clone https://github.com/rancher/quickstart` 把 [Rancher Quickstart](https://github.com/rancher/quickstart) 克隆到本地。
+
+2. 执行 `cd quickstart/rancher/outscale` 命令,进入包� Terraform 文件的 Outscale 文件夹。
+
+3. 把 `terraform.tfvars.example` 文件�命�为 `terraform.tfvars`。
+
+4. 编辑 `terraform.tfvars` 文件,并替�以下��:
+ - `access_key_id` - 替�为 Outscale 访问密钥
+ - `secret_key_id` - 替�为 Outscale 密文密钥
+ - `rancher_server_admin_password` - 替æ�¢ä¸ºåˆ›å»º Rancher Server çš„ admin è´¦å�·çš„密ç �(最少 12 å—符)
+
+5. **å�¯é€‰**:修改 `terraform.tfvars` ä¸çš„å�¯é€‰å�‚数。
+ �� [Quickstart Readme](https://github.com/rancher/quickstart) 以� [Outscale Quickstart Readme](https://github.com/rancher/quickstart/tree/master/rancher/outscale) 了解更多信�。
+ 建议包括:
+ - `region` - Outscale 区域。Outscale 的默认区域ä¸�一定是è·�ç¦»ä½ æœ€è¿‘çš„åŒºåŸŸã€‚å»ºè®®ä¿®æ”¹ä¸ºè·�ç¦»ä½ æœ€è¿‘çš„åŒºåŸŸï¼ˆ`eu-west-2`)。
+ - `prefix` - 所有创建资�的�缀
+ - `instance_type` - 实例类型,至少需�是 `tinav3.c2r4p3`。
+
+6. 执行 `terraform init`。
+
+7. 执行 `terraform apply --auto-approve` 以åˆ�始化环境。然å�Žï¼Œç‰å¾…命令行工具返回以下信æ�¯ï¼š
+
+ ```
+ Apply complete! Resources: 21 added, 0 changed, 0 destroyed.
+
+ Outputs:
+
+ rancher_node_ip = xx.xx.xx.xx
+ rancher_server_url = https://rancher.xx.xx.xx.xx.sslip.io
+ workload_node_ip = yy.yy.yy.yy
+ ```
+
+8. 将以上输出ä¸çš„ `rancher_server_url` 粘贴到æµ�览器ä¸ã€‚在登录页é�¢ä¸ç™»å½•(默认用户å��为 `admin`,密ç �为在 `rancher_server_admin_password` ä¸è®¾ç½®çš„密ç �)。
+9. 使用 `quickstart/rancher/outscale` ä¸ç”Ÿæˆ�çš„ `id_rsa` 密钥 SSH 到 Rancher Server。
+
+#### 结果
+
+两个 Kubernetes é›†ç¾¤å·²éƒ¨ç½²åˆ°ä½ çš„ Outscale 账户ä¸ï¼Œä¸€ä¸ªè¿�行 Rancher Server,å�¦ä¸€ä¸ªä¸ºå®žéªŒéƒ¨ç½²å�šå¥½å‡†å¤‡ã€‚请注æ„�,虽然这ç§�设置是探索 Rancher 功能的好方法,但在生产环境ä¸ï¼Œåº”é�µå¾ªæˆ‘们的高å�¯ç”¨è®¾ç½®æŒ‡å�—。用于虚拟机的 SSH 密钥是自动生æˆ�的,å˜å‚¨åœ¨æ¨¡å�—目录ä¸ã€‚
+
+### å�Žç»æ“�作
+
+使用 Rancher 创建 deployment。详情请��[创建 Deployment](../../../pages-for-subheaders/deploy-rancher-workloads.md)。
+
+## 销�环境
+
+1. 进入 `quickstart/rancher/outscale` 文件夹,然�执行 `terraform destroy --auto-approve`。
+
+2. ç‰å¾…命令行界é�¢æ˜¾ç¤ºèµ„æº�å·²åˆ é™¤çš„æ¶ˆæ�¯ã€‚
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/quick-start-guides/deploy-rancher-manager/prime.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/quick-start-guides/deploy-rancher-manager/prime.md
new file mode 100644
index 00000000000..094508ff5a6
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/quick-start-guides/deploy-rancher-manager/prime.md
@@ -0,0 +1,7 @@
+---
+title: Rancher Prime
+---
+
+Rancher 在 v2.7 ä¸å¼•入了 Rancher Prime,这是 Rancher ä¼�业级产å“�的进化。Rancher Prime 是基于相å�Œæº�代ç �构建的商业化ã€�ä¼�ä¸šçº§çš„æ–°ç‰ˆæœ¬ã€‚å› æ¤ï¼ŒRancher 的产å“�将继ç»ä¿�æŒ� 100% å¼€æº�,并通过安全ã€�延长生命周期ã€�访问é‡�点架构和 Kubernetes 公告体现é¢�外价值。Rancher Prime 还将æ��供选项,让用户获得创新 Rancher 项目的生产支æŒ�。使用 Rancher Prime,安装 asset 会托管在由 Rancher æŒ�有和管ç�†çš„å�¯ä¿¡é•œåƒ�仓库ä¸ã€‚
+
+è¦�开始使用 Rancher Prime,请[转到æ¤é¡µé�¢](https://www.rancher.com/quick-start)å¹¶å¡«å†™è¡¨æ ¼ã€‚
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/quick-start-guides/deploy-rancher-manager/vagrant.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/quick-start-guides/deploy-rancher-manager/vagrant.md
new file mode 100644
index 00000000000..dcddb74cfe9
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/quick-start-guides/deploy-rancher-manager/vagrant.md
@@ -0,0 +1,51 @@
+---
+title: Vagrant 快速入门
+---
+
+ä½ å�¯ä»¥å�‚考以下æ¥éª¤å¿«é€Ÿéƒ¨ç½² Rancher Serverï¼Œå¹¶é™„åŠ ä¸€ä¸ªå�•节点集群。
+
+:::caution
+
+æœ¬ç« èŠ‚ä¸æ��供的指å�—ï¼Œæ—¨åœ¨å¸®åŠ©ä½ å¿«é€Ÿå�¯åŠ¨ä¸€ä¸ªç”¨äºŽ Rancher 的沙盒,以评估 Rancher 是å�¦èƒ½æ»¡è¶³ä½ 的使用需求。快速入门指å�—ä¸�é€‚ç”¨äºŽç”Ÿäº§çŽ¯å¢ƒã€‚å¦‚æžœä½ éœ€è¦�获å�–生产环境的æ“�作指导,请å�‚è§�[安装](../../../pages-for-subheaders/installation-and-upgrade.md)。
+
+:::
+
+## 先决�件
+
+- [Vagrant](https://www.vagrantup.com):Vagrant æ˜¯å¿…éœ€çš„ï¼Œç”¨äºŽæ ¹æ�® Vagrantfile é…�置主机。
+- [Virtualbox](https://www.virtualbox.org):需�把 Vagrant �置的虚拟机�置到 VirtualBox。
+- 至少 4GB çš„å�¯ç”¨å†…å˜ã€‚
+
+### 注�
+- Vagrant 需�使用�件�创建 VirtualBox 虚拟机。请执行以下命令进行安装:
+
+ `vagrant plugin install vagrant-vboxmanage`
+
+ `vagrant plugin install vagrant-vbguest`
+
+## 开始使用
+
+1. 使用命令行工具,执行 `git clone https://github.com/rancher/quickstart` 把 [Rancher Quickstart](https://github.com/rancher/quickstart) 克隆到本地。
+
+2. 执行 `cd quickstart/rancher/vagrant` 命令,进入包� Vagrantfile 文件的文件夹。
+
+3. **�选**:编辑 `config.yaml` 文件:
+
+ - æ ¹æ�®éœ€è¦�更改节点数和内å˜åˆ†é…�(`node.count`, `node.cpus`, `node.memory`)
+ - 更改 `admin` 的密ç �以登录 Rancher。(`admin_password`)
+
+4. 执行 `vagrant up --provider=virtualbox` 以�始化环境。
+
+5. é…�置完æˆ�å�Žï¼Œåœ¨æµ�è§ˆå™¨ä¸æ‰“å¼€ `https://192.168.56.101`。默认的用户å��和密ç �是 `admin/adminPassword`。
+
+**结果**:Rancher Server å’Œä½ çš„ Kubernetes 集群已安装在 VirtualBox 上。
+
+### å�Žç»æ“�作
+
+使用 Rancher 创建 deployment。详情请��[创建 Deployment](../../../pages-for-subheaders/deploy-rancher-workloads.md)。
+
+## 销�环境
+
+1. 进入 `quickstart/rancher/vagrant` 文件夹,然�执行 `vagrant destroy -f`。
+
+2. ç‰å¾…所有资æº�å·²åˆ é™¤çš„ç¡®è®¤æ¶ˆæ�¯ã€‚
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/quick-start-guides/deploy-workloads/nodeports.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/quick-start-guides/deploy-workloads/nodeports.md
new file mode 100644
index 00000000000..bf2294d4c06
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/quick-start-guides/deploy-workloads/nodeports.md
@@ -0,0 +1,138 @@
+---
+title: 部署带有 NodePort 的工作负载
+---
+
+### 先决�件
+
+ä½ å·²æœ‰ä¸€ä¸ªæ£åœ¨è¿�è¡Œçš„é›†ç¾¤ï¼Œä¸”è¯¥é›†ç¾¤ä¸æœ‰è‡³å°‘一个节点。
+
+### 1. 部署工作负载
+
+ä½ å�¯ä»¥å¼€å§‹åˆ›å»ºä½ 的第一个 Kubernetes [工作负载](https://kubernetes.io/docs/concepts/workloads/)。工作负载是一个对象,其ä¸åŒ…å�« pod 以å�Šéƒ¨ç½²åº”用所需的其他文件和信æ�¯ã€‚
+
+在本文的工作负载ä¸ï¼Œä½ 将部署一个 Rancher Hello-World 应用。
+
+1. 点击 **☰ > 集群管�**。
+1. 在**集群**页é�¢ä¸ï¼Œè¿›å…¥éœ€è¦�部署工作负载的集群,然å�Žå�•击 **Explore**。
+1. 点击**工作负载**。
+1. �击**创建**。
+1. 为工作负载设置**�称**。
+1. 在**容器镜åƒ�**å—æ®µä¸ï¼Œè¾“å…¥ `rancher/hello-world`。注æ„�区分大å°�写。
+1. 点击**æ·»åŠ ç«¯å�£**。
+1. 在**æœ�务类型**下拉è�œå�•ä¸ï¼Œç¡®ä¿�选择了 **NodePort**。
+
+ 
+
+1. 在**å�‘布容器端å�£**å—æ®µä¸ï¼Œè¾“入端å�£`80`。
+
+ 
+
+1. �击**创建**。
+
+**结果**:
+
+* 工作负载已部署。æ¤è¿‡ç¨‹å�¯èƒ½éœ€è¦�å‡ åˆ†é’Ÿã€‚
+* 当工作负载完æˆ�部署å�Žï¼Œå®ƒçš„状æ€�会å�˜ä¸º **Active**ã€‚ä½ å�¯ä»¥ä»Žé¡¹ç›®çš„**工作负载**页é�¢æŸ¥çœ‹å…¶çжæ€�。
+
+
+
+### 2. 查看应用
+
+在**工作负载**页é�¢ä¸ï¼Œç‚¹å‡»å·¥ä½œè´Ÿè½½ä¸‹æ–¹çš„链接。如果 deployment 已完æˆ�ï¼Œä½ çš„åº”ç”¨ä¼šæ‰“å¼€ã€‚
+
+### 注�事项
+
+å¦‚æžœä½¿ç”¨äº‘è™šæ‹Ÿæœºï¼Œä½ å�¯èƒ½æ— 法访问è¿�行容器的端å�£ã€‚è¿™ç§�æƒ…å†µä¸‹ï¼Œä½ å�¯ä»¥ä½¿ç”¨ `Execute Shell` 在本地主机的 SSH 会è¯�䏿µ‹è¯• Nginx。如果å�¯ç”¨çš„è¯�ï¼Œä½¿ç”¨å·¥ä½œè´Ÿè½½ä¸‹æ–¹çš„é“¾æŽ¥ä¸ `:` å�Žé�¢çš„端å�£å�·ã€‚在本例ä¸ï¼Œç«¯å�£å�·ä¸º `31568`。
+
+```html
+gettingstarted@rancher:~$ curl http://localhost:31568
+
+
+
+ Rancher
+
+
+
+
+
+ Hello world!
+ My hostname is hello-world-66b4b9d88b-78bhx
+
+
k8s services found 2
+
+ INGRESS_D1E1A394F61C108633C4BD37AEDDE757 tcp://10.43.203.31:80
+
+ KUBERNETES tcp://10.43.0.1:443
+
+
+
+
+
+
+ Show request details
+
+
Request info
+ Host: 172.22.101.111:31411
+ Pod: hello-world-66b4b9d88b-78bhx
+
+ Accept: [*/*]
+
+ User-Agent: [curl/7.47.0]
+
+
+
+
+
+
+gettingstarted@rancher:~$
+
+```
+
+### 已完��
+
+æ�å–œï¼�ä½ å·²æˆ�功通过 NodePort 部署工作负载。
+
+#### å�Žç»æ“�作
+
+使用完沙盒å�Žï¼Œä½ 需è¦�清ç�† Rancher Server 和集群。详情请å�‚è§�:
+
+- [Amazon AWS:销�环境](../deploy-rancher-manager/aws.md#销�环境)
+- [DigitalOcean:销�环境](../deploy-rancher-manager/digitalocean.md#销�环境)
+- [Vagrant:销�环境](../deploy-rancher-manager/vagrant.md#销�环境)
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/quick-start-guides/deploy-workloads/workload-ingress.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/quick-start-guides/deploy-workloads/workload-ingress.md
new file mode 100644
index 00000000000..86f8017f09e
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/getting-started/quick-start-guides/deploy-workloads/workload-ingress.md
@@ -0,0 +1,72 @@
+---
+title: 部署带有 Ingress 的工作负载
+---
+
+### 先决�件
+
+ä½ å·²æœ‰ä¸€ä¸ªæ£åœ¨è¿�è¡Œçš„é›†ç¾¤ï¼Œä¸”è¯¥é›†ç¾¤ä¸æœ‰è‡³å°‘一个节点。
+
+### 1. 部署工作负载
+
+ä½ å�¯ä»¥å¼€å§‹åˆ›å»ºä½ 的第一个 Kubernetes [工作负载](https://kubernetes.io/docs/concepts/workloads/)。工作负载是一个对象,其ä¸åŒ…å�« pod 以å�Šéƒ¨ç½²åº”用所需的其他文件和信æ�¯ã€‚
+
+在本文的工作负载ä¸ï¼Œä½ 将部署一个 Rancher Hello-World 应用。
+
+1. 点击 **☰ > 集群管�**。
+1. é€‰æ‹©ä½ åˆ›å»ºçš„é›†ç¾¤ï¼Œå¹¶ç‚¹å‡» **Explore**。
+1. 点击**工作负载**。
+1. �击**创建**。
+1. 点击 **Deployment**。
+1. 为工作负载设置**�称**。
+1. 在**容器镜åƒ�**å—æ®µä¸ï¼Œè¾“å…¥ `rancher/hello-world`。注æ„�区分大å°�写。
+1. 在 `Service Type` 点击 **Add Port** å’Œ `Cluster IP`,并在 **Private Container Port** å—æ®µä¸è¾“å…¥`80`ã€‚ä½ å�¯ä»¥å°† `Name` 留空或指定å��ç§°ã€‚é€šè¿‡æ·»åŠ ç«¯å�£ï¼Œä½ å�¯ä»¥è®¿é—®é›†ç¾¤å†…外的应用。有关详细信æ�¯ï¼Œè¯·å�‚阅 [Service](../../../pages-for-subheaders/workloads-and-pods.md#services)。
+1. �击**创建**。
+
+**结果**:
+
+* 工作负载已部署。æ¤è¿‡ç¨‹å�¯èƒ½éœ€è¦�å‡ åˆ†é’Ÿã€‚
+* 当工作负载完æˆ�部署å�Žï¼Œå®ƒçš„状æ€�会å�˜ä¸º **Active**ã€‚ä½ å�¯ä»¥ä»Žé¡¹ç›®çš„**工作负载**页é�¢æŸ¥çœ‹å…¶çжæ€�。
+
+### 2. 通过 Ingress 暴露应用
+
+现在应用已å�¯åЍ并è¿�è¡Œï¼Œä½ éœ€è¦�暴露应用以让其他æœ�务连接到它。
+
+1. 点击 **☰ > 集群管�**。
+1. é€‰æ‹©ä½ åˆ›å»ºçš„é›†ç¾¤ï¼Œå¹¶ç‚¹å‡» **Explore**。
+
+1. 点击**�务�现 > Ingresses**。
+
+1. 点击**创建**。
+
+1. 在选择**命å��空间**æ—¶ï¼Œä½ éœ€è¦�选择在创建 deployment 时使用的命å��空间。å�¦åˆ™ï¼Œåœ¨æ¥éª¤8ä¸é€‰æ‹©**ç›®æ ‡æœ�务**æ—¶ï¼Œä½ çš„ deployment 会ä¸�å�¯ç”¨ã€‚
+
+1. 输入**�称**,例如 **hello**。
+
+1. 指定**路径**,例如 `/hello`。
+
+1. 在**ç›®æ ‡æœ�务**å—æ®µçš„下拉è�œå�•ä¸ï¼Œé€‰æ‹©ä½ 为æœ�务设置的å��称。
+
+1. 在**端å�£**å—æ®µä¸çš„下拉è�œå�•ä¸ï¼Œé€‰æ‹© `80`。
+
+1. 点击�下角的**创建**。
+
+**结果**:应用分�到了一个 `sslip.io` 地�并暴露。这�能需�一两分钟。
+
+
+### 查看应用
+
+在 **Deployments** 页é�¢ä¸ï¼Œæ‰¾åˆ°ä½ deployment çš„ **endpoint** 列,然å�Žå�•击一个 endpoint。å�¯ç”¨çš„ endpoint å�–å†³äºŽä½ æ·»åŠ åˆ° deployment ä¸çš„端å�£é…�ç½®ã€‚å¦‚æžœä½ çœ‹ä¸�到éš�机分é…�端å�£çš„ endpointï¼Œè¯·å°†ä½ åœ¨åˆ›å»º Ingress 时指定的路径尾附到 IP 地å�€ä¸Šã€‚ä¾‹å¦‚ï¼Œå¦‚æžœä½ çš„ endpoint 是 `xxx.xxx.xxx.xxx` 或 `https://xxx.xxx.xxx.xxx`,把它修改为 `xxx.xxx.xxx.xxx/hello` 或 `https://xxx.xxx.xxx.xxx/hello`。
+
+应用将在å�¦ä¸€ä¸ªçª—å�£ä¸æ‰“开。
+
+#### 已完��
+
+æ�å–œï¼�ä½ å·²æˆ�功通过 Ingress 部署工作负载。
+
+#### å�Žç»æ“�作
+
+使用完沙盒å�Žï¼Œä½ 需è¦�清ç�† Rancher Server 和集群。详情请å�‚è§�:
+
+- [Amazon AWS:销�环境](../deploy-rancher-manager/aws.md#销�环境)
+- [DigitalOcean:销�环境](../deploy-rancher-manager/digitalocean.md#销�环境)
+- [Vagrant:销�环境](../deploy-rancher-manager/vagrant.md#销�环境)
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/cis-scan-guides/configure-alerts-for-periodic-scan-on-a-schedule.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/cis-scan-guides/configure-alerts-for-periodic-scan-on-a-schedule.md
new file mode 100644
index 00000000000..643a7122e37
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/cis-scan-guides/configure-alerts-for-periodic-scan-on-a-schedule.md
@@ -0,0 +1,40 @@
+---
+title: 为定时扫æ��é…�置告è¦
+---
+
+ä½ å�¯ä»¥å®šæ—¶è¿�行 ClusterScan。
+
+ä½ è¿˜å�¯ä»¥ä¸ºå®šæ—¶æ‰«æ��指定是å�¦åœ¨æ‰«æ��完æˆ�æ—¶å�‘出告è¦ã€‚
+
+å�ªæœ‰å®šæ—¶è¿�行的扫æ��æ‰�支æŒ�告è¦ã€‚
+
+CIS Benchmark 应用支æŒ�两ç§�类型的告è¦ï¼š
+
+- 扫æ��完æˆ�告è¦ï¼šæ¤å‘Šè¦åœ¨æ‰«æ��è¿�行完æˆ�æ—¶å�‘出。告è¦åŒ…括详细信æ�¯ï¼ŒåŒ…括 ClusterScan çš„å��ç§°å’Œ ClusterScanProfile çš„å��称。
+- 扫æ��失败告è¦ï¼šå¦‚果扫æ��䏿œ‰ä¸€äº›æµ‹è¯•失败或扫æ��处于 `Fail` 状æ€�,则会å�‘出æ¤å‘Šè¦ã€‚
+
+:::note 先决�件:
+
+为 `rancher-cis-benchmark` å�¯ç”¨å‘Šè¦ä¹‹å‰�,确ä¿�安装了 `rancher-monitoring` 应用并é…�置了接收器(Receiver)和路由(Route)。详情请å�‚è§�[æœ¬ç« èŠ‚](../../../reference-guides/monitoring-v2-configuration/receivers.md)。
+
+在为 `rancher-cis-benchmark` 告è¦é…�ç½®è·¯ç”±æ—¶ï¼Œä½ å�¯ä»¥ä½¿ç”¨é”®å€¼å¯¹ `job:rancher-cis-scan` æ�¥æŒ‡å®šåŒ¹é…�。详情请查看[路由é…�置示例](../../../reference-guides/monitoring-v2-configuration/receivers.md#cis-扫æ��告è¦çš„示例路由é…�ç½®)。
+
+:::
+
+è¦�为定时è¿�行的扫æ��é…�置告è¦ï¼š
+
+1. 请在 `rancher-cis-benchmark` 应用程åº�上å�¯ç”¨å‘Šè¦ã€‚详情请å�‚è§�[本页](../../../how-to-guides/advanced-user-guides/cis-scan-guides/enable-alerting-for-rancher-cis-benchmark.md)。
+1. 在左上角,�击 **☰ > 集群管�**。
+1. 在**集群**页�上,转到��行 CIS 扫�的集群,然��击 **Explore**。
+1. 点击 **CIS Benchmark > 扫�**。
+1. �击**创建**。
+1. 选择集群扫æ��é…�置文件。该é…�置文件确定è¦�使用哪个 CIS Benchmark 版本以å�Šè¦�æ‰§è¡Œå“ªäº›æµ‹è¯•ã€‚å¦‚æžœä½ é€‰æ‹© Default é…�置文件,则 CIS Operator 将选择适用于它所在的 Kubernetes 集群类型的é…�置文件。
+1. 选择**定时�行扫�**的选项。
+1. 在**调度**å—æ®µä¸è¾“入有效的 [Cron 表达å¼�](https://en.wikipedia.org/wiki/Cron#CRON_expression)。
+1. 选ä¸**告è¦**下告è¦ç±»åž‹æ—�边的框。
+1. (å�¯é€‰ï¼‰é€‰æ‹©ä¸€ä¸ª**ä¿�留计数**,表示为这个定时扫æ��维护的报告数é‡�。默认情况下,æ¤è®¡æ•°ä¸º 3。超过æ¤ä¿�ç•™é™�åˆ¶æ—¶ï¼Œæ—§æŠ¥å‘Šå°†è¢«åˆ é™¤ã€‚
+1. �击**创建**。
+
+**结果**:扫æ��è¿�è¡Œï¼Œå¹¶æ ¹æ�®è®¾ç½®çš„ cron 表达å¼�é‡�新调度。如果在 `rancher-monitoring` 应用下é…�置了路由和接收器,则会在扫æ��完æˆ�æ—¶å�‘出告è¦ã€‚
+
+�次�行扫�都会生�一份带有扫�结果的报告。如需查看最新的结果,请�击显示的扫��称。
\ No newline at end of file
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/cis-scan-guides/create-a-custom-benchmark-version-to-run.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/cis-scan-guides/create-a-custom-benchmark-version-to-run.md
new file mode 100644
index 00000000000..fe8477f7b55
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/cis-scan-guides/create-a-custom-benchmark-version-to-run.md
@@ -0,0 +1,9 @@
+---
+title: 为集群扫�创建自定义 Benchmark 版本
+---
+
+æŸ�些 Kubernetes 集群å�¯èƒ½éœ€è¦�自定义é…�ç½® Benchmark 测试。例如,Kubernetes é…�置文件或è¯�书的路径å�¯èƒ½ä¸Žä¸Šæ¸¸ CIS Benchmark çš„æ ‡å‡†ä½�ç½®ä¸�å�Œã€‚
+
+çŽ°åœ¨ï¼Œä½ å�¯ä»¥ä½¿ç”¨ `rancher-cis-benchmark` 应用æ�¥åˆ›å»ºè‡ªå®šä¹‰ Benchmark 版本,从而è¿�行集群扫æ��。
+
+有关详细信æ�¯ï¼Œè¯·å�‚阅[æ¤é¡µé�¢](../../../integrations-in-rancher/cis-scans/custom-benchmark.md)。
\ No newline at end of file
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/cis-scan-guides/enable-alerting-for-rancher-cis-benchmark.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/cis-scan-guides/enable-alerting-for-rancher-cis-benchmark.md
new file mode 100644
index 00000000000..55c34dcdf5c
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/cis-scan-guides/enable-alerting-for-rancher-cis-benchmark.md
@@ -0,0 +1,20 @@
+---
+title: 为 Rancher CIS Benchmark å�¯ç”¨å‘Šè¦
+---
+
+ä½ å�¯ä»¥é…�置告è¦ï¼Œä»Žè€Œå°†å‘Šè¦å�‘é€�给定时è¿�行的扫æ��。
+
+:::note 先决�件:
+
+为 `rancher-cis-benchmark` å�¯ç”¨å‘Šè¦ä¹‹å‰�,确ä¿�安装了 `rancher-monitoring` 应用并é…�置了接收器(Receiver)和路由(Route)。详情请å�‚è§�[æœ¬ç« èŠ‚](../../../reference-guides/monitoring-v2-configuration/receivers.md)。
+
+在为 `rancher-cis-benchmark` 告è¦é…�ç½®è·¯ç”±æ—¶ï¼Œä½ å�¯ä»¥ä½¿ç”¨é”®å€¼å¯¹ `job:rancher-cis-scan` æ�¥æŒ‡å®šåŒ¹é…�。详情请查看[路由é…�置示例](../../../reference-guides/monitoring-v2-configuration/receivers.md#cis-扫æ��告è¦çš„示例路由é…�ç½®)。
+
+:::
+
+在安装或å�‡çº§ `rancher-cis-benchmark` Helm Chart 时,在 `values.yaml` ä¸å°†ä»¥ä¸‹æ ‡å¿—设置为 `true`:
+
+```yaml
+alerts:
+ enabled: true
+```
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/cis-scan-guides/install-rancher-cis-benchmark.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/cis-scan-guides/install-rancher-cis-benchmark.md
new file mode 100644
index 00000000000..814d38c5349
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/cis-scan-guides/install-rancher-cis-benchmark.md
@@ -0,0 +1,17 @@
+---
+title: 安装 Rancher CIS Benchmark
+---
+
+1. 在左上角,�击 **☰ > 集群管�**。
+1. 在**集群**页�上,转到�安装 CIS Benchmark 的集群,然��击 **Explore**。
+1. 在左侧导航æ �ä¸ï¼Œå�•击 **Apps > Charts**。
+1. �击 **CIS Benchmark**。
+1. �击**安装**。
+
+**结果**:CIS 扫�应用已�部署在 Kubernetes 集群上。
+
+:::note
+
+å¦‚æžœä½ ä½¿ç”¨ Kubernetes v1.24 或更早版本,并且具有使用 [Pod 安全ç–ç•¥](../../new-user-guides/authentication-permissions-and-global-configuration/create-pod-security-policies.md) (PSP) åŠ å›ºçš„é›†ç¾¤ï¼Œåˆ™ CIS Benchmark 4.0.0 å�Šæ›´é«˜ç‰ˆæœ¬ä¼šé»˜è®¤ç¦�用 PSP。è¦�在 PSP åŠ å›ºé›†ç¾¤ä¸Šå®‰è£… CIS Benchmark,请在安装 Chart 之å‰�å°† values ä¸çš„ `global.psp.enabled` 设置为 `true`。[Pod 安全准入](../../new-user-guides/authentication-permissions-and-global-configuration/pod-security-standards.md) (PSA) åŠ å›ºé›†ç¾¤ä¸�å�—å½±å“�。
+
+:::
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/cis-scan-guides/run-a-scan-periodically-on-a-schedule.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/cis-scan-guides/run-a-scan-periodically-on-a-schedule.md
new file mode 100644
index 00000000000..d43567fbb25
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/cis-scan-guides/run-a-scan-periodically-on-a-schedule.md
@@ -0,0 +1,20 @@
+---
+title: 定时�行扫�
+---
+
+�定时�行 ClusterScan:
+
+1. 在左上角,�击 **☰ > 集群管�**。
+1. 在**集群**页�上,转到��行 CIS 扫�的集群,然��击 **Explore**。
+1. 点击 **CIS Benchmark > 扫�**。
+1. 选择集群扫æ��é…�置文件。该é…�置文件确定è¦�使用哪个 CIS Benchmark 版本以å�Šè¦�æ‰§è¡Œå“ªäº›æµ‹è¯•ã€‚å¦‚æžœä½ é€‰æ‹© Default é…�置文件,则 CIS Operator 将选择适用于它所在的 Kubernetes 集群类型的é…�置文件。
+1. 选择**定时�行扫�**的选项。
+1. 将一个有效的 Cron 表达å¼� 填写到**调度**å—æ®µã€‚
+1. 选择一个**ä¿�留计数**,表示为这个定时扫æ��维护的报告数é‡�。默认情况下,æ¤è®¡æ•°ä¸º 3。超过æ¤ä¿�ç•™é™�åˆ¶æ—¶ï¼Œæ—§æŠ¥å‘Šå°†è¢«åˆ é™¤ã€‚
+1. �击**创建**。
+
+**结果**:扫æ��è¿�è¡Œï¼Œå¹¶æ ¹æ�®è®¾ç½®çš„ cron 表达å¼�é‡�新调度。**下一次扫æ��**的值表示下次è¿�è¡Œæ¤æ‰«æ��的时间。
+
+�次�行扫�都会生�一份带有扫�结果的报告。如需查看最新的结果,请�击显示的扫��称。
+
+ä½ è¿˜å�¯ä»¥åœ¨æ‰«æ��详情页é�¢ä¸Šçš„**报告**下拉è�œå�•䏿Ÿ¥çœ‹ä¹‹å‰�的报告。
\ No newline at end of file
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/cis-scan-guides/run-a-scan.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/cis-scan-guides/run-a-scan.md
new file mode 100644
index 00000000000..e658029233e
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/cis-scan-guides/run-a-scan.md
@@ -0,0 +1,22 @@
+---
+title: �行扫�
+---
+
+创建 ClusterScan 自定义资��,它会在集群上为所选 ClusterScanProfile �动新的 CIS 扫�。
+
+:::note
+
+请注æ„�,目å‰�一个集群æ¯�次å�ªèƒ½è¿�行一次 CIS 扫æ��ã€‚å¦‚æžœä½ åˆ›å»ºäº†å¤šä¸ª ClusterScan 自定义资æº�,operator å�ªèƒ½ä¸€ä¸ªæŽ¥ä¸€ä¸ªåœ°è¿�行这些资æº�。一个扫æ��完æˆ�之å‰�,其余 ClusterScan 自定义资æº�将处于 “Pendingâ€� 状æ€�。
+
+:::
+
+��行扫�:
+
+1. 在左上角,�击 **☰ > 集群管�**。
+1. 在**集群**页�上,转到��行 CIS 扫�的集群,然��击 **Explore**。
+1. 点击 **CIS Benchmark > 扫�**。
+1. �击**创建**。
+1. 选择集群扫æ��é…�置文件。该é…�置文件确定è¦�使用哪个 CIS Benchmark 版本以å�Šè¦�æ‰§è¡Œå“ªäº›æµ‹è¯•ã€‚å¦‚æžœä½ é€‰æ‹© Default é…�置文件,则 CIS Operator 将选择适用于它所在的 Kubernetes 集群类型的é…�置文件。
+1. �击**创建**。
+
+**结果**:已生�带有扫�结果的报告。如需查看结果,请�击显示的扫��称。
\ No newline at end of file
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/cis-scan-guides/skip-tests.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/cis-scan-guides/skip-tests.md
new file mode 100644
index 00000000000..230bb1c7696
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/cis-scan-guides/skip-tests.md
@@ -0,0 +1,34 @@
+---
+title: 跳过测试
+---
+
+用户å�¯ä»¥åœ¨æµ‹è¯•é…�置文件ä¸è‡ªå®šä¹‰è¦�跳过的测试,然å�Ž CIS 扫æ��å�¯ä»¥ä½¿ç”¨è¯¥é…�置文件è¿�行。
+
+è¦�è·³è¿‡æµ‹è¯•ï¼Œä½ éœ€è¦�创建自定义一个 CIS 扫æ��é…�置文件。é…�置文件包å�« CIS 扫æ��çš„é…�置,包括è¦�使用的 Benchmark 测试版本以å�Šè¦�在该 Benchmark 测试ä¸è·³è¿‡çš„æµ‹è¯•。
+
+1. 在左上角,�击 **☰ > 集群管�**。
+1. 在**集群**页�上,转到��行 CIS 扫�的集群,然��击 **Explore**。
+1. �击 **CIS Benchmark > �置文件**。
+1. åœ¨è¿™é‡Œï¼Œä½ å�¯ä»¥ä½¿ç”¨å¤šç§�æ–¹å¼�æ�¥åˆ›å»ºé…�置文件。è¦�创建新é…�置文件,å�•击**创建**并在 UI ä¸å¡«å†™è¡¨å�•。è¦�基于现有é…�置文件æ�¥åˆ›å»ºæ–°é…�置文件,请转到现有é…�置文件并å�•击**â‹® 克隆**ã€‚å¦‚æžœä½ åœ¨å¡«å†™è¡¨å�•,请使用测试 ID æ·»åŠ è¦�跳过的测试,并å�‚考相关的 CIS Benchmarkã€‚å¦‚æžœä½ å°†æ–°çš„æµ‹è¯•é…�置文件创建为 YAMLï¼Œä½ éœ€è¦�在 `skipTests` å�‚æ•°ä¸æ·»åŠ è¦�跳过的测试的 IDã€‚ä½ è¿˜éœ€è¦�为é…�置文件命å��:
+
+ ```yaml
+ apiVersion: cis.cattle.io/v1
+ kind: ClusterScanProfile
+ metadata:
+ annotations:
+ meta.helm.sh/release-name: clusterscan-operator
+ meta.helm.sh/release-namespace: cis-operator-system
+ labels:
+ app.kubernetes.io/managed-by: Helm
+ name: ""
+ spec:
+ benchmarkVersion: cis-1.5
+ skipTests:
+ - "1.1.20"
+ - "1.1.21"
+ ```
+1. �击**创建**。
+
+**结果**:已创建一个新的 CIS 扫��置文件。
+
+使用æ¤é…�置文件[è¿�行扫æ��](./run-a-scan.md)时,会跳过定义的跳过测试。跳过的测试将在生æˆ�çš„æŠ¥å‘Šä¸æ ‡è®°ä¸º `Skip`。
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/cis-scan-guides/uninstall-rancher-cis-benchmark.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/cis-scan-guides/uninstall-rancher-cis-benchmark.md
new file mode 100644
index 00000000000..83d36169627
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/cis-scan-guides/uninstall-rancher-cis-benchmark.md
@@ -0,0 +1,9 @@
+---
+title: �载 Rancher CIS Benchmark
+---
+
+1. 在**集群**仪表æ�¿ä¸ï¼Œå�•击左侧导航的 **Apps > Installed Apps**。
+1. å‰�å¾€ `cis-operator-system` 命å��ç©ºé—´ï¼Œå¹¶é€‰ä¸ `rancher-cis-benchmark-crd` å’Œ `rancher-cis-benchmark` æ—�边的框。
+1. å�•击**åˆ é™¤**并确认**åˆ é™¤**。
+
+**结果**:已�载 `rancher-cis-benchmark` 应用。
\ No newline at end of file
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/cis-scan-guides/view-reports.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/cis-scan-guides/view-reports.md
new file mode 100644
index 00000000000..adfcce53799
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/cis-scan-guides/view-reports.md
@@ -0,0 +1,12 @@
+---
+title: 查看报告
+---
+
+�查看生�的 CIS 扫�报告:
+
+1. 在左上角,�击 **☰ > 集群管�**。
+1. 在**集群**页�上,转到��行 CIS 扫�的集群,然��击 **Explore**。
+1. 点击 **CIS Benchmark > 扫�**。
+1. **扫�**页�将显示生�的报告。�查看详细报告,请转到扫�报告并�击报告�称。
+
+ä½ å�¯ä»¥ä»Žæ‰«æ��列表或扫æ��详情页é�¢ä¸‹è½½æŠ¥å‘Šã€‚
\ No newline at end of file
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/configure-layer-7-nginx-load-balancer.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/configure-layer-7-nginx-load-balancer.md
new file mode 100644
index 00000000000..b10f0b61f1b
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/configure-layer-7-nginx-load-balancer.md
@@ -0,0 +1,260 @@
+---
+title: 7 层 NGINX è´Ÿè½½å�‡è¡¡å™¨ä¸Šçš„ TLS 终æ¢ï¼ˆDocker 安装)
+---
+
+å¦‚æžœä½ çš„å¼€å�‘或测试环境è¦�求在负载å�‡è¡¡å™¨ä¸Šç»ˆæ¢ TLS/SSL,而ä¸�是在 Rancher Server 上,请部署 Rancher å¹¶é…�置负载å�‡è¡¡å™¨ã€‚
+
+如果è¦�在基础设施ä¸å¯¹ TLS 集ä¸è¿›è¡Œç»ˆæ¢ï¼Œè¯·ä½¿ç”¨ 7 层负载å�‡è¡¡å™¨ã€‚7 层负载å�‡è¡¡è¿˜èƒ½è®©ä½ 的负载å�‡è¡¡å™¨åŸºäºŽ HTTP 属性(例如 cookie ç‰ï¼‰å�šå‡ºå†³ç–,而 4 层负载å�‡è¡¡å™¨åˆ™ä¸�能。
+
+本文ä¸çš„安装æ¥éª¤å°†å¼•å¯¼ä½ ä½¿ç”¨å�•个容器部署 Rancher,并æ��ä¾› 7 层 NGINX è´Ÿè½½å�‡è¡¡å™¨çš„示例é…�置。
+
+## �作系统,Docker,硬件和网络�求
+
+请确ä¿�ä½ çš„èŠ‚ç‚¹æ»¡è¶³å¸¸è§„çš„[安装è¦�求](../../pages-for-subheaders/installation-requirements.md)。
+
+## 安装概�
+
+
+## 1. �置 Linux 主机
+
+æ ¹æ�®æˆ‘们的[è¦�求](../../pages-for-subheaders/installation-requirements.md)é…�置一个 Linux 主机æ�¥å�¯åЍ Rancher Server。
+
+## 2. 选择一个 SSL 选项并安装 Rancher
+
+出于安全考虑,使用 Rancher 时请使用 SSL(Secure Sockets Layer)。SSL �护所有 Rancher 网络通信(如登录和与集群交互)的安全。
+
+:::note ä½ æ˜¯å�¦éœ€è¦�:
+
+- 完�离线安装。
+- 记录所有 Rancher API 的事务。
+
+ç»§ç»ä¹‹å‰�,请å�‚è§�[高级选项](#高级选项)。
+
+:::
+
+选择以下的选项之一:
+
+
+ 选项 Aï¼šä½¿ç”¨ä½ è‡ªå·±çš„è¯�书 - 自ç¾å��
+
+如果è¦�使用自ç¾å��è¯�书æ�¥åŠ å¯†é€šä¿¡ï¼Œä½ å¿…é¡»åœ¨è´Ÿè½½å�‡è¡¡å™¨ï¼ˆå�Žç»æ¥éª¤ï¼‰å’Œ Rancher 容器上安装è¯�书。è¿�行 Docker 命令部署 Rancher,将 Docker 指å�‘ä½ çš„è¯�书。
+
+:::note 先决�件:
+
+创建自ç¾å��è¯�书。
+
+- è¯�ä¹¦æ–‡ä»¶çš„æ ¼å¼�必须是 PEM。
+
+:::
+
+**使用自ç¾å��è¯�书安装 Rancher**:
+
+1. 在è¿�行 Docker 命令部署 Rancher 时,将 Docker 指å�‘ä½ çš„ CA è¯�书文件。
+
+ ```
+ docker run -d --restart=unless-stopped \
+ -p 80:80 -p 443:443 \
+ -v /etc/your_certificate_directory/cacerts.pem:/etc/rancher/ssl/cacerts.pem \
+ rancher/rancher:latest
+ ```
+
+
+
+ 选项 Bï¼šä½¿ç”¨ä½ è‡ªå·±çš„è¯�书 - å�¯ä¿¡ CA ç¾å��çš„è¯�书
+
+å¦‚æžœä½ çš„é›†ç¾¤é�¢å�‘公众,则最好使用由公认 CA ç¾ç½²çš„è¯�书。
+
+:::note 先决�件:
+
+- è¯�ä¹¦æ–‡ä»¶çš„æ ¼å¼�必须是 PEM。
+
+:::
+
+**使用授信 CA ç¾å�‘çš„è¯�书安装 Rancher**:
+
+å¦‚æžœä½ ä½¿ç”¨æŽˆä¿¡ CA ç¾å�‘çš„è¯�ä¹¦ï¼Œä½ æ— éœ€åœ¨ Rancher 容器ä¸å®‰è£…è¯�书。但是,请确ä¿�ä¸�è¦�生æˆ�å’Œå˜å‚¨é»˜è®¤çš„ CA è¯�ä¹¦ï¼ˆä½ å�¯ä»¥é€šè¿‡å°† `--no-cacerts` å�‚æ•°ä¼ é€’ç»™å®¹å™¨æ�¥å®žçŽ°ï¼‰ã€‚
+
+1. 输入以下命令:
+
+ ```
+ docker run -d --restart=unless-stopped \
+ -p 80:80 -p 443:443 \
+ rancher/rancher:latest --no-cacerts
+ ```
+
+
+
+## 3. �置负载�衡器
+
+在 Rancher 容器å‰�使用负载å�‡è¡¡å™¨æ—¶ï¼Œå®¹å™¨æ— 需从端å�£ 80 或端å�£ 443 é‡�定å�‘端å�£é€šä¿¡ã€‚ä½ å�¯ä»¥é€šè¿‡ä¼ 递 `X-Forwarded-Proto: https` æ ‡å¤´ç¦�用æ¤é‡�定å�‘。
+
+负载�衡器或代�必须支�以下内容:
+
+- **WebSocket** 连接
+- **SPDY** / **HTTP/2** �议
+- ä¼ é€’/è®¾ç½®ä»¥ä¸‹æ ‡å¤´ï¼š
+
+ | æ ‡å¤´ | 值 | æ��è¿° |
+ |--------|-------|-------------|
+ | `Host` | 用于访问 Rancher 的主机�。 | 识别客户端所请求的�务器。 |
+ | `X-Forwarded-Proto` | `https` | 识别客户端连接负载å�‡è¡¡å™¨æˆ–代ç�†æ—¶æ‰€ç”¨çš„å��议。 **注æ„�**ï¼šå¦‚æžœæ¤æ ‡å¤´å˜åœ¨ï¼Œ`rancher/rancher` ä¸�会将 HTTP é‡�定å�‘到 HTTPS。 |
+ | `X-Forwarded-Port` | 用于访问 Rancher 的端�。 | 识别客户端连接到负载�衡器或代�时所用的端�。 |
+ | `X-Forwarded-For` | 客户端 IP 地� | 识别客户端的原始 IP 地�。 |
+### 示例 NGINX �置
+
+æ¤ NGINX é…�置已在 NGINX 1.14 上进行了测试。
+
+:::note
+
+æ¤ NGINX é…�ç½®å�ªæ˜¯ä¸€ä¸ªç¤ºä¾‹ï¼Œå�¯èƒ½ä¸�适å�ˆä½ 的环境。如需查阅完整文档,请å�‚è§� [NGINX è´Ÿè½½å�‡è¡¡ - HTTP è´Ÿè½½å�‡è¡¡](https://docs.nginx.com/nginx/admin-guide/load-balancer/http-load-balancer/)。
+
+:::
+
+- 将 `rancher-server` 替�为�行 Rancher 容器的节点的 IP 或主机�。
+- 将两处的 `FQDN` �替�为 Rancher 的 DNS �称。
+- 把 `/certs/fullchain.pem` 和 `/certs/privkey.pem` 分别替�为�务器�书和�务器�书密钥的�置。
+
+```
+worker_processes 4;
+worker_rlimit_nofile 40000;
+
+events {
+ worker_connections 8192;
+}
+
+http {
+ upstream rancher {
+ server rancher-server:80;
+ }
+
+ map $http_upgrade $connection_upgrade {
+ default Upgrade;
+ '' close;
+ }
+
+ server {
+ listen 443 ssl http2;
+ server_name FQDN;
+ ssl_certificate /certs/fullchain.pem;
+ ssl_certificate_key /certs/privkey.pem;
+
+ location / {
+ proxy_set_header Host $host;
+ proxy_set_header X-Forwarded-Proto $scheme;
+ proxy_set_header X-Forwarded-Port $server_port;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_pass http://rancher;
+ proxy_http_version 1.1;
+ proxy_set_header Upgrade $http_upgrade;
+ proxy_set_header Connection $connection_upgrade;
+ # æ¤é¡¹å…�许执行的 shell 窗å�£ä¿�æŒ�å¼€å�¯ï¼Œæœ€é•¿å�¯è¾¾15分钟。ä¸�使用æ¤å�‚æ•°çš„è¯�,默认1分钟å�Žè‡ªåЍ关é—。
+ proxy_read_timeout 900s;
+ proxy_buffering off;
+ }
+ }
+
+ server {
+ listen 80;
+ server_name FQDN;
+ return 301 https://$server_name$request_uri;
+ }
+}
+```
+
+
+
+## å�Žç»æ“�作
+
+- **推è��**:检查å�•节点[备份](../../how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/back-up-docker-installed-rancher.md)å’Œ[æ�¢å¤�](../../how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/restore-docker-installed-rancher.md)ã€‚ä½ å�¯èƒ½æš‚时没有需è¦�备份的数æ�®ï¼Œä½†æ˜¯æˆ‘ä»¬å»ºè®®ä½ åœ¨å¸¸è§„ä½¿ç”¨ Rancher å�Žåˆ›å»ºå¤‡ä»½ã€‚
+- 创建 Kubernetes 集群:[�置 Kubernetes 集群](../../pages-for-subheaders/kubernetes-clusters-in-rancher-setup.md)。
+
+
+
+## 常�问题和故障排除
+
+å¦‚æžœä½ éœ€è¦�对è¯�书进行故障排除,请å�‚è§�[æ¤ç« 节](../../getting-started/installation-and-upgrade/other-installation-methods/rancher-on-a-single-node-with-docker/certificate-troubleshooting.md)。
+
+## 高级选项
+
+### API 审计
+
+å¦‚æžœä½ éœ€è¦�记录所有 Rancher API äº‹åŠ¡ï¼Œè¯·å°†ä»¥ä¸‹æ ‡å¿—æ·»åŠ åˆ°å®‰è£…å‘½ä»¤ä¸ï¼Œä»Žè€Œå�¯ç”¨ [API 审计](enable-api-audit-log.md)功能。
+
+ -e AUDIT_LEVEL=1 \
+ -e AUDIT_LOG_PATH=/var/log/auditlog/rancher-api-audit.log \
+ -e AUDIT_LOG_MAXAGE=20 \
+ -e AUDIT_LOG_MAXBACKUP=20 \
+ -e AUDIT_LOG_MAXSIZE=100 \
+
+### 离线环境
+
+å¦‚æžœä½ è®¿é—®æ¤é¡µé�¢æ˜¯ä¸ºäº†å®Œæˆ�[离线安装](../../pages-for-subheaders/air-gapped-helm-cli-install.md),则在è¿�è¡Œå®‰è£…å‘½ä»¤æ—¶ï¼Œå…ˆå°†ä½ çš„ç§�有镜åƒ�仓库 URL é™„åŠ åˆ° Server æ ‡å¿—ä¸ã€‚也就是说,在 `rancher/rancher:latest` å‰�é�¢æ·»åŠ `` å’Œç§�有镜åƒ�仓库 URL。
+
+**示例**:
+
+ /rancher/rancher:latest
+
+### �久化数�
+
+Rancher 使用 etcd 作为数æ�®å˜å‚¨ã€‚如果 Rancher 是使用 Docker 安装的,Rancher 会使用嵌入å¼� etcd。æŒ�久化数æ�®ä½�于容器的 `/var/lib/rancher` 路径ä¸ã€‚
+
+ä½ å�¯ä»¥å°†ä¸»æœºå�·æŒ‚载到该ä½�置,æ�¥å°†æ•°æ�®ä¿�留在è¿�行它的主机上:
+
+```
+docker run -d --restart=unless-stopped \
+ -p 80:80 -p 443:443 \
+ -v /opt/rancher:/var/lib/rancher \
+ --privileged \
+ rancher/rancher:latest
+```
+
+æ¤æ“�作需è¦� [privileged 访问](../../pages-for-subheaders/rancher-on-a-single-node-with-docker.md#rancher-特æ�ƒè®¿é—®)。
+
+这个 7 层 NGINX �置已�在 NGINX 1.13(Mainline)和 1.14(Stable)版本上进行了测试。
+
+:::note
+
+æ¤ NGINX é…�ç½®å�ªæ˜¯ä¸€ä¸ªç¤ºä¾‹ï¼Œå�¯èƒ½ä¸�适å�ˆä½ 的环境。如果需è¦�查阅完整文档,请å�‚è§� [NGINX è´Ÿè½½å�‡è¡¡ - TCP å’Œ UDP è´Ÿè½½å�‡è¡¡å™¨](https://docs.nginx.com/nginx/admin-guide/load-balancer/tcp-udp-load-balancer/)。
+
+:::
+
+```
+upstream rancher {
+ server rancher-server:80;
+}
+
+map $http_upgrade $connection_upgrade {
+ default Upgrade;
+ '' close;
+}
+
+server {
+ listen 443 ssl http2;
+ server_name rancher.yourdomain.com;
+ ssl_certificate /etc/your_certificate_directory/fullchain.pem;
+ ssl_certificate_key /etc/your_certificate_directory/privkey.pem;
+
+ location / {
+ proxy_set_header Host $host;
+ proxy_set_header X-Forwarded-Proto $scheme;
+ proxy_set_header X-Forwarded-Port $server_port;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_pass http://rancher;
+ proxy_http_version 1.1;
+ proxy_set_header Upgrade $http_upgrade;
+ proxy_set_header Connection $connection_upgrade;
+ # æ¤é¡¹å…�许执行的 shell 窗å�£ä¿�æŒ�å¼€å�¯ï¼Œæœ€é•¿å�¯è¾¾15分钟。ä¸�使用æ¤å�‚æ•°çš„è¯�,默认1分钟å�Žè‡ªåЍ关é—。
+ proxy_read_timeout 900s;
+ proxy_buffering off;
+ }
+}
+
+server {
+ listen 80;
+ server_name rancher.yourdomain.com;
+ return 301 https://$server_name$request_uri;
+}
+```
+
+
+
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/enable-api-audit-log.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/enable-api-audit-log.md
new file mode 100644
index 00000000000..94974cb52f7
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/enable-api-audit-log.md
@@ -0,0 +1,558 @@
+---
+title: �用 API 审计日志以记录系统事件
+---
+
+ä½ å�¯ä»¥å�¯ç”¨ API 审计日志æ�¥è®°å½•å�„个用户å�‘起的系统事件的顺åº�ã€‚é€šè¿‡æŸ¥çœ‹æ—¥å¿—ï¼Œä½ å�¯ä»¥äº†è§£å�‘生了什么事件ã€�事件å�‘生的时间,事件å�‘起人,以å�Šäº‹ä»¶å½±å“�的集群。å�¯ç”¨æ¤åŠŸèƒ½å�Žï¼Œæ‰€æœ‰ Rancher API 的请求和å“�应都会写入日志ä¸ã€‚
+
+API 审计�以在 Rancher 安装或�级期间�用。
+
+## �用 API 审计日志
+
+ä½ å�¯ä»¥å°†çŽ¯å¢ƒå�˜é‡�ä¼ é€’ç»™ Rancher Server 容器,从而å�¯ç”¨å’Œé…�置审计日志。请å�‚è§�以下文档,在安装时å�¯ç”¨è¯¥åŠŸèƒ½ï¼š
+
+- [Docker 安装](../../reference-guides/single-node-rancher-in-docker/advanced-options.md#api-审计日志)
+
+- [Kubernetes 安装](../../getting-started/installation-and-upgrade/installation-references/helm-chart-options.md#api-审计日志)
+
+## API 审计日志选项
+
+以下å�‚数定义了审计日志的记录规则,其ä¸åŒ…括应该记录什么内容以å�ŠåŒ…括什么数æ�®ï¼š
+
+| �数 | �述 |
+| ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| `AUDIT_LEVEL` | `0` - ç¦�用审计日志(默认) `1` - 日志事件元数æ�® `2` - 日志事件元数æ�®å’Œè¯·æ±‚体 `3` - 日志事件元数æ�®ï¼Œè¯·æ±‚体和å“�应体。请求/å“�应对的æ¯�个日志事务都使用å�Œä¸€ä¸ªçš„ `auditID`。 如需了解æ¯�个设置记录的日志内容,请å�‚è§�[审计日志级别](#å®¡æ ¸æ—¥å¿—çº§åˆ«)。 |
+| `AUDIT_LOG_PATH` | Rancher Server API 的日志路径。默认路径:`/var/log/auditlog/rancher-api-audit.log`ã€‚ä½ å�¯ä»¥å°†æ—¥å¿—目录挂载到主机。 示例:`AUDIT_LOG_PATH=/my/custom/path/` |
+| `AUDIT_LOG_MAXAGE` | 旧审计日志文件��留的最大天数。默认为 10 天。 |
+| `AUDIT_LOG_MAXBACKUP` | �留的审计日志最大文件个数。默认值为 10。 |
+| `AUDIT_LOG_MAXSIZE` | 在审计日志文件被轮��的最大容�,��是 MB。默认大�为 100MB。 |
+
+
+
+### å®¡æ ¸æ—¥å¿—çº§åˆ«
+
+下表介�了�个 [`AUDIT_LEVEL`](#audit-level) 记录的 API 事务:
+
+| `AUDIT_LEVEL` 设置 | 请求元数� | 请求体 | �应元数� | �应体 |
+| --------------------- | ---------------- | ------------ | ----------------- | ------------- |
+| `0` | | | | |
+| `1` | ✓ | | | |
+| `2` | ✓ | ✓ | | |
+| `3` | ✓ | ✓ | ✓ | ✓ |
+
+## 查看 API 审计日志
+
+### Docker 安装
+
+与主机系统共享 `AUDIT_LOG_PATH` 目录(默认目录:`/var/log/auditlog`)。日志å�¯ä»¥é€šè¿‡æ ‡å‡† CLI 工具进行解æž�,也å�¯ä»¥è½¬å�‘到 Fluentdã€�Filebeatã€�Logstash ç‰æ—¥å¿—收集工具。
+
+### Kubernetes 安装
+
+使用 Helm Chart 安装 Rancher æ—¶å�¯åЍ API 审计日志,会在 Rancher Pod ä¸åˆ›å»ºä¸€ä¸ª `rancher-audit-log` Sidecar 容器。该容器会将日志å�‘é€�åˆ°æ ‡å‡†è¾“å‡º (stdout)ã€‚ä½ å�¯ä»¥åƒ�æŸ¥çœ‹å…¶ä»–å®¹å™¨çš„æ—¥å¿—ä¸€æ ·æŸ¥çœ‹ API 审计日志。
+
+`rancher-audit-log` 容器ä½�于 `cattle-system` 命å��空间ä¸çš„ `rancher` Pod ä¸ã€‚
+
+#### CLI
+
+```bash
+kubectl -n cattle-system logs -f rancher-84d886bdbb-s4s69 rancher-audit-log
+```
+
+#### ��审计日志
+
+ä½ å�¯ä»¥ä¸ºé›†ç¾¤å�¯ç”¨ Rancher çš„å†…ç½®æ—¥å¿—æ”¶é›†å’Œä¼ é€�功能,将审计日志和其他æœ�务日志å�‘é€�到支æŒ�çš„ endpoint。详情请å�‚è§� [Rancher 工具 - Logging](../../pages-for-subheaders/logging.md)。
+
+## 审计日志示例
+
+å�¯ç”¨å®¡è®¡æ—¥å¿—å�Žï¼ŒRancher 会以 JSON æ ¼å¼�记录æ¯�个 API 的请求和å“�应。下文的代ç �示例展示了如何查看 API 事务。
+
+### 元数�日志级别
+
+å¦‚æžœä½ å°† `AUDIT_LEVEL` 设置为 `1`,Rancher å�ªä¼šè®°å½•æ¯�个 API 请求的元数æ�®æ ‡å¤´ï¼Œè€Œä¸�ä¼šè®°å½•è¯·æ±‚ä½“ã€‚æ ‡å¤´è®°å½•äº† API 事务的基本信æ�¯ï¼ŒåŒ…括 IDã€�å�‘起人ã€�å�‘èµ·æ—¶é—´ç‰ã€‚代ç �示例如下:
+
+```json
+{
+ "auditID": "30022177-9e2e-43d1-b0d0-06ef9d3db183",
+ "requestURI": "/v3/schemas",
+ "sourceIPs": ["::1"],
+ "user": {
+ "name": "user-f4tt2",
+ "group": ["system:authenticated"]
+ },
+ "verb": "GET",
+ "stage": "RequestReceived",
+ "stageTimestamp": "2018-07-20 10:22:43 +0800"
+}
+```
+
+### 元数�和请求体日志级别
+
+å¦‚æžœä½ å°† `AUDIT_LEVEL` 设置为 `2`,Rancher 会记录æ¯�个 API 请求的元数æ�®æ ‡å¤´å’Œè¯·æ±‚体。
+
+下é�¢çš„代ç �示例æ��述了一个 API 请求,包括它的元数æ�®æ ‡å¤´å’Œæ£æ–‡ï¼š
+
+```json
+{
+ "auditID": "ef1d249e-bfac-4fd0-a61f-cbdcad53b9bb",
+ "requestURI": "/v3/project/c-bcz5t:p-fdr4s/workloads/deployment:default:nginx",
+ "sourceIPs": ["::1"],
+ "user": {
+ "name": "user-f4tt2",
+ "group": ["system:authenticated"]
+ },
+ "verb": "PUT",
+ "stage": "RequestReceived",
+ "stageTimestamp": "2018-07-20 10:28:08 +0800",
+ "requestBody": {
+ "hostIPC": false,
+ "hostNetwork": false,
+ "hostPID": false,
+ "paused": false,
+ "annotations": {},
+ "baseType": "workload",
+ "containers": [
+ {
+ "allowPrivilegeEscalation": false,
+ "image": "nginx",
+ "imagePullPolicy": "Always",
+ "initContainer": false,
+ "name": "nginx",
+ "ports": [
+ {
+ "containerPort": 80,
+ "dnsName": "nginx-nodeport",
+ "kind": "NodePort",
+ "name": "80tcp01",
+ "protocol": "TCP",
+ "sourcePort": 0,
+ "type": "/v3/project/schemas/containerPort"
+ }
+ ],
+ "privileged": false,
+ "readOnly": false,
+ "resources": {
+ "type": "/v3/project/schemas/resourceRequirements",
+ "requests": {},
+ "limits": {}
+ },
+ "restartCount": 0,
+ "runAsNonRoot": false,
+ "stdin": true,
+ "stdinOnce": false,
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File",
+ "tty": true,
+ "type": "/v3/project/schemas/container",
+ "environmentFrom": [],
+ "capAdd": [],
+ "capDrop": [],
+ "livenessProbe": null,
+ "volumeMounts": []
+ }
+ ],
+ "created": "2018-07-18T07:34:16Z",
+ "createdTS": 1531899256000,
+ "creatorId": null,
+ "deploymentConfig": {
+ "maxSurge": 1,
+ "maxUnavailable": 0,
+ "minReadySeconds": 0,
+ "progressDeadlineSeconds": 600,
+ "revisionHistoryLimit": 10,
+ "strategy": "RollingUpdate"
+ },
+ "deploymentStatus": {
+ "availableReplicas": 1,
+ "conditions": [
+ {
+ "lastTransitionTime": "2018-07-18T07:34:38Z",
+ "lastTransitionTimeTS": 1531899278000,
+ "lastUpdateTime": "2018-07-18T07:34:38Z",
+ "lastUpdateTimeTS": 1531899278000,
+ "message": "Deployment has minimum availability.",
+ "reason": "MinimumReplicasAvailable",
+ "status": "True",
+ "type": "Available"
+ },
+ {
+ "lastTransitionTime": "2018-07-18T07:34:16Z",
+ "lastTransitionTimeTS": 1531899256000,
+ "lastUpdateTime": "2018-07-18T07:34:38Z",
+ "lastUpdateTimeTS": 1531899278000,
+ "message": "ReplicaSet \"nginx-64d85666f9\" has successfully progressed.",
+ "reason": "NewReplicaSetAvailable",
+ "status": "True",
+ "type": "Progressing"
+ }
+ ],
+ "observedGeneration": 2,
+ "readyReplicas": 1,
+ "replicas": 1,
+ "type": "/v3/project/schemas/deploymentStatus",
+ "unavailableReplicas": 0,
+ "updatedReplicas": 1
+ },
+ "dnsPolicy": "ClusterFirst",
+ "id": "deployment:default:nginx",
+ "labels": {
+ "workload.user.cattle.io/workloadselector": "deployment-default-nginx"
+ },
+ "name": "nginx",
+ "namespaceId": "default",
+ "projectId": "c-bcz5t:p-fdr4s",
+ "publicEndpoints": [
+ {
+ "addresses": ["10.64.3.58"],
+ "allNodes": true,
+ "ingressId": null,
+ "nodeId": null,
+ "podId": null,
+ "port": 30917,
+ "protocol": "TCP",
+ "serviceId": "default:nginx-nodeport",
+ "type": "publicEndpoint"
+ }
+ ],
+ "restartPolicy": "Always",
+ "scale": 1,
+ "schedulerName": "default-scheduler",
+ "selector": {
+ "matchLabels": {
+ "workload.user.cattle.io/workloadselector": "deployment-default-nginx"
+ },
+ "type": "/v3/project/schemas/labelSelector"
+ },
+ "state": "active",
+ "terminationGracePeriodSeconds": 30,
+ "transitioning": "no",
+ "transitioningMessage": "",
+ "type": "deployment",
+ "uuid": "f998037d-8a5c-11e8-a4cf-0245a7ebb0fd",
+ "workloadAnnotations": {
+ "deployment.kubernetes.io/revision": "1",
+ "field.cattle.io/creatorId": "user-f4tt2"
+ },
+ "workloadLabels": {
+ "workload.user.cattle.io/workloadselector": "deployment-default-nginx"
+ },
+ "scheduling": {
+ "node": {}
+ },
+ "description": "my description",
+ "volumes": []
+ }
+}
+```
+
+### 元数��请求体和�应体日志级别
+
+å¦‚æžœä½ å°† `AUDIT_LEVEL` 设置为 `3`,Rancher 会记录:
+
+- æ¯�个 API 请求的元数æ�®æ ‡å¤´å’Œè¯·æ±‚体。
+- æ¯�个 API å“�应的元数æ�®æ ‡å¤´å’Œå“�应体。
+
+#### 请求
+
+下é�¢çš„代ç �示例æ��述了一个 API 请求,包括它的元数æ�®æ ‡å¤´å’Œæ£æ–‡ï¼š
+
+```json
+{
+ "auditID": "a886fd9f-5d6b-4ae3-9a10-5bff8f3d68af",
+ "requestURI": "/v3/project/c-bcz5t:p-fdr4s/workloads/deployment:default:nginx",
+ "sourceIPs": ["::1"],
+ "user": {
+ "name": "user-f4tt2",
+ "group": ["system:authenticated"]
+ },
+ "verb": "PUT",
+ "stage": "RequestReceived",
+ "stageTimestamp": "2018-07-20 10:33:06 +0800",
+ "requestBody": {
+ "hostIPC": false,
+ "hostNetwork": false,
+ "hostPID": false,
+ "paused": false,
+ "annotations": {},
+ "baseType": "workload",
+ "containers": [
+ {
+ "allowPrivilegeEscalation": false,
+ "image": "nginx",
+ "imagePullPolicy": "Always",
+ "initContainer": false,
+ "name": "nginx",
+ "ports": [
+ {
+ "containerPort": 80,
+ "dnsName": "nginx-nodeport",
+ "kind": "NodePort",
+ "name": "80tcp01",
+ "protocol": "TCP",
+ "sourcePort": 0,
+ "type": "/v3/project/schemas/containerPort"
+ }
+ ],
+ "privileged": false,
+ "readOnly": false,
+ "resources": {
+ "type": "/v3/project/schemas/resourceRequirements",
+ "requests": {},
+ "limits": {}
+ },
+ "restartCount": 0,
+ "runAsNonRoot": false,
+ "stdin": true,
+ "stdinOnce": false,
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File",
+ "tty": true,
+ "type": "/v3/project/schemas/container",
+ "environmentFrom": [],
+ "capAdd": [],
+ "capDrop": [],
+ "livenessProbe": null,
+ "volumeMounts": []
+ }
+ ],
+ "created": "2018-07-18T07:34:16Z",
+ "createdTS": 1531899256000,
+ "creatorId": null,
+ "deploymentConfig": {
+ "maxSurge": 1,
+ "maxUnavailable": 0,
+ "minReadySeconds": 0,
+ "progressDeadlineSeconds": 600,
+ "revisionHistoryLimit": 10,
+ "strategy": "RollingUpdate"
+ },
+ "deploymentStatus": {
+ "availableReplicas": 1,
+ "conditions": [
+ {
+ "lastTransitionTime": "2018-07-18T07:34:38Z",
+ "lastTransitionTimeTS": 1531899278000,
+ "lastUpdateTime": "2018-07-18T07:34:38Z",
+ "lastUpdateTimeTS": 1531899278000,
+ "message": "Deployment has minimum availability.",
+ "reason": "MinimumReplicasAvailable",
+ "status": "True",
+ "type": "Available"
+ },
+ {
+ "lastTransitionTime": "2018-07-18T07:34:16Z",
+ "lastTransitionTimeTS": 1531899256000,
+ "lastUpdateTime": "2018-07-18T07:34:38Z",
+ "lastUpdateTimeTS": 1531899278000,
+ "message": "ReplicaSet \"nginx-64d85666f9\" has successfully progressed.",
+ "reason": "NewReplicaSetAvailable",
+ "status": "True",
+ "type": "Progressing"
+ }
+ ],
+ "observedGeneration": 2,
+ "readyReplicas": 1,
+ "replicas": 1,
+ "type": "/v3/project/schemas/deploymentStatus",
+ "unavailableReplicas": 0,
+ "updatedReplicas": 1
+ },
+ "dnsPolicy": "ClusterFirst",
+ "id": "deployment:default:nginx",
+ "labels": {
+ "workload.user.cattle.io/workloadselector": "deployment-default-nginx"
+ },
+ "name": "nginx",
+ "namespaceId": "default",
+ "projectId": "c-bcz5t:p-fdr4s",
+ "publicEndpoints": [
+ {
+ "addresses": ["10.64.3.58"],
+ "allNodes": true,
+ "ingressId": null,
+ "nodeId": null,
+ "podId": null,
+ "port": 30917,
+ "protocol": "TCP",
+ "serviceId": "default:nginx-nodeport",
+ "type": "publicEndpoint"
+ }
+ ],
+ "restartPolicy": "Always",
+ "scale": 1,
+ "schedulerName": "default-scheduler",
+ "selector": {
+ "matchLabels": {
+ "workload.user.cattle.io/workloadselector": "deployment-default-nginx"
+ },
+ "type": "/v3/project/schemas/labelSelector"
+ },
+ "state": "active",
+ "terminationGracePeriodSeconds": 30,
+ "transitioning": "no",
+ "transitioningMessage": "",
+ "type": "deployment",
+ "uuid": "f998037d-8a5c-11e8-a4cf-0245a7ebb0fd",
+ "workloadAnnotations": {
+ "deployment.kubernetes.io/revision": "1",
+ "field.cattle.io/creatorId": "user-f4tt2"
+ },
+ "workloadLabels": {
+ "workload.user.cattle.io/workloadselector": "deployment-default-nginx"
+ },
+ "scheduling": {
+ "node": {}
+ },
+ "description": "my decript",
+ "volumes": []
+ }
+}
+```
+
+#### �应
+
+下é�¢çš„代ç �示例æ��述了一个 API å“�应,包括它的元数æ�®æ ‡å¤´å’Œæ£æ–‡ï¼š
+
+```json
+{
+ "auditID": "a886fd9f-5d6b-4ae3-9a10-5bff8f3d68af",
+ "responseStatus": "200",
+ "stage": "ResponseComplete",
+ "stageTimestamp": "2018-07-20 10:33:06 +0800",
+ "responseBody": {
+ "actionLinks": {
+ "pause": "https://localhost:8443/v3/project/c-bcz5t:p-fdr4s/workloads/deployment:default:nginx?action=pause",
+ "resume": "https://localhost:8443/v3/project/c-bcz5t:p-fdr4s/workloads/deployment:default:nginx?action=resume",
+ "rollback": "https://localhost:8443/v3/project/c-bcz5t:p-fdr4s/workloads/deployment:default:nginx?action=rollback"
+ },
+ "annotations": {},
+ "baseType": "workload",
+ "containers": [
+ {
+ "allowPrivilegeEscalation": false,
+ "image": "nginx",
+ "imagePullPolicy": "Always",
+ "initContainer": false,
+ "name": "nginx",
+ "ports": [
+ {
+ "containerPort": 80,
+ "dnsName": "nginx-nodeport",
+ "kind": "NodePort",
+ "name": "80tcp01",
+ "protocol": "TCP",
+ "sourcePort": 0,
+ "type": "/v3/project/schemas/containerPort"
+ }
+ ],
+ "privileged": false,
+ "readOnly": false,
+ "resources": {
+ "type": "/v3/project/schemas/resourceRequirements"
+ },
+ "restartCount": 0,
+ "runAsNonRoot": false,
+ "stdin": true,
+ "stdinOnce": false,
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File",
+ "tty": true,
+ "type": "/v3/project/schemas/container"
+ }
+ ],
+ "created": "2018-07-18T07:34:16Z",
+ "createdTS": 1531899256000,
+ "creatorId": null,
+ "deploymentConfig": {
+ "maxSurge": 1,
+ "maxUnavailable": 0,
+ "minReadySeconds": 0,
+ "progressDeadlineSeconds": 600,
+ "revisionHistoryLimit": 10,
+ "strategy": "RollingUpdate"
+ },
+ "deploymentStatus": {
+ "availableReplicas": 1,
+ "conditions": [
+ {
+ "lastTransitionTime": "2018-07-18T07:34:38Z",
+ "lastTransitionTimeTS": 1531899278000,
+ "lastUpdateTime": "2018-07-18T07:34:38Z",
+ "lastUpdateTimeTS": 1531899278000,
+ "message": "Deployment has minimum availability.",
+ "reason": "MinimumReplicasAvailable",
+ "status": "True",
+ "type": "Available"
+ },
+ {
+ "lastTransitionTime": "2018-07-18T07:34:16Z",
+ "lastTransitionTimeTS": 1531899256000,
+ "lastUpdateTime": "2018-07-18T07:34:38Z",
+ "lastUpdateTimeTS": 1531899278000,
+ "message": "ReplicaSet \"nginx-64d85666f9\" has successfully progressed.",
+ "reason": "NewReplicaSetAvailable",
+ "status": "True",
+ "type": "Progressing"
+ }
+ ],
+ "observedGeneration": 2,
+ "readyReplicas": 1,
+ "replicas": 1,
+ "type": "/v3/project/schemas/deploymentStatus",
+ "unavailableReplicas": 0,
+ "updatedReplicas": 1
+ },
+ "dnsPolicy": "ClusterFirst",
+ "hostIPC": false,
+ "hostNetwork": false,
+ "hostPID": false,
+ "id": "deployment:default:nginx",
+ "labels": {
+ "workload.user.cattle.io/workloadselector": "deployment-default-nginx"
+ },
+ "links": {
+ "remove": "https://localhost:8443/v3/project/c-bcz5t:p-fdr4s/workloads/deployment:default:nginx",
+ "revisions": "https://localhost:8443/v3/project/c-bcz5t:p-fdr4s/workloads/deployment:default:nginx/revisions",
+ "self": "https://localhost:8443/v3/project/c-bcz5t:p-fdr4s/workloads/deployment:default:nginx",
+ "update": "https://localhost:8443/v3/project/c-bcz5t:p-fdr4s/workloads/deployment:default:nginx",
+ "yaml": "https://localhost:8443/v3/project/c-bcz5t:p-fdr4s/workloads/deployment:default:nginx/yaml"
+ },
+ "name": "nginx",
+ "namespaceId": "default",
+ "paused": false,
+ "projectId": "c-bcz5t:p-fdr4s",
+ "publicEndpoints": [
+ {
+ "addresses": ["10.64.3.58"],
+ "allNodes": true,
+ "ingressId": null,
+ "nodeId": null,
+ "podId": null,
+ "port": 30917,
+ "protocol": "TCP",
+ "serviceId": "default:nginx-nodeport"
+ }
+ ],
+ "restartPolicy": "Always",
+ "scale": 1,
+ "schedulerName": "default-scheduler",
+ "selector": {
+ "matchLabels": {
+ "workload.user.cattle.io/workloadselector": "deployment-default-nginx"
+ },
+ "type": "/v3/project/schemas/labelSelector"
+ },
+ "state": "active",
+ "terminationGracePeriodSeconds": 30,
+ "transitioning": "no",
+ "transitioningMessage": "",
+ "type": "deployment",
+ "uuid": "f998037d-8a5c-11e8-a4cf-0245a7ebb0fd",
+ "workloadAnnotations": {
+ "deployment.kubernetes.io/revision": "1",
+ "field.cattle.io/creatorId": "user-f4tt2"
+ },
+ "workloadLabels": {
+ "workload.user.cattle.io/workloadselector": "deployment-default-nginx"
+ }
+ }
+}
+```
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/enable-experimental-features/continuous-delivery.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/enable-experimental-features/continuous-delivery.md
new file mode 100644
index 00000000000..c1f42f70a4b
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/enable-experimental-features/continuous-delivery.md
@@ -0,0 +1,13 @@
+---
+title: æŒ�ç»äº¤ä»˜
+---
+
+Rancher ä¸é¢„装的 [Fleet](../../../how-to-guides/new-user-guides/deploy-apps-across-clusters/fleet.md) æ— æ³•å®Œå…¨ç¦�ç”¨ã€‚ä½†æ˜¯ï¼Œä½ å�¯ä»¥ä½¿ç”¨ `continuous-delivery` 功能开关æ�¥ç¦�用 GitOps æŒ�ç»äº¤ä»˜çš„ Fleet 功能。
+
+如需å�¯ç”¨æˆ–ç¦�用æ¤åŠŸèƒ½ï¼Œè¯·å�‚è§�[å�¯ç”¨å®žéªŒåŠŸèƒ½ä¸»é¡µ](../../../pages-for-subheaders/enable-experimental-features.md)ä¸çš„说明。
+
+| 环境��键 | 默认值 | �述 |
+---|---|---
+| `continuous-delivery` | `true` | æ¤å¼€å…³ç¦�用 Fleet çš„ GitOps æŒ�ç»äº¤ä»˜åŠŸèƒ½ã€‚ |
+
+å¦‚æžœä½ åœ¨ Rancher 2.5.x ä¸ç¦�用了 Fleet,然å�Žå°† Rancher å�‡çº§åˆ° v2.6.x,Fleet å°†å�¯ç”¨ã€‚å�ªæœ‰ Fleet çš„æŒ�ç»äº¤ä»˜åŠŸèƒ½å�¯ä»¥è¢«ç¦�用。当 `continuous-delivery` 被ç¦�用时,`gitjob` deployment ä¸�å†�部署到 Rancher Server 的本地集群ä¸ï¼Œä¸” `continuous-delivery` ä¸�会在 Rancher UI 䏿˜¾ç¤ºã€‚
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/enable-experimental-features/istio-traffic-management-features.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/enable-experimental-features/istio-traffic-management-features.md
new file mode 100644
index 00000000000..35801de23b4
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/enable-experimental-features/istio-traffic-management-features.md
@@ -0,0 +1,32 @@
+---
+title: UI 管ç�† Istio 虚拟æœ�åŠ¡å’Œç›®æ ‡è§„åˆ™
+---
+
+æ¤åŠŸèƒ½å�¯å�¯åŠ¨ä¸€ä¸ª UI,用于管ç�† Istio çš„æµ�é‡�,其ä¸åŒ…括创建ã€�读å�–ã€�æ›´æ–°å’Œåˆ é™¤è™šæ‹Ÿæœ�务(Virtual Serviceï¼‰å’Œç›®æ ‡è§„åˆ™ï¼ˆDestination Rule)。
+
+> **注æ„�**:å�¯ç”¨æ¤åŠŸèƒ½å¹¶ä¸�会å�¯ç”¨ Istio。集群管ç�†å‘˜éœ€è¦�[为集群å�¯ç”¨ Istio](../../../pages-for-subheaders/istio-setup-guide.md) æ‰�能使用该功能。
+
+如需å�¯ç”¨æˆ–ç¦�用æ¤åŠŸèƒ½ï¼Œè¯·å�‚è§�[å�¯ç”¨å®žéªŒåŠŸèƒ½ä¸»é¡µ](../../../pages-for-subheaders/enable-experimental-features.md)ä¸çš„说明。
+
+| 环境��键 | 默认值 | 状� | �用于 |
+---|---|---|---
+| `istio-virtual-service-ui` | `false` | 实验功能 | v2.3.0 |
+| `istio-virtual-service-ui` | `true` | GA | v2.3.2 |
+
+## 功能介�
+
+Istio ��管�功能的主�优势时�许动�请求路由,这对于金�雀�布,�/绿�布或 A/B 测试都�常有用。
+
+å�¯ç”¨æ¤åŠŸèƒ½å�Žï¼Œä¸€ä¸ªé¡µé�¢ä¼šæ‰“å¼€ï¼Œè®©ä½ é€šè¿‡ Rancher UI é…�ç½® Istio çš„æŸ�些æµ�é‡�管ç�†åŠŸèƒ½ã€‚å¦‚æžœä¸�使用æ¤åŠŸèƒ½ï¼Œä½ å�¯ä»¥é€šè¿‡ `kubectl` æ�¥ä½¿ç”¨ Istio 管ç�†æµ�é‡�。
+
+æ¤åŠŸèƒ½ä¼šå�¯ç”¨ä¸¤ä¸ªé€‰é¡¹å�¡ï¼Œä¸€ä¸ªç”¨äºŽ**虚拟æœ�务**,å�¦ä¸€ä¸ªç”¨äºŽ**ç›®æ ‡è§„åˆ™**。
+
+- **虚拟æœ�务**:拦截并将æµ�é‡�é‡�定å�‘åˆ°ä½ çš„ Kubernetes Service ä¸Šã€‚è¿™æ ·ï¼Œä½ å�¯ä»¥å°†éƒ¨åˆ†è¯·æ±‚æµ�é‡�定å�‘到ä¸�å�Œçš„æœ�åŠ¡ä¸Šã€‚ä½ å�¯ä»¥ä½¿ç”¨è¿™äº›æœ�务æ�¥å®šä¹‰ä¸€ç»„路由规则,用于主机寻å�€ã€‚详情请å�‚è§� [Istio 官方文档](https://istio.io/docs/reference/config/networking/v1alpha3/virtual-service/)。
+- **ç›®æ ‡è§„åˆ™**:作为唯一å�¯ä¿¡æ�¥æº�,表明哪些æœ�务版本å�¯ç”¨äºŽæŽ¥æ”¶è™šæ‹Ÿæœ�务的æµ�é‡�ã€‚ä½ å�¯ä»¥ä½¿ç”¨è¿™äº›èµ„æº�æ�¥å®šä¹‰ç–略,这些ç–略适用于路由å�‘生å�Žç”¨äºŽæœ�务的æµ�é‡�。详情请å�‚è§� [Istio 官方文档](https://istio.io/docs/reference/config/networking/v1alpha3/destination-rule)。
+
+如需查看选项�:
+
+1. 点击 **☰ > 集群管�**。
+1. 转到安装了 Istio 的集群,然��击 **Explore**。
+1. 在左侧导航æ �ä¸ï¼Œå�•击 **Istio**。
+1. ä½ å°†çœ‹åˆ° **Kiali** å’Œ **Jaeger** 的选项å�¡ã€‚在左侧导航æ �ä¸ï¼Œä½ å�¯æŸ¥çœ‹å’Œé…�ç½®**虚拟æœ�务**å’Œ**ç›®æ ‡è§„åˆ™**。
\ No newline at end of file
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/enable-experimental-features/rancher-on-arm64.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/enable-experimental-features/rancher-on-arm64.md
new file mode 100644
index 00000000000..16ebb15e25a
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/enable-experimental-features/rancher-on-arm64.md
@@ -0,0 +1,44 @@
+---
+title: "在 ARM64 上�行 Rancher(实验性)"
+---
+
+:::caution
+
+在使用 ARM64 架构的节点上è¿�行 Rancher ç›®å‰�还处在实验阶段,Rancher 尚未æ£å¼�支æŒ�è¯¥åŠŸèƒ½ã€‚å› æ¤ï¼Œæˆ‘们ä¸�å»ºè®®ä½ åœ¨ç”Ÿäº§çŽ¯å¢ƒä¸ä½¿ç”¨ ARM64 架构的节点。
+
+:::
+
+å¦‚æžœä½ çš„èŠ‚ç‚¹ä½¿ç”¨ ARM64 æž¶æž„ï¼Œä½ å�¯ä»¥ä½¿ç”¨ä»¥ä¸‹é€‰é¡¹ï¼š
+
+- 在 ARM64 架构的节点上�行 Rancher
+ - æ¤é€‰é¡¹ä»…适用于 Docker 安装。请知悉,以下安装命令å�–代了 [Docker 安装链接](../../../pages-for-subheaders/rancher-on-a-single-node-with-docker.md)ä¸çš„示例:
+
+ ```
+ # 在最å�Žä¸€è¡Œ `rancher/rancher:vX.Y.Z` ä¸ï¼Œè¯·åŠ¡å¿…å°† "X.Y.Z" 替æ�¢ä¸ºåŒ…å�« ARM64 版本的å�‘å¸ƒç‰ˆæœ¬ã€‚ä¾‹å¦‚ï¼Œå¦‚æžœä½ çš„åŒ¹é…�版本是 v2.5.8,请在æ¤è¡Œå¡«å†™ `rancher/rancher:v2.5.8`。
+ docker run -d --restart=unless-stopped \
+ -p 80:80 -p 443:443 \
+ --privileged \
+ rancher/rancher:vX.Y.Z
+ ```
+
+:::note
+
+è¦�æ£€æŸ¥ä½ çš„å�‘行版本是å�¦ä¸Ž ARM64 æž¶æž„å…¼å®¹ï¼Œä½ å�¯ä»¥ä½¿ç”¨ä»¥ä¸‹ä¸¤ç§�æ–¹å¼�找到对应版本的å�‘行说明:
+
+- 访问 [Rancher �行版本](https://github.com/rancher/rancher/releases)自行查询。
+- æ ¹æ�®æ ‡ç¾å’Œç‰ˆæœ¬å�·ç›´æŽ¥æ‰¾åˆ°ä½ çš„ç‰ˆæœ¬ã€‚ä¾‹å¦‚ï¼Œä½ ä½¿ç”¨çš„ç‰ˆæœ¬ä¸º 2.5.8ï¼Œä½ å�¯ä»¥è®¿é—® [Rancher å�‘行版本 - 2.5.8](https://github.com/rancher/rancher/releases/tag/v2.5.8)。
+
+:::
+
+- åˆ›å»ºè‡ªå®šä¹‰é›†ç¾¤å¹¶æ·»åŠ ä½¿ç”¨ ARM64 架构的节点
+ - Kubernetes 集群必须为 1.12 或更高版本
+ - CNI 网络�件必须是 [Flannel](../../../faq/container-network-interface-providers.md#flannel)
+- 导入包�使用 ARM64 架构的节点的集群
+ - Kubernetes 集群必须为 1.12 或更高版本
+
+如需了解如何�置集群选项,请��[集群选项](../../../reference-guides/cluster-configuration/rancher-server-configuration/rke1-cluster-configuration.md)。
+
+以下是未�测试的功能:
+
+- Monitoringã€�告è¦ã€�Notifiersã€�æµ�水线和 Logging
+- 通过应用商店�布应用
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/enable-experimental-features/unsupported-storage-drivers.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/enable-experimental-features/unsupported-storage-drivers.md
new file mode 100644
index 00000000000..19b9b27b2e0
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/enable-experimental-features/unsupported-storage-drivers.md
@@ -0,0 +1,39 @@
+---
+title: 使用é�žé»˜è®¤æ”¯æŒ�çš„å˜å‚¨é©±åЍ
+---
+
+æ¤åŠŸèƒ½å…�è®¸ä½ ä½¿ç”¨ä¸�是默认å�¯ç”¨çš„å˜å‚¨æ��供商和å�·æ�’件。
+
+如需å�¯ç”¨æˆ–ç¦�用æ¤åŠŸèƒ½ï¼Œè¯·å�‚è§�[å�¯ç”¨å®žéªŒåŠŸèƒ½ä¸»é¡µ](../../../pages-for-subheaders/enable-experimental-features.md)ä¸çš„说明。
+
+| 环境��键 | 默认值 | �述 |
+---|---|---
+| `unsupported-storage-drivers` | `false` | å�¯ç”¨é�žé»˜è®¤å�¯ç”¨çš„å˜å‚¨æ��供商和å�·æ�’件。 |
+
+### 默认�用的�久��件
+下表æ��述了默认å�¯ç”¨çš„å˜å‚¨ç±»åž‹å¯¹åº”çš„æŒ�ä¹…å�·æ�’件。å�¯ç”¨æ¤åŠŸèƒ½å¼€å…³æ—¶ï¼Œä¸�在æ¤åˆ—表ä¸çš„任何æŒ�ä¹…å�·æ�’ä»¶å�‡è¢«è§†ä¸ºå®žéªŒåŠŸèƒ½ï¼Œä¸”ä¸�å�—支æŒ�:
+
+| �称 | �件 |
+--------|----------
+| Amazon EBS Disk | `aws-ebs` |
+| AzureFile | `azure-file` |
+| AzureDisk | `azure-disk` |
+| Google Persistent Disk | `gce-pd` |
+| Longhorn | `flex-volume-longhorn` |
+| VMware vSphere Volume | `vsphere-volume` |
+| 本地 | `local` |
+| 网络文件系统 | `nfs` |
+| hostPath | `host-path` |
+
+### 默认�用的 StorageClass
+下表æ��述了默认å�¯ç”¨çš„ StorageClass 对应的æŒ�ä¹…å�·æ�’件。å�¯ç”¨æ¤åŠŸèƒ½å¼€å…³æ—¶ï¼Œä¸�在æ¤åˆ—表ä¸çš„任何æŒ�ä¹…å�·æ�’ä»¶å�‡è¢«è§†ä¸ºå®žéªŒåŠŸèƒ½ï¼Œä¸”ä¸�å�—支æŒ�:
+
+| �称 | �件 |
+--------|--------
+| Amazon EBS Disk | `aws-ebs` |
+| AzureFile | `azure-file` |
+| AzureDisk | `azure-disk` |
+| Google Persistent Disk | `gce-pd` |
+| Longhorn | `flex-volume-longhorn` |
+| VMware vSphere Volume | `vsphere-volume` |
+| 本地 | `local` |
\ No newline at end of file
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/istio-setup-guide/enable-istio-in-cluster.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/istio-setup-guide/enable-istio-in-cluster.md
new file mode 100644
index 00000000000..39c9bdee036
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/istio-setup-guide/enable-istio-in-cluster.md
@@ -0,0 +1,29 @@
+---
+title: 1. 在集群ä¸å�¯ç”¨ Istio
+---
+
+:::note 先决�件:
+
+- å�ªæœ‰åˆ†é…�了 `cluster-admin` [Kubernetes 默认角色](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#user-facing-roles)的用户å�¯ä»¥åœ¨ Kubernetes 集群ä¸é…�置和安装 Istio。
+- å¦‚æžœä½ æœ‰ pod 安全ç–略,则需è¦�安装å�¯ç”¨äº† CNI çš„ Istio。有关详细信æ�¯ï¼Œè¯·å�‚阅[本节](../../../integrations-in-rancher/istio/configuration-options/pod-security-policies.md)。
+- è¦�在 RKE2 集群上安装 Istio,则需è¦�执行é¢�外的æ¥éª¤ã€‚有关详细信æ�¯ï¼Œè¯·å�‚阅[本节](../../../integrations-in-rancher/istio/configuration-options/install-istio-on-rke2-cluster.md)。
+- è¦�在å�¯ç”¨äº†é¡¹ç›®ç½‘络隔离的集群ä¸å®‰è£… Istio,则需è¦�执行é¢�外的æ¥éª¤ã€‚有关详细信æ�¯ï¼Œè¯·å�‚阅[本节](../../../integrations-in-rancher/istio/configuration-options/project-network-isolation.md)。
+
+:::
+
+1. 点击 **☰ > 集群管�**。
+1. 转到��用 Istio 的�置,然��击 **Explore**。
+1. �击 **Apps**。
+1. �击 **Chart**。
+1. �击 **Istio**。
+1. å¦‚æžœä½ è¿˜æ²¡æœ‰å®‰è£… Monitoring 应用,系统会æ��ç¤ºä½ å®‰è£… rancher-monitoringã€‚ä½ ä¹Ÿå�¯ä»¥é€‰æ‹©åœ¨ Rancher-monitoring 安装上设置选择器或抓å�–é…�置选项。
+1. å�¯é€‰ï¼šä¸º Istio 组件é…�ç½®æˆ�员访问和[资æº�é™�制](../../../integrations-in-rancher/istio/cpu-and-memory-allocations.md)。确ä¿�ä½ çš„ Worker 节点上有足够的资æº�æ�¥å�¯ç”¨ Istio。
+1. �选:如果需�,对 values.yaml 进行�外的�置更改。
+1. å�¯é€‰ï¼šé€šè¿‡[覆盖文件](../../../pages-for-subheaders/configuration-options.md#覆盖文件)æ�¥æ·»åŠ å…¶ä»–èµ„æº�或é…�置。
+1. �击**安装**。
+
+**结果**:已在集群级别安装 Istio。
+
+## 其他�置选项
+
+有关�置 Istio 的更多信�,请�阅[�置�考](../../../pages-for-subheaders/configuration-options.md)。
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/istio-setup-guide/enable-istio-in-namespace.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/istio-setup-guide/enable-istio-in-namespace.md
new file mode 100644
index 00000000000..3651b9d77c6
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/istio-setup-guide/enable-istio-in-namespace.md
@@ -0,0 +1,53 @@
+---
+title: 2. 在命å��空间ä¸å�¯ç”¨ Istio
+---
+
+ä½ éœ€è¦�在需è¦�ç”± Istio 跟踪或控制的æ¯�个命å��ç©ºé—´ä¸æ‰‹åЍå�¯ç”¨ Istio。在命å��空间ä¸å�¯ç”¨ Istio 时,Envoy sidecar 代ç�†å°†è‡ªåŠ¨æ³¨å…¥åˆ°éƒ¨ç½²åœ¨å‘½å��空间ä¸çš„æ‰€æœ‰æ–°å·¥ä½œè´Ÿè½½ä¸ã€‚
+
+æ¤å‘½å��空间设置å�ªä¼šå½±å“�命å��空间ä¸çš„æ–°å·¥ä½œè´Ÿè½½ã€‚之å‰�的工作负载需è¦�é‡�新部署æ‰�能使用 sidecar 自动注入。
+
+:::note 先决�件:
+
+è¦�在命å��空间ä¸å�¯ç”¨ Istio,集群必须安装 Istio。
+
+:::
+
+1. 点击 **☰ > 集群管�**。
+1. é€‰æ‹©ä½ åˆ›å»ºçš„é›†ç¾¤ï¼Œå¹¶ç‚¹å‡» **Explore**。
+1. �击**集群 > 项目/命�空间**。
+1. 转到è¦�å�¯ç”¨ Istio 的命å��空间,然å�Žå�•击**â‹® > å�¯ç”¨ Istio 自动注入**ã€‚æˆ–è€…ï¼Œä½ ä¹Ÿå�¯ä»¥å�•击命å��空间,然å�Žåœ¨å‘½å��空间详情页é�¢ä¸Šï¼Œå�•击**â‹® > å�¯ç”¨ Istio 自动注入**。
+
+**结果**:命å��空间带有了 `istio-injection=enabled` æ ‡ç¾ã€‚默认情况下,部署在æ¤å‘½å��空间ä¸çš„æ‰€æœ‰æ–°å·¥ä½œè´Ÿè½½éƒ½å°†æ³¨å…¥ Istio sidecar。
+
+### 验�是��用了自动 Istio Sidecar 注入
+
+è¦�验è¯� Istio 是å�¦å·²å�¯ç”¨ï¼Œè¯·åœ¨å‘½å��空间ä¸éƒ¨ç½²ä¸€ä¸ª hello-world 工作负载。转到工作负载并å�•击 pod å��称。在**容器**ä¸ï¼Œä½ 应该能看到 `istio-proxy` 容器。
+
+### 排除工作负载的 Istio Sidecar 注入
+
+�排除 Istio sidecar 被注入�工作负载,请在工作负载上使用以下注释:
+
+```
+sidecar.istio.io/inject: “false�
+```
+
+è¦�å°†æ³¨é‡Šæ·»åŠ åˆ°å·¥ä½œè´Ÿè½½ï¼š
+
+1. 点击 **☰ > 集群管�**。
+1. é€‰æ‹©ä½ åˆ›å»ºçš„é›†ç¾¤ï¼Œå¹¶ç‚¹å‡» **Explore**。
+1. 点击**工作负载**。
+1. 转到�需� sidecar 的工作负载并以 yaml 编辑。
+1. 将键值 `sidecar.istio.io/inject: false` æ·»åŠ ä¸ºå·¥ä½œè´Ÿè½½çš„æ³¨é‡Šã€‚
+1. å�•击**ä¿�å˜**。
+
+**结果**:Istio sidecar ä¸�会被注入到工作负载ä¸ã€‚
+
+:::note
+
+å¦‚æžœä½ é�‡åˆ°éƒ¨ç½²çš„ job 未完æˆ�的问题,则需è¦�使用æ��供的æ¥éª¤å°†æ¤æ³¨é‡Šæ·»åŠ åˆ° pod ä¸ã€‚由于 Istio Sidecars 会一直è¿�è¡Œï¼Œå› æ¤å�³ä½¿ä»»åŠ¡å®Œæˆ�了,也ä¸�能认为 Job 已完æˆ�。
+
+:::
+
+
+### å�Žç»æ¥éª¤
+[使用 Istio Sidecar æ·»åŠ éƒ¨ç½²](use-istio-sidecar.md)
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/istio-setup-guide/generate-and-view-traffic.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/istio-setup-guide/generate-and-view-traffic.md
new file mode 100644
index 00000000000..a6d77763919
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/istio-setup-guide/generate-and-view-traffic.md
@@ -0,0 +1,26 @@
+---
+title: 6. 生�和查看��
+---
+
+本文介�如何查看 Istio 管�的��。
+
+## Kiali ��图
+
+Istio 概览页é�¢æ��供了 Kiali 仪表æ�¿çš„链接。在 Kiali 仪表æ�¿ä¸ï¼Œä½ å�¯ä»¥æŸ¥çœ‹æ¯�个命å��空间的图。Kiali 图æ��供了一ç§�强大的方å¼�æ�¥å�¯è§†åŒ– Istio æœ�åŠ¡ç½‘æ ¼çš„æ‹“æ‰‘ã€‚å®ƒæ˜¾ç¤ºäº†æœ�务之间相互通信的情况。
+
+:::note 先决�件:
+
+è¦�显示æµ�é‡�图,请确ä¿�ä½ åœ¨é›†ç¾¤ä¸å®‰è£…了 Prometheus。Rancher-istio 安装了默认é…�置的 Kiali æ�¥ä¸Ž rancher-monitoring Chart ä¸€èµ·å·¥ä½œã€‚ä½ å�¯ä»¥ä½¿ç”¨ rancher-monitoring æˆ–å®‰è£…è‡ªå·±çš„ç›‘æŽ§è§£å†³æ–¹æ¡ˆã€‚ä½ ä¹Ÿå�¯ä»¥é€šè¿‡è®¾ç½®[选择器 & 抓å�–é…�ç½®](../../../integrations-in-rancher/istio/configuration-options/selectors-and-scrape-configurations.md)选项æ�¥æ›´æ”¹æ•°æ�®æŠ“å�–çš„é…�置(å�¯é€‰ï¼‰ã€‚
+
+:::
+
+�查看��图:
+
+1. 在安装了 Istio 的集群ä¸ï¼Œç‚¹å‡»å·¦ä¾§å¯¼èˆªæ �ä¸çš„ **Istio**。
+1. �击 **Kiali** 链接。
+1. å�•击侧导航ä¸çš„**图**。
+1. 在**命å��空间**下拉列表ä¸ï¼Œæ›´æ”¹å‘½å��空间以查看æ¯�个命å��空间的æµ�é‡�。
+
+å¦‚æžœä½ å¤šæ¬¡åˆ·æ–° BookInfo 应用的 URLï¼Œä½ å°†èƒ½å¤Ÿåœ¨ Kiali 图上看到绿色ç®å¤´ï¼Œæ˜¾ç¤º `reviews` æœ�务 `v1` å’Œ `v3` çš„æµ�é‡�。图å�³ä¾§çš„æŽ§åˆ¶é�¢æ�¿å�¯ç”¨äºŽé…�置详细信æ�¯ï¼ŒåŒ…括应在图上显示多少分钟的最新æµ�é‡�。
+
+对于其他工具和å�¯è§†åŒ–ï¼Œä½ å�¯ä»¥ä»Ž**监控** > **概览**页é�¢è½¬åˆ° Grafana å’Œ Prometheus 仪表æ�¿ã€‚
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/istio-setup-guide/set-up-istio-gateway.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/istio-setup-guide/set-up-istio-gateway.md
new file mode 100644
index 00000000000..42f89baa8ef
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/istio-setup-guide/set-up-istio-gateway.md
@@ -0,0 +1,147 @@
+---
+title: 4. 设置 Istio Gateway
+---
+
+æ¯�个集群的网关å�¯ä»¥æœ‰è‡ªå·±çš„端å�£æˆ–è´Ÿè½½å�‡è¡¡å™¨ï¼Œè¿™ä¸Žæœ�åŠ¡ç½‘æ ¼æ— å…³ã€‚é»˜è®¤æƒ…å†µä¸‹ï¼Œæ¯�个 Rancher é…�置的集群都有一个 NGINX Ingress Controller æ�¥å…�许æµ�é‡�进入集群。
+
+æ— è®ºæ˜¯å�¦å®‰è£…了 Istioï¼Œä½ éƒ½å�¯ä»¥ä½¿ç”¨ NGINX Ingress Controllerã€‚å¦‚æžœè¿™æ˜¯ä½ é›†ç¾¤çš„å”¯ä¸€ç½‘å…³ï¼ŒIstio 将能够将æµ�é‡�从集群内部的æœ�务路由到集群内部的å�¦ä¸€ä¸ªæœ�务,但 Istio å°†æ— æ³•æŽ¥æ”¶æ�¥è‡ªé›†ç¾¤å¤–部的æµ�é‡�。
+
+è¦�让 Istio 接收外部æµ�é‡�ï¼Œä½ éœ€è¦�å�¯ç”¨ Istio 的网关,作为外部æµ�é‡�çš„å�—北代ç�†ã€‚å�¯ç”¨ Istio Gateway å�Žï¼Œä½ 的集群将有两个 Ingress。
+
+ä½ è¿˜éœ€è¦�ä¸ºä½ çš„æœ�务设置 Kubernetes ç½‘å…³ã€‚æ¤ Kubernetes 资æº�指å�‘ Istio 对集群 Ingress Gateway 的实现。
+
+ä½ å�¯ä»¥ä½¿ç”¨è´Ÿè½½å�‡è¡¡å™¨å°†æµ�é‡�路由到æœ�åŠ¡ç½‘æ ¼ä¸ï¼Œæˆ–使用 Istio çš„ NodePort 网关。本文介ç»�如何设置 NodePort 网关。
+
+有关 Istio Gateway 的更多信�,请�阅 [Istio 文档](https://istio.io/docs/reference/config/networking/v1alpha3/gateway/)。
+
+
+
+## �用 Istio Gateway
+
+Ingress Gateway 是一个 Kubernetes æœ�åŠ¡ï¼Œå°†éƒ¨ç½²åœ¨ä½ çš„é›†ç¾¤ä¸ã€‚Istio Gateway 支æŒ�æ›´å¤šè‡ªå®šä¹‰è®¾ç½®ï¼Œæ›´åŠ ç�µæ´»ã€‚
+
+1. 点击 **☰ > 集群管�**。
+1. é€‰æ‹©ä½ åˆ›å»ºçš„é›†ç¾¤ï¼Œå¹¶ç‚¹å‡» **Explore**。
+1. 在左侧导航æ �ä¸ï¼Œå�•击 **Istio > 网关**。
+1. �击**使用 YAML 文件创建**。
+1. ç²˜è´´ä½ çš„ Istio Gateway yaml,或选择**从文件读å�–**。
+1. �击**创建**。
+
+**结果**:已部署网关,将使用应用的规则�路由��。
+
+## Istio Gateway 示例
+
+在演示工作负载示例时,我们在æœ�åŠ¡ä¸æ·»åŠ BookInfo 应用部署。接下æ�¥ï¼Œæˆ‘ä»¬æ·»åŠ ä¸€ä¸ª Istio Gateway,以便从集群外部访问该应用。
+
+1. 点击 **☰ > 集群管�**。
+1. é€‰æ‹©ä½ åˆ›å»ºçš„é›†ç¾¤ï¼Œå¹¶ç‚¹å‡» **Explore**。
+1. 在左侧导航æ �ä¸ï¼Œå�•击 **Istio > 网关**。
+1. �击**使用 YAML 文件创建**。
+1. �制并粘贴下�的 Gateway YAML。
+1. �击**创建**。
+
+```yaml
+apiVersion: networking.istio.io/v1alpha3
+kind: Gateway
+metadata:
+ name: bookinfo-gateway
+spec:
+ selector:
+ istio: ingressgateway # use istio default controller
+ servers:
+ - port:
+ number: 80
+ name: http
+ protocol: HTTP
+ hosts:
+ - "*"
+---
+```
+
+然�,部署为 Gateway �供��路由的 VirtualService:
+
+1. 点击 **☰ > 集群管�**。
+1. é€‰æ‹©ä½ åˆ›å»ºçš„é›†ç¾¤ï¼Œå¹¶ç‚¹å‡» **Explore**。
+1. 在左侧导航æ �ä¸ï¼Œå�•击 **Istio > VirtualServices**。
+1. �制并粘贴下�的 VirtualService YAML。
+1. �击**创建**。
+
+```yaml
+apiVersion: networking.istio.io/v1alpha3
+kind: VirtualService
+metadata:
+ name: bookinfo
+spec:
+ hosts:
+ - "*"
+ gateways:
+ - bookinfo-gateway
+ http:
+ - match:
+ - uri:
+ exact: /productpage
+ - uri:
+ prefix: /static
+ - uri:
+ exact: /login
+ - uri:
+ exact: /logout
+ - uri:
+ prefix: /api/v1/products
+ route:
+ - destination:
+ host: productpage
+ port:
+ number: 9080
+```
+
+**结果**ï¼šä½ å·²é…�置网关资æº�,Istio 现在å�¯ä»¥æŽ¥æ”¶é›†ç¾¤å¤–部的æµ�é‡�。
+
+è¿�行以下命令æ�¥ç¡®è®¤èµ„æº�å˜åœ¨ï¼š
+```
+kubectl get gateway -A
+```
+
+结果应与以下内容类似:
+```
+NAME AGE
+bookinfo-gateway 64m
+```
+
+### 在 Web �览器访问 ProductPage �务
+
+è¦�测试 BookInfo 应用是å�¦å·²æ£ç¡®éƒ¨ç½²ï¼Œä½ å�¯ä»¥ä½¿ç”¨ Istio 控制器 IP 和端å�£ä»¥å�Šåœ¨ Kubernetes 网关资æº�䏿Œ‡å®šçš„请求å��称,在 Web æµ�è§ˆå™¨ä¸æŸ¥çœ‹è¯¥åº”用:
+
+`http://:/productpage`
+
+�获� Ingress Gateway URL 和端�:
+
+1. 点击 **☰ > 集群管�**。
+1. é€‰æ‹©ä½ åˆ›å»ºçš„é›†ç¾¤ï¼Œå¹¶ç‚¹å‡» **Explore**。
+1. 在左侧导航æ �ä¸ï¼Œå�•击**工作负载**。
+1. �下滚动到 `istio-system` 命�空间。
+1. 在 `istio-system`ä¸ï¼Œæœ‰ä¸€ä¸ªå��为 `istio-ingressgateway` 的工作负载。在æ¤å·¥ä½œè´Ÿè½½çš„å��ç§°ä¸‹ï¼Œä½ åº”è¯¥ä¼šçœ‹åˆ°å¦‚ `80/tcp` 的链接。
+1. å�•击其ä¸ä¸€ä¸ªé“¾æŽ¥ã€‚ç„¶å�Žï¼Œä½ çš„ Web æµ�览器ä¸ä¼šæ˜¾ç¤º Ingress Gateway çš„ URL。将 `/productpage` 尾附到 URL。
+
+**结果**ï¼šä½ èƒ½ä¼šåœ¨ Web æµ�览器ä¸çœ‹åˆ° BookInfo 应用。
+
+如需检查 Istio 控制器 URL 和端å�£çš„帮助,请å°�试è¿�行 [Istio 文档](https://istio.io/docs/tasks/traffic-management/ingress/ingress-control/#determining-the-ingress-ip-and-ports)ä¸çš„命令。
+
+## 故障排除
+
+[官方 Istio 文档](https://istio.io/docs/tasks/traffic-management/ingress/ingress-control/#troubleshooting)建议使用 `kubectl` 命令æ�¥æ£€æŸ¥å¤–部请求的æ£ç¡® ingress 主机和 ingress 端å�£ã€‚
+
+### 确认 Kubernetes 网关与 Istio 的 Ingress Controller 匹�
+
+ä½ å�¯ä»¥å°�试执行本节ä¸çš„æ¥éª¤ä»¥ç¡®ä¿� Kubernetes 网关é…�ç½®æ£ç¡®ã€‚
+
+在网关资æº�ä¸ï¼Œé€‰æ‹©å™¨é€šè¿‡æ ‡ç¾æ�¥å¼•用 Istio 的默认 Ingress Controllerï¼Œå…¶ä¸æ ‡ç¾çš„键是 `Istio`,值是 `ingressgateway`。è¦�ç¡®ä¿�æ ‡ç¾é€‚用于网关,请执行以下æ“�作:
+
+1. 点击 **☰ > 集群管�**。
+1. é€‰æ‹©ä½ åˆ›å»ºçš„é›†ç¾¤ï¼Œå¹¶ç‚¹å‡» **Explore**。
+1. 在左侧导航æ �ä¸ï¼Œå�•击**工作负载**。
+1. �下滚动到 `istio-system` 命�空间。
+1. 在 `istio-system`ä¸ï¼Œæœ‰ä¸€ä¸ªå��为 `istio-ingressgateway` 的工作负载。å�•击æ¤å·¥ä½œè´Ÿè½½çš„å��称并转到**æ ‡ç¾å’Œæ³¨é‡Š**éƒ¨åˆ†ã€‚ä½ åº”è¯¥çœ‹åˆ°å®ƒå…·æœ‰ `istio` 键和 `ingressgateway` 值。这确认了 Gateway 资æº�ä¸çš„选择器与 Istio 的默认 ingress controller 匹é…�。
+
+### å�Žç»æ¥éª¤
+[设置 Istio 的��管�组件](set-up-traffic-management.md)
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/istio-setup-guide/set-up-traffic-management.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/istio-setup-guide/set-up-traffic-management.md
new file mode 100644
index 00000000000..9782bd28938
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/istio-setup-guide/set-up-traffic-management.md
@@ -0,0 +1,76 @@
+---
+title: 5. 设置 Istio 的��管�组件
+---
+
+Istio 䏿µ�é‡�管ç�†çš„ä¸€ä¸ªæ ¸å¿ƒä¼˜åŠ¿æ˜¯å…�许动æ€�请求路由。动æ€�请求路由通常应用于金ä¸�雀部署和è“�/绿部署ç‰ã€‚Istio æµ�é‡�管ç�†ä¸çš„两个关键资æº�是*虚拟æœ�务*å’Œ*ç›®æ ‡è§„åˆ™*。
+
+- [虚拟æœ�务](https://istio.io/docs/reference/config/networking/v1alpha3/virtual-service/):拦截并将æµ�é‡�é‡�定å�‘åˆ°ä½ çš„ Kubernetes Service ä¸Šã€‚è¿™æ ·ï¼Œä½ å�¯ä»¥å°†éƒ¨åˆ†è¯·æ±‚æµ�é‡�分é…�到ä¸�å�Œçš„æœ�åŠ¡ä¸Šã€‚ä½ å�¯ä»¥ä½¿ç”¨è¿™äº›æœ�务æ�¥å®šä¹‰ä¸€ç»„路由规则,用于主机寻å�€ã€‚
+- [ç›®æ ‡è§„åˆ™](https://istio.io/docs/reference/config/networking/v1alpha3/destination-rule/):作为唯一å�¯ä¿¡æ�¥æº�,表明哪些æœ�务版本å�¯ç”¨äºŽæŽ¥æ”¶è™šæ‹Ÿæœ�务的æµ�é‡�ã€‚ä½ å�¯ä»¥ä½¿ç”¨è¿™äº›èµ„æº�æ�¥å®šä¹‰ç–略,这些ç–略适用于路由å�‘生å�Žç”¨äºŽæœ�务的æµ�é‡�。
+
+本文介ç»�如何在示例 BookInfo åº”ç”¨ä¸æ·»åŠ ä¸Ž `reviews` å¾®æœ�务对应的虚拟æœ�åŠ¡ç¤ºä¾‹ã€‚æ¤æœ�务的目的是在 `reviews` æœ�务的两个版本之间划分æµ�é‡�。
+
+在这个示例ä¸ï¼Œæˆ‘们将æµ�é‡�带到 `reviews` æœ�务ä¸å¹¶æ‹¦æˆªæµ�é‡�ï¼Œè¿™æ ·ï¼Œ50% çš„æµ�é‡�会æµ�å�‘æœ�务的 `v1`,å�¦å¤– 50% çš„æµ�é‡�会æµ�å�‘ `v2 `。
+
+部署这个虚拟æœ�务å�Žï¼Œæˆ‘们将生æˆ�æµ�é‡�,并通过 Kiali å�¯è§†åŒ–看到æµ�é‡�å¹³å�‡è·¯ç”±åˆ°æœ�务的两个版本ä¸ã€‚
+
+è¦�为 `reviews` æœ�务部署虚拟æœ�åŠ¡å’Œç›®æ ‡è§„åˆ™ï¼š
+1. 点击 **☰ > 集群管�**。
+1. 转到安装了 Istio 的集群,然��击 **Explore**。
+1. 在安装了 Istio 的集群ä¸ï¼Œç‚¹å‡»å·¦ä¾§å¯¼èˆªæ �ä¸çš„ **Istio > DestinationRules**。
+1. �击**创建**。
+1. �制并粘贴下�的 DestinationRule YAML。
+1. �击**创建**。
+1. å�•击**以 YAML 文件编辑**并使用æ¤é…�置:
+
+ ```yaml
+ apiVersion: networking.istio.io/v1alpha3
+ kind: DestinationRule
+ metadata:
+ name: reviews
+ spec:
+ host: reviews
+ subsets:
+ - name: v1
+ labels:
+ version: v1
+ - name: v2
+ labels:
+ version: v2
+ - name: v3
+ labels:
+ version: v3
+ ```
+1. �击**创建**。
+
+然�,部署�供利用 DestinationRule 的��路由的 VirtualService:
+
+1. å�•击侧导航æ �ä¸çš„ **VirtualService**。
+1. �击**使用 YAML 文件创建**。
+1. �制并粘贴下�的 VirtualService YAML。
+1. �击**创建**。
+
+```yaml
+apiVersion: networking.istio.io/v1alpha3
+kind: VirtualService
+metadata:
+ name: reviews
+spec:
+ hosts:
+ - reviews
+ http:
+ - route:
+ - destination:
+ host: reviews
+ subset: v1
+ weight: 50
+ - destination:
+ host: reviews
+ subset: v3
+ weight: 50
+---
+```
+
+**结果**:生æˆ�æµ�到该æœ�务的æµ�é‡�时(例如,刷新 Ingress Gateway URLï¼‰ï¼Œä½ å�¯ä»¥åœ¨ Kiali æµ�é‡�图ä¸çœ‹åˆ°æµ�到 `reviews` æœ�务的æµ�é‡�被平å�‡åˆ†é…�到了 `v1` å’Œ `v3`。
+
+### å�Žç»æ¥éª¤
+[生�和查看��](generate-and-view-traffic.md)
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/istio-setup-guide/use-istio-sidecar.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/istio-setup-guide/use-istio-sidecar.md
new file mode 100644
index 00000000000..2290de911ad
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/istio-setup-guide/use-istio-sidecar.md
@@ -0,0 +1,360 @@
+---
+title: 3. 使用 Istio Sidecar æ·»åŠ éƒ¨ç½²å’Œæœ�务
+---
+
+:::note 先决�件:
+
+è¦�为工作负载å�¯ç”¨ Istioï¼Œä½ å¿…é¡»å…ˆåœ¨é›†ç¾¤å’Œå‘½å��空间ä¸å®‰è£… Istio 应用。
+
+:::
+
+在命å��空间ä¸å�¯ç”¨ Istio å�ªä¼šä¸ºæ–°å·¥ä½œè´Ÿè½½å�¯ç”¨è‡ªåЍ sidecar 注入。è¦�为现有工作负载å�¯ç”¨ Envoy sidecarï¼Œä½ éœ€è¦�手动为æ¯�个工作负载å�¯ç”¨å®ƒã€‚
+
+è¦�在命å��空间ä¸çš„现有工作负载上注入 Istio sidecar:
+
+1. 在左上角,�击 **☰ > 集群管�**。
+1. 在**集群**页�上,转到��视化的集群,然��击 **Explore**。
+1. 点击**工作负载**。
+1. 转到�注入 Istio sidecar 的工作负载,然��击 **⋮ > �新部署**。�新部署工作负载�,该工作负载会自动注入 Envoy sidecar。
+
+ç‰å¾…å‡ åˆ†é’Ÿï¼Œç„¶å�Žå·¥ä½œè´Ÿè½½å°†å�‡çº§å¹¶å…·æœ‰ Istio sidecar。å�•击它并转到**容器**ã€‚ä½ åº”è¯¥èƒ½çœ‹åˆ°è¯¥å·¥ä½œè´Ÿè½½æ—�边的 `istio-proxy`。这æ„�味ç�€ä¸ºå·¥ä½œè´Ÿè½½å�¯ç”¨äº† Istio sidecar。Istio æ£åœ¨ä¸º Sidecar Envoy å�šæ‰€æœ‰çš„æŽ¥çº¿å·¥ä½œã€‚å¦‚æžœä½ çŽ°åœ¨åœ¨ yaml ä¸å�¯ç”¨å®ƒä»¬ï¼ŒIstio å�¯ä»¥è‡ªåŠ¨æ‰§è¡Œæ‰€æœ‰åŠŸèƒ½ã€‚
+
+### æ·»åŠ éƒ¨ç½²å’Œæœ�务
+
+以下是在命å��ç©ºé—´ä¸æ·»åŠ æ–° **Deployment** çš„å‡ ç§�方法:
+
+1. 点击 **☰ > 集群管�**。
+1. é€‰æ‹©ä½ åˆ›å»ºçš„é›†ç¾¤ï¼Œå¹¶ç‚¹å‡» **Explore**。
+1. 点击**工作负载**。
+1. �击**创建**。
+1. 点击 **Deployment**。
+1. 填写表�,或**以 YAML 文件编辑**。
+1. �击**创建**。
+
+è¦�å°† **Service** æ·»åŠ åˆ°ä½ çš„å‘½å��空间:
+
+1. 点击 **☰ > 集群管�**。
+1. é€‰æ‹©ä½ åˆ›å»ºçš„é›†ç¾¤ï¼Œå¹¶ç‚¹å‡» **Explore**。
+1. 点击**�务�现 > �务**。
+1. �击**创建**。
+1. 选择所需的�务类型。
+1. 填写表�,或**以 YAML 文件编辑**。
+1. 点击**创建**。
+
+ä½ è¿˜å�¯ä»¥ä½¿ç”¨ kubectl **shell** æ�¥åˆ›å»º deployment å’Œ service:
+
+1. å¦‚æžœä½ çš„æ–‡ä»¶å˜å‚¨åœ¨æœ¬åœ°é›†ç¾¤ä¸ï¼Œè¿�行 `kubectl create -f .yaml`。
+1. 或�行 `cat<< EOF | kubectl apply -f -`,将文件内容粘贴到终端,然��行 `EOF` �完�命令。
+
+### 部署和�务示例
+
+接下æ�¥ï¼Œæˆ‘们为 Istio 文档ä¸çš„ BookInfo 应用的示例部署和æœ�åŠ¡æ·»åŠ Kubernetes 资æº�:
+
+1. 点击 **☰ > 集群管�**。
+1. é€‰æ‹©ä½ åˆ›å»ºçš„é›†ç¾¤ï¼Œå¹¶ç‚¹å‡» **Explore**。
+1. 在顶部导航æ �ä¸ï¼Œæ‰“å¼€ kubectl shell。
+1. �行 `cat<< EOF | kubectl apply -f -`。
+1. 将以下资æº�å¤�制到 shell ä¸ã€‚
+1. �行 `EOF`。
+
+这将在 Istio 的示例 BookInfo 应用ä¸è®¾ç½®ä»¥ä¸‹ç¤ºä¾‹èµ„æº�:
+
+Details �务和部署:
+
+- 一个 `details` Service。
+- 一个 `bookinfo-details` 的 ServiceAccount。
+- 一个 `details-v1` Deployment。
+
+Ratings �务和部署:
+
+- 一个 `ratings` Service。
+- 一个 `bookinfo-ratings` 的 ServiceAccount。
+- 一个 `ratings-v1` Deployment。
+
+Reviews �务和部署(三个版本):
+
+- 一个 `reviews` Service。
+- 一个 `bookinfo-reviews` 的 ServiceAccount。
+- 一个 `reviews-v1` Deployment。
+- 一个 `reviews-v2` Deployment。
+- 一个 `reviews-v3` Deployment。
+
+Productpage �务和部署:
+
+这是应用的主页,å�¯ä»¥é€šè¿‡ç½‘络æµ�è§ˆå™¨ä¸æŸ¥çœ‹ã€‚将从该页é�¢è°ƒç”¨å…¶ä»–æœ�务。
+
+- 一个 `productpage` service。
+- 一个 `bookinfo-productpage` 的 ServiceAccount。
+- 一个 `productpage-v1` Deployment。
+
+### 资� YAML
+
+```yaml
+# Copyright 2017 Istio Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+##################################################################################################
+# Details service
+##################################################################################################
+apiVersion: v1
+kind: Service
+metadata:
+ name: details
+ labels:
+ app: details
+ service: details
+spec:
+ ports:
+ - port: 9080
+ name: http
+ selector:
+ app: details
+---
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ name: bookinfo-details
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: details-v1
+ labels:
+ app: details
+ version: v1
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ app: details
+ version: v1
+ template:
+ metadata:
+ labels:
+ app: details
+ version: v1
+ spec:
+ serviceAccountName: bookinfo-details
+ containers:
+ - name: details
+ image: docker.io/istio/examples-bookinfo-details-v1:1.15.0
+ imagePullPolicy: IfNotPresent
+ ports:
+ - containerPort: 9080
+---
+##################################################################################################
+# Ratings service
+##################################################################################################
+apiVersion: v1
+kind: Service
+metadata:
+ name: ratings
+ labels:
+ app: ratings
+ service: ratings
+spec:
+ ports:
+ - port: 9080
+ name: http
+ selector:
+ app: ratings
+---
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ name: bookinfo-ratings
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: ratings-v1
+ labels:
+ app: ratings
+ version: v1
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ app: ratings
+ version: v1
+ template:
+ metadata:
+ labels:
+ app: ratings
+ version: v1
+ spec:
+ serviceAccountName: bookinfo-ratings
+ containers:
+ - name: ratings
+ image: docker.io/istio/examples-bookinfo-ratings-v1:1.15.0
+ imagePullPolicy: IfNotPresent
+ ports:
+ - containerPort: 9080
+---
+##################################################################################################
+# Reviews service
+##################################################################################################
+apiVersion: v1
+kind: Service
+metadata:
+ name: reviews
+ labels:
+ app: reviews
+ service: reviews
+spec:
+ ports:
+ - port: 9080
+ name: http
+ selector:
+ app: reviews
+---
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ name: bookinfo-reviews
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: reviews-v1
+ labels:
+ app: reviews
+ version: v1
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ app: reviews
+ version: v1
+ template:
+ metadata:
+ labels:
+ app: reviews
+ version: v1
+ spec:
+ serviceAccountName: bookinfo-reviews
+ containers:
+ - name: reviews
+ image: docker.io/istio/examples-bookinfo-reviews-v1:1.15.0
+ imagePullPolicy: IfNotPresent
+ ports:
+ - containerPort: 9080
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: reviews-v2
+ labels:
+ app: reviews
+ version: v2
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ app: reviews
+ version: v2
+ template:
+ metadata:
+ labels:
+ app: reviews
+ version: v2
+ spec:
+ serviceAccountName: bookinfo-reviews
+ containers:
+ - name: reviews
+ image: docker.io/istio/examples-bookinfo-reviews-v2:1.15.0
+ imagePullPolicy: IfNotPresent
+ ports:
+ - containerPort: 9080
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: reviews-v3
+ labels:
+ app: reviews
+ version: v3
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ app: reviews
+ version: v3
+ template:
+ metadata:
+ labels:
+ app: reviews
+ version: v3
+ spec:
+ serviceAccountName: bookinfo-reviews
+ containers:
+ - name: reviews
+ image: docker.io/istio/examples-bookinfo-reviews-v3:1.15.0
+ imagePullPolicy: IfNotPresent
+ ports:
+ - containerPort: 9080
+---
+##################################################################################################
+# Productpage services
+##################################################################################################
+apiVersion: v1
+kind: Service
+metadata:
+ name: productpage
+ labels:
+ app: productpage
+ service: productpage
+spec:
+ ports:
+ - port: 9080
+ name: http
+ selector:
+ app: productpage
+---
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ name: bookinfo-productpage
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: productpage-v1
+ labels:
+ app: productpage
+ version: v1
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ app: productpage
+ version: v1
+ template:
+ metadata:
+ labels:
+ app: productpage
+ version: v1
+ spec:
+ serviceAccountName: bookinfo-productpage
+ containers:
+ - name: productpage
+ image: docker.io/istio/examples-bookinfo-productpage-v1:1.15.0
+ imagePullPolicy: IfNotPresent
+ ports:
+ - containerPort: 9080
+---
+```
+
+### å�Žç»æ¥éª¤
+[设置 Istio Gateway](set-up-istio-gateway.md)
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/manage-projects/manage-pod-security-policies.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/manage-projects/manage-pod-security-policies.md
new file mode 100644
index 00000000000..91578148d71
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/manage-projects/manage-pod-security-policies.md
@@ -0,0 +1,39 @@
+---
+title: Pod 安全ç–ç•¥
+---
+
+:::note
+
+本文介ç»�的集群选项仅适用于 [Rancher 已在其ä¸å�¯åЍ Kubernetes 的集群](../../../pages-for-subheaders/launch-kubernetes-with-rancher.md)。
+
+:::
+
+ä½ å�¯ä»¥åœ¨åˆ›å»ºé¡¹ç›®çš„æ—¶å€™è®¾ç½® Pod 安全ç–略(PSP)。如果在创建项目期间没有为项目分é…� PSPï¼Œä½ ä¹Ÿéš�æ—¶å�¯ä»¥å°† PSP 分é…�给现有项目。
+
+### 先决�件
+
+- 在 Rancher ä¸åˆ›å»º Pod 安全ç–略。在将默认 PSP 分é…�给现有项目之å‰�ï¼Œä½ å¿…é¡»æœ‰ä¸€ä¸ªå�¯åˆ†é…�çš„ PSP。有关说明,请å�‚阅[创建 Pod 安全ç–ç•¥](../../new-user-guides/authentication-permissions-and-global-configuration/create-pod-security-policies.md)。
+- 将默认 Pod 安全ç–略分é…�给项目所属的集群。如果 PSP è¿˜æ²¡æœ‰åº”ç”¨åˆ°é›†ç¾¤ï¼Œä½ æ— æ³•å°† PSP 分é…�给项目。有关详细信æ�¯ï¼Œè¯·å�‚阅[å°† pod 安全ç–ç•¥æ·»åŠ åˆ°é›†ç¾¤](../../new-user-guides/manage-clusters/add-a-pod-security-policy.md)。
+
+### 应用 Pod 安全ç–ç•¥
+
+1. 在左上角,�击 **☰ > 集群管�**。
+1. 在**集群**页�上,转到需�移动命�空间的集群,然��击 **Explore**。
+1. �击**集群 > 项目/命�空间**。
+1. 找到è¦�æ·»åŠ PSP 的项目。在该项目ä¸é€‰æ‹© **â‹® > 编辑é…�ç½®**。
+1. 从 **Pod 安全ç–ç•¥**下拉列表ä¸ï¼Œé€‰æ‹©è¦�应用于项目的 PSP。
+ 将 PSP 分�给项目将:
+
+- 覆盖集群的默认 PSP。
+- 将 PSP 应用于项目。
+- å°† PSP 应用到å�Žç»æ·»åŠ åˆ°é¡¹ç›®ä¸çš„命å��空间。
+
+1. å�•击**ä¿�å˜**。
+
+**结果**:已将 PSP 应用到项目以�项目内的命�空间。
+
+:::note
+
+对于在分é…� PSP 之å‰�å·²ç»�在集群或项目ä¸è¿�行工作负载,Rancher ä¸�会检查它们是å�¦ç¬¦å�ˆ PSPã€‚ä½ éœ€è¦�克隆或å�‡çº§å·¥ä½œè´Ÿè½½ä»¥æŸ¥çœ‹å®ƒä»¬æ˜¯å�¦é€šè¿‡ PSP。
+
+:::
\ No newline at end of file
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/manage-projects/manage-project-resource-quotas/about-project-resource-quotas.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/manage-projects/manage-project-resource-quotas/about-project-resource-quotas.md
new file mode 100644
index 00000000000..26e87e8f31a
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/manage-projects/manage-project-resource-quotas/about-project-resource-quotas.md
@@ -0,0 +1,67 @@
+---
+title: Rancher 项目ä¸èµ„æº�é…�é¢�的工作原ç�†
+---
+
+Rancher ä¸çš„资æº�é…�é¢�包å�«ä¸Ž [Kubernetes 原生版本](https://kubernetes.io/docs/concepts/policy/resource-quotas/)相å�Œçš„功能。Rancher 还扩展了资æº�é…�é¢�çš„åŠŸèƒ½ï¼Œè®©ä½ å°†èµ„æº�é…�é¢�应用于项目。
+
+åœ¨æ ‡å‡† Kubernetes deployment ä¸ï¼Œèµ„æº�é…�é¢�会应用于å�„个命å��ç©ºé—´ã€‚ä½†æ˜¯ï¼Œä½ ä¸�能通过å�•次æ“�作将é…�é¢�应用到多个命å��空间,而必须多次应用资æº�é…�é¢�。
+
+在下图ä¸ï¼ŒKubernetes 管ç�†å‘˜è¯•图在没有 Rancher 的情况下强制执行资æº�é…�é¢�。管ç�†å‘˜æƒ³è¦�使用一个资æº�é…�é¢�æ�¥ä¸ºé›†ç¾¤ä¸çš„æ¯�个命å��空间é…�置统一的 CPU 和内å˜é™�制 (`Namespace 1-4`)。但是,在 Kubernetes 的基础版本ä¸ï¼Œæ¯�个命å��空间都需è¦�å�•独设置资æº�é…�é¢�ã€‚å› æ¤ï¼Œç®¡ç�†å‘˜å¿…须创建四个é…�置相å�Œè§„æ ¼çš„ä¸�å�Œèµ„æº�é…�é¢�(`Resource Quota 1-4`)并å�•独应用这些é…�é¢�。
+
+Kubernetes 基础版本:�个命�空间都需�独立设置资���
+
+
+
+和原生 Kubernetes 相比,Rancher 的资æº�é…�é¢�有ä¸�å�Œã€‚在 Rancher ä¸ï¼Œä½ å�¯ä»¥æŠŠèµ„æº�é…�é¢�应用到项目层级,进而让项目的资æº�é…�é¢�沿用到项目内的æ¯�一个命å��空间,然å�Ž Kubernetes 会使用原生的资æº�é…�é¢�æ�¥å¼ºåˆ¶æ‰§è¡Œä½ 设置的é™�制。如果è¦�更改特定命å��空间的é…�é¢�ï¼Œä½ ä¹Ÿå�¯ä»¥è¦†ç›–设置。
+
+项目é…�é¢�åŒ…æ‹¬ä½ åœ¨åˆ›å»ºæˆ–ç¼–è¾‘é›†ç¾¤æ—¶è®¾ç½®çš„ä¸¤ä¸ªé™�制:
+
+
+- **项目�制**:
+
+ é…�ç½®äº†é¡¹ç›®ä¸æ‰€æœ‰å‘½å��空间共享的æ¯�个指定资æº�的总é™�制。
+
+- **命�空间默认�制**:
+
+ �置了�个命�空间对�个指定资�的默认��。
+ 如果项目ä¸çš„命å��空间é…�置没有被覆盖,那么æ¤é™�制会自动绑定到命å��空间并强制执行。
+
+
+在下图ä¸ï¼ŒRancher 管ç�†å‘˜æƒ³ä½¿ç”¨èµ„æº�é…�é¢�æ�¥ä¸ºé¡¹ç›®ä¸çš„æ¯�个命å��空间(`命å��空间 1-4`)设置相å�Œçš„ CPU 和内å˜é™�制。在 Rancher ä¸ï¼Œç®¡ç�†å‘˜å�¯ä»¥ä¸ºé¡¹ç›®è®¾ç½®èµ„æº�é…�é¢�(`项目资æº�é…�é¢�`),而ä¸�需è¦�为命å��空间å�•独进行设置。æ¤é…�é¢�包括整个项目(`项目é™�制`)和å�•个命å��空间(`命å��空间默认é™�制`)的资æº�é™�制。然å�Žï¼ŒRancher 会将`命å��空间默认é™�制`çš„é…�é¢�沿用到æ¯�个命å��空间(`命å��空间资æº�é…�é¢�`)。
+
+Rancher:资���沿用到�个命�空间
+
+
+
+以下介ç»�在 Rancher UI **_ä¸_** 创建的命å��ç©ºé—´çš„æ›´ç»†å¾®çš„åŠŸèƒ½ã€‚å¦‚æžœä½ åˆ é™¤äº†é¡¹ç›®çº§åˆ«çš„èµ„æº�é…�é¢�ï¼Œæ— è®ºå‘½å��空间层级是å�¦æœ‰è‡ªå®šä¹‰çš„资æº�é…�é¢�,项目内的所有命å��空间也会移除这个资æº�é…�é¢�。在项目层级修改已有的命å��空间默认资æº�é…�é¢�,ä¸�会影å“�命å��空间内的资æº�é…�é¢�,修改å�Žçš„项目层级资æº�é…�é¢�å�ªä¼šå¯¹ä»¥å�Žæ–°å»ºçš„命å��空间生效。è¦�修改多个现有命å��空间的默认é™�åˆ¶ï¼Œä½ å�¯ä»¥åœ¨é¡¹ç›®å±‚çº§åˆ é™¤è¯¥é™�制,然å�Žå†�使用新的默认值é‡�新创建é…�é¢�。这ç§�æ–¹å¼�会将新的默认值应用于项目ä¸çš„æ‰€æœ‰çŽ°æœ‰å‘½å��空间。
+
+在项目ä¸åˆ›å»ºå‘½å��空间之å‰�,Rancher 会使用默认é™�制和覆盖é™�制æ�¥å¯¹æ¯”项目内的å�¯ç”¨èµ„æº�和请求资æº�。
+如果请求的资æº�超过了项目ä¸è¿™äº›èµ„æº�的剩余容é‡�,Rancher 将为命å��空间分é…�该资æº�的剩余容é‡�。
+
+但是,在 Rancher çš„ UI **_外_** 创建的命å��空间的处ç�†æ–¹æ³•则ä¸�ä¸€æ ·ã€‚å¯¹äºŽé€šè¿‡ `kubectl` 创建的命å��空间,如果请求的资æº�é‡�多余项目内的余é‡�,Rancher 会分é…�一个数值为 **0** 的资æº�é…�é¢�。
+
+è¦�使用 `kubectl` 在现有项目ä¸åˆ›å»ºå‘½å��空间,请使用 `field.cattle.io/projectId` 注释。è¦�覆盖默认的请求é…�é¢�é™�制,请使用 `field.cattle.io/resourceQuota` 注释。
+
+请注�,Rancher �会覆盖项目��上定义的资��制。
+
+```
+apiVersion: v1
+kind: Namespace
+metadata:
+ annotations:
+ field.cattle.io/projectId: [your-cluster-ID]:[your-project-ID]
+ field.cattle.io/resourceQuota: '{"limit":{"limitsCpu":"100m", "configMaps": "50"}}'
+ name: my-ns
+```
+在æ¤ç¤ºä¾‹ä¸ï¼Œå¦‚果项目é…�é¢�在其资æº�列表ä¸ä¸�包å�« configMaps,那么 Rancher 将忽略æ¤è¦†ç›–ä¸çš„ `configMaps`。
+
+å¯¹äºŽé¡¹ç›®ä¸æœªå®šä¹‰çš„资æº�ï¼Œå»ºè®®ä½ åœ¨å‘½å��空间ä¸åˆ›å»ºä¸“用的 `ResourceQuota` 对象æ�¥é…�置其它自定义é™�制。
+资���是原生 Kubernetes 对象,如果命�空间属于具有��的项目,Rancher 将忽略用户定义的��,从而给予用户更多的控制�。
+
+下表对比了 Rancher 和 Kubernetes 资���的主�区别:
+
+| Rancher 资��� | Kubernetes 资��� |
+| ---------------------------------------------------------- | -------------------------------------------------------- |
+| 应用于项目和命�空间。 | 仅应用于命�空间。 |
+| 为项目ä¸çš„æ‰€æœ‰å‘½å��空间创建资æº�æ± ã€‚ | å°†é�™æ€�资æº�é™�制应用到å�•独的命å��空间。 |
+| 通过沿用的模�,将资���应用于�个命�空间。 | 仅应用于指定的命�空间。 |
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/manage-projects/manage-project-resource-quotas/override-default-limit-in-namespaces.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/manage-projects/manage-project-resource-quotas/override-default-limit-in-namespaces.md
new file mode 100644
index 00000000000..f29c3004b85
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/manage-projects/manage-project-resource-quotas/override-default-limit-in-namespaces.md
@@ -0,0 +1,34 @@
+---
+title: 覆盖命�空间的默认�制
+---
+
+**命å��空间默认é™�制**会在创建时从项目沿用到æ¯�个命å��空间。但在æŸ�äº›æƒ…å†µä¸‹ï¼Œä½ å�¯èƒ½éœ€è¦�å¢žåŠ æˆ–å‡�少特定命å��空间的é…�é¢�。在这ç§�æƒ…å†µä¸‹ï¼Œä½ å�¯ä»¥é€šè¿‡ç¼–辑命å��空间æ�¥è¦†ç›–默认é™�制。
+
+在下图ä¸ï¼ŒRancher 管ç�†å‘˜çš„项目有一个已生效的资æº�é…�é¢�。但是,管ç�†å‘˜æƒ³è¦�覆盖 `Namespace 3` 的命å��空间é™�制,以便让该命å��空间使用更多资æº�ã€‚å› æ¤ï¼Œç®¡ç�†å‘˜[æ��高了 `Namespace 3` 的命å��空间é™�制](../../../new-user-guides/manage-clusters/projects-and-namespaces.md),以便命å��空间å�¯ä»¥è®¿é—®æ›´å¤šèµ„æº�。
+
+命�空间默认�制覆盖
+
+
+
+有关详细信�,请�阅[如何编辑命�空间资���](../../../new-user-guides/manage-clusters/projects-and-namespaces.md)。
+
+### 编辑命�空间资���
+
+å¦‚æžœä½ å·²ä¸ºé¡¹ç›®é…�置了资æº�é…�é¢�ï¼Œä½ å�¯ä»¥è¦†ç›–命å��空间默认é™�制,从而为特定命å��空间æ��供对更多(或更少)项目资æº�的访问æ�ƒé™�:
+
+1. 在左上角,�击 **☰ > 集群管�**。
+1. 在**集群**页�上,转到�编辑命�空间资���的集群,然��击 **Explore**。
+1. �击**集群 > 项目/命�空间**。
+1. 找到�为其编辑资���的命�空间。�击 **⋮ > 编辑�置**。
+1. 编辑资��制。这些�制决定了命�空间�用的资�。必须在项目�制范围内�置这些���制。
+
+ 有关�个**资�类型**的详细信�,请�阅[类型�考](resource-quota-types.md)。
+
+ :::note
+
+ - 如果没有为项目�置资���,这些选项将��用。
+ - å¦‚æžœä½ è¾“å…¥çš„é™�制超过了é…�置的项目é™�åˆ¶ï¼Œä½ å°†æ— æ³•ä¿�å˜ä¿®æ”¹ã€‚
+
+ :::
+
+**结果**:覆盖设置已�应用到命�空间的资���。
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/manage-projects/manage-project-resource-quotas/resource-quota-types.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/manage-projects/manage-project-resource-quotas/resource-quota-types.md
new file mode 100644
index 00000000000..b0873befd7a
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/manage-projects/manage-project-resource-quotas/resource-quota-types.md
@@ -0,0 +1,27 @@
+---
+title: 资���类型�考
+---
+
+创建资æº�é…�é¢�相当于é…�置项目å�¯ç”¨çš„资æº�æ± ã€‚ä½ å�¯ä»¥ä¸ºä»¥ä¸‹èµ„æº�类型设置资æº�é…�é¢�:
+
+| 资�类型 | �述 |
+| ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| CPU é™�制\* | 分é…�给项目/命å��空间的最大 CPU é‡�(以[æ¯«æ ¸](https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/#meaning-of-cpu)为å�•ä½�)1 |
+| CPU 预留\* | 预留给项目/命å��空间的最å°� CPU é‡�ï¼ˆä»¥æ¯«æ ¸ä¸ºå�•ä½�)1 |
+| 内å˜é™�制\* | 分é…�给项目/命å��空间的最大内å˜é‡�(以å—节为å�•ä½�)1 |
+| 内å˜é¢„ç•™\* | 预留给项目/命å��空间的最å°�内å˜é‡�(以å—节为å�•ä½�)1 |
+| å˜å‚¨é¢„ç•™ | 预留给项目/命å��空间的最å°�å˜å‚¨é‡�(以å�ƒå…†å—节为å�•ä½�) |
+| æœ�务负载å�‡è¡¡å™¨ | 项目/命å��空间ä¸å�¯ä»¥å˜åœ¨çš„è´Ÿè½½å�‡è¡¡å™¨æœ�务的最大数é‡� |
+| æœ�务节点端å�£ | 项目/命å��空间ä¸å�¯ä»¥å˜åœ¨çš„节点端å�£æœ�务的最大数é‡� |
+| Pod | å�¯ä»¥åœ¨é¡¹ç›®/命å��空间ä¸ä»¥é�žç»ˆç«¯çжæ€�å˜åœ¨çš„ pod 的最大数é‡�(å�³ `.status.phase in (Failed, Succeeded)` ç‰äºŽ true çš„ pod) |
+| Services | 项目/命å��空间ä¸å�¯ä»¥å˜åœ¨çš„æœ€å¤§ service æ•°é‡� |
+| ConfigMap | 项目/命å��空间ä¸å�¯ä»¥å˜åœ¨çš„ ConfigMap 的最大数é‡� |
+| æŒ�ä¹…å�·å£°æ˜Ž | 项目/命å��空间ä¸å�¯ä»¥å˜åœ¨çš„æŒ�ä¹…å�·å£°æ˜Žçš„æœ€å¤§æ•°é‡� |
+| ReplicationController | 项目/命å��空间ä¸å�¯ä»¥å˜åœ¨çš„æœ€å¤§ ReplicationController æ•°é‡� |
+| 密文 | 项目/命å��空间ä¸å�¯ä»¥å˜åœ¨çš„æœ€å¤§å¯†æ–‡æ•°é‡� |
+
+:::note *** **
+
+在设置资æº�é…�é¢�æ—¶ï¼Œå¦‚æžœä½ åœ¨é¡¹ç›®æˆ–å‘½å��空间上设置了任何与 CPU 或内å˜ç›¸å…³çš„内容(å�³é™�制或预留),所有容器都需è¦�在创建期间设置å�„自的 CPU 或内å˜å—æ®µã€‚ä½ å�¯ä»¥å�Œæ—¶è®¾ç½®å®¹å™¨çš„默认资æº�é™�制,以é�¿å…�为æ¯�个工作负载显å¼�设置这些é™�制。详情请å�‚阅 [Kubernetes 文档](https://kubernetes.io/docs/concepts/policy/resource-quotas/#requests-vs-limits)。
+
+:::
\ No newline at end of file
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/manage-projects/manage-project-resource-quotas/set-container-default-resource-limits.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/manage-projects/manage-project-resource-quotas/set-container-default-resource-limits.md
new file mode 100644
index 00000000000..e56f617e7a0
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/manage-projects/manage-project-resource-quotas/set-container-default-resource-limits.md
@@ -0,0 +1,40 @@
+---
+title: 设置容器默认资��制
+---
+
+在设置资æº�é…�é¢�æ—¶ï¼Œå¦‚æžœä½ åœ¨é¡¹ç›®æˆ–å‘½å��空间上设置了任何与 CPU 或内å˜ç›¸å…³çš„内容(å�³é™�制或预留),所有容器都需è¦�在创建期间设置å�„自的 CPU 或内å˜å—段。详情请å�‚阅 [Kubernetes 文档](https://kubernetes.io/docs/concepts/policy/resource-quotas/#requests-vs-limits)。
+
+为了��在创建工作负载期间对�个容器设置这些�制,�以在命�空间上指定一个默认的容器资��制。
+
+### 编辑容器默认资��制
+
+ä½ å�¯ä»¥åœ¨ä»¥ä¸‹æƒ…况下编辑容器的默认资æº�é™�制:
+
+- ä½ åœ¨é¡¹ç›®ä¸Šè®¾ç½®äº† CPU 或内å˜èµ„æº�é…�é¢�,现在需è¦�为容器设置相应的默认值。
+- ä½ éœ€è¦�编辑容器的默认资æº�é™�制。
+
+1. 在左上角,�击 **☰ > 集群管�**。
+1. 在**集群**页�上,转到�编辑默认资��制的集群,然��击 **Explore**。
+1. �击**集群 > 项目/命�空间**。
+1. 找到è¦�编辑容器默认资æº�é™�制的项目。在该项目ä¸é€‰æ‹© **â‹® > 编辑é…�ç½®**。
+1. 展开**容器默认资��制**并编辑对应的值。
+
+### 沿用资��制
+
+在项目级别设置默认容器资æº�é™�制å�Žï¼Œé¡¹ç›®ä¸æ‰€æœ‰æ–°å»ºçš„命å��空间都会沿用这个资æº�é™�制å�‚数。新设置的é™�制ä¸�会影å“�项目ä¸çŽ°æœ‰çš„å‘½å��ç©ºé—´ã€‚ä½ éœ€è¦�为项目ä¸çš„现有命å��空间手动设置默认容器资æº�é™�制,以便创建容器时能应用该é™�制。
+
+ä½ å�¯ä»¥ä¸ºé¡¹ç›®è®¾ç½®å®¹å™¨çš„默认资æº�é™�制并å�¯åŠ¨ä»»ä½•å•†åº—åº”ç”¨ã€‚
+
+在命å��空间上é…�置容器默认资æº�é™�制å�Žï¼Œåœ¨è¯¥å‘½å��空间ä¸åˆ›å»ºçš„ä»»ä½•å®¹å™¨éƒ½ä¼šæ²¿ç”¨è¯¥é»˜è®¤å€¼ã€‚ä½ å�¯ä»¥åœ¨å·¥ä½œè´Ÿè½½åˆ›å»ºæœŸé—´è¦†ç›–这些é™�制/预留。
+
+### 容器资���类型
+
+�以�置以下资��制:
+
+| 资�类型 | �述 |
+| ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| CPU é™�制 | 分é…�给容器的最大 CPU é‡�(以[æ¯«æ ¸](https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/#meaning-of-cpu)为å�•ä½�)。 |
+| CPU 预留 | ä¿�留给容器的最å°� CPU é‡�ï¼ˆä»¥æ¯«æ ¸ä¸ºå�•ä½�)。 |
+| 内å˜é™�制 | 分é…�给容器的最大内å˜é‡�(以å—节为å�•ä½�)。 |
+| 内å˜é¢„ç•™ | ä¿�留给容器的最å°�内å˜é‡�(以å—节为å�•ä½�)。 |
+| NVIDIA GPU �制/预留 | 分�给容器的 GPU 数�。GPU 的�制和预留始终相�。 |
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/monitoring-alerting-guides/create-persistent-grafana-dashboard.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/monitoring-alerting-guides/create-persistent-grafana-dashboard.md
new file mode 100644
index 00000000000..e5a2deccf45
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/monitoring-alerting-guides/create-persistent-grafana-dashboard.md
@@ -0,0 +1,148 @@
+---
+title: �久化 Grafana 仪表�
+---
+
+è¦�在é‡�å�¯ Grafana 实例å�Žä¿�å˜ Grafana 仪表æ�¿ï¼Œè¯·å°†ä»ªè¡¨æ�¿çš„é…�ç½® JSON æ·»åŠ åˆ° ConfigMap ä¸ã€‚ConfigMap 还支æŒ�使用基于 GitOps 或 CD 的方法æ�¥éƒ¨ç½²ä»ªè¡¨æ�¿ï¼Œä»Žè€Œè®©ä½ 对仪表æ�¿è¿›è¡Œç‰ˆæœ¬æŽ§åˆ¶ã€‚
+
+- [创建�久化 Grafana 仪表�](#创建�久化-grafana-仪表�)
+- [已知问题](#已知问题)
+
+## 创建�久化 Grafana 仪表�
+
+
+
+
+:::note 先决�件:
+
+- 已安装 Monitoring 应用。
+- è¦�创建æŒ�久化仪表æ�¿ï¼Œä½ 必须在包å�« Grafana 仪表æ�¿çš„项目或命å��空间ä¸è‡³å°‘具有**管ç�† ConfigMap** çš„ Rancher RBAC æ�ƒé™�。这与 Monitoring Chart 公开的 `monitoring-dashboard-edit` 或 `monitoring-dashboard-admin` Kubernetes 原生 RBAC 角色对应。
+- è¦�查看指å�‘外部监控 UI(包括 Grafana 仪表æ�¿ï¼‰çš„é“¾æŽ¥ï¼Œä½ è‡³å°‘éœ€è¦�一个 [project-member 角色](../../../integrations-in-rancher/monitoring-and-alerting/rbac-for-monitoring.md#具有-rancher-æ�ƒé™�的用户)。
+
+:::
+
+### 1. 获���久化的仪表�的 JSON 模型
+
+è¦�创建æŒ�久化仪表æ�¿ï¼Œä½ 需è¦�获å�–è¦�æŒ�久化的仪表æ�¿çš„ JSON æ¨¡åž‹ã€‚ä½ å�¯ä»¥ä½¿ç”¨é¢„制仪表æ�¿æˆ–自行构建仪表æ�¿ã€‚
+
+è¦�使用预制仪表æ�¿ï¼Œè¯·è½¬åˆ° [https://grafana.com/grafana/dashboards](https://grafana.com/grafana/dashboards),打开详细信æ�¯é¡µé�¢ï¼Œç„¶å�Žå�•击 **Download JSON** 按钮æ�¥èŽ·å�–ä¸‹ä¸€æ¥æ‰€éœ€çš„ JSON 模型。
+
+è¦�ä½¿ç”¨ä½ è‡ªå·±çš„ä»ªè¡¨æ�¿ï¼š
+
+1. 点击链接打开 Grafana。在集群详细信�页�上,�击 **Monitoring**。
+1. 登录到 Grafana。请注æ„�,Grafana 实例的默认 Admin 用户å��和密ç �是 `admin/prom-operator`ã€‚ä½ è¿˜å�¯ä»¥åœ¨éƒ¨ç½²æˆ–å�‡çº§ Chart 时替æ�¢å‡è¯�。
+
+ :::note
+
+ æ— è®ºè°�拥有密ç �ï¼Œä½ éƒ½éœ€è¦�在部署了 Rancher Monitoring 的项目ä¸è‡³å°‘具有管ç�†æœ�务 或查看监控 çš„æ�ƒé™�æ‰�能访问 Grafana å®žä¾‹ã€‚ä½ è¿˜å�¯ä»¥åœ¨éƒ¨ç½²æˆ–å�‡çº§ Chart 时替æ�¢å‡è¯�。
+
+ :::
+
+1. 使用 Grafana UI 创建仪表æ�¿ã€‚完æˆ�å�Žï¼Œå�•击顶部导航è�œå�•ä¸çš„é½¿è½®å›¾æ ‡è½¬åˆ°ä»ªè¡¨æ�¿è®¾ç½®é¡µé�¢ã€‚在左侧导航è�œå�•ä¸ï¼Œå�•击 **JSON Model**。
+1. �制出现的 JSON 数�结构。
+
+### 2. 使用 Grafana JSON 模型创建 ConfigMap
+
+在包å�« Grafana 仪表æ�¿çš„命å��空间ä¸åˆ›å»ºä¸€ä¸ª ConfigMap(默认为 cattle-dashboards )。
+
+ConfigMap 与以下内容类似:
+
+```yaml
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ labels:
+ grafana_dashboard: "1"
+ name:
+ namespace: cattle-dashboards # 如果ä¸�使用默认命å��空间,则修改æ¤å€¼
+data:
+ .json: |-
+
+```
+
+默认情况下,Grafana é…�置为监控 `cattle-dashboards` 命å��空间ä¸å¸¦æœ‰ `grafana_dashboard` æ ‡ç¾çš„æ‰€æœ‰ ConfigMap。
+
+è¦�让 Grafana 监控所有命å��空间ä¸çš„ ConfigMap,请å�‚阅[本节](#为-grafana-仪表æ�¿-configmap-é…�置命å��空间)。
+
+è¦�在 Rancher UI ä¸åˆ›å»º ConfigMap:
+
+1. 在左上角,�击 **☰ > 集群管�**。
+1. 在**集群**页�上,转到��视化的集群,然��击 **Explore**。
+1. å�•击**更多资æº� > æ ¸å¿ƒ > é…�ç½®æ˜ å°„**。
+1. �击**创建**。
+1. 设置与上例类似的键值对。输入 `.json` 的值时,点击**从文件读å�–**å¹¶ä¸Šä¼ JSON æ•°æ�®æ¨¡åž‹ã€‚
+1. �击**创建**。
+
+**结果**:创建 ConfigMap �,�使 Grafana pod ��了,ConfigMap 也能显示在 Grafana UI 上并�久化。
+
+æ— æ³•åœ¨ Grafana UI ä¸åˆ 除或编辑使用 ConfigMap æŒ�久化了的仪表æ�¿ã€‚
+
+å¦‚æžœä½ åœ¨ Grafana UI ä¸åˆ 除仪表æ�¿ï¼Œä½ 将看到 "Dashboard cannot be deleted because it was provisioned" 的错误消æ�¯ã€‚å¦‚éœ€åˆ é™¤ä»ªè¡¨æ�¿ï¼Œä½ 需è¦�åˆ é™¤ ConfigMap。
+
+### 为 Grafana 仪表� ConfigMap �置命�空间
+
+è¦�让 Grafana 监控所有命å��空间ä¸çš„ ConfigMap,请在 `rancher-monitoring` Helm chart 䏿Œ‡å®šä»¥ä¸‹å€¼ï¼š
+
+```
+grafana.sidecar.dashboards.searchNamespace=ALL
+```
+
+请注æ„�,Monitoring Chart ç”¨äºŽæ·»åŠ Grafana 仪表æ�¿çš„ RBAC 角色仅能让用户将仪表æ�¿æ·»åŠ åˆ°å®šä¹‰åœ¨ `grafana.dashboards.namespace` ä¸çš„命å��空间,默认为 `cattle-dashboards`。
+
+
+
+
+:::note 先决�件:
+
+- 已安装 Monitoring 应用。
+- ä½ å¿…é¡»å…·æœ‰ cluster-admin ClusterRole æ�ƒé™�。
+
+:::
+
+1. 在左上角,�击 **☰ > 集群管�**。
+1. 在**集群**页é�¢ä¸Šï¼Œè½¬åˆ°è¦�在其ä¸é…�ç½® Grafana 命å��空间的集群,然å�Žå�•击 **Explore**。
+1. 在左侧导航æ �ä¸ï¼Œå�•击**监控**。
+1. 点击 **Grafana**。
+1. 登录到 Grafana。请注æ„�,Grafana 实例的默认 Admin 用户å��和密ç �是 `admin/prom-operator`ã€‚ä½ è¿˜å�¯ä»¥åœ¨éƒ¨ç½²æˆ–å�‡çº§ Chart 时替æ�¢å‡è¯�。
+
+ :::note
+
+ æ— è®ºè°�拥有密ç �,都需è¦� Rancher 的集群管ç�†å‘˜æ�ƒé™�æ‰�能访问 Grafana 实例。
+
+ :::
+
+1. 转到è¦�进行æŒ�久化的仪表æ�¿ã€‚在顶部导航è�œå�•ä¸ï¼Œé€šè¿‡å�•å‡»é½¿è½®å›¾æ ‡è½¬åˆ°ä»ªè¡¨æ�¿è®¾ç½®ã€‚
+1. 在左侧导航è�œå�•ä¸ï¼Œå�•击 **JSON Model**。
+1. �制出现的 JSON 数�结构。
+1. 在 `cattle-dashboards` 命å��空间ä¸åˆ›å»ºä¸€ä¸ª ConfigMap。ConfigMap 需è¦�有 `grafana_dashboard: "1"` æ ‡ç¾ã€‚å°† JSON 粘贴到 ConfigMap ä¸ï¼Œæ ¼å¼�如下例所示:
+
+ ```yaml
+ apiVersion: v1
+ kind: ConfigMap
+ metadata:
+ labels:
+ grafana_dashboard: "1"
+ name:
+ namespace: cattle-dashboards
+ data:
+ .json: |-
+
+ ```
+
+**结果**:创建 ConfigMap �,�使 Grafana pod ��了,ConfigMap 也能显示在 Grafana UI 上并�久化。
+
+æ— æ³•åœ¨ Grafana UI ä¸åˆ 除使用 ConfigMap æŒ�久化了的仪表æ�¿ã€‚å¦‚æžœä½ åœ¨ Grafana UI ä¸åˆ 除仪表æ�¿ï¼Œä½ 将看到 "Dashboard cannot be deleted because it was provisioned" 的错误消æ�¯ã€‚å¦‚éœ€åˆ é™¤ä»ªè¡¨æ�¿ï¼Œä½ 需è¦�åˆ é™¤ ConfigMap。
+
+为防æ¢åœ¨å�¸è½½ Monitoring v2 æ—¶åˆ é™¤æŒ�久化的仪表æ�¿ï¼Œè¯·å°†ä»¥ä¸‹æ³¨é‡Šæ·»åŠ åˆ° `cattle-dashboards` 命å��空间:
+
+```
+helm.sh/resource-policy: "keep"
+```
+
+
+
+
+## 已知问题
+
+å¦‚æžœä½ çš„ Monitoring V2 版本是 v9.4.203 或更低版本,å�¸è½½ Monitoring chart å°†å�Œæ—¶åˆ 除 `cattle-dashboards` 命å��空间,所有æŒ�久化的仪表æ�¿å°†è¢«åˆ 除(除é�žå‘½å��空间带有注释 `helm.sh/resource-policy: "keep"`)。
+
+Rancher 2.5.8 å�‘布的新 Monitoring Chart ä¸é»˜è®¤æ·»åŠ äº†è¯¥æ³¨è§£ï¼Œä½†ä½¿ç”¨æ—©æœŸ Rancher 版本的用户ä»�需手动应用该注释。
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/monitoring-alerting-guides/customize-grafana-dashboard.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/monitoring-alerting-guides/customize-grafana-dashboard.md
new file mode 100644
index 00000000000..5fa126a9089
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/monitoring-alerting-guides/customize-grafana-dashboard.md
@@ -0,0 +1,39 @@
+---
+title: 自定义 Grafana 仪表�
+---
+
+在本文ä¸ï¼Œä½ å°†å¦ä¹ 通过自定义 Grafana 仪表æ�¿æ�¥æ˜¾ç¤ºç‰¹å®šå®¹å™¨çš„æŒ‡æ ‡ã€‚
+
+### 先决�件
+
+在自定义 Grafana 仪表æ�¿ä¹‹å‰�ï¼Œä½ å¿…é¡»å…ˆå®‰è£… `rancher-monitoring` 应用。
+
+è¦�查看指å�‘外部监控 UI(包括 Grafana 仪表æ�¿ï¼‰çš„é“¾æŽ¥ï¼Œä½ è‡³å°‘éœ€è¦�一个 [project-member 角色](../../../integrations-in-rancher/monitoring-and-alerting/rbac-for-monitoring.md#具有-rancher-æ�ƒé™�的用户)。
+
+### 登录 Grafana
+
+1. 在 Rancher UI ä¸ï¼Œè½¬åˆ°è¦�自定义的仪表æ�¿çš„集群。
+1. 在左侧导航æ �ä¸ï¼Œå�•击**监控**。
+1. å�•击 **Grafana**。Grafana 仪表æ�¿å°†åœ¨æ–°é€‰é¡¹å�¡ä¸æ‰“开。
+1. è½¬åˆ°å·¦ä¸‹è§’çš„ç™»å½•å›¾æ ‡ï¼Œç„¶å�Žå�•击 **Sign In**。
+1. 登录到 Grafana。Grafana 实例的默认 Admin 用户å��和密ç �是 `admin/prom-operator`ï¼ˆæ— è®ºè°�拥有密ç �,都需è¦� Rancher 的集群管ç�†å‘˜æ�ƒé™�æ‰�能访问 Grafana å®žä¾‹ï¼‰ã€‚ä½ è¿˜å�¯ä»¥åœ¨éƒ¨ç½²æˆ–å�‡çº§ Chart 时替æ�¢å‡è¯�。
+
+
+### 获�支� Grafana ��的 PromQL 查询
+
+对于任何é�¢æ�¿ï¼Œä½ å�¯ä»¥å�•å‡»æ ‡é¢˜å¹¶å�•击 **Explore** 以获å�–支æŒ�图形的 PromQL 查询。
+
+例如,如果�获� Alertmanager 容器的 CPU 使用率,点击 **CPU Utilization > Inspect**。
+
+**Data** 选项�将基础数�显示为时间�列,第一列是时间,第二列是 PromQL 查询结果。�制 PromQL 查询。
+
+```
+(1 - (avg(irate({__name__=~"node_cpu_seconds_total|windows_cpu_time_total",mode="idle"}[5m])))) * 100
+```
+
+ç„¶å�Žï¼Œä½ å�¯ä»¥åœ¨ Grafana é�¢æ�¿ä¸ä¿®æ”¹æŸ¥è¯¢ï¼Œæˆ–使用该查询创建新的 Grafana é�¢æ�¿ã€‚
+
+�考:
+
+- [编辑��的 Grafana 文档](https://grafana.com/docs/grafana/latest/panels-visualizations/configure-panel-options/#edit-a-panel)
+- [å�‘仪表æ�¿æ·»åŠ é�¢æ�¿çš„ Grafana 文档](https://grafana.com/docs/grafana/latest/panels-visualizations/panel-editor-overview)
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/monitoring-alerting-guides/debug-high-memory-usage.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/monitoring-alerting-guides/debug-high-memory-usage.md
new file mode 100644
index 00000000000..a51a45041ec
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/monitoring-alerting-guides/debug-high-memory-usage.md
@@ -0,0 +1,19 @@
+---
+title: 调试高内å˜ç”¨é‡�
+---
+
+Prometheus ä¸çš„æ¯�个时间åº�列都由其[æŒ‡æ ‡å��ç§°](https://prometheus.io/docs/practices/naming/#metric-names)和称为[æ ‡ç¾](https://prometheus.io/docs/practices/naming/#labels)çš„å�¯é€‰é”®å€¼å¯¹å”¯ä¸€æ ‡è¯†ã€‚
+
+æ ‡ç¾å…�许过滤和è�šå�ˆæ—¶é—´åº�列数æ�®ï¼Œä½†å®ƒä»¬ä¹Ÿä½¿ Prometheus 收集的数æ�®é‡�æˆ�å€�å¢žåŠ ã€‚
+
+æ¯�个时间åº�åˆ—éƒ½æœ‰ä¸€ç»„å®šä¹‰çš„æ ‡ç¾ï¼ŒPrometheus ä¸ºæ‰€æœ‰å”¯ä¸€çš„æ ‡ç¾ç»„å�ˆç”Ÿæˆ�一个新的时间åº�åˆ—ã€‚å¦‚æžœä¸€ä¸ªæŒ‡æ ‡é™„åŠ äº†ä¸¤ä¸ªæ ‡ç¾ï¼Œåˆ™ä¼šä¸ºè¯¥æŒ‡æ ‡ç”Ÿæˆ�两个时间åº�åˆ—ã€‚æ›´æ”¹ä»»ä½•æ ‡ç¾å€¼ï¼ŒåŒ…æ‹¬æ·»åŠ æˆ–åˆ é™¤æ ‡ç¾ï¼Œéƒ½ä¼šåˆ›å»ºä¸€ä¸ªæ–°çš„æ—¶é—´åº�列。
+
+Prometheus ç»�过了优化,å�¯ä»¥å˜å‚¨åŸºäºŽç´¢å¼•çš„åº�列数æ�®ã€‚它是为相对一致的时间åº�列数é‡�和相对大é‡�çš„æ ·æœ¬è€Œè®¾è®¡çš„ï¼Œè¿™äº›æ ·æœ¬éœ€è¦�éš�时间从 exporter 处收集。
+
+但是,Prometheus 没有就快速å�˜åŒ–的时间åº�列数é‡�è¿›è¡Œå¯¹åº”çš„ä¼˜åŒ–ã€‚å› æ¤ï¼Œå¦‚æžœä½ åœ¨åˆ›å»ºå’Œé”€æ¯�了大é‡�资æº�的集群(尤其是多租户集群)上安装 Monitoring,å�¯èƒ½ä¼šå‡ºçް内å˜ä½¿ç”¨é‡�激增的情况。
+
+### å‡�å°‘å†…å˜æ¿€å¢ž
+
+为了å‡�å°‘å†…å˜æ¶ˆè€—,Prometheus å�¯ä»¥é€šè¿‡æŠ“å�–æ›´å°‘çš„æŒ‡æ ‡æˆ–åœ¨æ—¶é—´åº�åˆ—ä¸Šæ·»åŠ æ›´å°‘çš„æ ‡ç¾ï¼Œä»Žè€Œå˜å‚¨æ›´å°‘的时间åº�列。è¦�æŸ¥çœ‹ä½¿ç”¨å†…å˜æœ€å¤šçš„åº�åˆ—ï¼Œä½ å�¯ä»¥æŸ¥çœ‹ Prometheus UI ä¸çš„ TSDB(时åº�æ•°æ�®åº“)状æ€�页é�¢ã€‚
+
+分布å¼� Prometheus 解决方案(例如 [Thanos](https://thanos.io/) å’Œ [Cortex](https://cortexmetrics.io/))使用了一个替代架构,该架构部署多个å°�åž‹ Prometheus 实例。如果使用 Thanos,æ¯�个 Prometheus çš„æŒ‡æ ‡éƒ½è�šå�ˆåˆ°é€šç”¨çš„ Thanos 部署ä¸ï¼Œç„¶å�Žå†�å°†è¿™äº›æŒ‡æ ‡å¯¼å‡ºåˆ° S3 之类的æŒ�ä¹…å˜å‚¨ã€‚è¿™ç§�æž¶æž„æ›´åŠ å�¥åº·ï¼Œèƒ½é�¿å…�ç»™å�•个 Prometheus 实例带æ�¥è¿‡å¤šæ—¶é—´åº�列,å�Œæ—¶è¿˜èƒ½åœ¨å…¨å±€çº§åˆ«æŸ¥è¯¢æŒ‡æ ‡ã€‚
\ No newline at end of file
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/monitoring-alerting-guides/enable-monitoring.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/monitoring-alerting-guides/enable-monitoring.md
new file mode 100644
index 00000000000..cfb2ebdf338
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/monitoring-alerting-guides/enable-monitoring.md
@@ -0,0 +1,75 @@
+---
+title: �用 Monitoring
+---
+
+[管�员](../../new-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/global-permissions.md)或[集群所有者](../../new-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/cluster-and-project-roles.md#集群角色)�以通过�置 Rancher �部署 Prometheus,从而监控 Kubernetes 集群。
+
+本文介ç»�如何使用新的 monitoring 应用在集群内å�¯ç”¨ç›‘控和告è¦ã€‚
+
+ä¸�论是å�¦ä½¿ç”¨ SSLï¼Œä½ éƒ½å�¯ä»¥å�¯ç”¨ monitoring。
+
+## �求
+
+- 在æ¯�个节点上å…�许端å�£ 9796 上的æµ�é‡�。Prometheus 将从这些端å�£æŠ“å�–æŒ‡æ ‡ã€‚
+ - 如果 [PushProx](../../../integrations-in-rancher/monitoring-and-alerting/how-monitoring-works.md#pushprox) 被ç¦�用(`ingressNginx.enabled` 设置为 `false`ï¼‰ï¼Œæˆ–è€…ä½ å·²ç»�å�‡çº§äº†å®‰è£…了 Monitoring V1 çš„ Rancher ç‰ˆæœ¬ï¼Œä½ å�¯èƒ½è¿˜éœ€è¦�为æ¯�个节点å…�许端å�£ 10254 上的æµ�é‡�。
+- ç¡®ä¿�ä½ çš„é›†ç¾¤æ»¡è¶³èµ„æº�è¦�求。集群应至少有 1950Mi å�¯ç”¨å†…å˜ã€�2700m CPU å’Œ 50Gi å˜å‚¨ã€‚有关资æº�é™�制和请求的详细信æ�¯ï¼Œè¯·å�‚阅[é…�置资æº�é™�制和请求](../../../reference-guides/monitoring-v2-configuration/helm-chart-options.md#é…�置资æº�é™�制和请求)。
+- 在使用 RancherOS 或 Flatcar Linux 节点的 RKE 集群上安装 Monitoring 时,请将 etcd 节点�书目录更改为 `/opt/rke/etc/kubernetes/ssl`。
+- 如果集群是使用 RKE CLI é…�置的,而且地å�€è®¾ç½®ä¸ºä¸»æœºå��而ä¸�是 IP 地å�€ï¼Œè¯·åœ¨å®‰è£…çš„ Values é…�ç½®æ¥éª¤ä¸å°† `rkeEtcd.clients.useLocalhost` 设置为 `true`。例如:
+
+```yaml
+rkeEtcd:
+ clients:
+ useLocalhost: true
+```
+
+:::note
+
+如果�设置 Alertmanager�Grafana 或 Ingress,必须通过 Helm chart 部署上的设置�完�。在部署之外创建 Ingress �能会产生问题。
+
+:::
+
+## 设置资��制和请求
+
+安装 `rancher-monitoring` 时�以�置资�请求和�制。�从 Rancher UI �置 Prometheus 资�,请�击左上角的 **Apps > Monitoring**。
+
+有关默认é™�制的更多信æ�¯ï¼Œè¯·å�‚阅[æ¤é¡µé�¢](../../../reference-guides/monitoring-v2-configuration/helm-chart-options.md#é…�置资æº�é™�制和请求)。
+
+## 安装 Monitoring 应用
+
+### 在�使用 SSL 的情况下�用 Monitoring
+
+1. 点击 **☰ > 集群管�**。
+1. é€‰æ‹©ä½ åˆ›å»ºçš„é›†ç¾¤ï¼Œå¹¶ç‚¹å‡» **Explore**。
+1. 点击**集群工具**(左下角)。
+1. �击 Monitoring 的**安装**。
+1. å�¯é€‰ï¼šåœ¨ Values æ¥éª¤ä¸ä¸º Alertingã€�Prometheus å’Œ Grafana 自定义请求ã€�é™�制ç‰ã€‚如需帮助,请å�‚阅[é…�ç½®å�‚考](../../../reference-guides/monitoring-v2-configuration/helm-chart-options.md)。
+
+**结果**:Monitoring 应用已部署到 `cattle-monitoring-system` 命å��空间ä¸ã€‚
+
+### 在使用 SSL 的情况下�用 Monitoring
+
+1. 按照[æ¤é¡µé�¢](../../new-user-guides/kubernetes-resources-setup/secrets.md)上的æ¥éª¤åˆ›å»ºå¯†æ–‡ï¼Œä»¥ä¾¿å°† SSL 用于告è¦ã€‚
+- 密文应该创建到 `cattle-monitoring-system` 命å��空间ä¸ã€‚如果它ä¸�å˜åœ¨ï¼Œè¯·å…ˆåˆ›å»ºå®ƒã€‚
+- å°† `ca`ã€�`cert` å’Œ `key` æ–‡ä»¶æ·»åŠ åˆ°å¯†æ–‡ä¸ã€‚
+1. 在左上角,�击 **☰ > 集群管�**。
+1. 在**集群**页�上,转到��用 Monitoring 以与 SSL 一起使用的集群,然��击 **Explore**。
+1. �击 **Apps > Charts**。
+1. �击 **Monitoring**。
+1. æ ¹æ�®ä½ 是å�¦å·²å®‰è£… Monitoring,å�•击**安装**或**æ›´æ–°**。
+1. 选ä¸**在安装å‰�自定义 Helm 选项**,然å�Žå�•击**下一æ¥**。
+1. �击 **Alerting**。
+1. 在**补充密文**å—æ®µä¸ï¼Œæ·»åР之å‰�创建的密文。
+
+**结果**:Monitoring 应用已部署到 `cattle-monitoring-system` 命å��空间ä¸ã€‚
+
+[创建接收器](../../../reference-guides/monitoring-v2-configuration/receivers.md#在-rancher-ui-ä¸åˆ›å»ºæŽ¥æ”¶å™¨)时,å�¯ç”¨ SSL 的接收器(例如电å�邮件或 webhook)将具有 **SSL**,其ä¸åŒ…å�« **CA 文件路径**ã€�**è¯�书文件路径**å’Œ**密钥文件路径**å—æ®µã€‚使用 `ca`ã€�`cert` å’Œ `key` çš„è·¯å¾„å¡«å†™è¿™äº›å—æ®µã€‚è·¯å¾„çš„æ ¼å¼�为 `/etc/alertmanager/secrets/name-of-file-in-secret`。
+
+ä¾‹å¦‚ï¼Œå¦‚æžœä½ ä½¿ç”¨ä»¥ä¸‹é”®å€¼å¯¹åˆ›å»ºäº†ä¸€ä¸ªå¯†æ–‡ï¼š
+
+```yaml
+ca.crt=`base64-content`
+cert.pem=`base64-content`
+key.pfx=`base64-content`
+```
+
+则**�书文件路径**需�设为 `/etc/alertmanager/secrets/cert.pem`。
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/monitoring-alerting-guides/prometheus-federator-guides/customize-grafana-dashboards.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/monitoring-alerting-guides/prometheus-federator-guides/customize-grafana-dashboards.md
new file mode 100644
index 00000000000..44d69d05f9e
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/monitoring-alerting-guides/prometheus-federator-guides/customize-grafana-dashboards.md
@@ -0,0 +1,7 @@
+---
+title: 自定义 Grafana 仪表�
+---
+
+æ— è®ºæ˜¯ç”¨äºŽ rancher-monitoring 还是 Prometheus Federator,Grafana 仪表æ�¿çš„定制方å¼�都是相å�Œçš„。
+
+有关说明,请å�‚阅[æ¤é¡µé�¢](../customize-grafana-dashboard.md)。
\ No newline at end of file
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/monitoring-alerting-guides/prometheus-federator-guides/enable-prometheus-federator.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/monitoring-alerting-guides/prometheus-federator-guides/enable-prometheus-federator.md
new file mode 100644
index 00000000000..c6bac839971
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/monitoring-alerting-guides/prometheus-federator-guides/enable-prometheus-federator.md
@@ -0,0 +1,86 @@
+---
+title: �用 Prometheus Federator
+---
+
+## �求
+
+默认情况下,Prometheus Federator å·²é…�置并旨在与 [rancher-monitoring](../../../../pages-for-subheaders/monitoring-and-alerting.md) 一起部署。rancher-monitoring å�Œæ—¶éƒ¨ç½²äº† Prometheus Operator å’Œ Cluster Prometheus,æ¯�ä¸ªé¡¹ç›®ç›‘æŽ§å †æ ˆï¼ˆProject Monitoring Stack)默认会è�”å�ˆå‘½å��ç©ºé—´èŒƒå›´çš„æŒ‡æ ‡ã€‚
+
+有关安装 rancher-monitoring 的说明,请å�‚阅[æ¤é¡µé�¢](../enable-monitoring.md)。
+
+默认é…�ç½®ä¸Žä½ çš„ rancher-monitoring å †æ ˆæ˜¯å…¼å®¹çš„ã€‚ä½†æ˜¯ï¼Œä¸ºäº†æ��é«˜é›†ç¾¤ä¸ Prometheus Federator 的安全性和å�¯ç”¨æ€§ï¼Œæˆ‘们建议对 rancher-monitoring 进行以下é¢�外的é…�置:
+
+- [ç¡®ä¿� cattle-monitoring-system 命å��空间ä½�于 System 项目ä¸](#ç¡®ä¿�-cattle-monitoring-system-命å��空间ä½�于-system-é¡¹ç›®ä¸æˆ–者ä½�于一个é”�定并能访问集群ä¸å…¶ä»–项目的项目ä¸)
+- [将 rancher-monitoring �置为仅监视 Helm Chart 创建的资�](#将-rancher-monitoring-�置为仅监视-helm-chart-创建的资�)
+- [æ��高 Cluster Prometheus çš„ CPU/内å˜é™�制](#æ��高-cluster-prometheus-çš„-cpu内å˜é™�制)
+
+### ç¡®ä¿� cattle-monitoring-system 命å��空间ä½�于 System 项目ä¸ï¼ˆæˆ–者ä½�于一个é”�定并能访问集群ä¸å…¶ä»–项目的项目ä¸ï¼‰
+
+
+
+Prometheus Operator 的安全模型有一定的è¦�求,å�³å¸Œæœ›éƒ¨ç½²å®ƒçš„命å��空间(例如,`cattle-monitoring-system`)对除集群管ç�†å‘˜ä¹‹å¤–的任何用户都å�ªæœ‰æœ‰é™�的访问æ�ƒé™�,从而é�¿å…�通过 Pod 内执行(例如æ£åœ¨æ‰§è¡Œçš„ Helm æ“�作的 Job)æ�¥æ��å�‡æ�ƒé™�。æ¤å¤–,如果将 Prometheus Federator 和所有 Project Prometheus å †æ ˆéƒ½éƒ¨ç½²åˆ° System 项目ä¸ï¼Œå�³ä½¿ç½‘络ç–略是通过项目网络隔离定义的,æ¯�个 Project Prometheus 都ä¾�ç„¶èƒ½å¤Ÿåœ¨æ‰€æœ‰é¡¹ç›®ä¸æŠ“å�–工作负载。它还为项目所有者ã€�项目æˆ�员和其他用户æ��供有é™�的访问æ�ƒé™�,从而确ä¿�è¿™äº›ç”¨æˆ·æ— æ³•è®¿é—®ä»–ä»¬ä¸�应访问的数æ�®ï¼ˆä¾‹å¦‚,在 pod 䏿‰§è¡Œï¼Œåœ¨é¡¹ç›®å¤–部抓å�–命å��空间数æ�®ç‰ï¼‰ã€‚
+
+1. 打开 `System` é¡¹ç›®ä»¥æ£€æŸ¥ä½ çš„å‘½å��空间:
+
+ 在 Rancher UI ä¸å�•击 **Cluster > Projects/Namespaces**。这将显示 `System` 项目ä¸çš„æ‰€æœ‰å‘½å��空间:
+
+ 
+
+1. å¦‚æžœä½ åœ¨ `cattle-monitoring-system` 命å��空间ä¸å·²ç»�安装了一个 Monitoring V2,但该命å��空间ä¸�在 `System` 项目ä¸ï¼Œä½ å�¯ä»¥å°† `cattle- monitoring-system` 命å��空间移动到 `System` 项目或å�¦ä¸€ä¸ªè®¿é—®å�—é™�的项目ä¸ã€‚为æ¤ï¼Œä½ 有以下两ç§�方法:
+
+ - 将命�空间拖放到 `System` 项目。
+ - 选择命å��空间å�³ä¾§çš„ **â‹®**,点击 **Move**,然å�Žä»Ž **Target Project** 下拉列表ä¸é€‰æ‹© `System`:
+
+ 
+
+### 将 rancher-monitoring �置为仅监视 Helm Chart 创建的资�
+
+æ¯�ä¸ªé¡¹ç›®ç›‘æŽ§å †æ ˆéƒ½ä¼šç›‘è§†å…¶ä»–å‘½å��ç©ºé—´å¹¶æ”¶é›†å…¶ä»–è‡ªå®šä¹‰å·¥ä½œè´Ÿè½½æŒ‡æ ‡æˆ–ä»ªè¡¨æ�¿ã€‚å› æ¤ï¼Œæˆ‘们建议在所有选择器上é…�置以下设置,以确ä¿� Cluster Prometheus å †æ ˆä»…ç›‘æŽ§ç”± Helm Chart 创建的资æº�:
+
+```
+matchLabels:
+ release: "rancher-monitoring"
+```
+
+å»ºè®®ä¸ºä»¥ä¸‹é€‰æ‹©å™¨å—æ®µèµ‹äºˆæ¤å€¼ï¼š
+- `.Values.alertmanager.alertmanagerSpec.alertmanagerConfigSelector`
+- `.Values.prometheus.prometheusSpec.serviceMonitorSelector`
+- `.Values.prometheus.prometheusSpec.podMonitorSelector`
+- `.Values.prometheus.prometheusSpec.ruleSelector`
+- `.Values.prometheus.prometheusSpec.probeSelector`
+
+å�¯ç”¨æ¤è®¾ç½®å�Žï¼Œä½ 始终å�¯ä»¥é€šè¿‡å�‘å®ƒä»¬æ·»åŠ `release: "rancher-monitoring"` æ ‡ç¾æ�¥åˆ›å»ºç”± Cluster Prometheus 抓å�–çš„ ServiceMonitor 或 PodMonitor。在这ç§�情况下,å�³ä½¿è¿™äº› ServiceMonitor 或 PodMonitor 所在的命å��空间ä¸�是 System 命å��ç©ºé—´ï¼Œé¡¹ç›®ç›‘æŽ§å †æ ˆä¹Ÿä¼šé»˜è®¤è‡ªåŠ¨å¿½ç•¥å®ƒä»¬ã€‚
+
+:::note
+
+å¦‚æžœä½ ä¸�希望用户能够在 Project 命å��空间ä¸åˆ›å»ºè�šå�ˆåˆ° Cluster Prometheus ä¸çš„ ServiceMonitor å’Œ PodMonitorï¼Œä½ å�¯ä»¥å�¦å¤–å°† Chart 上的 namespaceSelectors è®¾ç½®ä¸ºä»…ç›®æ ‡ System 命å��空间(必须包å�« `cattle-monitoring-system` å’Œ `cattle-dashboards`,默认情况下资æº�通过 rancher-monitoring 部署到该命å��空间ä¸ã€‚ä½ è¿˜éœ€è¦�监控 `default` 命å��空间以获å�– apiserver æŒ‡æ ‡ï¼Œæˆ–åˆ›å»ºè‡ªå®šä¹‰ ServiceMonitor 以抓å�–ä½�于 `default` 命å��空间ä¸çš„ Service çš„ apiserver æŒ‡æ ‡ï¼‰ï¼Œä»Žè€Œé™�åˆ¶ä½ çš„ Cluster Prometheus 获å�–å…¶ä»– Prometheus Operator CR。在这ç§�情况下,建议设置 `.Values.prometheus.prometheusSpec.ignoreNamespaceSelectors=true`ã€‚è¿™æ ·ï¼Œä½ å�¯ä»¥å®šä¹‰èƒ½ä»Ž System 命å��空间ä¸ç›‘视é�ž System 命å��空间的 ServiceMonitor。
+
+:::
+
+### æ��高 Cluster Prometheus çš„ CPU/内å˜é™�制
+
+æ ¹æ�®é›†ç¾¤çš„设置,我们一般建议为 Cluster Prometheus é…�置大é‡�的专用内å˜ï¼Œä»¥é�¿å…�å› å†…å˜ä¸�足的错误(OOMKilled)而é‡�å�¯ã€‚通常情况下,集群ä¸åˆ›å»ºçš„æ”¹åŠ¨é¡¹ï¼ˆchurn)会导致大é‡�é«˜åŸºæ•°æŒ‡æ ‡åœ¨ä¸€ä¸ªæ—¶é—´å�—内生æˆ�并被 Prometheus 引入,然å�Žå¯¼è‡´è¿™äº›é”™è¯¯ã€‚这也是为什么默认的 Rancher Monitoring å †æ ˆå¸Œæœ›èƒ½åˆ†é…�到大约 4GB çš„ RAM 以在æ£å¸¸å¤§å°�的集群ä¸è¿�è¡Œçš„åŽŸå› ä¹‹ä¸€ã€‚ä½†æ˜¯ï¼Œå¦‚æžœä½ å¼•å…¥å�‘å�Œä¸€ä¸ª Cluster Prometheus å�‘é€� `/federate` è¯·æ±‚çš„é¡¹ç›®ç›‘æŽ§å †æ ˆï¼Œå¹¶ä¸”é¡¹ç›®ç›‘æŽ§å †æ ˆä¾�赖于 Cluster Prometheus çš„å�¯åŠ¨çŠ¶æ€�æ�¥åœ¨å…¶å‘½å��空间上è�”å�ˆç³»ç»Ÿæ•°æ�®ï¼Œé‚£ä¹ˆä½ æ›´åŠ éœ€è¦�为 Cluster Prometheus 分é…�足够的 CPU/内å˜ï¼Œä»¥é˜²æ¢é›†ç¾¤ä¸çš„æ‰€æœ‰ Prometheus 项目出现数æ�®é—´éš™çš„䏿–。
+
+:::note
+
+我们没有 Cluster Prometheus 内å˜é…�ç½®çš„å…·ä½“å»ºè®®ï¼Œå› ä¸ºè¿™å®Œå…¨å�–决于用户的设置(å�³é�‡åˆ°é«˜æ”¹åŠ¨çŽ‡çš„å�¯èƒ½æ€§ä»¥å�Šå�¯èƒ½å�Œæ—¶ç”Ÿæˆ�çš„æŒ‡æ ‡çš„è§„æ¨¡ï¼‰ã€‚ä¸�å�Œçš„设置通常有ä¸�å�Œçš„æŽ¨è��å�‚数。
+
+:::
+
+## 安装 Prometheus Federator 应用程�
+
+1. 点击 **☰ > 集群管�**。
+1. 转到�安装 Prometheus Federator 的集群,然��击 **Explore**。
+1. 点击**应用 > Charts**。
+1. �击 **Prometheus Federator** Chart。
+1. �击**安装**。
+1. 在**元数æ�®**页é�¢ï¼Œç‚¹å‡»**下一æ¥**。
+1. 在**命å��空间** > **项目 Release 命å��空间项目 ID** å—æ®µä¸ï¼Œ`System 项目`æ˜¯é»˜è®¤å€¼ï¼Œä½†ä½ å�¯ä»¥ä½¿ç”¨å…·æœ‰ç±»ä¼¼[有é™�访问æ�ƒé™�](#ç¡®ä¿�-cattle-monitoring-system-命å��空间ä½�于-system-é¡¹ç›®ä¸æˆ–者ä½�于一个é”�定并能访问集群ä¸å…¶ä»–项目的项目ä¸)çš„å�¦ä¸€ä¸ªé¡¹ç›®è¦†ç›–å®ƒã€‚ä½ å�¯ä»¥åœ¨ local 上游集群ä¸è¿�行以下命令æ�¥æ‰¾åˆ°é¡¹ç›® ID:
+
+```plain
+kubectl get projects -A -o custom-columns="NAMESPACE":.metadata.namespace,"ID":.metadata.name,"NAME":.spec.displayName
+```
+
+1. �击**安装**。
+
+**结果**:Prometheus Federator 应用程åº�已部署在 `cattle-monitoring-system` 命å��空间ä¸ã€‚
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/monitoring-alerting-guides/prometheus-federator-guides/project-monitors.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/monitoring-alerting-guides/prometheus-federator-guides/project-monitors.md
new file mode 100644
index 00000000000..9dba3d6d401
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/monitoring-alerting-guides/prometheus-federator-guides/project-monitors.md
@@ -0,0 +1,17 @@
+---
+title: 安装 Project Monitor
+---
+
+在è¦�å�¯ç”¨é¡¹ç›®ç›‘控的å�„个项目ä¸å®‰è£… **Project Monitor**。
+
+1. 点击 **☰ > 集群管�**。
+
+1. 在**集群**页é�¢ä¸ï¼Œè½¬åˆ°è¦�å�¯ç”¨ç›‘控的集群,然å�Žå�•击 **Explore**。
+
+1. å�•击左侧导航æ �上的**监控 > Project Monitor**。然å�Žï¼Œç‚¹å‡»å�³ä¸Šè§’çš„**创建**。
+
+ 
+
+1. 从下拉è�œå�•ä¸é€‰æ‹©ä½ 的项目,然å�Žå†�次å�•击**创建**。
+
+ 
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/monitoring-alerting-guides/prometheus-federator-guides/set-up-workloads.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/monitoring-alerting-guides/prometheus-federator-guides/set-up-workloads.md
new file mode 100644
index 00000000000..10aaf5d95b7
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/monitoring-alerting-guides/prometheus-federator-guides/set-up-workloads.md
@@ -0,0 +1,13 @@
+---
+title: 为工作负载设置 Prometheus Federator
+---
+
+### 显示工作负载的 CPU å’Œå†…å˜æŒ‡æ ‡
+
+使用 Prometheus Federator 显示 CPU å’Œå†…å˜æŒ‡æ ‡çš„æ–¹å¼�与使用 rancher-monitoring 相å�Œã€‚有关说明,请å�‚阅[æ¤å¤„](../set-up-monitoring-for-workloads.md#显示工作负载的-cpu-å’Œå†…å˜æŒ‡æ ‡)。
+
+### 设置 CPU 和内å˜ä¹‹å¤–çš„æŒ‡æ ‡
+
+使用 Prometheus Federator 设置 CPU 和内å˜ä¹‹å¤–çš„æŒ‡æ ‡ä¸Žä½¿ç”¨ rancher-monitoring 的方å¼�相å�Œã€‚有关说明,请å�‚阅[æ¤å¤„](../set-up-monitoring-for-workloads.md#设置-cpu-和内å˜ä¹‹å¤–çš„æŒ‡æ ‡)。
+
+
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/monitoring-alerting-guides/prometheus-federator-guides/uninstall-prometheus-federator.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/monitoring-alerting-guides/prometheus-federator-guides/uninstall-prometheus-federator.md
new file mode 100644
index 00000000000..c6b04a736bb
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/monitoring-alerting-guides/prometheus-federator-guides/uninstall-prometheus-federator.md
@@ -0,0 +1,13 @@
+---
+title: �载 Prometheus Federator
+---
+
+1. 点击 **☰ > 集群管�**。
+1. é€‰æ‹©ä½ åˆ›å»ºçš„é›†ç¾¤ï¼Œå¹¶ç‚¹å‡» **Explore**。
+1. 在左侧导航æ �ä¸ï¼Œç‚¹å‡» **Apps**。
+1. 点击**已安装的应用**。
+1. 转到 `cattle-monitoring-system` 命å��ç©ºé—´å¹¶é€‰ä¸ `rancher-monitoring-crd` å’Œ `rancher-monitoring`。
+1. å�•击**åˆ é™¤**。
+1. 确认**åˆ é™¤**。
+
+**结果**:已�载 `prometheus-federator`。
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/monitoring-alerting-guides/set-up-monitoring-for-workloads.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/monitoring-alerting-guides/set-up-monitoring-for-workloads.md
new file mode 100644
index 00000000000..7ab5dd36f79
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/monitoring-alerting-guides/set-up-monitoring-for-workloads.md
@@ -0,0 +1,27 @@
+---
+title: 为工作负载设置 Monitoring
+---
+
+å¦‚æžœä½ å�ªéœ€è¦�工作负载的 CPU å’Œå†…å˜æ—¶é—´åº�列,则ä¸�需è¦�部署 ServiceMonitor 或 PodMonitorï¼Œå› ä¸º Monitoring 应用默认会收集资æº�ä½¿ç”¨æƒ…å†µçš„æŒ‡æ ‡æ•°æ�®ã€‚
+
+设置工作负载监控的æ¥éª¤å�–å†³äºŽä½ æ˜¯å�¦éœ€è¦�åŸºæœ¬æŒ‡æ ‡ï¼ˆä¾‹å¦‚å·¥ä½œè´Ÿè½½çš„ CPU 和内å˜ï¼‰ï¼Œæˆ–者是å�¦éœ€è¦�ä»Žå·¥ä½œè´Ÿè½½ä¸æŠ“å�–è‡ªå®šä¹‰æŒ‡æ ‡ã€‚
+
+å¦‚æžœä½ å�ªéœ€è¦�工作负载的 CPU å’Œå†…å˜æ—¶é—´åº�列,则ä¸�需è¦�部署 ServiceMonitor 或 PodMonitorï¼Œå› ä¸º Monitoring 应用默认会收集资æº�ä½¿ç”¨æƒ…å†µçš„æŒ‡æ ‡æ•°æ�®ã€‚资æº�使用的时间åº�列数æ�®åœ¨ Prometheus 的本地时间åº�列数æ�®åº“ä¸ã€‚
+
+Grafana 显示è�šå�ˆæ•°æ�®ï¼Œä½ 也å�¯ä»¥ä½¿ç”¨ PromQL 查询æ�¥æŸ¥çœ‹å�•个工作负载的数æ�®ã€‚进行 PromQL 查询å�Žï¼Œä½ å�¯ä»¥åœ¨ Prometheus UI ä¸å�•独执行查询并查看å�¯è§†åŒ–的时间åº�åˆ—ï¼Œä½ ä¹Ÿå�¯ä»¥ä½¿ç”¨æŸ¥è¯¢æ�¥è‡ªå®šä¹‰æ˜¾ç¤ºå·¥ä½œè´Ÿè½½æŒ‡æ ‡çš„ Grafana 仪表æ�¿ã€‚æœ‰å…³å·¥ä½œè´Ÿè½½æŒ‡æ ‡çš„ PromQL 查询示例,请å�‚阅[本节](../../../integrations-in-rancher/monitoring-and-alerting/promql-expressions.md#å·¥ä½œè´Ÿè½½æŒ‡æ ‡)。
+
+è¦�ä¸ºä½ çš„å·¥ä½œè´Ÿè½½è®¾ç½®è‡ªå®šä¹‰æŒ‡æ ‡ï¼Œä½ éœ€è¦�设置一个 Exporter 并创建一个新的 ServiceMonitor 自定义资æº�,从而将 Prometheus é…�置为从 Exporter 䏿Гå�–æŒ‡æ ‡ã€‚
+
+### 显示工作负载的 CPU å’Œå†…å˜æŒ‡æ ‡
+
+默认情况下,Monitoring 应用会抓å�– CPU å’Œå†…å˜æŒ‡æ ‡ã€‚
+
+è¦�获å�–特定工作负载的细粒度信æ�¯ï¼Œä½ å�¯ä»¥è‡ªå®šä¹‰ Grafana 仪表æ�¿æ�¥æ˜¾ç¤ºè¯¥å·¥ä½œè´Ÿè½½çš„æŒ‡æ ‡ã€‚
+
+### 设置 CPU 和内å˜ä¹‹å¤–çš„æŒ‡æ ‡
+
+å¯¹äºŽè‡ªå®šä¹‰æŒ‡æ ‡ï¼Œä½ éœ€è¦�使用 Prometheus 支æŒ�çš„æ ¼å¼�æ�¥å…¬å¼€åº”ç”¨ä¸Šçš„æŒ‡æ ‡ã€‚
+
+æˆ‘ä»¬å»ºè®®ä½ åˆ›å»ºä¸€ä¸ªæ–°çš„ ServiceMonitor 自定义资æº�。创建æ¤èµ„æº�时,Prometheus 自定义资æº�å°†è‡ªåŠ¨æ›´æ–°ï¼Œä»¥ä¾¿å°†æ–°çš„è‡ªå®šä¹‰æŒ‡æ ‡ç«¯ç‚¹åŒ…å�«åœ¨æŠ“å�–é…�ç½®ä¸ã€‚ç„¶å�Ž Prometheus 会开始从端点抓å�–æŒ‡æ ‡ã€‚
+
+ä½ è¿˜å�¯ä»¥åˆ›å»º PodMonitor æ�¥å…¬å¼€è‡ªå®šä¹‰æŒ‡æ ‡ç«¯ç‚¹ï¼Œä½† ServiceMonitor 更适å�ˆå¤§å¤šæ•°ç”¨ä¾‹ã€‚
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/monitoring-alerting-guides/uninstall-monitoring.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/monitoring-alerting-guides/uninstall-monitoring.md
new file mode 100644
index 00000000000..06845311909
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/monitoring-alerting-guides/uninstall-monitoring.md
@@ -0,0 +1,19 @@
+---
+title: �载 Monitoring
+---
+
+1. 点击 **☰ > 集群管�**。
+1. é€‰æ‹©ä½ åˆ›å»ºçš„é›†ç¾¤ï¼Œå¹¶ç‚¹å‡» **Explore**。
+1. 在左侧导航æ �ä¸ï¼Œç‚¹å‡» **Apps**。
+1. 点击**已安装的应用**。
+1. 转到 `cattle-monitoring-system` 命å��ç©ºé—´å¹¶é€‰ä¸ `rancher-monitoring-crd` å’Œ `rancher-monitoring`。
+1. å�•击**åˆ é™¤**。
+1. 确认**åˆ é™¤**。
+
+**结果**:已�载 `rancher-monitoring`。
+
+:::note �久化 Grafana 仪表�:
+
+å¦‚æžœä½ çš„ Monitoring V2 版本是 v9.4.203 或更低版本,å�¸è½½ Monitoring chart å°†å�Œæ—¶åˆ 除 cattle-dashboards 命å��空间,所有æŒ�久化的仪表æ�¿å°†è¢«åˆ 除(除é�žå‘½å��空间带有注释 `helm.sh/resource-policy: "keep"`)。Monitoring V2 v14.5.100+ ä¼šé»˜è®¤æ·»åŠ æ¤æ³¨é‡Šã€‚ä½†å¦‚æžœä½ çš„é›†ç¾¤ä¸Šå®‰è£…äº†æ—§ç‰ˆæœ¬çš„ Monitoring Chartï¼Œä½ å�¯ä»¥åœ¨å�¸è½½å®ƒä¹‹å‰�手动将注释应用到 cattle-dashboards 命å��空间。
+
+:::
\ No newline at end of file
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/monitoring-v2-configuration-guides/advanced-configuration/alertmanager.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/monitoring-v2-configuration-guides/advanced-configuration/alertmanager.md
new file mode 100644
index 00000000000..77851a3accb
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/monitoring-v2-configuration-guides/advanced-configuration/alertmanager.md
@@ -0,0 +1,43 @@
+---
+title: Alertmanager �置
+---
+
+é€šå¸¸æƒ…å†µä¸‹ï¼Œä½ ä¸�需è¦�直接编辑 Alertmanager 自定义资æº�。对于大多数用例,å�ªéœ€è¦�编辑接收器和路由å�³å�¯é…�置通知。
+
+当路由和接收器更新时,Monitoring 应用将自动更新 Alertmanager 自定义资��与这些更改��一致。
+
+:::note
+
+本节å�‚考å�‡è®¾ä½ å·²ç»�熟悉 Monitoring 组件的å��å�Œå·¥ä½œæ–¹å¼�。有关 Alertmanager 的详细信æ�¯ï¼Œè¯·å�‚阅[本节](../../../../integrations-in-rancher/monitoring-and-alerting/how-monitoring-works.md#3-alertmanager-的工作原ç�†)。
+
+:::
+
+## 关于 Alertmanager 自定义资�
+
+默认情况下,Rancher Monitoring 将�个 Alertmanager 部署到使用默认 Alertmanager Config Secret 的集群上。
+
+å¦‚æžœä½ æƒ³ä½¿ç”¨ Rancher UI 表å�•䏿œªå…¬å¼€çš„é«˜çº§é€‰é¡¹ï¼ˆä¾‹å¦‚åˆ›å»ºè¶…è¿‡ä¸¤å±‚æ·±çš„è·¯ç”±æ ‘ç»“æž„ï¼‰ï¼Œä½ å�¯èƒ½éœ€è¦�编辑 Alertmanager 自定义资æº�。
+
+ä½ ä¹Ÿå�¯ä»¥åœ¨é›†ç¾¤ä¸åˆ›å»ºå¤šä¸ª Alertmanager æ�¥å®žçް命å��空间范围的监控。在这ç§�æƒ…å†µä¸‹ï¼Œä½ åº”è¯¥ä½¿ç”¨ç›¸å�Œçš„底层 Alertmanager Config Secret æ�¥ç®¡ç�† Alertmanager 自定义资æº�。
+
+### 深度嵌套的路由
+
+虽然 Rancher UI 仅支æŒ�ä¸¤å±‚æ·±åº¦çš„è·¯ç”±æ ‘ï¼Œä½†ä½ å�¯ä»¥é€šè¿‡ç¼–辑 Alertmanager YAML æ�¥é…�置更深的嵌套路由结构。
+
+### 多个 Alertmanager 副本
+
+作为 Chart éƒ¨ç½²é€‰é¡¹çš„ä¸€éƒ¨åˆ†ï¼Œä½ å�¯ä»¥é€‰æ‹©å¢žåŠ éƒ¨ç½²åˆ°é›†ç¾¤ä¸Šçš„ Alertmanager 副本的数é‡�。这些副本使用相å�Œçš„底层 Alertmanager Config Secret 进行管ç�†ã€‚
+
+æ¤ Secret å�¯ä»¥æŒ‰ç…§ä½ 的需求éš�时更新或修改:
+
+- æ·»åŠ æ–°çš„é€šçŸ¥ç¨‹åº�或接收器
+- 更改应该å�‘é€�给指定通知程åº�或接收器的告è¦
+- 更改å�‘出的告è¦ç»„
+
+é»˜è®¤æƒ…å†µä¸‹ï¼Œä½ å�¯ä»¥é€‰æ‹©æ��供现有的 Alertmanager Config Secret(å�³ `cattle-monitoring-system` 命å��空间ä¸çš„任何 Secret),或å…�许 Rancher Monitoring 将默认的 Alertmanager Config Secret éƒ¨ç½²åˆ°ä½ çš„é›†ç¾¤ä¸Šã€‚
+
+默认情况下,在å�‡çº§æˆ–å�¸è½½ `rancher-monitoring` Chart 时,Rancher 创建的 Alertmanager Config Secret ä¸�ä¼šè¢«ä¿®æ”¹æˆ–åˆ é™¤ã€‚è¿™ä¸ªé™�制å�¯ä»¥é˜²æ¢ç”¨æˆ·åœ¨ Chart 上执行æ“�作时丢失或覆盖他们的告è¦é…�置。
+
+有关å�¯ä»¥åœ¨ Alertmanager Config Secret 䏿Œ‡å®šçš„å—æ®µçš„æ›´å¤šä¿¡æ�¯ï¼Œè¯·æŸ¥çœ‹ [Prometheus Alertmanager 文档](https://prometheus.io/docs/alerting/latest/alertmanager/)。
+
+ä½ å�¯ä»¥åœ¨[æ¤å¤„](https://prometheus.io/docs/alerting/latest/configuration/#configuration-file)找到 Alertmanager é…�置文件的完整规范å�Šå…¶å†…容。
\ No newline at end of file
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/monitoring-v2-configuration-guides/advanced-configuration/prometheus.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/monitoring-v2-configuration-guides/advanced-configuration/prometheus.md
new file mode 100644
index 00000000000..b83ad90b748
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/monitoring-v2-configuration-guides/advanced-configuration/prometheus.md
@@ -0,0 +1,19 @@
+---
+title: Prometheus �置
+---
+
+é€šå¸¸æƒ…å†µä¸‹ï¼Œä½ ä¸�需è¦�直接编辑 Prometheus 自定义资æº�ï¼Œå› ä¸º Monitoring åº”ç”¨ä¼šæ ¹æ�® ServiceMonitor å’Œ PodMonitor 的更改自动更新资æº�。
+
+:::note
+
+本节å�‚考å�‡è®¾ä½ å·²ç»�熟悉 Monitoring 组件的å��å�Œå·¥ä½œæ–¹å¼�。有关详细信æ�¯ï¼Œè¯·å�‚阅[本节](../../../../integrations-in-rancher/monitoring-and-alerting/how-monitoring-works.md)。
+
+:::
+
+## 关于 Prometheus 自定义资�
+
+Prometheus CR 定义了所需的 Prometheus deployment。Prometheus Operator 会观察 Prometheus CR。当 CR å�‘生å�˜åŒ–时,Prometheus Operator 会创建 `prometheus-rancher-monitoring-prometheus`,å�³æ ¹æ�® CR é…�置的 Prometheus deployment。
+
+Prometheus CR 指定了详细信æ�¯ï¼Œä¾‹å¦‚规则以å�Šè¿žæŽ¥åˆ° Prometheus çš„ Alertmanager。Rancher ä¼šä¸ºä½ æž„å»ºè¿™ä¸ª CR。
+
+Monitoring V2 仅支æŒ�æ¯�个集群一个 Prometheusã€‚å¦‚æžœä½ æƒ³å°†ç›‘æŽ§é™�制到指定命å��ç©ºé—´ï¼Œä½ éœ€è¦�编辑 Prometheus CR。
\ No newline at end of file
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/monitoring-v2-configuration-guides/advanced-configuration/prometheusrules.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/monitoring-v2-configuration-guides/advanced-configuration/prometheusrules.md
new file mode 100644
index 00000000000..fc12de7e488
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/monitoring-v2-configuration-guides/advanced-configuration/prometheusrules.md
@@ -0,0 +1,80 @@
+---
+title: �置 PrometheusRule
+---
+
+PrometheusRule 定义了一组 Prometheus 告è¦å’Œ/或记录规则。
+
+:::note
+
+本节å�‚考å�‡è®¾ä½ å·²ç»�熟悉 Monitoring 组件的å��å�Œå·¥ä½œæ–¹å¼�。有关详细信æ�¯ï¼Œè¯·å�‚阅[本节](../../../../integrations-in-rancher/monitoring-and-alerting/how-monitoring-works.md)。
+
+:::
+
+### 在 Rancher UI ä¸åˆ›å»º PrometheusRule
+
+:::note 先决�件:
+
+已安装 Monitoring 应用。
+
+:::
+
+è¦�在 Rancher UI ä¸åˆ›å»ºè§„则组:
+
+1. 转到�创建规则组的集群。�击**监控 > 高级选项**,然��击 **PrometheusRules**。
+1. �击**创建**。
+1. 输入**组�称**。
+1. é…�置规则。在 Rancher çš„ UI ä¸ï¼Œè§„则组需è¦�包å�«å‘Šè¦è§„则或记录规则,但ä¸�能å�Œæ—¶åŒ…å�«ä¸¤è€…。如需获å�–填写表å�•的帮助,请å�‚阅下方的é…�置选项。
+1. �击**创建**。
+
+**结果**:告è¦å�¯ä»¥å�‘接收器å�‘é€�通知。
+
+### 关于 PrometheusRule 自定义资�
+
+å½“ä½ å®šä¹‰è§„åˆ™æ—¶ï¼ˆåœ¨ PrometheusRule 资æº�çš„ RuleGroup ä¸å£°æ˜Žï¼‰ï¼Œ[规则本身的规范](https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#rule)会包å�«æ ‡ç¾ï¼Œç„¶å�Ž Alertmanager ä¼šä½¿ç”¨è¿™äº›æ ‡ç¾æ�¥ç¡®å®šæŽ¥æ”¶æ¤å‘Šè¦çš„è·¯ç”±ã€‚ä¾‹å¦‚ï¼Œæ ‡ç¾ä¸º `team: front-end` 的告è¦å°†â€‹â€‹å�‘é€�åˆ°ä¸Žè¯¥æ ‡ç¾åŒ¹é…�的所有路由。
+
+Prometheus 规则文件ä¿�å˜åœ¨ PrometheusRule 自定义资æº�ä¸ã€‚PrometheusRule 支æŒ�定义一个或多个 RuleGroup。æ¯�个 RuleGroup 由一组 Rule 对象组æˆ�,æ¯�个 Rule 对象å�‡èƒ½è¡¨ç¤ºå‘Šè¦æˆ–è®°å½•è§„åˆ™ï¼Œå¹¶å…·æœ‰ä»¥ä¸‹å—æ®µï¼š
+
+- æ–°å‘Šè¦æˆ–记录的å��ç§°
+- æ–°å‘Šè¦æˆ–记录的 PromQL 表达å¼�
+- ç”¨äºŽæ ‡è®°å‘Šè¦æˆ–è®°å½•çš„æ ‡ç¾ï¼ˆä¾‹å¦‚集群å��称或严é‡�性)
+- 对需è¦�在告è¦é€šçŸ¥ä¸Šæ˜¾ç¤ºçš„å…¶ä»–é‡�è¦�ä¿¡æ�¯è¿›è¡Œç¼–ç �的注释(例如摘è¦�ã€�æ��è¿°ã€�消æ�¯ã€�Runbook URL ç‰ï¼‰ã€‚记录规则ä¸�需è¦�æ¤å—段。
+
+有关å�¯ä»¥æŒ‡å®šçš„å—æ®µçš„æ›´å¤šä¿¡æ�¯ï¼Œè¯·æŸ¥çœ‹ [Prometheus Operator 规范。](https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#prometheusrulespec)
+
+ä½ å�¯ä»¥ä½¿ç”¨ Prometheus 对象ä¸çš„æ ‡ç¾é€‰æ‹©å™¨å—段 `ruleSelector` æ�¥å®šä¹‰è¦�挂载到 Prometheus 的规则文件。
+
+如需查看示例,请å�‚阅 Prometheus 文档ä¸çš„[记录规则](https://prometheus.io/docs/prometheus/latest/configuration/recording_rules/)å’Œ[告è¦è§„则](https://prometheus.io/docs/prometheus/latest/configuration/alerting_rules/)。
+
+## �置
+
+### 规则组
+
+| å—æ®µ | æ��è¿° |
+|-------|----------------|
+| 组å��ç§° | 组的å��称。在规则文件ä¸å¿…须是唯一的。 |
+| 覆盖组间隔 | 组ä¸è§„则的评估时间间隔(å�•ä½�:秒)。 |
+
+
+### 告è¦è§„则
+
+[告è¦è§„则](https://prometheus.io/docs/prometheus/latest/configuration/alerting_rules/)å�¯ä»¥è®©ä½ æ ¹æ�® PromQL(Prometheus 查询è¯è¨€ï¼‰è¡¨è¾¾å¼�æ�¥å®šä¹‰å‘Šè¦æ�¡ä»¶ï¼Œå¹¶å°†è§¦å�‘告è¦çš„通知å�‘é€�到外部æœ�务。
+
+| å—æ®µ | æ��è¿° |
+|-------|----------------|
+| 告è¦å��ç§° | 告è¦çš„å��ç§°ã€‚å¿…é¡»æ˜¯æœ‰æ•ˆçš„æ ‡ç¾å€¼ã€‚ |
+| 告è¦è§¦å�‘ç‰å¾…æ—¶é—´ | 时长,以秒为å�•ä½�。当告è¦è§¦å�‘时间到达该指定时长时,则视为触å�‘ã€‚å½“å‘Šè¦æœªè§¦å�‘足够长的时间,则视为待处ç�†ã€‚ |
+| PromQL 表达å¼� | è¦�评估的 PromQL 表达å¼�。Prometheus 将在æ¯�ä¸ªè¯„ä¼°å‘¨æœŸè¯„ä¼°æ¤ PromQL 表达å¼�的当å‰�值,并且所有生æˆ�的时间åº�列都将æˆ�为待处ç�†/触å�‘告è¦ã€‚有关详细信æ�¯ï¼Œè¯·å�‚阅 [Prometheus 文档](https://prometheus.io/docs/prometheus/latest/querying/basics/)或我们的 [PromQL 表达å¼�示例](../../../../integrations-in-rancher/monitoring-and-alerting/promql-expressions.md)。 |
+| Labels | 为æ¯�ä¸ªå‘Šè¦æ·»åŠ æˆ–è¦†ç›–çš„æ ‡ç¾ã€‚ |
+| 严é‡�程度 | å�¯ç”¨å�Žï¼Œæ ‡ç¾â€‹â€‹ä¼šé™„åŠ åˆ°å‘Šè¦æˆ–记录ä¸ï¼Œè¿™äº›æ ‡ç¾é€šè¿‡ä¸¥é‡�程度æ�¥æ ‡è¯†å‘Šè¦/记录。 |
+| 严�程度 Label 值 | Critical,warning 或 none |
+| 注释 | 注释是一组信æ�¯æ ‡ç¾ï¼Œå�¯ç”¨äºŽå˜å‚¨æ›´é•¿çš„é™„åŠ ä¿¡æ�¯ï¼Œä¾‹å¦‚å‘Šè¦æ��述或 Runbook 链接。[Runbook](https://en.wikipedia.org/wiki/Runbook) 是一组有关如何处ç�†å‘Šè¦çš„æ–‡æ¡£ã€‚注释值å�¯ä»¥æ˜¯[模æ�¿åŒ–](https://prometheus.io/docs/prometheus/latest/configuration/alerting_rules/#templating)的。 |
+
+### 记录规则
+
+[记录规则](https://prometheus.io/docs/prometheus/latest/configuration/recording_rules/#recording-rules)å…�è®¸ä½ é¢„å…ˆè®¡ç®—å¸¸ç”¨æˆ–è®¡ç®—é‡�大的 PromQL(Prometheus 查询è¯è¨€ï¼‰è¡¨è¾¾å¼�,并将其结果ä¿�å˜ä¸ºä¸€ç»„新的时间åº�列。
+
+| å—æ®µ | æ��è¿° |
+|-------|----------------|
+| æ—¶é—´åº�列å��ç§° | è¦�输出的时间åº�列的å��ç§°ã€‚å¿…é¡»æ˜¯æœ‰æ•ˆçš„æŒ‡æ ‡å��称。 |
+| PromQL 表达å¼� | è¦�评估的 PromQL 表达å¼�。Prometheus 将在æ¯�ä¸ªè¯„ä¼°å‘¨æœŸè¯„ä¼°æ¤ PromQL 表达å¼�的当å‰�值,并且将结果记录为一组新的时间åº�åˆ—ï¼Œå…¶æŒ‡æ ‡å��称由“记录â€�指定。有关表达å¼�的更多信æ�¯ï¼Œè¯·å�‚阅 [Prometheus 文档](https://prometheus.io/docs/prometheus/latest/querying/basics/)或我们的 [PromQL 表达å¼�示例](../../../../integrations-in-rancher/monitoring-and-alerting/promql-expressions.md)。 |
+| Labels | 在å˜å‚¨ç»“果之å‰�è¦�æ·»åŠ æˆ–è¦†ç›–çš„æ ‡ç¾ã€‚ |
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/open-ports-with-firewalld.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/open-ports-with-firewalld.md
new file mode 100644
index 00000000000..7e43c7234b2
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/open-ports-with-firewalld.md
@@ -0,0 +1,107 @@
+---
+title: 使用 firewalld 打开端�
+---
+
+> 我们建议ç¦�用 firewalldã€‚å¦‚æžœä½ ä½¿ç”¨çš„æ˜¯ Kubernetes 1.19 æˆ–æ›´é«˜ç‰ˆæœ¬ï¼Œåˆ™å¿…é¡»å…³é— firewalld。
+
+æŸ�些 [æº�自 RHEL](https://en.wikipedia.org/wiki/Red_Hat_Enterprise_Linux#Rebuilds) çš„ Linux å�‘行版(包括 Oracle Linux)的默认防ç�«å¢™è§„则å�¯èƒ½ä¼šé˜»æ¢ä¸Ž Helm 的通信。
+
+例如,AWS ä¸çš„一个 Oracle Linux 镜åƒ�具有 REJECT è§„åˆ™ï¼Œè¿™äº›è§„åˆ™ä¼šé˜»æ¢ Helm 与 Tiller 通信:
+
+```
+Chain INPUT (policy ACCEPT)
+target prot opt source destination
+ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
+ACCEPT icmp -- anywhere anywhere
+ACCEPT all -- anywhere anywhere
+ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
+REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
+
+Chain FORWARD (policy ACCEPT)
+target prot opt source destination
+REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
+
+Chain OUTPUT (policy ACCEPT)
+target prot opt source destination
+```
+
+ä½ å�¯è¿�行以下命令检查默认防ç�«å¢™è§„则:
+
+```
+sudo iptables --list
+```
+
+下文介ç»�如何使用 `firewalld`,将[防ç�«å¢™ç«¯å�£è§„则](../../pages-for-subheaders/installation-requirements.md#端å�£è¦�求)应用到高å�¯ç”¨ Rancher Server 集群ä¸çš„节点。
+
+## 先决�件
+
+安装 v7.x 或更高版本的 `firewalld`:
+
+```
+yum install firewalld
+systemctl start firewalld
+systemctl enable firewalld
+```
+
+## 应用防�墙端�规则
+
+在 Rancher 高å�¯ç”¨å®‰è£…ä¸ï¼ŒRancher Server 设置在三个节点上,三个节点å�‡å…·æœ‰ Kubernetes 的所有三个角色(etcdã€�controlplane å’Œ workerï¼‰ã€‚å¦‚æžœä½ çš„ Rancher Server 节点å�Œæ—¶å…·æœ‰è¿™ä¸‰ä¸ªè§’色,请在æ¯�个节点上è¿�行以下命令:
+
+```
+firewall-cmd --permanent --add-port=22/tcp
+firewall-cmd --permanent --add-port=80/tcp
+firewall-cmd --permanent --add-port=443/tcp
+firewall-cmd --permanent --add-port=2376/tcp
+firewall-cmd --permanent --add-port=2379/tcp
+firewall-cmd --permanent --add-port=2380/tcp
+firewall-cmd --permanent --add-port=6443/tcp
+firewall-cmd --permanent --add-port=8472/udp
+firewall-cmd --permanent --add-port=9099/tcp
+firewall-cmd --permanent --add-port=10250/tcp
+firewall-cmd --permanent --add-port=10254/tcp
+firewall-cmd --permanent --add-port=30000-32767/tcp
+firewall-cmd --permanent --add-port=30000-32767/udp
+```
+å¦‚æžœä½ çš„ Rancher Server 节点é…�置了å�•ç‹¬çš„è§’è‰²ï¼Œè¯·æ ¹æ�®èŠ‚ç‚¹è§’è‰²è¿�行以下命令:
+
+```
+# 在 etcd 节点上�行以下命令:
+firewall-cmd --permanent --add-port=2376/tcp
+firewall-cmd --permanent --add-port=2379/tcp
+firewall-cmd --permanent --add-port=2380/tcp
+firewall-cmd --permanent --add-port=8472/udp
+firewall-cmd --permanent --add-port=9099/tcp
+firewall-cmd --permanent --add-port=10250/tcp
+
+# 在 controlplane 节点上�行以下命令:
+firewall-cmd --permanent --add-port=80/tcp
+firewall-cmd --permanent --add-port=443/tcp
+firewall-cmd --permanent --add-port=2376/tcp
+firewall-cmd --permanent --add-port=6443/tcp
+firewall-cmd --permanent --add-port=8472/udp
+firewall-cmd --permanent --add-port=9099/tcp
+firewall-cmd --permanent --add-port=10250/tcp
+firewall-cmd --permanent --add-port=10254/tcp
+firewall-cmd --permanent --add-port=30000-32767/tcp
+firewall-cmd --permanent --add-port=30000-32767/udp
+
+# 在 worker 节点上�行以下命令:
+firewall-cmd --permanent --add-port=22/tcp
+firewall-cmd --permanent --add-port=80/tcp
+firewall-cmd --permanent --add-port=443/tcp
+firewall-cmd --permanent --add-port=2376/tcp
+firewall-cmd --permanent --add-port=8472/udp
+firewall-cmd --permanent --add-port=9099/tcp
+firewall-cmd --permanent --add-port=10250/tcp
+firewall-cmd --permanent --add-port=10254/tcp
+firewall-cmd --permanent --add-port=30000-32767/tcp
+firewall-cmd --permanent --add-port=30000-32767/udp
+```
+
+在节点上�行 `firewall-cmd` 命令�,使用以下命令�用防�墙规则:
+
+```
+firewall-cmd --reload
+```
+
+**结果**:防ç�«å¢™å·²æ›´æ–°ï¼Œå› æ¤ Helm å�¯ä»¥ä¸Ž Rancher Server 节点通信了。
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/tune-etcd-for-large-installs.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/tune-etcd-for-large-installs.md
new file mode 100644
index 00000000000..6cadea62ced
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/advanced-user-guides/tune-etcd-for-large-installs.md
@@ -0,0 +1,39 @@
+---
+title: 为大型安装进行 etcd 调优
+---
+
+å½“ä½ è¿�行具有 15 个或更多集群的大型 Rancher å®‰è£…æ—¶ï¼Œæˆ‘ä»¬å»ºè®®ä½ æ‰©å¤§ etcd 的默认 keyspace(默认为 2GBï¼‰ã€‚ä½ æœ€å¤§å�¯ä»¥å°†å®ƒè®¾ç½®ä¸º 8GB。æ¤å¤–,请确ä¿�主机有足够的 RAM æ�¥ä¿�å˜æ•´ä¸ªæ•°æ�®é›†ã€‚如果需è¦�å¢žåŠ è¿™ä¸ªå€¼ï¼Œä½ è¿˜éœ€è¦�å�Œæ¥å¢žåŠ ä¸»æœºçš„å¤§å°�ã€‚å¦‚æžœä½ é¢„è®¡åœ¨åžƒåœ¾å›žæ”¶é—´éš”æœŸé—´ Pod çš„å�˜åŒ–çŽ‡å¾ˆé«˜ï¼Œä½ ä¹Ÿå�¯ä»¥åœ¨è¾ƒå°�的安装ä¸è°ƒæ•´ Keyspace 大å°�。
+
+Kubernetes æ¯�隔五分钟会自动清ç�† etcd æ•°æ�®é›†ã€‚在æŸ�些情况下(例如å�‘生部署抖动),在垃圾回收å�‘生并进行清ç�†ä¹‹å‰�会有大é‡�事件写入 etcd å¹¶åˆ é™¤ï¼Œä»Žè€Œå¯¼è‡´ Keyspace å¡«æ»¡ã€‚å¦‚æžœä½ åœ¨ etcd 日志或 Kubernetes API Server 日志ä¸çœ‹åˆ° `mvcc: database space exceeded` é”™è¯¯ï¼Œä½ å�¯ä»¥åœ¨ etcd æœ�务器上设置 [quota-backend-bytes](https://etcd.io/docs/v3.4.0/op-guide/maintenance/#space-quota) æ�¥å¢žåŠ Keyspace 的大å°�。
+
+### ç¤ºä¾‹ï¼šæ¤ RKE cluster.yml 文件的代ç �片段将 Keyspace 的大å°�å¢žåŠ åˆ° 5GB
+
+```yaml
+# RKE cluster.yml
+---
+services:
+ etcd:
+ extra_args:
+ quota-backend-bytes: 5368709120
+```
+
+## 扩展 etcd �盘性能
+
+ä½ å�¯ä»¥å�‚è§� [etcd 文档](https://etcd.io/docs/v3.4.0/tuning/#disk)ä¸çš„建议,了解如何调整主机上的ç£�盘优先级。
+
+æ¤å¤–,为了å‡�å°‘ etcd ç£�盘上的 IO äº‰ç”¨ï¼Œä½ å�¯ä»¥ä¸º data å’Œ wal 目录使用专用设备。etcd 最佳实践ä¸�建议é…�ç½® Mirror RAIDï¼ˆå› ä¸º etcd 在集群ä¸çš„节点之间å¤�制数æ�®ï¼‰ã€‚ä½ å�¯ä»¥ä½¿ç”¨ striping RAID é…�ç½®æ�¥å¢žåŠ å�¯ç”¨çš„ IOPS。
+
+è¦�在 RKE 集群ä¸å®žçްæ¤è§£å†³æ–¹æ¡ˆï¼Œä½ 需è¦�在底层主机上为 `/var/lib/etcd/data` å’Œ `/var/lib/etcd/wal` ç›®å½•æŒ‚è½½å¹¶æ ¼å¼�化ç£�盘。`etcd` æœ�务的 `extra_args` 指令ä¸å¿…须包å�« `wal_dir` 目录。如果ä¸�指定 `wal_dir`,etcd 进程会å°�试在æ�ƒé™�ä¸�足的情况下æ“�作底层的 `wal` 挂载。
+
+```yaml
+# RKE cluster.yml
+---
+services:
+ etcd:
+ extra_args:
+ data-dir: '/var/lib/rancher/etcd/data/'
+ wal-dir: '/var/lib/rancher/etcd/wal/wal_dir'
+ extra_binds:
+ - '/var/lib/etcd/data:/var/lib/rancher/etcd/data'
+ - '/var/lib/etcd/wal:/var/lib/rancher/etcd/wal'
+```
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/add-users-to-projects.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/add-users-to-projects.md
new file mode 100644
index 00000000000..4f4f6712b0e
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/add-users-to-projects.md
@@ -0,0 +1,62 @@
+---
+title: æ·»åŠ é¡¹ç›®æˆ�员
+---
+
+å¦‚æžœä½ æƒ³ä¸ºç”¨æˆ·æ��供集群内 _特定_ 项目和资æº�的访问æ�ƒé™�,请为用户分é…�项目æˆ�å‘˜èµ„æ ¼ã€‚
+
+ä½ å�¯ä»¥åœ¨åˆ›å»ºé¡¹ç›®æ—¶å°†æˆ�å‘˜æ·»åŠ åˆ°é¡¹ç›®ä¸ï¼Œæˆ–å°†ç”¨æˆ·æ·»åŠ åˆ°çŽ°æœ‰é¡¹ç›®ä¸ã€‚
+
+:::tip
+
+å¦‚æžœä½ éœ€è¦�为用户æ��供对集群内 _所有_ 项目的访问æ�ƒé™�,请å�‚è§�[æ·»åŠ é›†ç¾¤æˆ�员](../../how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/cluster-and-project-roles.md)。
+
+:::
+
+### å°†æˆ�å‘˜æ·»åŠ åˆ°æ–°é¡¹ç›®
+
+ä½ å�¯ä»¥åœ¨åˆ›å»ºé¡¹ç›®æ—¶å°†æˆ�å‘˜æ·»åŠ åˆ°é¡¹ç›®ä¸ï¼ˆå»ºè®®ï¼‰ã€‚有关创建新项目的详细信æ�¯ï¼Œè¯·å�‚阅[集群管ç�†](../../how-to-guides/new-user-guides/manage-clusters/projects-and-namespaces.md)。
+
+### å°†æˆ�å‘˜æ·»åŠ åˆ°çŽ°æœ‰é¡¹ç›®
+
+创建项目å�Žï¼Œä½ å�¯ä»¥å°†ç”¨æˆ·æ·»åŠ ä¸ºé¡¹ç›®æˆ�员,以便用户å�¯ä»¥è®¿é—®é¡¹ç›®çš„资æº�:
+
+1. 在左上角,�击 **☰ > 集群管�**。
+1. 在**集群**页é�¢ä¸Šï¼Œè½¬åˆ°è¦�æ·»åŠ é¡¹ç›®æˆ�员的集群,然å�Žå�•击 **Explore**。
+1. �击**集群 > 项目/命�空间**。
+1. 转到è¦�æ·»åŠ æˆ�员的项目。在项目å��称上方的**创建命å��空间**按钮æ—�边,å�•击 **☰**。选择 **编辑é…�ç½®**。
+1. 在**æˆ�员**选项å�¡ä¸ï¼Œå�•击**æ·»åŠ **。
+1. æ�œç´¢è¦�æ·»åŠ åˆ°é¡¹ç›®çš„ç”¨æˆ·æˆ–ç»„ã€‚
+
+ 如果�置了外部身份验�:
+
+ - åœ¨ä½ é”®å…¥æ—¶ï¼ŒRancher ä¼šä»Žä½ çš„å¤–éƒ¨èº«ä»½éªŒè¯�æº�返回用户。
+
+ - ä½ å�¯ä»¥åœ¨ä¸‹æ‹‰è�œå�•䏿·»åŠ ç»„ï¼Œè€Œä¸�是å�•ä¸ªç”¨æˆ·ã€‚ä¸‹æ‹‰åˆ—è¡¨ä»…ä¼šåˆ—å‡ºä½ ï¼ˆç™»å½•ç”¨æˆ·ï¼‰æ‰€åœ¨çš„ç»„ã€‚
+
+ :::note
+
+ å¦‚æžœä½ ä»¥æœ¬åœ°ç”¨æˆ·èº«ä»½ç™»å½•ï¼Œå¤–éƒ¨ç”¨æˆ·ä¸�ä¼šæ˜¾ç¤ºåœ¨ä½ çš„æ�œç´¢ç»“æžœä¸ã€‚
+
+ :::
+
+1. 分�用户或组的**项目**角色。
+
+ [什么是项目角色?](../../how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/cluster-and-project-roles.md)
+
+ :::note 注�事项:
+
+ - 如果用户分é…�到了项目的`所有者`或`æˆ�员`角色,用户会自动继承`命å��空间创建`角色。然而,这个角色是 [Kubernetes ClusterRole](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#role-and-clusterrole),这表示角色的范围会延展到集群ä¸çš„æ‰€æœ‰é¡¹ç›®ã€‚å› æ¤ï¼Œå¯¹äºŽæ˜¾å¼�分é…�到了项目`所有者`或`æˆ�员`角色的用户æ�¥è¯´ï¼Œå�³ä½¿å�ªæœ‰`å�ªè¯»`角色,这些用户也å�¯ä»¥åœ¨åˆ†é…�给他们的其他项目ä¸åˆ›å»ºæˆ–åˆ é™¤å‘½å��空间。
+
+ - 默认情况下,Rancher çš„`项目æˆ�员`角色继承自 `Kubernetes-edit` 角色,而`项目所有者`角色继承自 `Kubernetes-admin` è§’è‰²ã€‚å› æ¤ï¼Œ`项目æˆ�员`å’Œ`项目所有者`角色都能管ç�†å‘½å��ç©ºé—´ï¼ŒåŒ…æ‹¬åˆ›å»ºå’Œåˆ é™¤å‘½å��空间。
+
+ - 对于`自定义`è§’è‰²ï¼Œä½ å�¯ä»¥ä¿®æ”¹å�¯åˆ†é…�的角色列表。
+
+ - è¦�å°†è§’è‰²æ·»åŠ åˆ°åˆ—è¡¨ä¸ï¼Œè¯·[æ·»åŠ è‡ªå®šä¹‰è§’è‰²](../../how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/custom-roles.md)。
+ - è¦�从列表ä¸åˆ 除角色,请[é”�定/è§£é”�角色](../../how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/locked-roles.md)。
+
+ :::
+
+**结果**:已将选ä¸çš„ç”¨æˆ·æ·»åŠ åˆ°é¡¹ç›®ä¸ã€‚
+
+- è¦�撤销项目æˆ�å‘˜èµ„æ ¼ï¼Œè¯·é€‰æ‹©ç”¨æˆ·å¹¶å�•击**åˆ é™¤**ã€‚æ¤æ“�ä½œä¼šåˆ é™¤æˆ�å‘˜èµ„æ ¼ï¼Œè€Œä¸�ä¼šåˆ é™¤ç”¨æˆ·ã€‚
+- è¦�修改项目ä¸çš„用户角色,请将其从项目ä¸åˆ 除,然å�Žä½¿ç”¨ä¿®æ”¹å�Žçš„角色é‡�æ–°æ·»åŠ ç”¨æˆ·ã€‚
\ No newline at end of file
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/about-provisioning-drivers/manage-cluster-drivers.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/about-provisioning-drivers/manage-cluster-drivers.md
new file mode 100644
index 00000000000..5f9c30227ba
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/about-provisioning-drivers/manage-cluster-drivers.md
@@ -0,0 +1,42 @@
+---
+title: 集群驱动
+---
+
+集群驱动用于在[托管 Kubernetes æ��供商](../../../../pages-for-subheaders/set-up-clusters-from-hosted-kubernetes-providers.md)(例如 Google GKE)ä¸åˆ›å»ºé›†ç¾¤ã€‚创建集群时å�¯ä»¥æ˜¾ç¤ºçš„集群驱动,是由集群驱动的状æ€�定义的。å�ªæœ‰ `active` 集群驱动将作为创建集群的选项显示。默认情况下,Rancher 与多个现有的云æ��ä¾›å•†é›†ç¾¤é©±åŠ¨æ‰“åŒ…åœ¨ä¸€èµ·ï¼Œä½†ä½ ä¹Ÿå�¯ä»¥å°†è‡ªå®šä¹‰é›†ç¾¤é©±åŠ¨æ·»åŠ åˆ° Rancher。
+
+å¦‚æžœä½ ä¸�想å�‘ç”¨æˆ·æ˜¾ç¤ºç‰¹å®šçš„é›†ç¾¤é©±åŠ¨ï¼Œä½ å�¯ä»¥åœ¨ Rancher ä¸å�œç”¨è¿™äº›é›†ç¾¤é©±åŠ¨ï¼Œå®ƒä»¬å°†ä¸�会作为创建集群的选项出现。
+
+### 管�集群驱动
+
+:::note 先决�件:
+
+è¦�创建ã€�ç¼–è¾‘æˆ–åˆ é™¤é›†ç¾¤é©±åŠ¨ï¼Œä½ éœ€è¦�以下æ�ƒé™�ä¸çš„_一个_:
+
+- [管�员全局��](../manage-role-based-access-control-rbac/global-permissions.md)
+- 分�了[管�集群驱动角色](../manage-role-based-access-control-rbac/global-permissions.md)的[自定义全局��](../manage-role-based-access-control-rbac/global-permissions.md#自定义全局��)。
+
+:::
+
+## 激活/�用集群驱动
+
+默认情况下,Rancher 仅激活主æµ�的云æ��供商 Google GKEã€�Amazon EKS å’Œ Azure AKS 的驱动。如果è¦�显示或éš�è—�é©±åŠ¨ï¼Œä½ å�¯ä»¥æ›´æ”¹é©±åŠ¨çš„çŠ¶æ€�:
+
+1. 在左上角,�击 **☰ > 集群管�**。
+
+2. 在左侧导航è�œå�•ä¸ï¼Œå�•击**驱动**。
+
+3. 在**集群驱动**选项�上,选择�激活或�用的驱动,然��击 **⋮ > 激活** 或 **⋮ > �用**。
+
+## æ·»åŠ è‡ªå®šä¹‰é›†ç¾¤é©±åŠ¨
+
+å¦‚æžœä½ æƒ³ä½¿ç”¨ Rancher ä¸�支æŒ�开箱å�³ç”¨çš„é›†ç¾¤é©±åŠ¨ï¼Œä½ å�¯ä»¥æ·»åŠ æ��供商的驱动,从而使用该驱动æ�¥åˆ›å»º _托管_ Kubernetes 集群:
+
+1. 在左上角,�击 **☰ > 集群管�**。
+1. 在左侧导航è�œå�•ä¸ï¼Œå�•击**驱动**。
+1. 在**集群驱动**选项å�¡ä¸Šï¼Œå�•击**æ·»åŠ é›†ç¾¤é©±åŠ¨**。
+1. 填写**æ·»åŠ é›†ç¾¤é©±åŠ¨**表å�•。然å�Žå�•击**创建**。
+
+
+### 开�自己的集群驱动
+
+如果è¦�å¼€å�‘é›†ç¾¤é©±åŠ¨å¹¶æ·»åŠ åˆ° Rancher,请å�‚考我们的[示例](https://github.com/rancher-plugins/kontainer-engine-driver-example)。
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/about-provisioning-drivers/manage-node-drivers.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/about-provisioning-drivers/manage-node-drivers.md
new file mode 100644
index 00000000000..bb49bcbe46a
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/about-provisioning-drivers/manage-node-drivers.md
@@ -0,0 +1,41 @@
+---
+title: 主机驱动
+---
+
+主机驱动用于é…�置主机,Rancher 使用这些主机å�¯åŠ¨å’Œç®¡ç�† Kubernetes 集群。主机驱动与 [Docker Machine 驱动](https://docs.docker.com/machine/drivers/)相å�Œã€‚创建主机模æ�¿æ—¶å�¯ä»¥æ˜¾ç¤ºçš„主机驱动,是由主机驱动的状æ€�定义的。å�ªæœ‰ `active` 主机驱动将显示为创建节点模æ�¿çš„选项。默认情况下,Rancher 与许多现有的 Docker Machine é©±åŠ¨æ‰“åŒ…åœ¨ä¸€èµ·ï¼Œä½†ä½ ä¹Ÿå�¯ä»¥åˆ›å»ºè‡ªå®šä¹‰ä¸»æœºé©±åŠ¨å¹¶æ·»åŠ åˆ° Rancher。
+
+å¦‚æžœä½ ä¸�想å�‘用户显示特定的主机驱动,则需è¦�å�œç”¨è¿™äº›ä¸»æœºé©±åŠ¨ã€‚
+
+#### 管�主机驱动
+
+:::note 先决�件:
+
+è¦�创建ã€�ç¼–è¾‘æˆ–åˆ é™¤é©±åŠ¨ï¼Œä½ éœ€è¦�以下æ�ƒé™�ä¸çš„_一个_:
+
+- [管�员全局��](../manage-role-based-access-control-rbac/global-permissions.md)
+- 分�了[管�主机驱动角色](../manage-role-based-access-control-rbac/global-permissions.md)的[自定义全局��](../manage-role-based-access-control-rbac/global-permissions.md#自定义全局��)。
+
+:::
+
+## 激活/�用主机驱动
+
+默认情况下,Rancher 仅激活主æµ�云æ��供商 Amazon EC2ã€�Azureã€�DigitalOcean å’Œ vSphere 的驱动。如果è¦�显示或éš�è—�é©±åŠ¨ï¼Œä½ å�¯ä»¥æ›´æ”¹é©±åŠ¨çš„çŠ¶æ€�:
+
+1. 在左上角,�击 **☰ > 集群管�**。
+
+2. 在左侧导航è�œå�•ä¸ï¼Œå�•击**驱动**。
+
+2. 在**主机驱动**选项�上,选择�激活或�用的驱动,然��击 **⋮ > 激活** 或 **⋮ > �用**。
+
+## æ·»åŠ è‡ªå®šä¹‰ä¸»æœºé©±åŠ¨
+
+å¦‚æžœä½ æƒ³ä½¿ç”¨ Rancher ä¸�支æŒ�开箱å�³ç”¨çš„ä¸»æœºé©±åŠ¨ï¼Œä½ å�¯ä»¥æ·»åŠ æ��ä¾›å•†çš„é©±åŠ¨ï¼Œä»Žè€Œä½¿ç”¨è¯¥é©±åŠ¨ä¸ºä½ çš„ Kubernetes 集群创建节点模æ�¿å¹¶æœ€ç»ˆåˆ›å»ºèŠ‚ç‚¹æ± ï¼š
+
+1. 在左上角,�击 **☰ > 集群管�**。
+1. 在左侧导航è�œå�•ä¸ï¼Œå�•击**驱动**。
+1. 在**主机驱动**选项å�¡ä¸Šï¼Œå�•击**æ·»åŠ ä¸»æœºé©±åŠ¨**。
+1. 填写**æ·»åŠ ä¸»æœºé©±åŠ¨**表å�•。然å�Žå�•击**创建**。
+
+### 开�自己的主机驱动
+
+主机驱动使用 [Docker Machine](https://docs.docker.com/machine/) �实现。
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/access-or-share-templates.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/access-or-share-templates.md
new file mode 100644
index 00000000000..947f2a9784c
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/access-or-share-templates.md
@@ -0,0 +1,64 @@
+---
+title: 访问和共享
+---
+
+å¦‚æžœä½ æ˜¯ RKE 模æ�¿æ‰€æœ‰è€…ï¼Œä½ å�¯ä»¥å°†è¯¥æ¨¡æ�¿å…±äº«ç»™ç”¨æˆ·æˆ–用户组,然å�Žä»–们å�¯ä»¥ä½¿ç”¨è¯¥æ¨¡æ�¿åˆ›å»ºé›†ç¾¤ã€‚
+
+由于 RKE 模æ�¿æ˜¯ä¸“é—¨ä¸Žç”¨æˆ·å’Œç»„å…±äº«çš„ï¼Œå› æ¤æ‰€æœ‰è€…å�¯ä»¥ä¸Žä¸�å�Œçš„用户共享ä¸�å�Œçš„ RKE 模æ�¿ã€‚
+
+共享模æ�¿æ—¶ï¼Œæ¯�个用户都å�¯ä»¥æ‹¥æœ‰ä»¥ä¸‹ä¸¤ä¸ªè®¿é—®æ�ƒé™�ä¸çš„å…¶ä¸ä¸€ä¸ªï¼š
+
+- **所有者**:å�¯ä»¥æ›´æ–°ã€�åˆ é™¤å’Œå…±äº«ä»–ä»¬æ‹¥æœ‰çš„æ¨¡æ�¿ã€‚所有者还å�¯ä»¥ä¸Žå…¶ä»–用户共享模æ�¿ã€‚
+- **用户**:å�¯ä»¥ä½¿ç”¨æ¨¡æ�¿åˆ›å»ºé›†ç¾¤ã€‚他们还å�¯ä»¥å°†è¿™äº›é›†ç¾¤å�‡çº§åˆ°å�Œä¸€æ¨¡æ�¿çš„æ–°ç‰ˆæœ¬ã€‚å¦‚æžœä½ å°†æ¨¡æ�¿å…±äº«ä¸º**公开(å�ªè¯»ï¼‰**ï¼Œä½ çš„ Rancher 设置ä¸çš„æ‰€æœ‰ç”¨æˆ·éƒ½æ‹¥æœ‰è¯¥æ¨¡æ�¿çš„用户访问æ�ƒé™�。
+
+å¦‚æžœä½ åˆ›å»ºäº†ä¸€ä¸ªæ¨¡æ�¿ï¼Œä½ 将自动æˆ�为该模æ�¿çš„æ‰€æœ‰è€…。
+
+å¦‚æžœä½ æƒ³è®©å…¶ä»–ç”¨æˆ·æ›´æ–°è¯¥æ¨¡æ�¿ï¼Œä½ å�¯ä»¥å…±äº«æ¨¡æ�¿çš„æ‰€æœ‰æ�ƒã€‚有关所有者如何修改模æ�¿çš„详细信æ�¯ï¼Œè¯·å�‚阅[修改模æ�¿æ–‡æ¡£](manage-rke1-templates.md)。
+
+共享模æ�¿çš„æ–¹å¼�æœ‰å¦‚ä¸‹å‡ ç§�:
+
+- 在模æ�¿åˆ›å»ºæœŸé—´å°†ç”¨æˆ·æ·»åŠ åˆ°æ–°çš„ RKE 模æ�¿
+- å°†ç”¨æˆ·æ·»åŠ åˆ°çŽ°æœ‰ RKE 模æ�¿
+- 公开 RKE 模æ�¿ï¼Œå¹¶ä¸Ž Rancher 设置ä¸çš„æ‰€æœ‰ç”¨æˆ·å…±äº«
+- 与�信任修改模�的用户共享模�所有�
+
+### 与特定用户或组共享模�
+
+è¦�å…�è®¸ç”¨æˆ·æˆ–ç»„ä½¿ç”¨ä½ çš„æ¨¡æ�¿åˆ›å»ºé›†ç¾¤ï¼Œä½ å�¯ä»¥ä¸ºä»–们æ��供模æ�¿çš„基本**用户**访问æ�ƒé™�。
+
+1. 在左上角,�击 **☰ > 集群管�**。
+1. 在 **RKE1 �置**下,�击 **RKE 模�**。
+1. 转到�共享的模�,然��击 **⋮ > 编辑**。
+1. 在**共享模æ�¿**ä¸ï¼Œå�•击**æ·»åŠ æˆ�员**。
+1. 在**å��ç§°**å—æ®µä¸æ�œç´¢ä½ è¦�与之共享模æ�¿çš„用户或组。
+1. 选择**用户**访问类型。
+1. å�•击**ä¿�å˜**。
+
+**结果**:用户或组�以使用模�创建集群。
+
+### 与所有用户共享模�
+
+1. 在左上角,�击 **☰ > 集群管�**。
+1. 在左侧导航æ �,å�•击 **RKE1 é…�ç½® > RKE 模æ�¿**。
+1. 转到�共享的模�,然��击 **⋮ > 编辑**。
+1. 在**共享模æ�¿**ä¸‹ï¼Œé€‰ä¸ **公开(å�ªè¯»ï¼‰** å¤�选框。
+1. å�•击**ä¿�å˜**。
+
+**结果**:Rancher 设置ä¸çš„æ‰€æœ‰ç”¨æˆ·éƒ½å�¯ä»¥ä½¿ç”¨è¯¥æ¨¡æ�¿åˆ›å»ºé›†ç¾¤ã€‚
+
+### 共享模�所有�
+
+å¦‚æžœä½ æ˜¯æ¨¡æ�¿çš„åˆ›å»ºè€…ï¼Œä½ å�¯èƒ½å¸Œæœ›å°†ç»´æŠ¤å’Œæ›´æ–°æ¨¡æ�¿çš„责任委派给其他用户或组。
+
+在这ç§�æƒ…å†µä¸‹ï¼Œä½ å�¯ä»¥ä¸ºç”¨æˆ·æ��ä¾›**所有者**访问æ�ƒé™�,该æ�ƒé™�å…�许其他用户更新ã€�åˆ é™¤æ¨¡æ�¿æˆ–与其他用户共享对模æ�¿çš„访问æ�ƒé™�。
+
+�授予用户或组**所有者**��:
+
+1. 在左上角,�击 **☰ > 集群管�**。
+1. 在 **RKE1 �置**下,�击 **RKE 模�**。
+1. 转到�共享的 RKE 模�,然��击 **⋮ > 编辑**。
+1. 在**共享模æ�¿**下,å�•击**æ·»åŠ æˆ�员**并在**å��ç§°**å—æ®µä¸æ�œç´¢è¦�与之共享模æ�¿çš„用户或组。
+1. 在**访问类型**å—æ®µä¸ï¼Œå�•击**所有者**。
+1. å�•击**ä¿�å˜**。
+
+**结果**:用户或组具有**所有者**访问类型,å�¯ä»¥ä¿®æ”¹ã€�å…±äº«æˆ–åˆ é™¤æ¨¡æ�¿ã€‚
\ No newline at end of file
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/apply-templates.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/apply-templates.md
new file mode 100644
index 00000000000..3efac3e477e
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/apply-templates.md
@@ -0,0 +1,59 @@
+---
+title: 应用模�
+---
+
+ä½ å�¯ä»¥ä½¿ç”¨ä½ 自己创建的 RKE 模æ�¿æ�¥åˆ›å»ºé›†ç¾¤ï¼Œä¹Ÿå�¯ä»¥ä½¿ç”¨[ä¸Žä½ å…±äº«çš„æ¨¡æ�¿](access-or-share-templates.md)æ�¥åˆ›å»ºé›†ç¾¤ã€‚
+
+RKE 模��以应用于新集群。
+
+ä½ å�¯ä»¥[将现有集群的é…�ç½®ä¿�å˜ä¸º RKE 模æ�¿](#将现有集群转æ�¢ä¸ºä½¿ç”¨-rke-模æ�¿)ã€‚è¿™æ ·ï¼Œå�ªæœ‰æ¨¡æ�¿æ›´æ–°å�Žæ‰�能更改集群的设置。
+
+ä½ æ— æ³•å°†é›†ç¾¤æ›´æ”¹ä¸ºä½¿ç”¨ä¸�å�Œçš„ RKE 模æ�¿ã€‚ä½ å�ªèƒ½å°†é›†ç¾¤æ›´æ–°ä¸ºå�Œä¸€æ¨¡æ�¿çš„æ–°ç‰ˆæœ¬ã€‚
+
+
+### 使用 RKE 模�创建集群
+
+è¦�使用 RKE 模æ�¿æ·»åŠ [由基础设施æ��供商托管](../../../../pages-for-subheaders/launch-kubernetes-with-rancher.md)的集群,请按照以下æ¥éª¤æ“�作:
+
+1. 在左上角,�击 **☰ > 集群管�**。
+1. 在**集群**页�上,�击**创建**并选择基础设施�供商。
+1. 设置集群�称和节点模�详情。
+1. è¦�使用 RKE 模æ�¿ï¼Œè¯·åœ¨**集群选项**下,选ä¸**使用现有 RKE 模æ�¿å’Œä¿®è®¢ç‰ˆ**å¤�选框。
+1. 从下拉è�œå�•ä¸é€‰æ‹© RKE 模æ�¿å’Œä¿®è®¢ç‰ˆã€‚
+1. å�¯é€‰ï¼šä½ å�¯ä»¥ç¼–辑 RKE 模æ�¿æ‰€æœ‰è€…在创建模æ�¿æ—¶æ ‡è®°ä¸º**å…�许用户覆盖**çš„ä»»ä½•è®¾ç½®ã€‚å¦‚æžœä½ æ— æ³•æ›´æ”¹æŸ�些设置,则需è¦�è�”系模æ�¿æ‰€æœ‰è€…以获å�–模æ�¿çš„æ–°ä¿®è®¢ç‰ˆã€‚ç„¶å�Žï¼Œä½ 需è¦�编辑集群æ�¥å°†å…¶å�‡çº§åˆ°æ–°ç‰ˆæœ¬ã€‚
+1. �击**创建**以�动集群。
+
+### 更新使用 RKE 模�创建的集群
+
+模æ�¿æ‰€æœ‰è€…创建 RKE 模æ�¿æ—¶ï¼Œæ¯�个设置在 Rancher UI ä¸éƒ½æœ‰ä¸€ä¸ªå¼€å…³ï¼ŒæŒ‡ç¤ºç”¨æˆ·æ˜¯å�¦å�¯ä»¥è¦†ç›–该设置。
+
+- 如果æŸ�个设置å…�è®¸ç”¨æˆ·è¦†ç›–ï¼Œä½ å�¯ä»¥é€šè¿‡[编辑集群](../../../../pages-for-subheaders/cluster-configuration.md)æ�¥æ›´æ–°é›†ç¾¤ä¸çš„设置。
+- 如果该开关处于关é—状æ€�,则除é�žé›†ç¾¤æ‰€æœ‰è€…创建了å…�è®¸ä½ è¦†ç›–è¿™äº›è®¾ç½®çš„æ¨¡æ�¿ä¿®è®¢ç‰ˆï¼Œå�¦åˆ™ä½ æ— æ³•æ›´æ”¹è¿™äº›è®¾ç½®ã€‚å¦‚æžœä½ æ— æ³•æ›´æ”¹æŸ�些设置,则需è¦�è�”系模æ�¿æ‰€æœ‰è€…以获å�–模æ�¿çš„æ–°ä¿®è®¢ç‰ˆã€‚
+
+如果集群是使用 RKE 模æ�¿åˆ›å»ºçš„ï¼Œä½ å�¯ä»¥ç¼–辑集群,æ�¥å°†é›†ç¾¤æ›´æ–°ä¸ºæ¨¡æ�¿çš„æ–°ç‰ˆæœ¬ã€‚
+
+现有集群的设置å�¯ä»¥[ä¿�å˜ä¸º RKE 模æ�¿](#将现有集群转æ�¢ä¸ºä½¿ç”¨-rke-模æ�¿)。在这ç§�æƒ…å†µä¸‹ï¼Œä½ è¿˜å�¯ä»¥ç¼–辑集群以将集群更新为模æ�¿çš„æ–°ç‰ˆæœ¬ã€‚
+
+:::note
+
+ä½ æ— æ³•å°†é›†ç¾¤æ›´æ”¹ä¸ºä½¿ç”¨ä¸�å�Œçš„ RKE 模æ�¿ã€‚ä½ å�ªèƒ½å°†é›†ç¾¤æ›´æ–°ä¸ºå�Œä¸€æ¨¡æ�¿çš„æ–°ç‰ˆæœ¬ã€‚
+
+:::
+
+### 将现有集群转�为使用 RKE 模�
+
+本节介�如何使用现有集群创建 RKE 模�。
+
+除é�žä½ 将现有集群的设置ä¿�å˜ä¸º RKE 模æ�¿ï¼Œå�¦åˆ™ RKE 模æ�¿ä¸�能应用于现有集群。这将把集群的设置导出为新的 RKE 模æ�¿ï¼Œå¹¶ä¸”将集群绑定到该模æ�¿ã€‚ç„¶å�Žï¼Œå�ªæœ‰[更新了模æ�¿](manage-rke1-templates.md#更新模æ�¿)并且集群å�‡çº§åˆ°**使用更新版本的模æ�¿**时,集群æ‰�能改å�˜ã€‚
+
+�将现有集群转�为使用 RKE 模�:
+
+1. 在左上角,�击 **☰ > 集群管�**。
+1. 在**集群**页é�¢ä¸Šï¼Œè½¬åˆ°è¦�转æ�¢ä¸ºä½¿ç”¨ RKE 模æ�¿çš„集群。å�•击 **â‹® > ä¿�å˜ä¸º RKE 模æ�¿**。
+1. 在出现的表å�•ä¸è¾“入模æ�¿çš„å��称,然å�Žå�•击**创建**。
+
+**结果**:
+
+- 创建了一个新的 RKE 模�。
+- 将集群转�为使用该新模�。
+- �以[使用新模�创建新集群](apply-templates.md#使用-rke-模�创建集群)。
\ No newline at end of file
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/creator-permissions.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/creator-permissions.md
new file mode 100644
index 00000000000..7db812c38ef
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/creator-permissions.md
@@ -0,0 +1,57 @@
+---
+title: 模�创建者��
+---
+
+管�员有创建 RKE 模�的��,�有管�员�以将该��授予其他用户。
+
+有关管�员��的更多信�,请�阅[全局��文档](../manage-role-based-access-control-rbac/global-permissions.md)。
+
+## 授予用户创建模�的��
+
+�有具有**创建 RKE 模�**全局��的用户�能创建模�。
+
+管�员拥有创建模�的全局��,�有管�员�能将该��授予其他用户。
+
+有关�许用户修改现有模�的信�,请�阅[共享模�](access-or-share-templates.md)。
+
+管�员�以通过两�方�授予用户创建 RKE 模�的��:
+
+- 通过编辑[�个用户](#�许用户创建模�)的��
+- 通过更改[新用户的默认��](#默认�许新用户创建模�)
+
+### �许用户创建模�
+
+管ç�†å‘˜å�¯ä»¥æŒ‰ç…§ä»¥ä¸‹æ¥éª¤å°†**创建 RKE 模æ�¿**角色å�•独授予给任何现有用户:
+
+1. 在左上角,�击 **☰ > 用户 & 认�**。
+1. 在左侧导航æ �ä¸ï¼Œå�•击**用户**。
+1. 选择�编辑的用户,然��击 **⋮ > 编辑�置**。
+1. 在**内置角色**ä¸ï¼Œé€‰ä¸**创建 RKE 集群模æ�¿**角色以å�Šç”¨æˆ·åº”å…·æœ‰çš„å…¶ä»–è§’è‰²ã€‚ä½ å�¯èƒ½è¿˜éœ€è¦�选ä¸**创建 RKE 模æ�¿ä¿®è®¢ç‰ˆ**å¤�选框。
+1. å�•击**ä¿�å˜**。
+
+**结果**:用户拥有创建 RKE 模�的��。
+
+### 默认�许新用户创建模�
+
+管ç�†å‘˜ä¹Ÿå�¯ä»¥æŒ‰ç…§ä»¥ä¸‹æ¥éª¤ä¸ºæ‰€æœ‰æ–°ç”¨æˆ·æŽˆäºˆåˆ›å»º RKE 模æ�¿çš„默认æ�ƒé™�。这ä¸�会影å“�现有用户的æ�ƒé™�。
+
+1. 在左上角,�击 **☰ > 用户 & 认�**。
+1. 在左侧导航æ �ä¸ï¼Œå�•击**角色**。
+1. 转到**创建 RKE 集群模�**角色,然��击 **⋮ > 编辑�置**。
+1. 选择**是:新用户的默认角色**选项。
+1. å�•击**ä¿�å˜**。
+1. å¦‚æžœä½ å¸Œæœ›æ–°ç”¨æˆ·èƒ½å¤Ÿåˆ›å»º RKE 模æ�¿ä¿®è®¢ï¼Œè¯·å°†è¯¥è§’色设置为默认值。
+
+**结果**ï¼šåœ¨æ¤ Rancher 安装ä¸åˆ›å»ºçš„任何新用户都å�¯ä»¥åˆ›å»º RKE 模æ�¿ã€‚现有用户将ä¸�ä¼šèŽ·å¾—æ¤æ�ƒé™�。
+
+### �消创建模�的��
+
+管ç�†å‘˜å�¯ä»¥é€šè¿‡ä»¥ä¸‹æ¥éª¤åˆ 除用户创建模æ�¿çš„æ�ƒé™�。请注æ„�ï¼Œæ— è®ºæ˜¯å�¦é€‰æ‹©äº†ç»†ç²’度æ�ƒé™�,管ç�†å‘˜éƒ½å�¯ä»¥å®Œå…¨æŽ§åˆ¶æ‰€æœ‰èµ„æº�。
+
+1. 在左上角,�击 **☰ > 用户 & 认�**。
+1. 在左侧导航æ �ä¸ï¼Œå�•击**用户**。
+1. 选择�编辑��的用户,然��击 **⋮ > 编辑�置**。
+1. 在**内置角色**ä¸ï¼Œå�–消选ä¸**创建 RKE 模æ�¿**å’Œ**创建 RKE 模æ�¿ä¿®è®¢ç‰ˆ**å¤�选框(如果适用)。在æ¤å¤„ï¼Œä½ å�¯ä»¥å°†ç”¨æˆ·æ”¹å›žæ™®é€šç”¨æˆ·ï¼Œæˆ–授予用户一组ä¸�å�Œçš„æ�ƒé™�。
+1. å�•击**ä¿�å˜**。
+
+**结果**ï¼šç”¨æˆ·æ— æ³•åˆ›å»º RKE 模æ�¿ã€‚
\ No newline at end of file
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/enforce-templates.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/enforce-templates.md
new file mode 100644
index 00000000000..38ab0f41ee8
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/enforce-templates.md
@@ -0,0 +1,43 @@
+---
+title: 强制使用模�
+---
+
+本节介ç»�模æ�¿ç®¡ç�†å‘˜å¦‚何在 Rancher ä¸å¼ºåˆ¶æ‰§è¡Œæ¨¡æ�¿ï¼Œä»Žè€Œé™�制用户在没有模æ�¿çš„æƒ…况下创建集群。
+
+默认情况下,Rancher ä¸çš„任何普通用户都å�¯ä»¥åˆ›å»ºé›†ç¾¤ã€‚但当开å�¯å¼ºåˆ¶ä½¿ç”¨ RKE 模æ�¿æ—¶ï¼Œæœ‰ä»¥ä¸‹çº¦æ�Ÿï¼š
+
+- �有管�员�能在没有模�的情况下创建集群。
+- 所有普通用户必须使用 RKE 模��创建新集群。
+- 普通用户在ä¸�使用模æ�¿çš„æƒ…å†µä¸‹æ— æ³•åˆ›å»ºé›†ç¾¤ã€‚
+
+�有管​​�员[授予��](creator-permissions.md#�许用户创建模�)�,用户�能创建新模�。
+
+使用 RKE 模æ�¿åˆ›å»ºé›†ç¾¤å�Žï¼Œé›†ç¾¤åˆ›å»ºè€…æ— æ³•ç¼–è¾‘æ¨¡æ�¿ä¸å®šä¹‰çš„设置。创建集群å�Žæ›´æ”¹è¿™äº›è®¾ç½®çš„唯一方法是[将集群å�‡çº§åˆ°ç›¸å�Œæ¨¡æ�¿çš„æ–°ä¿®è®¢ç‰ˆ](apply-templates.md#更新使用-rke-模æ�¿åˆ›å»ºçš„集群)。如果集群创建者想è¦�更改模æ�¿å®šä¹‰çš„设置,他们需è¦�è�”系模æ�¿æ‰€æœ‰è€…以获å�–模æ�¿çš„æ–°ç‰ˆæœ¬ã€‚有关模æ�¿ä¿®è®¢å¦‚何工作的详细信æ�¯ï¼Œè¯·å�‚阅[修订模æ�¿](manage-rke1-templates.md#更新模æ�¿)。
+
+## 强制新集群使用 RKE 模�
+
+è¦�求用户创建新集群时使用模æ�¿ï¼Œå�¯ä»¥ç¡®ä¿�[普通用户](../manage-role-based-access-control-rbac/global-permissions.md)å�¯åŠ¨çš„ä»»ä½•é›†ç¾¤éƒ½ä½¿ç”¨ç»�过管ç�†å‘˜å®¡æ ¸çš„ Kubernetes å’Œ Rancher 设置。
+
+管ç�†å‘˜å�¯ä»¥é€šè¿‡ä»¥ä¸‹æ¥éª¤å�¯ç”¨ RKE 模æ�¿å¼ºåˆ¶ï¼Œä»Žè€Œè¦�求用户必须使用模æ�¿åˆ›å»ºé›†ç¾¤ï¼š
+
+1. �击 **☰ > 全局设置**。
+1. 转到 `cluster-template-enforcement` 设置。�击 **⋮ > 编辑设置**。
+1. 将值设置为 **True** å¹¶å�•击**ä¿�å˜**。
+
+ :::note ���示:
+
+ 如果管ç�†å‘˜å°† `cluster-template-enforcement` 设置为 True ,还需è¦�与用户共享 `clusterTemplates`,以便用户å�¯ä»¥é€‰æ‹©å…¶ä¸ä¸€ä¸ªæ¨¡æ�¿æ�¥åˆ›å»ºé›†ç¾¤ã€‚
+
+ :::
+
+**结果**:除�创建者是管�员,�则 Rancher �置的所有集群都必须使用模�。
+
+## �用 RKE 模�强制
+
+管ç�†å‘˜å�¯ä»¥é€šè¿‡ä»¥ä¸‹æ¥éª¤å…³é— RKE 模æ�¿å¼ºåˆ¶ï¼Œä»Žè€Œå…�许用户在没有 RKE 模æ�¿çš„æƒ…况下创建新集群:
+
+1. �击 **☰ > 全局设置**。
+1. 转到 `cluster-template-enforcement` 设置。�击 **⋮ > 编辑设置**。
+1. 将值设置为 **False** å¹¶å�•击**ä¿�å˜**。
+
+**结果**:在 Rancher ä¸åˆ›å»ºé›†ç¾¤æ—¶ï¼Œç”¨æˆ·ä¸�需è¦�使用模æ�¿ã€‚
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/example-use-cases.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/example-use-cases.md
new file mode 100644
index 00000000000..7457df20253
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/example-use-cases.md
@@ -0,0 +1,70 @@
+---
+title: 示例场景
+---
+
+以下示例场景æ��述了组织如何使用模æ�¿æ�¥æ ‡å‡†åŒ–集群创建。
+
+- **强制执行模�**:如果希望所有 Rancher �置的新集群都具有�些设置,管�员�能想�[为�个用户强制执行一项或多项模�设置](#强制执行模�设置)。
+- **与ä¸�å�Œçš„用户共享ä¸�å�Œçš„æ¨¡æ�¿**:管ç�†å‘˜å�¯ä»¥ä¸º[普通用户和高级用户æ��ä¾›ä¸�å�Œçš„æ¨¡æ�¿](#普通用户和高级用户模æ�¿)ã€‚è¿™æ ·ï¼Œæ™®é€šç”¨æˆ·ä¼šæœ‰æ›´å¤šé™�制选项,而高级用户在创建集群时å�¯ä»¥ä½¿ç”¨æ›´å¤šé€‰é¡¹ã€‚
+- **更新模æ�¿è®¾ç½®**:如果组织的安全和 DevOps 团队决定将最佳实践嵌入到新集群所需的设置ä¸ï¼Œè¿™äº›æœ€ä½³å®žè·µå�¯èƒ½ä¼šéš�ç�€æ—¶é—´è€Œæ”¹å�˜ã€‚如果最佳实践å�‘生å�˜åŒ–,[å�¯ä»¥å°†æ¨¡æ�¿æ›´æ–°ä¸ºæ–°ç‰ˆæœ¬](#更新模æ�¿å’Œé›†ç¾¤)ã€‚è¿™æ ·ï¼Œä½¿ç”¨æ¨¡æ�¿åˆ›å»ºçš„集群å�¯ä»¥å�‡çº§åˆ°æ¨¡æ�¿çš„æ–°ç‰ˆæœ¬ã€‚
+- **共享模æ�¿çš„æ‰€æœ‰æ�ƒ**:当模æ�¿æ‰€æœ‰è€…ä¸�å†�想è¦�维护模æ�¿æˆ–想è¦�共享模æ�¿çš„æ‰€æœ‰æ�ƒæ—¶ï¼Œæ¤æ–¹æ¡ˆæ��述了如何[授æ�ƒæ¨¡æ�¿æ‰€æœ‰æ�ƒ](#å…�许其他用户控制和共享模æ�¿)。
+
+
+## 强制执行模�设置
+
+�设一个组织的管�员决定用 Kubernetes 版本 1.14 创建所有新集群:
+
+1. 首先,管ç�†å‘˜åˆ›å»ºä¸€ä¸ªæ¨¡æ�¿ï¼Œå°† Kubernetes 版本指定为 1.14ï¼Œå¹¶å°†æ‰€æœ‰å…¶ä»–è®¾ç½®æ ‡è®°ä¸º**å…�许用户覆盖**。
+1. 管�员将模�公开。
+1. 管�员打开模�强制功能。
+
+**结果**:
+
+- 组织ä¸çš„æ‰€æœ‰ Rancher 用户都å�¯ä»¥è®¿é—®è¯¥æ¨¡æ�¿ã€‚
+- [普通用户](../manage-role-based-access-control-rbac/global-permissions.md)ä½¿ç”¨æ¤æ¨¡æ�¿åˆ›å»ºçš„æ‰€æœ‰æ–°é›†ç¾¤éƒ½å°†ä½¿ç”¨ Kubernetes 1.14ï¼Œå®ƒä»¬æ— æ³•ä½¿ç”¨å…¶å®ƒ Kubernetes 版本。默认情况下,普通用户没有创建模æ�¿çš„æ�ƒé™�ã€‚å› æ¤ï¼Œé™¤é�žä¸Žä»–们共享更多模æ�¿ï¼Œå�¦åˆ™æ¤æ¨¡æ�¿å°†æ˜¯æ™®é€šç”¨æˆ·å”¯ä¸€å�¯ä»¥ä½¿ç”¨çš„æ¨¡æ�¿ã€‚
+- 所有普通用户都必须使用集群模æ�¿æ�¥åˆ›å»ºæ–°é›†ç¾¤ã€‚ä»–ä»¬æ— æ³•åœ¨ä¸�使用模æ�¿çš„æƒ…况下创建集群。
+
+通过这ç§�æ–¹å¼�,管ç�†å‘˜åœ¨æ•´ä¸ªç»„织ä¸å¼ºåˆ¶æ‰§è¡Œ Kubernetes 版本,å�Œæ—¶ä»�ç„¶å…�许最终用户é…�置其他所有内容。
+
+## 普通用户和高级用户模�
+
+å�‡è®¾ä¸€ä¸ªç»„织有普通用户和高级用户。管ç�†å‘˜å¸Œæœ›æ™®é€šç”¨æˆ·å¿…须使用模æ�¿ï¼Œè€Œé«˜çº§ç”¨æˆ·å’Œç®¡ç�†å‘˜å�¯ä»¥æ ¹æ�®è‡ªå·±çš„需è¦�创建集群。
+
+1. 首先,管ç�†å‘˜å¼€å�¯ [RKE 模æ�¿å¼ºåˆ¶æ‰§è¡Œ](enforce-templates.md#强制新集群使用-rke-模æ�¿)。这æ„�味ç�€ Rancher ä¸çš„æ¯�个[普通用户](../manage-role-based-access-control-rbac/global-permissions.md)在创建集群时都需è¦�使用 RKE 模æ�¿ã€‚
+1. 然�管�员创建两个模�:
+
+- 一个普通用户模æ�¿ï¼Œè¯¥æ¨¡æ�¿é™¤äº†è®¿é—®å¯†é’¥å¤–ï¼Œå‡ ä¹ŽæŒ‡å®šäº†æ‰€æœ‰é€‰é¡¹
+- 一个高级用户模�,该模�具有大部分或所有已�用**�许用户覆盖**的选项
+
+1. 管�员仅与高级用户共享高级模�。
+1. 管ç�†å‘˜å°†æ™®é€šç”¨æˆ·çš„æ¨¡æ�¿å…¬å¼€ï¼Œå› æ¤åœ¨ Rancher ä¸åˆ›å»ºçš„ RKE 集群的æ¯�个人都能选择é™�制性更强的模æ�¿ã€‚
+
+**结果**:除管�员外,所有 Rancher 用户在创建集群时都需�使用模�。�个人都�以访问�制模�,但�有高级用户有�使用更宽�的模�。普通用户会�到更多�制,而高级用户在�置 Kubernetes 集群时有更多选择。
+
+## 更新模�和集群
+
+�设一个组织有一个模�,该模��求集群使用 Kubernetes v1.14。然而,��时间的推移,管�员改�了主�。管�员现在希望用户能够�级集群,以使用更新版本的 Kubernetes。
+
+在这个组织ä¸ï¼Œè®¸å¤šé›†ç¾¤æ˜¯ç”¨ä¸€ä¸ªéœ€è¦� Kubernetes v1.14 的模æ�¿åˆ›å»ºçš„。由于模æ�¿ä¸�å…�许é‡�å†™è¯¥è®¾ç½®ï¼Œå› æ¤åˆ›å»ºé›†ç¾¤çš„ç”¨æˆ·æ— æ³•ç›´æŽ¥ç¼–è¾‘è¯¥è®¾ç½®ã€‚
+
+模æ�¿æ‰€æœ‰è€…å�¯ä»¥æœ‰ä»¥ä¸‹å‡ 个选项,æ�¥å…�许集群创建者在集群上å�‡çº§ Kubernetes:
+
+- **在模æ�¿ä¸ŠæŒ‡å®š Kubernetes v1.15**:模æ�¿æ‰€æœ‰è€…å�¯ä»¥åˆ›å»ºæŒ‡å®š Kubernetes v1.15 的新模æ�¿ä¿®è®¢ç‰ˆã€‚ç„¶å�Žä½¿ç”¨è¯¥æ¨¡æ�¿çš„æ¯�个集群的所有者å�¯ä»¥å°†é›†ç¾¤å�‡çº§åˆ°æ¨¡æ�¿çš„æ–°ç‰ˆæœ¬ã€‚æ¤æ¨¡æ�¿å�‡çº§å…�许集群创建者在集群上将 Kubernetes å�‡çº§åˆ° v1.15。
+- **å…�许在模æ�¿ä¸Šä½¿ç”¨ä»»ä½• Kubernetes 版本**:创建模æ�¿ä¿®è®¢æ—¶ï¼Œæ¨¡æ�¿æ‰€æœ‰è€…还å�¯ä»¥ä½¿ç”¨ Rancher UI 上该设置附近的开关,将 Kubernetes ç‰ˆæœ¬æ ‡è®°ä¸º**å…�许用户覆盖**。该设置å…�许å�‡çº§åˆ°æ¤æ¨¡æ�¿ç‰ˆæœ¬çš„集群使用任æ„� Kubernetes 的版本。
+- **å…�许在模æ�¿ä¸Šä½¿ç”¨æœ€æ–°çš„ Kubernetes 次è¦�版本**:模æ�¿æ‰€æœ‰è€…还å�¯ä»¥åˆ›å»ºä¸€ä¸ªæ¨¡æ�¿ä¿®è®¢ç‰ˆï¼Œå…¶ä¸ Kubernetes 版本被定义为 **Latest v1.14(å…�许补ä¸�版本å�‡çº§ï¼‰**。这æ„�味ç�€ä½¿ç”¨è¯¥ç‰ˆæœ¬çš„集群将能够进行补ä¸�版本å�‡çº§ï¼Œä½†ä¸�支æŒ�主è¦�版本å�‡çº§ã€‚
+
+## �许其他用户控制和共享模�
+
+å�‡è®¾ Alice 是 Rancher 管ç�†å‘˜ã€‚她拥有一个 RKE 模æ�¿ï¼Œè¯¥æ¨¡æ�¿å��æ˜ äº†å¥¹çš„ç»„ç»‡ä¸ºåˆ›å»ºé›†ç¾¤è€Œå•†å®šçš„æœ€ä½³å®žè·µã€‚
+
+Bob 是一ä½�高级用户,å�¯ä»¥å°±é›†ç¾¤é…�ç½®å�šå‡ºæ˜Žæ™ºçš„决ç–。éš�ç�€æœ€ä½³å®žè·µéš�ç�€æ—¶é—´çš„æŽ¨ç§»ä¸�æ–æ›´æ–°ï¼ŒAlice 相信 Bob 会为她的模æ�¿åˆ›å»ºæ–°çš„ä¿®è®¢ã€‚å› æ¤ï¼Œå¥¹å†³å®šè®© Bob æˆ�为模æ�¿çš„æ‰€æœ‰è€…。
+
+为了与 Bob 共享模æ�¿çš„æ‰€æœ‰æ�ƒï¼ŒAlice [å°† Bob æ·»åŠ ä¸ºæ¨¡æ�¿çš„æ‰€æœ‰è€…](access-or-share-templates.md#共享模æ�¿æ‰€æœ‰æ�ƒ)。
+
+结果是,作为模�所有者,Bob 负责该模�的版本控制。Bob 现在�以执行以下所有�作:
+
+- 当最佳实践�生�化时[修改模�](manage-rke1-templates.md#更新模�)
+- [ç¦�用模æ�¿çš„过时修订](manage-rke1-templates.md#ç¦�用模æ�¿ä¿®è®¢ç‰ˆ),以ç¦�æ¢ä½¿ç”¨è¯¥æ¨¡æ�¿æ�¥åˆ›å»ºé›†ç¾¤
+- 如果组织想è¦�改å�˜æ–¹å�‘,则[åˆ é™¤æ•´ä¸ªæ¨¡æ�¿](manage-rke1-templates.md#åˆ é™¤æ¨¡æ�¿)
+- [将�个版本设置为默认值](manage-rke1-templates.md#将模�修订版设置为默认),用于用户创建集群。模�的最终用户�然�以选择他们想�使用哪个版本�创建集群。
+- [与特定用户共享模�](access-or-share-templates.md),让所有 Rancher 用户都�以使用该模�,或与其他用户共享该模�的所有�。
\ No newline at end of file
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/infrastructure.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/infrastructure.md
new file mode 100644
index 00000000000..a3cb27d9b6b
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/infrastructure.md
@@ -0,0 +1,69 @@
+---
+title: RKE 模�和基础设施
+---
+
+在 Rancher ä¸ï¼ŒRKE 模æ�¿ç”¨äºŽé…�ç½® Kubernetes 和定义 Rancher 设置,而节点模æ�¿åˆ™ç”¨äºŽé…�置节点。
+
+å› æ¤ï¼Œå�³ä½¿å¼€å�¯äº† RKE 模æ�¿å¼ºåˆ¶ï¼Œæœ€ç»ˆç”¨æˆ·åœ¨åˆ›å»º Rancher 集群时ä»�ç„¶å�¯ä»¥ç�µæ´»é€‰æ‹©åº•层硬件。RKE 模æ�¿çš„æœ€ç»ˆç”¨æˆ·ä»�ç„¶å�¯ä»¥é€‰æ‹©åŸºç¡€è®¾æ–½æ��供商和他们想è¦�使用的节点。
+
+如果è¦�æ ‡å‡†åŒ–é›†ç¾¤ä¸çš„硬件,请将 RKE 模æ�¿ä¸ŽèŠ‚ç‚¹æ¨¡æ�¿æˆ–æœ�务器é…�置工具 (如 Terraform) 结å�ˆä½¿ç”¨ã€‚
+
+### 节点模�
+
+[节点模æ�¿](../../../../reference-guides/user-settings/manage-node-templates.md)è´Ÿè´£ Rancher ä¸çš„节点é…�置和节点预é…�ã€‚ä½ å�¯ä»¥åœ¨ç”¨æˆ·é…�置文件ä¸è®¾ç½®èŠ‚ç‚¹æ¨¡æ�¿ï¼Œä»Žè€Œå®šä¹‰åœ¨æ¯�ä¸ªèŠ‚ç‚¹æ± ä¸ä½¿ç”¨çš„æ¨¡æ�¿ã€‚å�¯ç”¨èŠ‚ç‚¹æ± å�Žï¼Œå�¯ä»¥ç¡®ä¿�æ¯�ä¸ªèŠ‚ç‚¹æ± ä¸éƒ½æœ‰æ‰€éœ€æ•°é‡�的节点,并确ä¿�æ± ä¸çš„æ‰€æœ‰èŠ‚ç‚¹éƒ½ç›¸å�Œã€‚
+
+### Terraform
+
+Terraform 是一个æœ�务器é…�置工具。它使用基础架构å�³ä»£ç �,支æŒ�使用 Terraform é…�ç½®æ–‡ä»¶åˆ›å»ºå‡ ä¹Žæ‰€æœ‰çš„åŸºç¡€è®¾æ–½ã€‚å®ƒå�¯ä»¥è‡ªåŠ¨æ‰§è¡Œæœ�务器é…�置,这ç§�æ–¹å¼�æ˜¯è‡ªæ–‡æ¡£åŒ–çš„ï¼Œå¹¶ä¸”åœ¨ç‰ˆæœ¬æŽ§åˆ¶ä¸æ˜“于跟踪。
+
+本节é‡�点介ç»�如何将 Terraform 与 [Rancher 2 Terraform Provider](https://www.terraform.io/docs/providers/rancher2/) ä¸€èµ·ä½¿ç”¨ï¼Œè¿™æ˜¯æ ‡å‡†åŒ– Kubernetes 集群硬件的推è��é€‰é¡¹ã€‚å¦‚æžœä½ ä½¿ç”¨ Rancher Terraform Provider æ�¥é…�置硬件,然å�Žä½¿ç”¨ RKE 模æ�¿åœ¨è¯¥ç¡¬ä»¶ä¸Šé…�ç½® Kubernetes é›†ç¾¤ï¼Œä½ å�¯ä»¥å¿«é€Ÿåˆ›å»ºä¸€ä¸ªå…¨é�¢çš„ã€�å�¯ç”¨äºŽç”Ÿäº§çš„集群。
+
+Terraform 支�:
+
+- å®šä¹‰å‡ ä¹Žä»»ä½•ç±»åž‹çš„åŸºç¡€æž¶æž„å�³ä»£ç �,包括æœ�务器ã€�æ•°æ�®åº“ã€�è´Ÿè½½å�‡è¡¡å™¨ã€�监控ã€�防ç�«å¢™è®¾ç½®å’Œ SSL è¯�书
+- 使用应用商店应用和多集群应用
+- 跨多个平å�°ï¼ˆåŒ…括 Rancher 和主è¦�云æ��供商)对基础设施进行编ç �
+- 将基础架构å�³ä»£ç �æ��交到版本控制
+- 轻���使用基础设施的�置和设置
+- å°†åŸºç¡€æž¶æž„æ›´æ”¹çº³å…¥æ ‡å‡†å¼€å�‘实践
+- 防æ¢ç”±äºŽé…�ç½®å��移,导致一些æœ�务器的é…�置与其他æœ�务器ä¸�å�Œ
+
+## Terraform 工作原�
+
+Terraform 是用扩展å��为 `.tf` 的文件编写的。它是用 HashiCorp é…�ç½®è¯è¨€ç¼–写的。HashiCorp é…�ç½®è¯è¨€æ˜¯ä¸€ç§�声明性è¯è¨€ï¼Œæ”¯æŒ�å®šä¹‰é›†ç¾¤ä¸æ‰€éœ€çš„基础设施ã€�æ£åœ¨ä½¿ç”¨çš„云æ��供商以å�Šæ��供商的å‡è¯�。然å�Ž Terraform å�‘æ��供商å�‘出 API 调用,以便有效地创建基础设施。
+
+è¦�使用 Terraform 创建 Rancher é…�ç½®çš„é›†ç¾¤ï¼Œè¯·è½¬åˆ°ä½ çš„ Terraform é…�置文件并将æ��供商定义为 Rancher 2ã€‚ä½ å�¯ä»¥ä½¿ç”¨ Rancher API å¯†é’¥è®¾ç½®ä½ çš„ Rancher 2 æ��供商。请注æ„�,API 密钥与其关è�”的用户具有相å�Œçš„æ�ƒé™�和访问级别。
+
+ç„¶å�Ž Terraform 会调用 Rancher API æ�¥é…�ç½®ä½ çš„åŸºç¡€è®¾æ–½ï¼Œè€Œ Rancher 调用基础设施æ��ä¾›å•†ã€‚ä¾‹å¦‚ï¼Œå¦‚æžœä½ æƒ³ä½¿ç”¨ Rancher 在 AWS 上预é…�åŸºç¡€è®¾æ–½ï¼Œä½ éœ€è¦�在 Terraform é…�置文件或环境å�˜é‡�䏿��ä¾› Rancher API 密钥和 AWS å‡è¯�,以便它们用于预é…�基础设施。
+
+å¦‚æžœä½ éœ€è¦�å¯¹åŸºç¡€è®¾æ–½è¿›è¡Œæ›´æ”¹ï¼Œä½ å�¯ä»¥åœ¨ Terraform é…�置文件ä¸è¿›è¡Œæ›´æ”¹ï¼Œè€Œä¸�是手动更新æœ�务器。然å�Žï¼Œå�¯ä»¥å°†è¿™äº›æ–‡ä»¶æ��交给版本控制ã€�验è¯�ï¼Œå¹¶æ ¹æ�®éœ€è¦�进行检查。然å�Žï¼Œå½“ä½ è¿�行 `terraform apply` 时,更改将会被部署。
+
+## 使用 Terraform 的技巧
+
+- [Rancher 2 �供商文档](https://www.terraform.io/docs/providers/rancher2/)�供了如何�置集群大部分的示例。
+
+- 在 Terraform 设置ä¸ï¼Œä½ å�¯ä»¥ä½¿ç”¨ Docker Machine 主机驱动æ�¥å®‰è£… Docker Machine。
+
+- å�¯ä»¥åœ¨ Terraform Provider ä¸ä¿®æ”¹èº«ä»½éªŒè¯�。
+
+- å�¯ä»¥é€šè¿‡æ›´æ”¹ Rancher ä¸çš„设置,æ�¥å��å�‘工程如何在 Terraform ä¸å®šä¹‰è®¾ç½®ï¼Œç„¶å�Žè¿”回并检查 Terraform 状æ€�æ–‡ä»¶ï¼Œä»¥æŸ¥çœ‹è¯¥æ–‡ä»¶å¦‚ä½•æ˜ å°„åˆ°åŸºç¡€è®¾æ–½çš„å½“å‰�状æ€�。
+
+- å¦‚æžœä½ æƒ³åœ¨ä¸€ä¸ªåœ°æ–¹ç®¡ç�† Kubernetes 集群设置ã€�Rancher 设置和硬件设置,请使用 [Terraform 模å�—](https://github.com/rancher/terraform-modules)ã€‚ä½ å�¯ä»¥å°†é›†ç¾¤é…�ç½® YAML 文件或 RKE 模æ�¿é…�ç½®æ–‡ä»¶ä¼ é€’ç»™ Terraform 模å�—,以便 Terraform 模å�—创建它。在这ç§�æƒ…å†µä¸‹ï¼Œä½ å�¯ä»¥ä½¿ç”¨åŸºç¡€æž¶æž„å�³ä»£ç �æ�¥ç®¡ç�† Kubernetes 集群å�Šå…¶åº•层硬件的版本控制和修订历å�²ã€‚
+
+## 创建符� CIS 基准的集群的技巧
+
+本节æ��述了一ç§�方法,å�¯ä»¥ä½¿å®‰å…¨å�ˆè§„相关的é…�置文件æˆ�ä¸ºé›†ç¾¤çš„æ ‡å‡†é…�置文件。
+
+åœ¨ä½ åˆ›å»º[符å�ˆ CIS 基准的集群](../../../../pages-for-subheaders/rancher-security.md)æ—¶ï¼Œä½ æœ‰ä¸€ä¸ªåŠ å¯†é…�置文件和一个审计日志é…�置文件。
+
+ä½ çš„åŸºç¡€è®¾æ–½é¢„é…�系统å�¯ä»¥å°†è¿™äº›æ–‡ä»¶å†™å…¥ç£�盘。然å�Žåœ¨ä½ çš„ RKE 模æ�¿ä¸ï¼Œä½ 需è¦�指定这些文件的ä½�置,然å�Žå°†ä½ çš„åŠ å¯†é…�置文件和审计日志é…�置文件作为é¢�å¤–çš„æŒ‚è½½æ·»åŠ åˆ° `kube-api-server`。
+
+ç„¶å�Žï¼Œä½ 需è¦�ç¡®ä¿� RKE 模æ�¿ä¸çš„ `kube-api-server` æ ‡å¿—ä½¿ç”¨ç¬¦å�ˆ CIS çš„é…�置文件。
+
+通过这ç§�æ–¹å¼�ï¼Œä½ å�¯ä»¥åˆ›å»ºç¬¦å�ˆ CIS åŸºå‡†çš„æ ‡å¿—ã€‚
+
+## 资�
+
+- [Terraform 文档](https://www.terraform.io/docs/)
+- [Rancher2 Terraform Provider 文档](https://www.terraform.io/docs/providers/rancher2/)
+- [The RanchCast - 第 1 集:Rancher 2 Terraform Provider](https://youtu.be/YNCq-prI8-8)ï¼šåœ¨æ¤æ¼”示ä¸ï¼Œç¤¾åŒºä¸»ç®¡ Jason van Brackel 使用 Rancher 2 Terraform Provider 创建了节点并创建自定义集群。
\ No newline at end of file
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/manage-rke1-templates.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/manage-rke1-templates.md
new file mode 100644
index 00000000000..6e4adb98239
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/manage-rke1-templates.md
@@ -0,0 +1,161 @@
+---
+title: 创建和修改 RKE 模�
+---
+
+本节介ç»�如何管ç�† RKE 模æ�¿å’Œä¿®è®¢ç‰ˆã€‚ä½ å�¯ä»¥ä»Ž **RKE1 é…�ç½® > RKE 模æ�¿**下的**集群管ç�†**视图创建ã€�共享ã€�æ›´æ–°å’Œåˆ é™¤æ¨¡æ�¿ã€‚
+
+模æ�¿æ›´æ–°é€šè¿‡ä¿®è®¢ç³»ç»Ÿå¤„ç�†ã€‚当模æ�¿æ‰€æœ‰è€…想è¦�更改或更新模æ�¿æ—¶ï¼Œä»–们会创建模æ�¿çš„æ–°ç‰ˆæœ¬ã€‚å�•ä¸ªä¿®è®¢æ— æ³•ç¼–è¾‘ã€‚ä½†æ˜¯ï¼Œå¦‚æžœä½ æƒ³é˜²æ¢ä½¿ç”¨ä¿®è®¢æ�¥åˆ›å»ºæ–°é›†ç¾¤ï¼Œä½ å�¯ä»¥ç¦�用它。
+
+ä½ å�¯ä»¥ä½¿ç”¨ä¸¤ç§�æ–¹å¼�æ�¥ä½¿ç”¨æ¨¡æ�¿ä¿®è®¢ï¼šåˆ›å»ºæ–°é›†ç¾¤ï¼Œæˆ–å�‡çº§ä½¿ç”¨è¾ƒæ—©ç‰ˆæœ¬çš„æ¨¡æ�¿åˆ›å»ºçš„集群。模æ�¿åˆ›å»ºè€…å�¯ä»¥è®¾ç½®é»˜è®¤ä¿®è®¢ç‰ˆï¼Œä½†æ˜¯åœ¨æœ€ç»ˆç”¨æˆ·åˆ›å»ºé›†ç¾¤æ—¶ï¼Œä»–们å�¯ä»¥é€‰æ‹©ä»»ä½•模æ�¿ä»¥å�Šå�¯ä¾›ä½¿ç”¨çš„任何模æ�¿ä¿®è®¢ç‰ˆã€‚使用指定的修订版创建集群å�Žï¼Œå°±æ— 法将其更改为å�¦ä¸€ä¸ªæ¨¡æ�¿ï¼Œä½†æ˜¯å�¯ä»¥å°†é›†ç¾¤å�‡çº§ä¸ºå�Œä¸€æ¨¡æ�¿çš„较新的å�¯ç”¨ä¿®è®¢ç‰ˆã€‚
+
+模æ�¿æ‰€æœ‰è€…对模æ�¿ä¿®è®¢ç‰ˆå…·æœ‰å®Œå…¨æŽ§åˆ¶æ�ƒï¼Œå¹¶ä¸”å�¯ä»¥åˆ›å»ºæ–°çš„修订版æ�¥æ›´æ–°æ¨¡æ�¿ï¼Œåˆ 除或ç¦�用ä¸�应被用于创建集群的修订版,和设置默认的模æ�¿ä¿®è®¢ç‰ˆã€‚
+
+
+### 先决�件
+
+å¦‚æžœä½ å…·æœ‰**创建 RKE 模æ�¿**æ�ƒé™�,则å�¯ä»¥åˆ›å»º RKE 模æ�¿ï¼Œè¯¥æ�ƒé™�å�¯ç”±[管ç�†å‘˜æŽˆäºˆ](creator-permissions.md)。
+
+å¦‚æžœä½ æ˜¯æ¨¡æ�¿çš„æ‰€æœ‰è€…ï¼Œä½ å�¯ä»¥ä¿®æ”¹ã€�å…±äº«å’Œåˆ é™¤æ¨¡æ�¿ã€‚有关如何æˆ�为模æ�¿æ‰€æœ‰è€…的详细信æ�¯ï¼Œè¯·å�‚阅[共享模æ�¿æ‰€æœ‰æ�ƒæ–‡æ¡£](access-or-share-templates.md#共享模æ�¿æ‰€æœ‰æ�ƒ)。
+
+### 创建模�
+
+1. 在左上角,�击 **☰ > 集群管�**。
+1. �击 **RKE1 �置 > 节点模�**。
+1. å�•击**æ·»åŠ æ¨¡æ�¿**。
+1. 输入模�的�称。Rancher 已�为模�的第一个版本自动生�了�称,该版本与该模�一起创建。
+1. å�¯é€‰ï¼šé€šè¿‡å°†ç”¨æˆ·æ·»åŠ ä¸ºæˆ�员,æ�¥[与其他用户或组共享模æ�¿](access-or-share-templates.md#与特定用户或组共享模æ�¿)ã€‚ä½ è¿˜å�¯ä»¥å°†æ¨¡æ�¿å…¬å¼€ï¼Œä»Žè€Œä¸Ž Rancher ä¸çš„æ‰€æœ‰äººå…±äº«ã€‚
+1. ç„¶å�ŽæŒ‰ç…§å±�å¹•ä¸Šçš„è¡¨æ ¼å°†é›†ç¾¤é…�ç½®å�‚æ•°ä¿�å˜ä¸ºæ¨¡æ�¿ä¿®è®¢çš„一部分。å�¯ä»¥å°†ä¿®è®¢æ ‡è®°ä¸ºæ¤æ¨¡æ�¿çš„默认值。
+
+**结果**:é…�置了具有一个修订版的 RKE 模æ�¿ã€‚ä½ å�¯ä»¥ç¨�å�Žåœ¨[é…�ç½® Rancher å�¯åŠ¨çš„é›†ç¾¤](../../../../pages-for-subheaders/launch-kubernetes-with-rancher.md)æ—¶ä½¿ç”¨æ¤ RKE 模æ�¿ä¿®è®¢ç‰ˆã€‚通过 RKE 模æ�¿ç®¡ç�†é›†ç¾¤å�Žï¼Œé›†ç¾¤æ— 法解除与模æ�¿çš„ç»‘å®šï¼Œå¹¶ä¸”æ— æ³•å�–消选ä¸**使用现有 RKE 模æ�¿å’Œä¿®è®¢ç‰ˆ**。
+
+### 更新模�
+
+更新 RKE 模�相当于创建现有模�的修订版。使用旧版本模�创建的集群�以进行更新,从而匹�新版本。
+
+ä½ ä¸�能编辑å�•ä¸ªä¿®è®¢ã€‚ç”±äºŽä½ æ— æ³•ç¼–è¾‘æ¨¡æ�¿çš„å�•个修订,为了防æ¢ä½¿ç”¨æŸ�ä¸ªä¿®è®¢ï¼Œä½ å�¯ä»¥[ç¦�用该修订版](#ç¦�用模æ�¿ä¿®è®¢ç‰ˆ)。
+
+创建新模�修订时,使用旧模�修订的集群��影�。
+
+1. 在左上角,�击 **☰ > 集群管�**。
+1. 在左侧导航æ �,å�•击 **RKE1 é…�ç½® > RKE 模æ�¿**。
+1. 转到�编辑的模�,然��击 **⋮ > 编辑**。
+1. 编辑所需信æ�¯å¹¶å�•击**ä¿�å˜**。
+1. å�¯é€‰ï¼šä½ å�¯ä»¥æ›´æ”¹æ¤æ¨¡æ�¿çš„默认修订版,也å�¯ä»¥æ›´æ”¹å…±äº«å¯¹è±¡ã€‚
+
+**结果**:模�已更新。�将其应用到使用旧版本模�的集群,请�阅[�级集群以使用新的模�修订版](#�级集群以使用新的模�修订版)。
+
+### åˆ é™¤æ¨¡æ�¿
+
+当ä¸�å†�需è¦�为任何集群使用æŸ�个 RKE 模æ�¿æ—¶ï¼Œå�¯ä»¥å°†å…¶åˆ 除。
+
+1. 在左上角,�击 **☰ > 集群管�**。
+1. �击 **RKE1 �置 > RKE 模�**。
+1. 转到è¦�åˆ é™¤çš„ RKE 模æ�¿ï¼Œç„¶å�Žå�•击 **â‹® > åˆ é™¤**。
+1. ç¡®è®¤åˆ é™¤ã€‚
+
+**结果**:模æ�¿è¢«åˆ 除。
+
+### 基于默认版创建新修订版
+
+ä½ å�¯ä»¥å¤�制默认模æ�¿ä¿®è®¢ç‰ˆå¹¶å¿«é€Ÿæ›´æ–°å…¶è®¾ç½®ï¼Œè€Œæ— 需从头开始创建新修订版。克隆模æ�¿ä¸ºä½ çœ�去了é‡�新输入集群创建所需的访问密钥和其他å�‚数的麻烦。
+
+1. 在左上角,�击 **☰ > 集群管�**。
+1. 在左侧导航æ �,å�•击 **RKE1 é…�ç½® > RKE 模æ�¿**。
+1. 转到�克隆的 RKE 模�,然��击 **⋮ > 基于默认版创建新修订版**。
+1. 填写表�的其余部分�创建新修订。
+
+**结果**:克隆并�置了 RKE 模�修订版。
+
+### 基于克隆版创建新修订版
+
+通过用户设置创建新的 RKE 模æ�¿ä¿®è®¢ç‰ˆæ—¶ï¼Œå�¯ä»¥å…‹éš†çŽ°æœ‰ä¿®è®¢ç‰ˆå¹¶å¿«é€Ÿæ›´æ–°å…¶è®¾ç½®ï¼Œè€Œæ— éœ€ä»Žå¤´å¼€å§‹åˆ›å»ºæ–°çš„ä¿®è®¢ç‰ˆã€‚å…‹éš†æ¨¡æ�¿ä¿®è®¢çœ�去了é‡�新输入集群å�‚数的麻烦。
+
+1. 在左上角,�击 **☰ > 集群管�**。
+1. 在 **RKE1 �置**下,�击 **RKE 模�**。
+1. 转到�克隆的模�修订。然�选择 **⋮ > 克隆修订版**。
+1. 填写表�的其余部分。
+
+**结果**:克隆并é…�置了 RKE 模æ�¿ä¿®è®¢ç‰ˆã€‚ä½ å�¯ä»¥åœ¨é…�置集群时使用 RKE 模æ�¿ä¿®è®¢ã€‚ä»»ä½•ä½¿ç”¨æ¤ RKE 模æ�¿çš„现有集群都å�¯ä»¥å�‡çº§åˆ°æ¤æ–°ç‰ˆæœ¬ã€‚
+
+### �用模�修订版
+
+å½“ä½ ä¸�需è¦�å°† RKE 模æ�¿ä¿®è®¢ç‰ˆæœ¬ç”¨äºŽåˆ›å»ºæ–°é›†ç¾¤æ—¶ï¼Œå�¯ä»¥ç¦�用模æ�¿ä¿®è®¢ç‰ˆã€‚ä½ ä¹Ÿå�¯ä»¥é‡�æ–°å�¯ç”¨ç¦�用了的修订版。
+
+å¦‚æžœæ²¡æœ‰ä»»ä½•é›†ç¾¤ä½¿ç”¨è¯¥ä¿®è®¢ï¼Œä½ å�¯ä»¥ç¦�用该修订。
+
+1. 在左上角,�击 **☰ > 集群管�**。
+1. 在左侧导航æ �,å�•击 **RKE1 é…�ç½® > RKE 模æ�¿**。
+1. 转到��用的模�修订版。然�选择 **⋮ > �用**。
+
+**结果**:RKE 模�修订版�能用于创建新集群。
+
+### �新�用�用的模�修订版
+
+如果è¦�使用已ç¦�用的 RKE 模æ�¿ä¿®è®¢ç‰ˆæ�¥åˆ›å»ºæ–°é›†ç¾¤ï¼Œä½ å�¯ä»¥é‡�æ–°å�¯ç”¨è¯¥ä¿®è®¢ç‰ˆã€‚
+
+1. 在左上角,�击 **☰ > 集群管�**。
+1. 在 **RKE1 �置**下,�击 **RKE 模�**。
+1. 转到��新�用的模�修订。然�选择 **⋮ > �用**。
+
+**结果**:RKE 模�修订版�用于创建新集群。
+
+### 将模�修订版设置为默认
+
+当最终用户使用 RKE 模æ�¿åˆ›å»ºé›†ç¾¤æ—¶ï¼Œä»–们å�¯ä»¥é€‰æ‹©ä½¿ç”¨å“ªä¸ªç‰ˆæœ¬æ�¥åˆ›å»ºé›†ç¾¤ã€‚ä½ å�¯ä»¥é…�置默认使用的版本。
+
+�将 RKE 模�修订版设置为默认:
+
+1. 在左上角,�击 **☰ > 集群管�**。
+1. 在左侧导航æ �,å�•击 **RKE1 é…�ç½® > RKE 模æ�¿**。
+1. 转到�设为默认的 RKE 模�修订版,然��击 **⋮ > 设为默认�置**。
+
+**结果**:使用模�创建集群时,RKE 模�修订版将用作默认选项。
+
+### åˆ é™¤æ¨¡æ�¿ä¿®è®¢ç‰ˆ
+
+ä½ å�¯ä»¥åˆ 除模æ�¿çš„æ‰€æœ‰ä¿®è®¢ï¼ˆé»˜è®¤ä¿®è®¢é™¤å¤–)。
+
+è¦�æ°¸ä¹…åˆ é™¤ä¿®è®¢ç‰ˆï¼š
+
+1. 在左上角,�击 **☰ > 集群管�**。
+1. 在左侧导航æ �,å�•击 **RKE1 é…�ç½® > RKE 模æ�¿**。
+1. 转到è¦�åˆ é™¤çš„ RKE 模æ�¿ä¿®è®¢ç‰ˆï¼Œç„¶å�Žå�•击 **â‹® > åˆ é™¤**。
+
+**结果**:RKE 模æ�¿ä¿®è®¢ç‰ˆè¢«åˆ 除。
+
+### �级集群以使用新的模�修订版
+
+:::note
+
+本部分å�‡è®¾ä½ å·²ç»�有一个集群,该集群[应用了 RKE 模æ�¿](apply-templates.md)。
+
+本部分还å�‡è®¾ä½ å·²[更新了集群使用的模æ�¿](#更新模æ�¿),以便å�¯ä»¥ä½¿ç”¨æ–°çš„æ¨¡æ�¿ä¿®è®¢ç‰ˆã€‚
+
+:::
+
+�将集群�级到使用新的模�修订版:
+
+1. 在左上角,�击 **☰ > 集群管�**。
+1. 转到��级的集群,然��击 **⋮ > 编辑�置**。
+1. 在**集群选项**ä¸ï¼Œå�•击模æ�¿ä¿®è®¢ç‰ˆçš„下拉è�œå�•,然å�Žé€‰æ‹©æ–°çš„æ¨¡æ�¿ä¿®è®¢ç‰ˆã€‚
+1. å�•击**ä¿�å˜**。
+
+**结果**:集群已å�‡çº§ä¸ºä½¿ç”¨æ–°æ¨¡æ�¿ä¿®è®¢ç‰ˆä¸å®šä¹‰çš„设置。
+
+### å°†æ£åœ¨è¿�行的集群导出到新的 RKE 模æ�¿å’Œä¿®è®¢ç‰ˆ
+
+ä½ å�¯ä»¥å°†çŽ°æœ‰é›†ç¾¤çš„è®¾ç½®ä¿�å˜ä¸º RKE 模æ�¿ã€‚
+
+这将把集群的设置导出为新的 RKE 模�,并且将集群绑定到该模�。然�,�有[更新了模�](#更新模�)并且集群�级到[使用更新版本的模�](#�级集群以使用新的模�修订版)时,集群�能改�。
+
+�将现有集群转�为使用 RKE 模�:
+
+1. 在左上角,�击 **☰ > 集群管�**。
+1. 转到将被转æ�¢ä¸ºä½¿ç”¨ RKE 模æ�¿çš„集群,然å�Ž **â‹® > ä¿�å˜ä¸º RKE 模æ�¿**。
+1. 在出现的表å�•ä¸è¾“å…¥ RKE 模æ�¿çš„å��称,然å�Žå�•击**创建**。
+
+**结果**:
+
+- 创建了一个新的 RKE 模�。
+- 将集群转�为使用该新模�。
+- �以[使用新模�和修订版创建新集群。](apply-templates.md#使用-rke-模�创建集群)
\ No newline at end of file
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/override-template-settings.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/override-template-settings.md
new file mode 100644
index 00000000000..11ecac6fabd
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/override-template-settings.md
@@ -0,0 +1,14 @@
+---
+title: 覆盖模�设置
+---
+
+用户创建 RKE 模æ�¿æ—¶ï¼Œæ¨¡æ�¿ä¸çš„æ¯�个设置在 Rancher UI ä¸éƒ½æœ‰ä¸€ä¸ªå¼€å…³ï¼ŒæŒ‡ç¤ºç”¨æˆ·æ˜¯å�¦å�¯ä»¥è¦†ç›–该设置。æ¤å¼€å…³å°†è¿™äº›è®¾ç½®æ ‡è®°ä¸º**å…�许用户覆盖**。打开开关表示用户å�¯ä»¥ä¿®æ”¹å¯¹åº”çš„å�‚数,关é—å¼€å…³è¡¨ç¤ºç”¨æˆ·æ— æ�ƒä¿®æ”¹å¯¹åº”çš„å�‚数。
+
+使用模æ�¿åˆ›å»ºé›†ç¾¤å�Žï¼Œé™¤é�žæ¨¡æ�¿æ‰€æœ‰è€…å°†è®¾ç½®æ ‡è®°ä¸º**å…�许用户覆盖**,å�¦åˆ™æœ€ç»ˆç”¨æˆ·æ— 法更新模æ�¿ä¸å®šä¹‰çš„任何设置。但是,如果模æ�¿[更新到新修订版](manage-rke1-templates.md),且该修订版更改了设置或å…�许最终用户更改设置,则集群å�¯ä»¥å�‡çº§åˆ°æ¨¡æ�¿çš„æ–°ä¿®è®¢ç‰ˆï¼Œå¹¶ä¸”新修订版ä¸çš„æ›´æ”¹å°†åº”用于集群。
+
+如果 RKE 模æ�¿ä¸Šçš„任何å�‚数设置为**å…�许用户覆盖**ï¼Œæœ€ç»ˆç”¨æˆ·å¿…é¡»åœ¨é›†ç¾¤åˆ›å»ºæœŸé—´è®¾ç½®è¿™äº›å—æ®µï¼Œç„¶å�Žä»–们å�¯ä»¥éš�时编辑这些设置。
+
+RKE 模�的**�许用户覆盖**选项的适用场景如下:
+
+- 管�员认为�些�数需����活性,以便�时更新。
+- 最终用户将需è¦�输入他们自己的访问密钥或密文密钥,例如,云å‡è¯�或备份快照的å‡è¯�。
\ No newline at end of file
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/authentication-config/configure-active-directory.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/authentication-config/configure-active-directory.md
new file mode 100644
index 00000000000..704c47a68c5
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/authentication-config/configure-active-directory.md
@@ -0,0 +1,219 @@
+---
+title: �置 Active Directory (AD)
+---
+
+å¦‚æžœä½ çš„ç»„ç»‡ä½¿ç”¨ Microsoft Active Directory 作为ä¸å¿ƒç”¨æˆ·ä»“åº“ï¼Œä½ å�¯ä»¥å°† Rancher é…�置为与 Active Directory æœ�务器通信,从而对用户进行身份验è¯�。这使 Rancher 管ç�†å‘˜å�¯ä»¥å¯¹å¤–部用户系统ä¸çš„用户和组进行集群和项目的访问控制,å�Œæ—¶å…�许最终用户在登录 Rancher UI 时使用 Active Directory å‡è¯�进行身份验è¯�。
+
+Rancher 使用 LDAP 与 Active Directory æœ�åŠ¡å™¨é€šä¿¡ã€‚å› æ¤ï¼ŒActive Directory 与 [OpenLDAP 身份验è¯�](../../../../pages-for-subheaders/configure-openldap.md)çš„æµ�程相å�Œã€‚
+
+:::note
+
+在开始之�,请熟悉[外部身份验��置和主体用户](../../../../pages-for-subheaders/authentication-config.md#外部身份验��置和用户主体)的概念。
+
+:::
+
+## 先决�件
+
+ä½ éœ€è¦�åˆ›å»ºæˆ–ä»Žä½ çš„ AD 管ç�†å‘˜å¤„获å�–一个新的 AD 用户,用作 Rancher çš„ ServiceAccount。æ¤ç”¨æˆ·å¿…须具有足够的æ�ƒé™�,æ‰�能执行 LDAP æ�œç´¢å¹¶è¯»å�–ä½ çš„ AD 域下的用户和组的属性。
+
+通常å�¯ä»¥ä½¿ç”¨ï¼ˆé�žç®¡ç�†å‘˜ï¼‰**域用户**è´¦å�·ï¼Œå› 为默认情况下,该用户对域分区ä¸çš„大多数对象具有å�ªè¯»ç‰¹æ�ƒã€‚
+
+但是,请注æ„�,在æŸ�些é”�定的 Active Directory é…�ç½®ä¸ï¼Œæ¤é»˜è®¤æ“�作å�¯èƒ½ä¸�适用。在这ç§�æƒ…å†µä¸‹ï¼Œä½ éœ€è¦�ç¡®ä¿� ServiceAccount 用户在 Base OU(包å�«ç”¨æˆ·å’Œç»„)上或全局范围内至少拥有域的 **Read** å’Œ **List Content** æ�ƒé™�。
+
+:::note 使用 TLS?
+
+- 如果 AD æœ�务器使用的è¯�书是自ç¾å��的或ä¸�是æ�¥è‡ªè®¤å�¯çš„è¯�书é¢�å�‘机构,请确ä¿�手头有 PEM æ ¼å¼�çš„ CA è¯�书(包å�«æ‰€æœ‰ä¸é—´è¯�ä¹¦ï¼‰ã€‚ä½ å¿…é¡»åœ¨é…�置期间粘贴æ¤è¯�书,以便 Rancher 能够验è¯�è¯�书链。
+
+- å�‡çº§åˆ° v2.6.0 å�Žï¼Œå¦‚æžœ AD æœ�务器上的è¯�书ä¸�支æŒ� SAN 属性,则使用 TLS 通过 Rancher 对 Active Directory 进行身份验è¯�å�¯èƒ½ä¼šå¤±è´¥ã€‚这是 Go v1.15 ä¸é»˜è®¤å�¯ç”¨çš„æ£€æŸ¥ã€‚
+
+ - 收到"Error creating SSL connection: LDAP Result Code 200 "Network Error": x509 错误:è¯�书ä¾�赖于旧的通用å��称(Common Nameï¼‰å—æ®µï¼Œä½¿ç”¨ SAN 或临时å�¯ç”¨ä¸Ž GODEBUG=x509ignoreCN=0 匹é…�的通用å��称。
+
+ - è¦�解决æ¤é”™è¯¯ï¼Œè¯·ä½¿ç”¨æ”¯æŒ� SAN 属性的新è¯�书更新或替æ�¢ AD æœ�务器上的è¯�书。或者,将 `GODEBUG=x509ignoreCN=0` 设置为 Rancher Server 容器的环境å�˜é‡�æ�¥å¿½ç•¥æ¤é”™è¯¯ã€‚
+
+:::
+
+## é…�ç½®æ¥éª¤
+### 打开 Active Directory �置
+
+1. 使用�始的本地 `admin` 账�登录到 Rancher UI。
+1. 在左上角,�击 **☰ > 用户 & 认�**。
+1. 在左侧导航æ �,å�•击**认è¯�**。
+1. �击 **ActiveDirectory**。然�会显示**验��供程�:ActiveDirectory** 的表�。
+1. 填写表�。如果需�获�帮助,请��下方的�置选项详情。
+1. 点击**�用**。
+
+### �置 Active Directory �务器
+
+在 `1. é…�ç½® Active Directory æœ�务器` çš„æ¥éª¤ä¸ï¼Œä½¿ç”¨ä½ Active Directory 的实际信æ�¯å®Œæˆ�å—æ®µé…�置。有关æ¯�个å�‚数所需值的详细信æ�¯ï¼Œè¯·å�‚阅下表。
+
+:::note
+
+å¦‚æžœä½ ä¸�确定è¦�在用户/组`æ�œç´¢åº“`å—æ®µä¸è¾“入什么值,请å�‚è§�[使用 ldapsearch 确定æ�œç´¢åº“å’Œ Schema](#附录使用-ldapsearch-确定æ�œç´¢åº“å’Œ-schema)。
+
+:::
+
+**表 1:AD �务器�数**
+
+| �数 | �述 |
+|:--|:--|
+| 主机� | 指定 AD �务器的主机�或 IP 地�。 |
+| 端å�£ | 指定 AD æœ�务器监å�¬è¿žæŽ¥çš„端å�£ã€‚æœªåŠ å¯†çš„ LDAP 通常使用 389 çš„æ ‡å‡†ç«¯å�£ï¼Œè€Œ LDAPS 使用 636 端å�£ã€‚ |
+| TLS | 选䏿¤æ¡†å�¯å�¯ç”¨ SSL/TLS 上的 LDAP(通常称为 LDAPS)。 |
+| æœ�务器连接超时 | Rancher åœ¨è®¤ä¸ºæ— æ³•è®¿é—® AD æœ�务器之å‰�ç‰å¾…的时间(秒)。 |
+| ServiceAccount 用户å�� | 输入对域分区具有å�ªè¯»è®¿é—®æ�ƒé™�çš„ AD è´¦å�·çš„用户å��(å�‚è§�[先决æ�¡ä»¶](#先决æ�¡ä»¶))。用户å��å�¯ä»¥ç”¨ NetBIOS(例如 "DOMAIN\serviceaccount")或 UPN æ ¼å¼�(例如 "serviceaccount@domain.com")。 |
+| ServiceAccount 密ç � | ServiceAccount 的密ç �。 |
+| 默认登录域 | å¦‚æžœä½ ä½¿ç”¨ AD 域的 NetBIOS å��ç§°é…�ç½®æ¤å—段,在绑定到 AD æœ�务器时,没有包å�«åŸŸçš„用户å��(例如“jdoeâ€�)将自动转æ�¢ä¸ºå¸¦æ–œæ� çš„ NetBIOS 登录(例如,“LOGIN_DOMAIN\jdoeâ€�ï¼‰ã€‚å¦‚æžœä½ çš„ç”¨æˆ·ä»¥ UPN(例如,"jdoe@acme.com")作为用户å��进行身份验è¯�,则æ¤å—段必须**å¿…é¡»**留空。 |
+| 用户æ�œç´¢åº“ | è¾“å…¥ç›®å½•æ ‘ä¸å¼€å§‹æ�œç´¢ç”¨æˆ·å¯¹è±¡çš„èŠ‚ç‚¹çš„æ ‡è¯†å��称(DN)。所有用户都必须是æ¤åŸºç¡€æ ‡è¯†å��ç§°çš„å�Žä»£ã€‚例如,"ou=people,dc=acme,dc=com"。 |
+| 组æ�œç´¢åº“ | 如果组ä½�于`用户æ�œç´¢åº“`下é…�置的节点之外的其他节点下,则需è¦�在æ¤å¤„æ��ä¾›æ ‡è¯†å��称。å�¦åˆ™è¯·ç•™ç©ºã€‚例如:"ou=groups,dc=acme,dc=com"。 |
+
+---
+
+### �置用户/组 Schema
+
+在 `2. 自定义 Schema` ä¸ï¼Œä½ 必须为 Rancher æ��供与目录ä¸ä½¿ç”¨çš„ Schema 对应的用户和组属性的æ£ç¡®æ˜ 射。
+
+Rancher 使用 LDAP 查询æ�¥æ�œç´¢å’Œæ£€ç´¢å…³äºŽ Active Directory ä¸çš„用户和组的信æ�¯ã€‚本节ä¸é…�ç½®çš„å±žæ€§æ˜ å°„ç”¨äºŽæž„é€ æ�œç´¢ç›é€‰å™¨å’Œè§£æž�组æˆ�å‘˜èº«ä»½ã€‚å› æ¤ï¼Œæ‰€æ��供的设置需è¦�å��æ˜ ä½ AD 域的真实情况。
+
+:::note
+
+å¦‚æžœä½ ä¸�熟悉 Active Directory 域ä¸ä½¿ç”¨çš„ Schema,请å�‚è§�[使用 ldapsearch 确定æ�œç´¢åº“å’Œ Schema](#附录使用-ldapsearch-确定æ�œç´¢åº“å’Œ-schema) æ�¥ç¡®å®šæ£ç¡®çš„é…�置值。
+
+:::
+
+#### 用户 Schema
+
+下表详细说明了用户 Schema �置的�数。
+
+**表 2:用户 Schema �置�数**
+
+| �数 | �述 |
+|:--|:--|
+| Object Class | 域ä¸ç”¨äºŽç”¨æˆ·å¯¹è±¡çš„对象类别å��称。如果定义了æ¤å�‚数,则仅指定对象类别的å��ç§° - *请勿*将其放在 LDAP 包装器ä¸ï¼Œä¾‹å¦‚ `&(objectClass=xxxx)`。 |
+| Username Attribute | 用户属性的值适�作为显示�称。 |
+| Login Attribute | 登录属性的值与用户登录 Rancher 时输入的å‡è¯�的用户å��部分匹é…�ã€‚å¦‚æžœä½ çš„ç”¨æˆ·ä»¥ä»–çš„ UPN(例如 "jdoe@acme.com")作为用户å��进行身份验è¯�,则æ¤å—段通常必须设置为 `userPrincipalName`。å�¦åˆ™ï¼Œå¯¹äºŽæ—§çš„ NetBIOS é£Žæ ¼çš„ç™»å½•å��(例如 "jdoe"),则通常设为 `sAMAccountName`。 |
+| User Member Attribute | 包�用户所属组的属性。 |
+| Search Attribute | 当用户输入文本以在用户界é�¢ä¸æ·»åŠ ç”¨æˆ·æˆ–ç»„æ—¶ï¼ŒRancher 会查询 AD æœ�务器,并å°�è¯•æ ¹æ�®æ¤è®¾ç½®ä¸æ��供的属性匹é…�用户。å�¯ä»¥é€šè¿‡ä½¿ç”¨ç®¡é�“(“\|â€�)符å�·åˆ†éš”属性æ�¥æŒ‡å®šå¤šä¸ªå±žæ€§ã€‚è¦�匹é…� UPN 用户å��(例如 jdoe@acme.com),通常应将æ¤å—段的值设置为 `userPrincipalName`。 |
+| Search Filter | 当 Rancher å°�è¯•å°†ç”¨æˆ·æ·»åŠ åˆ°ç½‘ç«™è®¿é—®åˆ—è¡¨ï¼Œæˆ–å°�试将æˆ�å‘˜æ·»åŠ åˆ°é›†ç¾¤æˆ–é¡¹ç›®æ—¶ï¼Œæ¤ç›é€‰å™¨å°†åº”用于æ�œç´¢çš„用户列表。例如,用户æ�œç´¢ç›é€‰å™¨å�¯èƒ½æ˜¯ (|(memberOf=CN=group1,CN=Users,DC=testad,DC=rancher,DC=io)(memberOf=CN=group2,CN=Users,DC=testad,DC=rancher,DC=io))。注æ„�:如果æ�œç´¢ç›é€‰å™¨æœªä½¿ç”¨[有效的 AD æ�œç´¢è¯æ³•](https://docs.microsoft.com/en-us/windows/win32/adsi/search-filter-syntax),则用户列表将为空。 |
+| User Enabled Attribute | 该属性是一个整数值,代表用户账å�·æ ‡å¿—的枚举。Rancher 使用æ¤é€‰é¡¹æ�¥ç¡®å®šç”¨æˆ·è´¦å�·æ˜¯å�¦å·²ç¦�用。通常应该将æ¤å�‚数设置为 AD æ ‡å‡†çš„ `userAccountControl`。 |
+| Disabled Status Bitmask | 指定的ç¦�用用户账å�·çš„ `User Enabled Attribute` çš„å€¼ã€‚é€šå¸¸ï¼Œä½ åº”è¯¥å°†æ¤å�‚数设置为 Microsoft Active Directory Schema 䏿Œ‡å®šçš„默认值 2(请å�‚è§�[æ¤å¤„](https://docs.microsoft.com/en-us/windows/desktop/adschema/a-useraccountcontrol#remarks))。 |
+
+---
+
+#### 组 Schema
+
+下表详细说明了组 Schema �置的�数。
+
+**表 3:组 Schema �置�数**
+
+| �数 | �述 |
+|:--|:--|
+| Object Class | 域ä¸ç”¨äºŽç»„对象的对象类别å��称。如果定义了æ¤å�‚数,则仅指定对象类别的å��ç§° - *请勿*将其放在 LDAP 包装器ä¸ï¼Œä¾‹å¦‚ `&(objectClass=xxxx)`。 |
+| Name Attribute | �称属性的值适�作为显示�称。 |
+| Group Member User Attribute | **用户属性**çš„å��ç§°ã€‚å®ƒçš„æ ¼å¼�与 `Group Member Mapping Attribute` ä¸çš„组æˆ�员匹é…�。 |
+| Group Member Mapping Attribute | 包�组�员的组属性的�称。 |
+| Search Attribute | åœ¨å°†ç»„æ·»åŠ åˆ°é›†ç¾¤æˆ–é¡¹ç›®æ—¶ï¼Œç”¨äºŽæž„é€ æ�œç´¢ç›é€‰å™¨çš„属性。请å�‚è§�用户 Schema çš„ `Search Attribute`。 |
+| Search Filter | 当 Rancher å°�è¯•å°†ç»„æ·»åŠ åˆ°ç½‘ç«™è®¿é—®åˆ—è¡¨ï¼Œæˆ–å°†ç»„æ·»åŠ åˆ°é›†ç¾¤æˆ–é¡¹ç›®æ—¶ï¼Œæ¤ç›é€‰å™¨å°†åº”用于æ�œç´¢çš„组列表。例如,组æ�œç´¢ç›é€‰å™¨å�¯ä»¥æ˜¯ (|(cn=group1)(cn=group2))。注æ„�:如果æ�œç´¢ç›é€‰å™¨æœªä½¿ç”¨[有效的 AD æ�œç´¢è¯æ³•](https://docs.microsoft.com/en-us/windows/win32/adsi/search-filter-syntax),则组列表将为空。 |
+| Group DN Attribute | 组属性的å��ç§°ï¼Œå…¶æ ¼å¼�与æ��述用户æˆ�员身份的用户属性ä¸çš„值匹é…�。å�‚è§� `User Member Attribute`。 |
+| Nested Group Membership | æ¤è®¾ç½®å®šä¹‰ Rancher 是å�¦åº”è§£æž�嵌套组æˆ�å‘˜èº«ä»½ã€‚ä»…å½“ä½ çš„ç»„ç»‡ä½¿ç”¨è¿™äº›åµŒå¥—æˆ�员身份时æ‰�使用(å�³ä½ 有包å�«å…¶ä»–组作为æˆ�员的组。我们建议尽é‡�é�¿å…�使用嵌套组,从而é�¿å…�在å˜åœ¨å¤§é‡�嵌套æˆ�员时出现潜在的性能问题)。 |
+
+---
+
+### 测试身份验�
+
+完æˆ�é…�ç½®å�Žï¼Œè¯·**ä½¿ç”¨ä½ çš„ AD 管ç�†å‘˜è´¦æˆ·**测试与 AD æœ�务器的连接。如果测试æˆ�功,将å�¯ç”¨é…�置的 Active Directory 身份验è¯�,测试时使用的账å�·ä¼šæˆ�为管ç�†å‘˜ã€‚
+
+:::note
+
+ä¸Žæ¤æ¥éª¤ä¸è¾“入的å‡è¯�相关的 AD ç”¨æˆ·å°†æ˜ å°„åˆ°æœ¬åœ°ä¸»ä½“è´¦å�·ï¼Œå¹¶åœ¨ Rancher ä¸åˆ†é…�系统管ç�†å‘˜æ�ƒé™�ã€‚å› æ¤ï¼Œä½ 应该决定使用哪个 AD è´¦å�·æ�¥æ‰§è¡Œæ¤æ¥éª¤ã€‚
+
+:::
+
+1. è¾“å…¥åº”æ˜ å°„åˆ°æœ¬åœ°ä¸»ä½“è´¦å�·çš„ AD è´¦å�·çš„**用户å��**å’Œ**密ç �** 。
+2. 点击**�用 Active Directory 认�**�完�设置。
+
+**结果**:
+
+- 已�用 Active Directory 身份验�。
+- ä½ å·²ä½¿ç”¨ AD å‡è¯�以系统管ç�†å‘˜èº«ä»½ç™»å½•到 Rancher。
+
+:::note
+
+如果 LDAP æœ�åŠ¡ä¸æ–ï¼Œä½ ä»�ç„¶å�¯ä»¥ä½¿ç”¨æœ¬åœ°é…�置的 `admin` è´¦å�·å’Œå¯†ç �登录。
+
+:::
+
+## 附录:使用 ldapsearch 确定�索库和 Schema
+
+为了æˆ�功é…�ç½® AD 身份验è¯�ï¼Œä½ å¿…é¡»æ��ä¾› AD æœ�务器的层次结构和 Schema çš„æ£ç¡®é…�置。
+
+[`ldapsearch`](https://manpages.ubuntu.com/manpages/kinetic/en/man1/ldapsearch.1.html) 工具å…�è®¸ä½ æŸ¥è¯¢ä½ çš„ AD æœ�务器,从而了解用于用户和组对象的 Schema。
+
+在下é�¢çš„示例命令ä¸ï¼Œæˆ‘们å�‡è®¾ï¼š
+
+- Active Directory �务器的主机�是 `ad.acme.com`。
+- æœ�务器æ£åœ¨ç›‘å�¬ç«¯å�£ `389` ä¸Šçš„æœªåŠ å¯†è¿žæŽ¥ã€‚
+- Active Directory 的域是 `acme`。
+- ä½ æœ‰ä¸€ä¸ªç”¨æˆ·å��为 `jdoe`,密ç �为 `secret` 的有效 AD è´¦å�·ã€‚
+
+### 确认�索库
+
+首先,我们将使用 `ldapsearch` æ�¥æ‰¾åˆ°ç”¨æˆ·å’Œç»„çš„çˆ¶èŠ‚ç‚¹çš„æ ‡è¯†å��称:
+
+```
+$ ldapsearch -x -D "acme\jdoe" -w "secret" -p 389 \
+-h ad.acme.com -b "dc=acme,dc=com" -s sub "sAMAccountName=jdoe"
+```
+
+æ¤å‘½ä»¤æ‰§è¡Œ LDAP æ�œç´¢ï¼Œæ�œç´¢èµ·ç‚¹è®¾ç½®ä¸ºåŸŸæ ¹ç›®å½•(`-b "dc=acme,dc=com"`),并执行针对用户账å�·ï¼ˆ`sAMAccountNam=jdoe`)的ç›é€‰å™¨ï¼Œè¿”回所述用户的属性:
+
+
+
+å› ä¸ºåœ¨è¿™ç§�情况下,用户的 DN 是 `CN=John Doe,CN=Users,DC=acme,DC=com` [5],所以我们应该使用父节点 DN `CN=Users,DC=acme,DC=com` æ�¥é…�ç½®**用户æ�œç´¢åº“**。
+
+å�Œæ ·ï¼ŒåŸºäºŽ **memberOf** 属性 [4] ä¸å¼•用的组的 DN,**组æ�œç´¢åº“**的值将是该值的父节点,å�³ `OU=Groups,DC=acme,DC=com`。
+
+### 确定用户 Schema
+
+上述 `ldapsearch` 查询的输出还能用于确定在用户 Schema é…�ç½®ä¸ä½¿ç”¨çš„值:
+
+- `Object Class`:**person** [1]
+- `Username Attribute`::**name** [2]
+- `Login Attribute`:**sAMAccountName** [3]
+- `User Member Attribute`:**memberOf** [4]
+
+:::note
+
+如果我们组织ä¸çš„ AD 用户使用其 UPN(例如 `jdoe@acme.com`)而ä¸�是çŸç™»å½•å��进行身份验è¯�,则必须将 `Login Attribute` 设置为 **userPrincipalName**。
+
+:::
+
+我们还将 `Search Attribute` 数设置为 **sAMAccountName|name**ã€‚è¿™æ ·ï¼Œç”¨æˆ·å�¯ä»¥é€šè¿‡è¾“入用户å��或全å��æ·»åŠ åˆ° Rancher UI ä¸çš„集群/项目ä¸ã€‚
+
+### 确定组 Schema
+
+接下æ�¥ï¼Œæˆ‘们将查询与æ¤ç”¨æˆ·å…³è�”的一个组,在本例ä¸ä¸º `CN=examplegroup,OU=Groups,DC=acme,DC=com`:
+
+```
+$ ldapsearch -x -D "acme\jdoe" -w "secret" -p 389 \
+-h ad.acme.com -b "ou=groups,dc=acme,dc=com" \
+-s sub "CN=examplegroup"
+```
+
+æ¤å‘½ä»¤å°†å‘ŠçŸ¥æˆ‘们用于组对象的属性:
+
+
+
+å�Œæ ·ï¼Œè¿™èƒ½è®©æˆ‘们确定è¦�在组 Schema é…�ç½®ä¸è¾“入的值:
+
+- `Object Class`:**group** [1]
+- `Name Attribute`:**name** [2]
+- `Group Member Mapping Attribute`:**member** [3]
+- `Search Attribute`:**sAMAccountName** [4]
+
+查看 **member** 属性的值,我们å�¯ä»¥çœ‹åˆ°å®ƒåŒ…å�«è¢«å¼•用用户的 DN。这对应我们的用户对象ä¸çš„ **distinguishedName** å±žæ€§ã€‚å› æ¤ï¼Œå¿…须将 `Group Member User Attribute` å�‚数的值设置为æ¤å±žæ€§ã€‚
+
+å�Œæ ·ï¼Œæˆ‘们å�¯ä»¥çœ‹åˆ°ç”¨æˆ·å¯¹è±¡ä¸ **memberOf** 属性ä¸çš„值对应组的 **distinguishedName** [5]ã€‚å› æ¤ï¼Œæˆ‘们需è¦�å°† `Group DN Attribute` å�‚数的值设置为æ¤å±žæ€§ã€‚
+
+## 附录:故障排除
+
+如果在测试与 Active Directory æœ�务器的连接时é�‡åˆ°é—®é¢˜ï¼Œè¯·é¦–先仔细检查为 ServiceAccount 输入的å‡è¯�以å�Šæ�œç´¢åº“é…�ç½®ã€‚ä½ è¿˜å�¯ä»¥æ£€æŸ¥ Rancher 日志æ�¥æŸ¥æ˜Žé—®é¢˜çš„åŽŸå› ã€‚è°ƒè¯•æ—¥å¿—å�¯èƒ½åŒ…å�«æœ‰å…³é”™è¯¯çš„æ›´è¯¦ç»†ä¿¡æ�¯ã€‚详情请å�‚è§�[如何å�¯ç”¨è°ƒè¯•日志](../../../../faq/technical-items.md#如何å�¯ç”¨è°ƒè¯•日志记录)。
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/authentication-config/configure-azure-ad.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/authentication-config/configure-azure-ad.md
new file mode 100644
index 00000000000..77d51e007bf
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/authentication-config/configure-azure-ad.md
@@ -0,0 +1,326 @@
+---
+title: �置 Azure AD
+---
+
+## Microsoft Graph API
+
+Microsoft Graph API 现在是设置 Azure AD 的�程。下文将帮助[新用户](#新用户设置)使用新实例��置 Azure AD,并帮助现有 Azure 应用所有者[�移到新�程](#从-azure-ad-graph-api-�移到-microsoft-graph-api)。
+
+Rancher ä¸çš„ Microsoft Graph API æµ�程æ£åœ¨ä¸�æ–å�‘å±•ã€‚å»ºè®®ä½ ä½¿ç”¨æœ€æ–°çš„ 2.7 è¡¥ä¸�版本,该版本ä»�在积æž�å¼€å�‘ä¸ï¼Œå¹¶å°†æŒ�ç»èŽ·å¾—æ–°åŠŸèƒ½å’Œæ”¹è¿›ã€‚
+
+### 新用户设置
+
+å¦‚æžœä½ åœ¨ Azure 䏿‰˜ç®¡äº†ä¸€ä¸ª Active Directory(ADï¼‰å®žä¾‹ï¼Œä½ å�¯ä»¥å°† Rancher é…�置为å…�è®¸ä½ çš„ç”¨æˆ·ä½¿ç”¨ AD è´¦å�·ç™»å½•ã€‚ä½ éœ€è¦�在 Azure å’Œ Rancher ä¸è¿›è¡Œ Azure AD 外部身份验è¯�。
+
+:::note 注�事项
+
+- Azure AD 集�仅支��务�供商�起的登录。
+- 大部分�作是从 [Microsoft Azure 门户](https://portal.azure.com/)执行的。
+
+:::
+
+#### Azure Active Directory �置概述
+
+è¦�å°† Rancher é…�置为å…�许用户使用其 Azure AD è´¦å�·è¿›è¡Œèº«ä»½éªŒè¯�ï¼Œä½ éœ€è¦�执行多个æ¥éª¤ã€‚åœ¨ä½ å¼€å§‹ä¹‹å‰�,请查看下文æ“�作æ¥éª¤å¤§çº²ã€‚
+
+:::tip
+
+在开始之å‰�,打开两个æµ�览器选项å�¡ï¼šä¸€ä¸ªç”¨äºŽ Rancher,å�¦ä¸€ä¸ªç”¨äºŽ Azure é—¨æˆ·ã€‚è¿™æ ·ï¼Œä½ å�¯ä»¥å°†é—¨æˆ·çš„é…�置值å¤�制并粘贴到 Rancher ä¸ã€‚
+
+:::
+
+
+#### 1. 在 Azure 注册 Rancher
+
+在 Rancher ä¸å�¯ç”¨ Azure AD 之å‰�ï¼Œä½ å¿…é¡»å…ˆå�‘ Azure 注册 Rancher。
+
+1. 以管ç�†ç”¨æˆ·èº«ä»½ç™»å½• [Microsoft Azure](https://portal.azure.com/)。å�Žç»é…�ç½®æ¥éª¤ä¸éœ€è¦�管ç�†è®¿é—®æ�ƒé™�。
+
+1. 使用�索功能打开 **App registrations** �务。
+
+1. 点击 **New registration** 并填写表�。
+
+ 
+
+ 1. 输入 **Name**(例如 `Rancher`)。
+
+
+ 1. 在 **Supported account types** ä¸ï¼Œé€‰æ‹© **Accounts in this organizational directory only (AzureADTest only - Single tenant)**。这对应于旧版应用注册选项。
+
+ :::note
+
+ 在更新å�Žçš„ Azure 门户ä¸ï¼ŒRedirect URI 与 Reply URL çš„æ„�æ€�相å�Œã€‚为了将 Azure AD 与 Rancher ä¸€èµ·ä½¿ç”¨ï¼Œä½ å¿…é¡»å°† Rancher 列入 Azure 白å��å�•(之å‰�通过 Reply URL 完æˆ�ï¼‰ã€‚å› æ¤ï¼Œè¯·ç¡®ä¿�ä½¿ç”¨ä½ çš„ Rancher Server URL 填写 Redirect URI,以包å�«ä¸‹é�¢åˆ—出的验è¯�路径。
+
+ :::
+
+ 1. 在 [**Redirect URI**](https://docs.microsoft.com/en-us/azure/active-directory/develop/reply-url) ä¸ï¼Œç¡®ä¿�从下拉列表ä¸é€‰æ‹© **Web**,并在æ—�边的文本框ä¸è¾“å…¥ Rancher Server çš„ URL。Rancher Server URL å�Žéœ€è¦�è¿½åŠ éªŒè¯�路径,例如 `/verify-auth-azure`。
+
+ :::tip
+
+ ä½ å�¯ä»¥åœ¨ Azure AD 身份验è¯�页é�¢ï¼ˆå…¨å±€è§†å›¾ > Authentication > Webï¼‰ä¸æ‰¾åˆ°ä½ Rancher ä¸çš„个性化 Azure Redirect URI(Reply URL)。
+
+ :::
+
+ 1. �击 **Register**。
+
+:::note
+
+æ¤æ›´æ”¹å�¯èƒ½éœ€è¦�五分钟æ‰�èƒ½ç”Ÿæ•ˆã€‚å› æ¤ï¼Œå¦‚果在é…�ç½® Azure AD 之å�Žæ— 法立å�³è¿›è¡Œèº«ä»½éªŒè¯�,请ä¸�è¦�惊慌。
+
+:::
+
+#### 2. 创建客户端密文
+
+在 Azure 门户ä¸ï¼Œåˆ›å»ºä¸€ä¸ªå®¢æˆ·ç«¯å¯†æ–‡ã€‚Rancher 将使用æ¤å¯†é’¥å�‘ Azure AD 进行身份验è¯�。
+
+1. 使用æ�œç´¢åŠŸèƒ½æ‰“å¼€ **App registrations** æœ�务。然å�Žæ‰“å¼€ä½ åœ¨ä¸Šä¸€ä¸ªæ¥éª¤ä¸åˆ›å»ºçš„ Rancher 项。
+
+ 
+
+1. åœ¨å¯¼èˆªçª—æ ¼ä¸ï¼Œå�•击 **Certificates & secrets**。
+
+1. �击 **New client secret**。
+ 
+1. 输入 **Description**(例如 `Rancher`)。
+1. 从 **Expires** 下的选项ä¸é€‰æ‹©æŒ�ç»æ—¶é—´ã€‚æ¤ä¸‹æ‹‰è�œå�•设置的是密钥的到期日期。日期越çŸåˆ™è¶Šå®‰å…¨ï¼Œä½†éœ€è¦�ä½ æ›´é¢‘ç¹�地创建新密钥。
+ 请注æ„�,如果检测到应用程åº� Secret å·²è¿‡æœŸï¼Œç”¨æˆ·å°†æ— æ³•ç™»å½• Rancher。为é�¿å…�æ¤é—®é¢˜ï¼Œè¯·åœ¨ Azure ä¸è½®æ�¢ Secret 并在过期å‰�在 Rancher 䏿›´æ–°å®ƒã€‚
+1. å�•击 **Add**ï¼ˆæ— éœ€è¾“å…¥å€¼ï¼Œä¿�å˜å�Žä¼šè‡ªåŠ¨å¡«å……ï¼‰ã€‚
+
+
+1. ç¨�å�Žä½ 将在 Rancher UI ä¸è¾“å…¥æ¤å¯†é’¥ä½œä¸ºä½ çš„ **Application Secret**ã€‚ç”±äºŽä½ å°†æ— æ³•åœ¨ Azure UI ä¸å†�æ¬¡è®¿é—®é”®å€¼ï¼Œå› æ¤è¯·åœ¨å…¶ä½™è®¾ç½®è¿‡ç¨‹ä¸ä¿�æŒ�打开æ¤çª—å�£ã€‚
+
+#### 3. 设置 Rancher 所需的��
+
+接下æ�¥ï¼Œåœ¨ Azure ä¸ä¸º Rancher 设置 API æ�ƒé™�。
+
+:::caution
+
+ç¡®ä¿�ä½ è®¾ç½®äº† Application æ�ƒé™�,而*ä¸�是* Delegated æ�ƒé™�。å�¦åˆ™ï¼Œä½ å°†æ— æ³•ç™»å½• Azure AD。
+
+:::
+
+1. åœ¨å¯¼èˆªçª—æ ¼ä¸ï¼Œé€‰æ‹© **API permissions**。
+
+1. �击 **Add a permission**。
+
+1. 从 Microsoft Graph API ä¸ï¼Œé€‰æ‹©ä»¥ä¸‹ **Application Permissions**: `Directory.Read.All`。
+
+ 
+
+1. 返回导航æ �ä¸çš„ **API permissions**。在那里,å�•击 **Grant admin consent**。然å�Žå�•击 **Yes**。该应用程åº�çš„æ�ƒé™�应如下所示:
+
+
+
+:::note
+
+Rancher ä¸�会验è¯�ä½ æŽˆäºˆ Azure 应用程åº�çš„æ�ƒé™�ã€‚ä½ å�¯ä»¥è‡ªç”±ä½¿ç”¨ä»»ä½•ä½ æ‰€éœ€çš„æ�ƒé™�,å�ªè¦�这些æ�ƒé™�å…�许 Rancher 使用 AD 用户和组。
+
+具体�说,Rancher 需��许以下�作的��:
+- 获�一个用户。
+- 列出所有用户。
+- 列出给定用户所属的组。
+- 获�一个组。
+- 列出所有组。
+
+Rancher 执行这些�作�登录用户或�索用户/组。请记�,��必须是 `Application` 类型。
+
+下é�¢æ˜¯å‡ 个满足 Rancher 需求的æ�ƒé™�组å�ˆç¤ºä¾‹ï¼š
+- `Directory.Read.All`
+- `User.Read.All` 和 `GroupMember.Read.All`
+- `User.Read.All` 和 `Group.Read.All`
+
+:::
+
+#### 4. �制 Azure 应用数�
+
+
+
+1. 获å�–ä½ çš„ Rancher **租户 ID**。
+
+ 1. 使用�索打开 **App registrations**。
+
+ 1. æ‰¾åˆ°ä½ ä¸º Rancher 创建的项。
+
+ 1. å¤�制 **Directory ID** 并将其作为 **Tenant ID** 粘贴到 Rancher ä¸ã€‚
+
+1. 获å�–ä½ çš„ Rancher **Application (Client) ID**。
+
+ 1. å¦‚æžœä½ è¿˜æœªåœ¨è¯¥ä½�置,请使用æ�œç´¢æ‰“å¼€ **App registrations**。
+
+ 1. 在 **Overview**ä¸ï¼Œæ‰¾åˆ°ä½ 为 Rancher 创建的æ�¡ç›®ã€‚
+
+ 1. å¤�制 **Application (Client) ID** 并将其作为 **Application ID** 粘贴到 Rancher ä¸ã€‚
+
+1. ä½ çš„ç«¯ç‚¹é€‰é¡¹é€šå¸¸æ˜¯ [Standard](#global) 或 [China](#ä¸å›½)ã€‚å¯¹äºŽè¿™ä¸¤ä¸ªé€‰é¡¹ï¼Œä½ å�ªéœ€è¦�输入 **Tenant ID**ã€�**Application ID** å’Œ **Application Secret**。
+
+
+
+**对于自定义端点**:
+
+:::caution
+
+Rancher 未测试也未完全支�自定义端点。
+
+:::
+
+ä½ è¿˜éœ€è¦�手动输入 Graphã€�Token å’Œ Auth Endpoints。
+
+- 从 App registrations ä¸ï¼Œç‚¹å‡» Endpoints :
+
+
+
+- ä»¥ä¸‹ç«¯ç‚¹å°†æ˜¯ä½ çš„ Rancher 端点值。请使用这些端点的 v1 版本。
+ - **Microsoft Graph API endpoint**(Graph 端点)
+ - **OAuth 2.0 token endpoint (v1)**(Token 端点)
+ - **OAuth 2.0 authorization endpoint (v1)** (Auth 端点)
+
+#### 5. 在 Rancher ä¸é…�ç½® Azure AD
+
+è¦�完æˆ�é…�置,请在 Rancher UI ä¸è¾“å…¥ä½ çš„ AD 实例信æ�¯ã€‚
+
+1. 登录到 Rancher。
+
+1. 在左上角,�击 **☰ > 用户 & 认�**。
+
+1. 在左侧导航æ �,å�•击**认è¯�**。
+
+1. �击 **AzureAD**。
+
+1. ä½¿ç”¨ä½ åœ¨[å¤�制 Azure 应用数æ�®](#4-å¤�制-azure-应用数æ�®)æ—¶å¤�制的信æ�¯ï¼Œå¡«å†™**é…�ç½® Azure AD è´¦å�·**的表å�•。
+
+ :::caution
+
+ Azure AD å¸�户将被授予管ç�†å‘˜æ�ƒé™�ï¼Œå› ä¸ºå…¶è¯¦ç»†ä¿¡æ�¯å°†æ˜ 射到 Rancher 本地主体å¸�户。在继ç»ä¹‹å‰�ç¡®ä¿�æ¤æ�ƒé™�级别是适当的。
+
+ :::
+
+ **å¯¹äºŽæ ‡å‡†æˆ–ä¸å›½ç«¯ç‚¹ï¼š**
+
+ 下表介ç»�äº†ä½ åœ¨ Azure 门户ä¸å¤�制的值与 Rancher ä¸å—æ®µçš„æ˜ å°„ï¼š
+
+ | Rancher å—æ®µ | Azure 值 |
+ | ------------------ | ------------------------------------- |
+ | 租户 ID | Directory ID |
+ | Application ID | Application ID |
+ | 应用密文 | Key Value |
+ | 端点 | https://login.microsoftonline.com/ |
+
+ **对于自定义端点**:
+
+ ä¸‹è¡¨å°†ä½ çš„è‡ªå®šä¹‰é…�ç½®å€¼æ˜ å°„åˆ° Rancher å—æ®µï¼š
+
+ | Rancher å—æ®µ | Azure 值 |
+ | ------------------ | ------------------------------------- |
+ | Graph 端点 | Microsoft Graph API Endpoint |
+ | Token 端点 | OAuth 2.0 Token Endpoint |
+ | Auth 端点 | OAuth 2.0 Authorization Endpoint |
+
+ **é‡�è¦�æ��示**:在自定义é…�ç½®ä¸è¾“å…¥ Graph Endpoint 时,请从 URL ä¸åˆ 除 Tenant ID:
+
+ https://g raph.microsoft.com/abb5adde-bee8-4821-8b03-e63efdc7701c
+
+1. 点击**�用**。
+
+**结果**:Azure Active Directory 身份验�已�置。
+
+
+### 从 Azure AD Graph API �移到 Microsoft Graph API
+
+由于 [Azure AD Graph API](https://docs.microsoft.com/en-us/graph/migrate-azure-ad-graph-overview) 已弃用并计划于 2023 å¹´ 6 月å�œç”¨ï¼Œç®¡ç�†å‘˜åº”更新他们的 Azure AD 应用程åº�以在 Rancher ä¸ä½¿ç”¨ [Microsoft Graph API](https://docs.microsoft.com/en-us/graph/use-the-api)。
+ä½ éœ€è¦�在端点弃用之å‰�完æˆ�æ“�作。
+如果在å�œç”¨å�Ž Rancher ä»�é…�置为使用 Azure AD Graph API,用户å�¯èƒ½æ— 法使用 Azure AD 登录 Rancher。
+
+#### 在 Rancher UI 䏿›´æ–°ç«¯ç‚¹
+
+:::caution
+
+管�员需�在�移下述端点之�创建一个 [Rancher 备份](../../../new-user-guides/backup-restore-and-disaster-recovery/back-up-rancher.md)。
+
+:::
+
+1. [æ›´æ–°](#3-设置-rancher-所需的æ�ƒé™�) Azure AD 应用程åº�注册的æ�ƒé™�。这个æ¥éª¤é�žå¸¸å…³é”®ã€‚
+
+1. 登录到 Rancher。
+
+1. 在 Rancher UI 主页ä¸ï¼Œè®°ä¸‹å±�幕顶部的横幅,该横幅建议用户更新 Azure AD 身份验è¯�。å�•击æ��ä¾›çš„é“¾æŽ¥ä»¥æ‰§è¡Œæ¤æ“�作。
+
+ 
+
+1. �完�新的 Microsoft Graph API �移,请�击 **Update Endpoint**。
+
+ **注æ„�**:在开始更新之å‰�,请确ä¿�ä½ çš„ Azure 应用程åº�具有[æ–°çš„æ�ƒé™�集](#3-设置-rancher-所需的æ�ƒé™�)。
+
+ 
+
+1. 在收到弹出è¦å‘Šæ¶ˆæ�¯æ—¶ï¼Œå�•击 **Update**:
+
+ 
+
+1. 有关 Rancher 执行的完整端点更改,请å�‚阅下é�¢çš„[è¡¨æ ¼](#global)。管ç�†å‘˜ä¸�需è¦�æ‰‹åŠ¨æ‰§è¡Œæ¤æ“�作。
+
+#### 离线环境
+
+在离线环境ä¸ï¼Œç”±äºŽ Graph Endpoint URL æ£åœ¨æ›´æ”¹ï¼Œå› æ¤ç®¡ç�†å‘˜éœ€è¦�ç¡®ä¿�其端点被[列入白å��å�•](#3.2)。
+
+#### 回滚�移
+
+å¦‚æžœä½ éœ€è¦�回滚è¿�移,请注æ„�以下事项:
+
+1. 如果管ç�†å‘˜æƒ³è¦�回滚,我们建议他们使用æ£ç¡®çš„æ�¢å¤�æµ�程。有关å�‚考信æ�¯ï¼Œè¯·å�‚阅[备份文档](../../../new-user-guides/backup-restore-and-disaster-recovery/back-up-rancher.md)ã€�[æ�¢å¤�文档](../../../new-user-guides/backup-restore-and-disaster-recovery/restore-rancher.md)å’Œ[示例](../../../../reference-guides/backup-restore-configuration/examples.md)。
+
+1. 如果 Azure 应用程åº�所有者想è¦�è½®æ�¢åº”用程åº�密钥,他们也需è¦�在 Rancher ä¸è¿›è¡Œè½®æ�¢ï¼ˆå› 为在 Azure 䏿›´æ”¹åº”用程åº�密钥时,Rancher ä¸�会自动更新应用程åº�密钥)。在 Rancher ä¸ï¼Œå®ƒå˜å‚¨åœ¨å��为 `azureadconfig-applicationsecret` çš„ Kubernetes 密文ä¸ï¼Œè¯¥å¯†æ–‡ä½�于 `cattle-global-data` 命å��空间ä¸ã€‚
+
+:::caution
+
+å¦‚æžœä½ ä½¿ç”¨çŽ°æœ‰çš„ Azure AD 设置å�‡çº§åˆ° Rancher v2.7.0+,并选择了ç¦�用认è¯�æ��供程åº�ï¼Œä½ å°†æ— æ³•æ�¢å¤�以å‰�çš„è®¾ç½®ã€‚ä½ ä¹Ÿæ— æ³•ä½¿ç”¨æ—§æµ�程设置 Azure ADã€‚ä½ éœ€è¦�使用新的认è¯�æµ�程é‡�新注册。由于 Rancher 现在使用 Graph APIï¼Œå› æ¤ç”¨æˆ·éœ€è¦�[在 Azure 门户ä¸è®¾ç½®é€‚当的æ�ƒé™�](#3-设置-rancher-所需的æ�ƒé™�)。
+
+:::
+
+
+#### Global:
+
+| Rancher å—æ®µ | 已弃用的端点 |
+---------------- | -------------------------------------------------------------
+| Auth 端点 | https://login.microsoftonline.com/{tenantID}/oauth2/authorize |
+| 端点 | https://login.microsoftonline.com/ |
+| Graph 端点 | https://graph.windows.net/ |
+| Token 端点 | https://login.microsoftonline.com/{tenantID}/oauth2/token |
+
+| Rancher å—æ®µ | 新端点 |
+---------------- | ------------------------------------------------------------------
+| Auth 端点 | https://login.microsoftonline.com/{tenantID}/oauth2/v2.0/authorize |
+| 端点 | https://login.microsoftonline.com/ |
+| Graph 端点 | https://graph.microsoft.com |
+| Token 端点 | https://login.microsoftonline.com/{tenantID}/oauth2/v2.0/token |
+
+#### ä¸å›½ï¼š
+
+| Rancher å—æ®µ | 已弃用的端点 |
+---------------- | ----------------------------------------------------------
+| Auth 端点 | https://login.chinacloudapi.cn/{tenantID}/oauth2/authorize |
+| 端点 | https://login.chinacloudapi.cn/ |
+| Graph 端点 | https://graph.chinacloudapi.cn/ |
+| Token 端点 | https://login.chinacloudapi.cn/{tenantID}/oauth2/token |
+
+| Rancher å—æ®µ | 新端点 |
+---------------- | -------------------------------------------------------------------------
+| Auth 端点 | https://login.partner.microsoftonline.cn/{tenantID}/oauth2/v2.0/authorize |
+| 端点 | https://login.partner.microsoftonline.cn/ |
+| Graph 端点 | https://microsoftgraph.chinacloudapi.cn |
+| Token 端点 | https://login.partner.microsoftonline.cn/{tenantID}/oauth2/v2.0/token |
+
+
+## 已弃用的 Azure AD Graph API
+
+> **���示**:
+>
+> - [Azure AD Graph API](https://docs.microsoft.com/en-us/graph/migrate-azure-ad-graph-overview) 已被弃用,Microsoft 将在 2023 年 6 月 30 日��时�用它且�会�行通知。我们将更新我们的文档,以便在�用时�社区�供建议。Rancher 现在使用 [Microsoft Graph API](https://docs.microsoft.com/en-us/graph/use-the-api) �将 Azure AD 设置为外部身份验��供程�。
+>
+>
+> - å¦‚æžœä½ æ˜¯æ–°ç”¨æˆ·æˆ–å¸Œæœ›è¿›è¡Œè¿�移,请å�‚阅新的æµ�程说明: Rancher v2.7.0+ 。
+>
+>
+> - å¦‚æžœä½ ä¸�想在 Azure AD Graph API å�œç”¨å�Žå�‡çº§åˆ° v2.7.0+ï¼Œä½ éœ€è¦�:
+> - 使用内置的 Rancher 身份认�,或者
+> - 使用å�¦ä¸€ä¸ªç¬¬ä¸‰æ–¹èº«ä»½è®¤è¯�系统并在 Rancher ä¸è¿›è¡Œè®¾ç½®ã€‚请å�‚阅[身份验è¯�文档](../../../../pages-for-subheaders/authentication-config.md),了解如何é…�置其他开放å¼�身份验è¯�æ��供程åº�。
+
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/authentication-config/configure-freeipa.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/authentication-config/configure-freeipa.md
new file mode 100644
index 00000000000..6f3100e462c
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/authentication-config/configure-freeipa.md
@@ -0,0 +1,60 @@
+---
+title: �置 FreeIPA
+---
+
+å¦‚æžœä½ çš„ç»„ç»‡ä½¿ç”¨ FreeIPA 进行用户身份验è¯�ï¼Œä½ å�¯ä»¥é€šè¿‡é…�ç½® Rancher æ�¥å…�è®¸ä½ çš„ç”¨æˆ·ä½¿ç”¨ FreeIPA å‡è¯�登录。
+
+:::note 先决�件:
+
+- ä½ å¿…é¡»é…�置了 [FreeIPA æœ�务器](https://www.freeipa.org/)。
+- 在 FreeIPA ä¸åˆ›å»ºä¸€ä¸ªå…·æœ‰ `read-only` 访问æ�ƒé™�çš„ ServiceAccount 。当用户使用 API​​ 密钥å�‘出请求时,Rancher 使用æ¤è´¦å�·æ�¥éªŒè¯�组æˆ�员身份。
+- ��[外部身份验��置和主体用户](../../../../pages-for-subheaders/authentication-config.md#外部身份验��置和用户主体)。
+
+:::
+
+1. 使用分�了 `administrator` 角色(� _本地主体_)的本地用户登录到 Rancher。
+1. 在左上角,�击 **☰ > 用户 & 认�**。
+1. 在左侧导航æ �,å�•击**认è¯�**。
+1. �击 **FreeIPA**。
+1. 填写**�置 FreeIPA �务器**表�,
+
+ ä½ å�¯èƒ½éœ€è¦�登录到域控制器,æ�¥æŸ¥æ‰¾è¡¨å�•ä¸è¯·æ±‚的信æ�¯ã€‚
+
+ :::note 使用 TLS?
+
+ 如果è¯�书是自ç¾å��,或者ä¸�是æ�¥è‡ªå…¬è®¤çš„è¯�书é¢�å�‘机构的,请确ä¿�æ��供完整的è¯�书链。Rancher 需è¦�该链æ�¥éªŒè¯�æœ�务器的è¯�书。
+
+ :::
+
+ :::note 用户�索库 vs. 组�索库
+
+ æ�œç´¢åº“使 Rancher å�¯ä»¥æ�œç´¢ FreeIPA ä¸çš„ç”¨æˆ·å’Œç»„ã€‚è¿™äº›å—æ®µä»…用于æ�œç´¢åº“,ä¸�适用于æ�œç´¢ç›é€‰å™¨ã€‚
+
+ * å¦‚æžœä½ çš„ç”¨æˆ·å’Œç»„ä½�于å�Œä¸€æ�œç´¢åº“ä¸ï¼Œåˆ™ä»…填写用户æ�œç´¢åº“。
+ * å¦‚æžœä½ çš„ç»„ä½�于其他æ�œç´¢åº“ä¸ï¼Œåˆ™å�¯ä»¥é€‰æ‹©å¡«å†™ç»„æ�œç´¢åº“ã€‚è¯¥å—æ®µä¸“用于æ�œç´¢ç»„,但ä¸�是必需的。
+
+ :::
+
+1. å¦‚æžœä½ çš„ FreeIPA ä¸�å�ŒäºŽæ ‡å‡†çš„ AD Schema,则必须完æˆ�**自定义 Schema** 部分实现匹é…�。å�¦åˆ™ï¼Œè°ƒè¿‡æ¤æ¥éª¤ã€‚
+
+ :::note �索属性
+
+ `æ�œç´¢å±žæ€§`å—æ®µçš„默认值为三个特定值:`uid|sn|givenName`。é…�ç½® FreeIPA å�Žï¼Œå½“ç”¨æˆ·è¾“å…¥æ–‡æœ¬ä»¥æ·»åŠ ç”¨æˆ·æˆ–ç»„æ—¶ï¼ŒRancher 会自动查询 FreeIPA æœ�务器,并å°�试按用户 ID,姓æ°�或å��å—æ�¥åŒ¹é…�å—æ®µã€‚Rancher 专门æ�œç´¢ä»¥åœ¨æ�œç´¢å—段ä¸è¾“入的文本开头的用户/组。
+
+ é»˜è®¤å—æ®µå€¼ä¸º `uid|sn|givenName`ï¼Œä½†æ˜¯ä½ å�¯ä»¥å°†æ¤å—段é…�ç½®ä¸ºè¿™äº›å—æ®µçš„å�集。管é�“符 (`|`) 用于分隔å�„ä¸ªå—æ®µã€‚
+
+ * `uid`:用户 ID
+ * `sn`:姓
+ * `givenName`:�
+
+ Rancher ä½¿ç”¨æ¤æ�œç´¢å±žæ€§ä¸ºç”¨æˆ·å’Œç»„创建æ�œç´¢ç›é€‰å™¨ï¼Œä½†æ˜¯ä½ *ä¸�能*在æ¤å—æ®µä¸æ·»åŠ è‡ªå·±çš„æ�œç´¢ç›é€‰å™¨ã€‚
+
+ :::
+
+1. 在 **Authenticate with FreeIPA** ä¸è¾“å…¥ä½ çš„ FreeIPA 用户å��和密ç �,确认已为 Rancher é…�ç½® FreeIPA 身份验è¯�。
+1. 点击**�用**。
+
+**结果**:
+
+- FreeIPA 验��置�功。
+- ä½ å°†ä½¿ç”¨ä½ çš„ FreeIPA è´¦å�·ï¼ˆå�³ _外部主体_)登录到 Rancher。
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/authentication-config/configure-github.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/authentication-config/configure-github.md
new file mode 100644
index 00000000000..e903421611d
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/authentication-config/configure-github.md
@@ -0,0 +1,56 @@
+---
+title: �置 GitHub
+---
+
+在使用 GitHub 的环境ä¸ï¼Œä½ å�¯ä»¥é€šè¿‡é…�ç½® Rancher å…�许用户使用 GitHub å‡è¯�登录。
+
+:::note 先决�件:
+
+��[外部身份验��置和主体用户](../../../../pages-for-subheaders/authentication-config.md#外部身份验��置和用户主体)。
+
+:::
+
+1. 使用分�了 `administrator` 角色(� _本地主体_)的本地用户登录到 Rancher。
+1. 在左上角,�击 **☰ > 用户 & 认�**。
+1. 在左侧导航æ �,å�•击**认è¯�**。
+1. �击 **GitHub**。
+1. 按照显示的说明设置 GitHub 应用。Rancher ä¼šå°†ä½ é‡�定å�‘到 GitHub 完æˆ�注册。
+
+ :::note 什么是授�回调 URL?
+
+ 授æ�ƒå›žè°ƒ URL æ˜¯ç”¨æˆ·å¼€å§‹ä½¿ç”¨ä½ çš„åº”ç”¨ï¼ˆå�³åˆ�å§‹å±�幕)的 URL。
+
+ 使用外部身份验è¯�时,实际上ä¸�ä¼šåœ¨ä½ çš„åº”ç”¨ä¸è¿›è¡Œèº«ä»½éªŒè¯�。相å��,身份验è¯�在外部进行(在本例ä¸ä¸º GitHub)。在外部身份验è¯�æˆ�功完æˆ�å�Žï¼Œç”¨æˆ·å°†é€šè¿‡æŽˆæ�ƒå›žè°ƒ URL é‡�新进入应用。
+
+ :::
+
+1. 从 GitHub å¤�制 **Client ID** å’Œ **Client Secret**。将它们粘贴到 Rancher ä¸ã€‚
+
+ :::note 在哪里�以找到 Client ID 和 Client Secret?
+
+ 在 GitHub ä¸ï¼Œé€‰æ‹© **Settings > Developer Settings > OAuth Apps**ã€‚ä½ å�¯ä»¥åœ¨æ¤å¤„找到 Client ID å’Œ Client Secret。
+
+ :::
+
+1. �击**使用 GitHub 认�**。
+
+1. 使用 **Site Access** 选项��置用户授�的范围。
+
+ - **�许任何有效用户**
+
+ _任何_ GitHub 用户都能访问 Rancher。通常ä¸�建议使用æ¤è®¾ç½®ã€‚
+
+ - **�许集群和项目�员,以�授�的用户和组织**
+
+ æ·»åŠ ä¸º**集群æˆ�员**或**项目æˆ�员**的任何 GitHub 用户或组都å�¯ä»¥ç™»å½• Rancher。æ¤å¤–ï¼Œä»»ä½•æ·»åŠ åˆ°**授æ�ƒç”¨æˆ·å’Œç»„织**列表ä¸çš„ GitHub 用户和组都能登录到 Rancher。
+
+ - **仅�许授�用户和组织**
+
+ å�ªæœ‰æ·»åŠ åˆ°**授æ�ƒç”¨æˆ·å’Œç»„织**çš„ GitHub 用户和组能登录 Rancher。
+
+1. 点击**�用**。
+
+**结果**:
+
+- GitHub 验��置�功。
+- ä½ å°†ä½¿ç”¨ä½ çš„ GitHub è´¦å�·ï¼ˆå�³ _外部主体_)登录到 Rancher。
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/authentication-config/configure-google-oauth.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/authentication-config/configure-google-oauth.md
new file mode 100644
index 00000000000..ca4d522ba35
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/authentication-config/configure-google-oauth.md
@@ -0,0 +1,111 @@
+---
+title: �置 Google OAuth
+---
+
+å¦‚æžœä½ çš„ç»„ç»‡ä½¿ç”¨ G Suite 进行用户身份验è¯�ï¼Œä½ å�¯ä»¥é€šè¿‡é…�ç½® Rancher æ�¥å…�è®¸ä½ çš„ç”¨æˆ·ä½¿ç”¨ G Suite å‡è¯�登录。
+
+å�ªæœ‰ G Suite 域的管ç�†å‘˜æ‰�能访问 Admin SDKã€‚å› æ¤ï¼Œå�ªæœ‰ G Suite 管ç�†å‘˜å�¯ä»¥é…�ç½® Rancher çš„ Google OAuth。
+
+在 Rancher ä¸ï¼Œå�ªæœ‰å…·æœ‰ **Manage Authentication** [全局角色](../../authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/global-permissions.md)的管ç�†å‘˜æˆ–用户æ‰�能é…�置身份验è¯�。
+
+## 先决�件
+
+- ä½ å¿…é¡»é…�置了 [G Suite 管ç�†å‘˜è´¦å�·](https://admin.google.com)。
+- G Suite 需è¦�一个[顶级ç§�有域 FQDN](https://github.com/google/guava/wiki/InternetDomainNameExplained#public-suffixes-and-private-domains) 作为授æ�ƒåŸŸã€‚获å�– FQDN 的一ç§�方法是在 Route53 ä¸ä¸º Rancher Server 创建 A è®°å½•ã€‚ä½ ä¸�需è¦�使用该记录更新 Rancher Server çš„ URL è®¾ç½®ï¼Œå› ä¸ºå�¯èƒ½æœ‰é›†ç¾¤ä½¿ç”¨è¯¥ URL。
+- ä½ çš„ G Suite 域必须å�¯ç”¨äº† Admin SDK APIã€‚ä½ å�¯ä»¥æŒ‰ç…§[æ¤é¡µé�¢](https://support.google.com/a/answer/60757?hl=en)ä¸çš„æ¥éª¤å�¯ç”¨å®ƒã€‚
+
+å�¯ç”¨ Admin SDK API å�Žï¼Œä½ çš„ G Suite 域的 API 页é�¢åº”如下图所示:
+
+
+## 在 Rancher ä¸ä¸º OAuth 设置 G Suite
+
+在 Rancher ä¸è®¾ç½® Google OAuth 之å‰�ï¼Œä½ éœ€è¦�ç™»å½•åˆ°ä½ çš„ G Suite è´¦å�·å¹¶å®Œæˆ�以下设置:
+
+1. [在 G Suite ä¸å°† Rancher æ·»åŠ ä¸ºæŽˆæ�ƒåŸŸ](#1-å°†-rancher-æ·»åŠ ä¸ºæŽˆæ�ƒåŸŸ)
+1. [为 Rancher Server 生æˆ� OAuth2 å‡è¯�](#2-为-rancher-server-生æˆ�-oauth2-å‡è¯�)
+1. [为 Rancher Server 创建 ServiceAccount å‡è¯�](#3-创建-serviceaccount-å‡è¯�)
+1. [将 ServiceAccount 密钥注册� OAuth Client](#4-将-serviceaccount-密钥注册�-oauth-client)
+
+### 1. å°† Rancher æ·»åŠ ä¸ºæŽˆæ�ƒåŸŸ
+
+1. 点击[æ¤å¤„](https://console.developers.google.com/apis/credentials)å‰�å¾€ä½ çš„ Google 域的å‡è¯�页é�¢ã€‚
+1. é€‰æ‹©ä½ çš„é¡¹ç›®ï¼Œç„¶å�Žç‚¹å‡» **OAuth consent screen**。
+ 
+1. å‰�å¾€ **Authorized Domains**,并在列表ä¸è¾“å…¥ä½ çš„ Rancher Server URL 的顶级ç§�有域。顶级ç§�有域是最å�³è¾¹çš„超级域。例如,`www.foo.co.uk` 是 `foo.co.uk` 的顶级ç§�有域。有关顶级ç§�有域的更多信æ�¯ï¼Œè¯·å�‚è§�[æ¤å¤„](https://github.com/google/guava/wiki/InternetDomainNameExplained#public-suffixes-and-private-domains)。
+1. �往 **Scopes for Google APIs**,并确�已�用 **email**,**profile** 和 **openid**。
+
+**结果**:Rancher å·²è¢«æ·»åŠ ä¸º Admin SDK API 的授æ�ƒåŸŸã€‚
+
+### 2. 为 Rancher Server 生æˆ� OAuth2 å‡è¯�
+
+1. å‰�å¾€ Google API 控制å�°ï¼Œé€‰æ‹©ä½ 的项目并å‰�å¾€ [credentials ](https://console.developers.google.com/apis/credentials)页é�¢ã€‚
+ 
+1. 在 **Create Credentials** 下拉框ä¸ï¼Œé€‰æ‹© **OAuth client ID**。
+1. 点击 **Web application**。
+1. 输入一个�称。
+1. 填写 **Authorized JavaScript origins** å’Œ **Authorized redirect URIs**。请注æ„�,设置 Google OAuth çš„ Rancher UI 页é�¢ï¼ˆ**Security > Authentication > Google** ä¸‹çš„å…¨å±€è§†å›¾ï¼‰ä¸ºä½ æ��供了这一æ¥è¦�输入的准确链接。
+- 在 **Authorized JavaScript origins** å¤„ï¼Œè¾“å…¥ä½ çš„ Rancher Server URL。
+- 在 **Authorized redirect URIs** å¤„ï¼Œè¾“å…¥ä½ çš„ Rancher Server çš„ URL å¹¶é™„åŠ è·¯å¾„ `verify-auth`ã€‚ä¾‹å¦‚ï¼Œå¦‚æžœä½ çš„ URI 是 `https://rancherServer`ï¼Œä½ éœ€è¦�输入 `https://rancherServer/verify-auth`。
+1. 点击 **Create**。
+1. 创建å‡è¯�之å�Žï¼Œä½ 将看到一个页é�¢ï¼Œå…¶ä¸æ˜¾ç¤ºä½ çš„å‡è¯�列表。选择刚刚创建的å‡è¯�,然å�Žåœ¨æœ€å�³è¾¹çš„行ä¸å�•击 **Download JSON**。ä¿�å˜è¯¥æ–‡ä»¶ï¼Œä»¥ä¾¿å�‘ Rancher æ��供这些å‡è¯�。
+
+**结果**ï¼šä½ å·²æˆ�功创建 OAuth å‡è¯�。
+
+### 3. 创建 ServiceAccount å‡è¯�
+由于 Google Admin SDK �对管�员�用,普通用户�能使用它�检索其他用户或其组的�置文件。普通用户甚至�能检索他们自己的组。
+
+由于 Rancher �供基于组的�员访问,我们�求用户能够获得自己的组,并在需�时查找其他用户和组。
+
+为了解决这个问题,G Suite 建议创建一个 ServiceAccountï¼Œå¹¶å°†ä½ çš„ G Suite 域的æ�ƒé™�委托给该 ServiceAccount。
+
+本节介�如何:
+
+- 创建一个 ServiceAccount
+- 为 ServiceAccount 创建一个密钥并下载 JSON æ ¼å¼�çš„å‡è¯�
+
+1. 点击[æ¤å¤„](https://console.developers.google.com/iam-admin/serviceaccounts)并选择è¦�生æˆ� OAuth å‡è¯�的项目。
+1. 点击 **Create Service Account**。
+1. 输入�称,并点击 **Create**。
+ 
+1. ��在 **Service account permissions** 页�设置任何角色,然��击 **Continue**。
+ 
+1. 点击 **Create Key** 并选择 JSON 选项。下载并ä¿�å˜ JSON æ–‡ä»¶ï¼Œä»¥ä¾¿ä½ å�¯ä»¥å°†å…¶ä½œä¸º ServiceAccount å‡è¯�æ��供给 Rancher。
+ 
+
+**结果**ï¼šä½ çš„ ServiceAccount 已创建æˆ�功。
+
+### 4. 将 ServiceAccount 密钥注册� OAuth Client
+
+ä½ éœ€è¦�为在上一æ¥ä¸åˆ›å»ºçš„ ServiceAccount 授予一些æ�ƒé™�。Rancher ä»…è¦�求为用户和组授予å�ªè¯»æ�ƒé™�。
+
+使用 ServiceAccount 密钥的唯一 ID,按照以下æ¥éª¤å°†å…¶æ³¨å†Œä¸º Oauth Client:
+
+1. 获å�–ä½ åˆšåˆšåˆ›å»ºçš„å¯†é’¥çš„å”¯ä¸€ IDã€‚å¦‚æžœå®ƒæ²¡æœ‰æ˜¾ç¤ºåœ¨ä½ åˆ›å»ºçš„é”®æ—�边的键列表ä¸ï¼Œä½ 需è¦�å…ˆå�¯ç”¨ Unique ID 列。点击 **Unique ID** ç„¶å�Žç‚¹å‡» **OK**。这将å�‘ ServiceAccount å¯†é’¥åˆ—è¡¨ä¸æ·»åŠ **Unique ID** 列。ä¿�å˜ä½ 创建的 ServiceAccount 对应的唯一 ID。注æ„�ï¼šè¿™æ˜¯ä¸€ä¸ªæ•°å— Key,ä¸�è¦�ä¸Žå—æ¯�æ•°å—å—æ®µ **Key ID** 混淆。
+
+ 
+1. �往 [**Domain-wide Delegation** 页�。](https://admin.google.com/ac/owl/domainwidedelegation)
+1. 在 **Client Name** å—æ®µä¸æ·»åŠ ä¸Šä¸€æ¥ä¸èŽ·å¾—çš„å”¯ä¸€ ID。
+1. 在 **One or More API Scopes** å—æ®µä¸ï¼Œæ·»åŠ ä»¥ä¸‹ä½œç”¨åŸŸï¼š
+ ```
+ openid,profile,email,https://www.googleapis.com/auth/admin.directory.user.readonly,https://www.googleapis.com/auth/admin.directory.group.readonly
+ ```
+1. 点击 **Authorize**。
+
+**结果**:ServiceAccount åœ¨ä½ çš„ G Suite è´¦å�·ä¸å·²æ³¨å†Œä¸º OAuth 客户端。
+
+## 在 Rancher ä¸é…�ç½® Google OAuth
+
+1. 使用分�了 [administrator](../../authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/global-permissions.md) 角色的本地用户登录到 Rancher。这个用户也称为本地主体。
+1. 在左上角,�击 **☰ > 用户 & 认�**。
+1. 在左侧导航æ �,å�•击**认è¯�**。
+1. å�•击 **Google**。UI ä¸çš„说明介ç»�了使用 Google OAuth 设置身份验è¯�çš„æ¥éª¤ã€‚
+ 1. 管ç�†å‘˜é‚®ç®±ï¼šæ��ä¾› GSuite 设置ä¸çš„管ç�†å‘˜è´¦æˆ·çš„电å�邮箱。为了查找用户和组,Google API 需è¦�管ç�†å‘˜çš„电å�邮件和 ServiceAccount 密钥。
+ 1. 域�:�供�置了 G Suite 的域。请�供准确的域,而�是别�。
+ 1. å±žäºŽå¤šä¸ªç”¨æˆ·ç»„çš„ç”¨æˆ·ï¼šé€‰ä¸æ¤æ¡†ä»¥å�¯ç”¨åµŒå¥—组æˆ�员关系。Rancher 管ç�†å‘˜å�¯ä»¥åœ¨é…�置认è¯�å�Žçš„任何时候ç¦�用它。
+ - **æ¥éª¤ä¸€**是将 Rancher æ·»åŠ ä¸ºæŽˆæ�ƒåŸŸï¼ˆè¯¦æƒ…请å�‚è§�[本节](#1-å°†-rancher-æ·»åŠ ä¸ºæŽˆæ�ƒåŸŸ))。
+ - **æ¥éª¤äºŒ**æ��ä¾›ä½ å®Œæˆ�[本节](#2-为-rancher-server-生æˆ�-oauth2-å‡è¯�)å�Žä¸‹è½½çš„ OAuth å‡è¯� JSONã€‚ä½ å�¯ä»¥ä¸Šä¼ 文件或将内容粘贴到 **OAuth Credentials** å—æ®µã€‚
+ - **æ¥éª¤ä¸‰**æ��供在[本节](#3-创建-serviceaccount-å‡è¯�)末尾下载的 ServiceAccount å‡è¯� JSONã€‚ä»…å½“ä½ æˆ�功[在 G Suite è´¦å�·ä¸å°† ServiceAccount 密钥注册为 OAuth Client](#4-å°†-serviceaccount-密钥注册æˆ�-oauth-client) å�Žï¼Œå‡è¯�æ‰�能æ£å¸¸å·¥ä½œã€‚
+1. 点击**使用 Google 认�**。
+1. 点击**�用**。
+
+**结果**:Google 验��置�功。
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/authentication-config/configure-keycloak-oidc.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/authentication-config/configure-keycloak-oidc.md
new file mode 100644
index 00000000000..5516672eb87
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/authentication-config/configure-keycloak-oidc.md
@@ -0,0 +1,145 @@
+---
+title: �置 Keycloak (OIDC)
+description: 创建 Keycloak OpenID Connect (OIDC) 客户端并é…�ç½® Rancher 以使用 Keycloakã€‚ä½ çš„ç”¨æˆ·å°†èƒ½å¤Ÿä½¿ç”¨ä»–ä»¬çš„ Keycloak 登录å��登录 Rancher。
+---
+
+å¦‚æžœä½ çš„ç»„ç»‡ä½¿ç”¨ [Keycloak Identity Provider (IdP)](https://www.keycloak.org) 进行用户身份验è¯�ï¼Œä½ å�¯ä»¥é€šè¿‡é…�ç½® Rancher æ�¥å…�许用户使用 IdP å‡è¯�登录。Rancher 支æŒ�使用 OpenID Connect (OIDC) å��议和 SAML å��è®®æ�¥é›†æˆ� Keycloak。与 Rancher 一起使用时,这两ç§�å®žçŽ°åœ¨åŠŸèƒ½ä¸Šæ˜¯ç‰æ•ˆçš„。本文æ��述了é…�ç½® Rancher 以通过 OIDC å��议与 Keycloak 一起使用的æµ�程。
+
+å¦‚æžœä½ æ›´å–œæ¬¢å°† Keycloak 与 SAML å��议一起使用,请å�‚è§�[æ¤é¡µé�¢](configure-keycloak-saml.md)。
+
+å¦‚æžœä½ æœ‰ä½¿ç”¨ SAML å��议的现有é…�置并希望切æ�¢åˆ° OIDC å��议,请å�‚è§�[本节](#从-saml-è¿�移到-oidc)。
+
+## 先决�件
+
+- 已在 Rancher 上�用 Keycloak (SAML)。
+- ä½ å¿…é¡»é…�置了 [Keycloak IdP æœ�务器](https://www.keycloak.org/docs/latest/server_installation/)。
+- 在 Keycloak ä¸ï¼Œä½¿ç”¨ä»¥ä¸‹è®¾ç½®åˆ›å»ºä¸€ä¸ª[æ–°çš„ OIDC 客户端](https://www.keycloak.org/docs/latest/server_admin/#oidc-clients)。如需获å�–帮助,请å�‚è§� [Keycloak 文档](https://www.keycloak.org/docs/latest/server_admin/#oidc-clients)。
+
+ | 设置 | 值 |
+ ------------|------------
+ | `Client ID` | <CLIENT_ID> (例如 `rancher`) |
+ | `Name` | <CLIENT_NAME> (例如 `rancher`) |
+ | `Client Protocol` | `openid-connect` |
+ | `Access Type` | `confidential` |
+ | `Valid Redirect URI` | `https://yourRancherHostURL/verify-auth` |
+
+- 在新的 OIDC 客户端ä¸ï¼Œåˆ›å»º [Mappers](https://www.keycloak.org/docs/latest/server_admin/#_protocol-mappers) æ�¥å…¬å¼€ç”¨æˆ·å—段。
+ - 使用以下设置创建一个新的 "Groups Mapper":
+
+ | 设置 | 值 |
+ ------------|------------
+ | `Name` | `Groups Mapper` |
+ | `Mapper Type` | `Group Membership` |
+ | `Token Claim Name` | `groups` |
+ | `Add to ID token` | `OFF` |
+ | `Add to access token` | `OFF` |
+ | `Add to user info` | `ON` |
+
+ - 使用以下设置创建一个新的 "Client Audience" :
+
+ | 设置 | 值 |
+ ------------|------------
+ | `Name` | `Client Audience` |
+ | `Mapper Type` | `Audience` |
+ | `Included Client Audience` | <CLIENT_NAME> |
+ | `Add to access token` | `ON` |
+
+ - 使用以下设置创建一个新的 "Groups Path":
+
+ | 设置 | 值 |
+ ------------|------------
+ | `Name` | `Group Path` |
+ | `Mapper Type` | `Group Membership` |
+ | `Token Claim Name` | `full_group_path` |
+ | `Full group path` | `ON` |
+ | `Add to user info` | `ON` |
+
+## 在 Rancher ä¸é…�ç½® Keycloak
+
+1. 在 Rancher UI ä¸ï¼Œå�•击 **☰ > 用户 & 认è¯�**。
+1. å�•击左侧导航æ �çš„**认è¯�**。
+1. 选择 **Keycloak (OIDC)**。
+1. 填写**�置 Keycloak OIDC 账�**表�。有关填写表�的帮助,请��[�置�考](#�置�考)。
+1. 完�**�置 Keycloak OIDC 账�**表��,�击**�用**。
+
+ Rancher ä¼šå°†ä½ é‡�定å�‘到 IdP 登录页é�¢ã€‚输入使用 Keycloak IdP 进行身份验è¯�çš„å‡è¯�,æ�¥éªŒè¯�ä½ çš„ Rancher Keycloak é…�置。
+
+ :::note
+
+ ä½ å�¯èƒ½éœ€è¦�ç¦�用弹出窗å�£é˜»æ¢ç¨‹åº�æ‰�能看到 IdP 登录页é�¢ã€‚
+
+ :::
+
+**结果**:已将 Rancher é…�置为使用 OIDC å��议与 Keycloak ä¸€èµ·å·¥ä½œã€‚ä½ çš„ç”¨æˆ·çŽ°åœ¨å�¯ä»¥ä½¿ç”¨ Keycloak 登录å��登录 Rancher。
+
+## �置�考
+
+| å—æ®µ | æ��è¿° |
+| ------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| 客户端 ID | ä½ çš„ Keycloak 客户端的 `Client ID`。 |
+| 客户端密ç � | ä½ çš„ Keycloak 客户端生æˆ�çš„ `Secret`。在 Keycloak 控制å�°ä¸ï¼Œå�•击 **Clients**ï¼Œé€‰æ‹©ä½ åˆ›å»ºçš„å®¢æˆ·ç«¯ï¼Œé€‰æ‹© **Credentials** 选项å�¡ï¼Œç„¶å�Žå¤�制 `Secret` å—æ®µçš„值。 |
+| ç§�é’¥/è¯�书 | 在 Rancher å’Œä½ çš„ IdP 之间创建安全外壳(SSH)的密钥/è¯�ä¹¦å¯¹ã€‚å¦‚æžœä½ çš„ Keycloak æœ�务器上å�¯ç”¨äº† HTTPS/SSL,则为必填。 |
+| 端点 | 选择为 `Rancher URL`ã€�`å�‘行者`å’Œ `Auth 端点`å—æ®µä½¿ç”¨ç”Ÿæˆ�的值,还是在ä¸�æ£ç¡®æ—¶è¿›è¡Œæ‰‹åŠ¨è¦†ç›–ã€‚ |
+| Keycloak URL | ä½ çš„ Keycloak æœ�务器的 URL。 |
+| Keycloak Realm | 创建 Keycloak 客户端的 Realm 的�称。 |
+| Rancher URL | Rancher Server 的 URL。 |
+| Issuer | ä½ çš„ IdP çš„ URL。 |
+| Auth 端点 | �定�用户进行身份验�的 URL。 |
+
+## 从 SAML �移到 OIDC
+
+本节�述了将使用 Keycloak (SAML) 的 Rancher 过渡到 Keycloak (OIDC) 的过程。
+
+### �新�置 Keycloak
+
+1. 将现有客户端更改为使用 OIDC å��议。在 Keycloak 控制å�°ä¸ï¼Œå�•击 **Clients**,选择è¦�è¿�移的 SAML 客户端,选择 **Settings** 选项å�¡ï¼Œå°† `Client Protocol` 从 `saml` 更改为 `openid-connect`,然å�Žç‚¹å‡» **Save**。
+
+1. 验� `Valid Redirect URIs` 是��然有效。
+
+1. 选择 **Mappers** 选项�并使用以下设置创建一个新的 Mapper:
+
+ | 设置 | 值 |
+ ------------|------------
+ | `Name` | `Groups Mapper` |
+ | `Mapper Type` | `Group Membership` |
+ | `Token Claim Name` | `groups` |
+ | `Add to ID token` | `ON` |
+ | `Add to access token` | `ON` |
+ | `Add to user info` | `ON` |
+
+### �新�置 Rancher
+
+在将 Rancher �置为使用 Keycloak (OIDC) 之�,必须先�用 Keycloak (SAML):
+
+1. 在 Rancher UI ä¸ï¼Œå�•击 **☰ > 用户 & 认è¯�**。
+1. å�•击左侧导航æ �çš„**认è¯�**。
+1. 选择 **Keycloak (SAML)**。
+1. �击**�用**。
+
+按照[本节](#在-rancher-ä¸é…�ç½®-keycloak)ä¸çš„æ¥éª¤å°† Rancher é…�置为使用 Keycloak (OIDC)。
+
+:::note
+
+é…�置完æˆ�å�Žï¼Œç”±äºŽç”¨æˆ·æ�ƒé™�ä¸�会自动è¿�ç§»ï¼Œä½ éœ€è¦�é‡�新申请 Rancher 用户æ�ƒé™�。
+
+:::
+
+## 附录:故障排除
+
+å¦‚æžœä½ åœ¨æµ‹è¯•ä¸Ž Keycloak æœ�务器的连接时é�‡åˆ°é—®é¢˜ï¼Œè¯·å…ˆæ£€æŸ¥ OIDC 客户端的é…�ç½®é€‰é¡¹ã€‚ä½ è¿˜å�¯ä»¥æ£€æŸ¥ Rancher 日志æ�¥æŸ¥æ˜Žé—®é¢˜çš„åŽŸå› ã€‚è°ƒè¯•æ—¥å¿—å�¯èƒ½åŒ…å�«æœ‰å…³é”™è¯¯çš„æ›´è¯¦ç»†ä¿¡æ�¯ã€‚详情请å�‚è§�[如何å�¯ç”¨è°ƒè¯•日志](../../../../faq/technical-items.md#如何å�¯ç”¨è°ƒè¯•日志记录)。
+
+所有与 Keycloak 相关的日志æ�¡ç›®éƒ½å°†æ·»åŠ `[generic oidc]` 或 `[keycloak oidc]`。
+
+### �能�定�到 Keycloak
+
+完æˆ�**é…�ç½® Keycloak OIDC è´¦å�·**表å�•å¹¶å�•击**å�¯ç”¨**å�Žï¼Œä½ 没有被é‡�定å�‘åˆ°ä½ çš„ IdP。
+
+* 验è¯�ä½ çš„ Keycloak 客户端é…�置。
+
+### 生æˆ�çš„ `Issuer` å’Œ `Auth 端点`ä¸�æ£ç¡®
+
+* 在**é…�ç½® Keycloak OIDC è´¦å�·**表å�•ä¸ï¼Œå°†**端点**更改为`指定(高级设置)`并覆盖`å�‘行者` å’Œ `Auth 端点`的值。è¦�查找这些值,å‰�å¾€ Keycloak 控制å�°å¹¶é€‰æ‹© **Realm Settings**,选择 **General** 选项å�¡ï¼Œç„¶å�Žå�•击 **OpenID Endpoint Configuration**。JSON 输出将显示 `issuer` å’Œ `authorization_endpoint` 的值。
+
+### Keycloak 错误:"Invalid grant_type"
+
+* 在æŸ�些情况下,这æ�¡é”™è¯¯æ��示信æ�¯å�¯èƒ½æœ‰è¯¯å¯¼æ€§ï¼Œå®žé™…ä¸Šé€ æˆ�é”™è¯¯çš„åŽŸå› æ˜¯ `Valid Redirect URI` é…�置错误。
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/authentication-config/configure-keycloak-saml.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/authentication-config/configure-keycloak-saml.md
new file mode 100644
index 00000000000..17d906c51c0
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/authentication-config/configure-keycloak-saml.md
@@ -0,0 +1,190 @@
+---
+title: �置 Keycloak (SAML)
+description: 创建 Keycloak SAML 客户端并é…�ç½® Rancher 以使用 Keycloakã€‚ä½ çš„ç”¨æˆ·å°†èƒ½å¤Ÿä½¿ç”¨ä»–ä»¬çš„ Keycloak 登录å��登录 Rancher。
+---
+
+å¦‚æžœä½ çš„ç»„ç»‡ä½¿ç”¨ Keycloak Identity Provider (IdP) 进行用户身份验è¯�ï¼Œä½ å�¯ä»¥é€šè¿‡é…�ç½® Rancher æ�¥å…�许用户使用 IdP å‡è¯�登录。
+
+## 先决�件
+
+- ä½ å¿…é¡»é…�置了 [Keycloak IdP æœ�务器](https://www.keycloak.org/docs/latest/server_installation/)。
+- 在 Keycloak ä¸ï¼Œä½¿ç”¨ä»¥ä¸‹è®¾ç½®åˆ›å»ºä¸€ä¸ª[æ–°çš„ SAML 客户端](https://www.keycloak.org/docs/latest/server_admin/#saml-clients)。如需获å�–帮助,请å�‚è§� [Keycloak 文档](https://www.keycloak.org/docs/latest/server_admin/#saml-clients)。
+
+ | 设置 | 值 |
+ ------------|------------
+ | `Sign Documents` | `ON` 1 |
+ | `Sign Assertions` | `ON` 1 |
+ | 所有其他 `ON/OFF` 设置 | `OFF` |
+ | `Client ID` | 输入 `https://yourRancherHostURL/v1-saml/keycloak/saml/metadata`,或在 Rancher Keycloak é…�ç½®2 ä¸ `Entry ID å—æ®µ`的值。 |
+ | `Client Name` | (例如 `rancher`) |
+ | `Client Protocol` | `SAML` |
+ | `Valid Redirect URI` | `https://yourRancherHostURL/v1-saml/keycloak/saml/acs` |
+
+ > 1 :å�¯ä»¥é€‰æ‹©å�¯ç”¨è¿™äº›è®¾ç½®ä¸çš„一个或两个。
+ > 2 :在é…�置和ä¿�å˜ SAML 身份æ��供商之å‰�,ä¸�会生æˆ� Rancher SAML 元数æ�®ã€‚
+
+ 
+
+- 在新的 SAML 客户端ä¸ï¼Œåˆ›å»º Mappers æ�¥å…¬å¼€ç”¨æˆ·å—段。
+ - æ·»åŠ æ‰€æœ‰ "Builtin Protocol Mappers"
+ 
+ - 创建一个 "Group list" mapper,æ�¥å°†æˆ�å‘˜å±žæ€§æ˜ å°„åˆ°ç”¨æˆ·çš„ç»„ï¼š
+ 
+
+## 获� IDP 元数�
+
+
+
+
+�获� IDP 元数�,请从 Keycloak 客户端导出 `metadata.xml` 文件。
+在**安装**选项å�¡ä¸ï¼Œé€‰æ‹©**SAML 元数æ�® IDPSSODescriptor** æ ¼å¼�é€‰é¡¹å¹¶ä¸‹è½½ä½ çš„æ–‡ä»¶ã€‚
+
+
+
+
+1. 在**é…�ç½®**ä¸ï¼Œå�•击 **Realm 设置**选项å�¡ã€‚
+1. 点击**通用**选项�。
+1. 在**端点**å—æ®µä¸ï¼Œå�•击 **SAML 2.0 身份æ��供者元数æ�®**。
+
+验� IDP 元数�是�包�以下属性:
+
+```
+xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata"
+xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
+xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
+```
+
+�些�览器(例如 Firefox)�能会渲染/处�文档,使得内容看起�已被修改,并且�些属性看起��能有缺失。在这�情况下,请使用通过�览器找到的原始�应数�。
+
+以下是 Firefox 的示例�程,其他�览器�能会略有��:
+
+1. 按下 **F12** 访问开�者控制�。
+1. 点击 **Network** 选项�。
+1. 从表ä¸ï¼Œå�•击包å�« `descriptor` 的行。
+1. 在 details çª—æ ¼ä¸ï¼Œå�•击 **Response** 选项å�¡ã€‚
+1. �制原始�应数�。
+
+获得的 XML 以 `EntitiesDescriptor` ä½œä¸ºæ ¹å…ƒç´ ã€‚ç„¶è€Œï¼ŒRancher å¸Œæœ›æ ¹å…ƒç´ æ˜¯ `EntityDescriptor` 而ä¸�是 `EntitiesDescriptor`ã€‚å› æ¤ï¼Œåœ¨å°†è¿™ä¸ª XML ä¼ é€’ç»™ Rancher 之å‰�,请按照以下æ¥éª¤è°ƒæ•´ï¼š
+
+1. 将所有ä¸�å˜åœ¨çš„属性从 `EntitiesDescriptor` å¤�制到 `EntityDescriptor`。
+1. åˆ é™¤å¼€å¤´çš„ `` æ ‡ç¾ã€‚
+1. åˆ é™¤ xml 末尾的 ` `。
+
+最å�Žçš„代ç �会是如下:
+
+```
+
+....
+
+```
+
+
+
+
+1. 在**é…�ç½®**ä¸ï¼Œå�•击 **Realm 设置**选项å�¡ã€‚
+1. 点击**通用**选项�。
+1. 在**端点**å—æ®µä¸ï¼Œå�•击 **SAML 2.0 身份æ��供者元数æ�®**。
+
+验� IDP 元数�是�包�以下属性:
+
+```
+xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata"
+xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
+xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
+```
+
+�些�览器(例如 Firefox)�能会渲染/处�文档,使得内容看起�已被修改,并且�些属性看起��能有缺失。在这�情况下,请使用通过�览器找到的原始�应数�。
+
+以下是 Firefox 的示例�程,其他�览器�能会略有��:
+
+1. 按下 **F12** 访问开�者控制�。
+1. 点击 **Network** 选项�。
+1. 从表ä¸ï¼Œå�•击包å�« `descriptor` 的行。
+1. 在 details çª—æ ¼ä¸ï¼Œå�•击 **Response** 选项å�¡ã€‚
+1. �制原始�应数�。
+
+
+
+
+## 在 Rancher ä¸é…�ç½® Keycloak
+
+
+1. 在左上角,�击 **☰ > 用户 & 认�**。
+1. 在左侧导航æ �,å�•击**认è¯�**。
+1. �击 **Keycloak SAML**。
+1. 填写**�置 Keycloak 账�**表�。有关填写表�的帮助,请��[�置�考](#�置�考)。
+1. 完�**�置 Keycloak 账�**表��,�击**�用**。
+
+ Rancher ä¼šå°†ä½ é‡�定å�‘到 IdP 登录页é�¢ã€‚输入使用 Keycloak IdP 进行身份验è¯�çš„å‡è¯�,æ�¥éªŒè¯�ä½ çš„ Rancher Keycloak é…�置。
+
+ :::note
+
+ ä½ å�¯èƒ½éœ€è¦�ç¦�用弹出窗å�£é˜»æ¢ç¨‹åº�æ‰�能看到 IdP 登录页é�¢ã€‚
+
+ :::
+
+**结果**:已将 Rancher é…�置为使用 Keycloakã€‚ä½ çš„ç”¨æˆ·çŽ°åœ¨å�¯ä»¥ä½¿ç”¨ Keycloak 登录å��登录 Rancher。
+
+:::note SAML 身份�供商注�事项
+
+- SAML å��è®®ä¸�支æŒ�æ�œç´¢æˆ–æŸ¥æ‰¾ç”¨æˆ·æˆ–ç»„ã€‚å› æ¤ï¼Œå°†ç”¨æˆ·æˆ–ç»„æ·»åŠ åˆ° Rancher æ—¶ä¸�会对其进行验è¯�。
+- æ·»åŠ ç”¨æˆ·æ—¶ï¼Œå¿…é¡»æ£ç¡®è¾“入确切的用户 ID(å�³ `UID` å—æ®µï¼‰ã€‚键入用户 ID 时,将ä¸�会æ�œç´¢å�¯èƒ½åŒ¹é…�的其他用户 ID。
+- æ·»åŠ ç»„æ—¶ï¼Œå¿…é¡»ä»Žæ–‡æœ¬æ¡†æ—�边的下拉列表ä¸é€‰æ‹©ç»„。Rancher å�‡å®šæ�¥è‡ªæ–‡æœ¬æ¡†çš„任何输入都是用户。
+- ç”¨æˆ·ç»„ä¸‹æ‹‰åˆ—è¡¨ä»…æ˜¾ç¤ºä½ æ‰€å±žçš„ç”¨æˆ·ç»„ã€‚å¦‚æžœä½ ä¸�是æŸ�个组的æˆ�å‘˜ï¼Œä½ å°†æ— æ³•æ·»åŠ è¯¥ç»„ã€‚
+
+:::
+
+## �置�考
+
+| å—æ®µ | æ��è¿° |
+| ------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| 显示å��ç§°å—æ®µ | 包å�«ç”¨æˆ·æ˜¾ç¤ºå��称的属性。 示例:`givenName` |
+| 用户å��å—æ®µ | 包å�«ç”¨æˆ·å��/给定å��称的属性。 示例:`email` |
+| UID å—æ®µ | æ¯�个用户独有的属性。 示例:`email` |
+| ç”¨æˆ·ç»„å—æ®µ | 创建用于管ç�†ç»„æˆ�员关系的æ�¡ç›®ã€‚ 示例:`member` |
+| Entity ID å—æ®µ | Keycloak 客户端ä¸éœ€è¦�é…�置为客户端的 ID。 默认值:`https://yourRancherHostURL/v1-saml/keycloak/saml/metadata` |
+| Rancher API 主机 | Rancher Server 的 URL。 |
+| ç§�é’¥/è¯�书 | 在 Rancher å’Œä½ çš„ IdP 之间创建安全外壳(SSH)的密钥/è¯�书对。 |
+| IDP 元数� | 从 IdP �务器导出的 `metadata.xml` 文件。 |
+
+:::tip
+
+ä½ å�¯ä»¥ä½¿ç”¨ openssl 命令生æˆ�一个密钥/è¯�书对。例如:
+
+openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout myservice.key -out myservice.cert
+
+:::
+
+## 附录:故障排除
+
+å¦‚æžœä½ åœ¨æµ‹è¯•ä¸Ž Keycloak æœ�务器的连接时é�‡åˆ°é—®é¢˜ï¼Œè¯·å…ˆæ£€æŸ¥ SAML 客户端的é…�ç½®é€‰é¡¹ã€‚ä½ è¿˜å�¯ä»¥æ£€æŸ¥ Rancher 日志æ�¥æŸ¥æ˜Žé—®é¢˜çš„åŽŸå› ã€‚è°ƒè¯•æ—¥å¿—å�¯èƒ½åŒ…å�«æœ‰å…³é”™è¯¯çš„æ›´è¯¦ç»†ä¿¡æ�¯ã€‚详情请å�‚è§�[如何å�¯ç”¨è°ƒè¯•日志](../../../../faq/technical-items.md#如何å�¯ç”¨è°ƒè¯•日志记录)。
+
+### �能�定�到 Keycloak
+
+点击**使用 Keycloak 认è¯�**时,没有é‡�定å�‘åˆ°ä½ çš„ IdP。
+
+* 验è¯�ä½ çš„ Keycloak 客户端é…�置。
+* 确� `Force Post Binding` 设为 `OFF`。
+
+
+### IdP 登录å�Žæ˜¾ç¤ºç¦�æ¢æ¶ˆæ�¯
+
+ä½ å·²æ£ç¡®é‡�定å�‘åˆ°ä½ çš„ IdP 登录页é�¢ï¼Œå¹¶ä¸”å�¯ä»¥è¾“å…¥å‡è¯�,但是之å�Žæ”¶åˆ° `Forbidden` 消æ�¯ã€‚
+
+* 检查 Rancher 调试日志。
+* 如果日志显示 `ERROR: either the Response or Assertion must be signed`,确ä¿� `Sign Documents` 或 `Sign assertions` 在 Keycloak 客户端ä¸è®¾ç½®ä¸º `ON`。
+
+### 访问 `/v1-saml/keycloak/saml/metadata` 时返回 HTTP 502
+
+常è§�åŽŸå› ï¼šé…�ç½® SAML æ��供商之å‰�未创建元数æ�®ã€‚
+å°�试é…�ç½® Keycloak,并将它ä¿�å˜ä¸ºä½ çš„ SAML æ��供商,然å�Žè®¿é—®å…ƒæ•°æ�®ã€‚
+
+### Keycloak 错误:"We're sorry, failed to process response"
+
+* æ£€æŸ¥ä½ çš„ Keycloak 日志。
+* 如果日志显示 `failed: org.keycloak.common.VerificationException: Client does not have a public key`,请在 Keycloak 客户端ä¸å°† `Encrypt Assertions` 设为 `OFF`。
+
+### Keycloak 错误:"We're sorry, invalid requester"
+
+* æ£€æŸ¥ä½ çš„ Keycloak 日志。
+* 如果日志显示 `request validation failed: org.keycloak.common.VerificationException: SigAlg was null`,请在 Keycloak 客户端ä¸å°† `Client Signature Required` 设为 `OFF`。
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/authentication-config/configure-okta-saml.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/authentication-config/configure-okta-saml.md
new file mode 100644
index 00000000000..212f7cf45d1
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/authentication-config/configure-okta-saml.md
@@ -0,0 +1,107 @@
+---
+title: �置 Okta (SAML)
+---
+
+å¦‚æžœä½ çš„ç»„ç»‡ä½¿ç”¨ Okta Identity Provider (IdP) 进行用户身份验è¯�ï¼Œä½ å�¯ä»¥é€šè¿‡é…�ç½® Rancher æ�¥å…�许用户使用 IdP å‡è¯�登录。
+
+:::note
+
+Okta 集�仅支��务�供商�起的登录。
+
+:::
+## 先决�件
+
+在 Okta ä¸ï¼Œä½¿ç”¨ä»¥ä¸‹è®¾ç½®åˆ›å»ºä¸€ä¸ªæ–°çš„ SAML 应用。如需获å�–帮助,请å�‚è§� [Okta 文档](https://developer.okta.com/standards/SAML/setting_up_a_saml_application_in_okta)。
+
+| 设置 | 值 |
+------------|------------
+| `Single Sign on URL` | `https://yourRancherHostURL/v1-saml/okta/saml/acs` |
+| `Audience URI (SP Entity ID)` | `https://yourRancherHostURL/v1-saml/okta/saml/metadata` |
+
+## 在 Rancher ä¸é…�ç½® Okta
+
+ä½ å�¯ä»¥å°† Okta 与 Rancher 集æˆ�,以便ç»�过身份认è¯�的用户通过组æ�ƒé™�访问 Rancher 资æº�。Okta 会返回一个对用户进行身份认è¯�çš„ SAML æ–言,包括用户所属的组。
+
+1. 在左上角,�击 **☰ > 用户 & 认�**。
+1. 在左侧导航æ �,å�•击**认è¯�**。
+1. �击 **Okta**。
+1. 填写**é…�ç½® Okta è´¦å�·**表å�•。下é�¢çš„示例æ��述了如何将 Okta 属性从属性è¯å�¥æ˜ 射到 Rancher ä¸çš„å—æ®µï¼š
+
+ | å—æ®µ | æ��è¿° |
+ | ------------------------- | ----------------------------------------------------------------------------- |
+ | 显示å��ç§°å—æ®µ | 属性è¯å�¥ä¸åŒ…å�«ç”¨æˆ·æ˜¾ç¤ºå��称的属性å��称。 |
+ | 用户å��å—æ®µ | 属性è¯å�¥ä¸åŒ…å�«ç”¨æˆ·å��/给定å��称的属性å��称。 |
+ | UID å—æ®µ | 属性è¯å�¥ä¸æ¯�个用户唯一的属性å��称。 |
+ | ç”¨æˆ·ç»„å—æ®µ | 组属性è¯å�¥ä¸å…¬å¼€ä½ 的组的属性å��称。 |
+ | Rancher API 主机 | Rancher Server 的 URL。 |
+ | ç§�é’¥/è¯�书 | 密钥/è¯�书对,用于æ–è¨€åŠ å¯†ã€‚ |
+ | 元数æ�® XML | ä½ åœ¨åº”ç”¨ `Sign On` éƒ¨åˆ†ä¸æ‰¾åˆ°çš„ `Identity Provider metadata` 文件。 |
+
+ :::tip
+
+ ä½ å�¯ä»¥ä½¿ç”¨ openssl 命令生æˆ�一个密钥/è¯�书对。例如:
+
+ ```
+ openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout myservice.key -out myservice.crt
+ ```
+
+ :::
+
+
+1. 完�**�置 Okta 账�**表��,�击**�用**。
+
+ Rancher ä¼šå°†ä½ é‡�定å�‘到 IdP 登录页é�¢ã€‚输入使用 Okta IdP 进行身份验è¯�çš„å‡è¯�,æ�¥éªŒè¯�ä½ çš„ Rancher Okta é…�置。
+
+ :::note
+
+ 如果什么都没有å�‘生,很å�¯èƒ½æ˜¯å› ä¸ºä½ çš„æµ�览器阻æ¢äº†å¼¹å‡ºçª—å�£ã€‚请在弹出窗å�£é˜»æ¢ç¨‹åº�ä¸ç¦�用 Rancher 域,并在其他类似扩展ä¸å°† Rancher 列入白å��å�•。
+
+ :::
+
+**结果**:已将 Rancher é…�置为使用 Oktaã€‚ä½ çš„ç”¨æˆ·çŽ°åœ¨å�¯ä»¥ä½¿ç”¨ Okta 登录å��登录 Rancher。
+
+:::note SAML 身份�供商注�事项
+
+å¦‚æžœä½ åœ¨æ²¡æœ‰ OpenLDAP 的情况下é…�ç½® Oktaï¼Œä½ å°†æ— æ³•æ�œç´¢æˆ–直接查找用户或组。相关的è¦å‘Šå¦‚下:
+
+- 在 Rancher ä¸ä¸ºç”¨æˆ·å’Œç»„分é…�æ�ƒé™�æ—¶å°†ä¸�会验è¯�用户和组。
+- æ·»åŠ ç”¨æˆ·æ—¶ï¼Œå¿…é¡»æ£ç¡®è¾“入确切的用户 ID(å�³ `UID` å—æ®µï¼‰ã€‚键入用户 ID 时,将ä¸�会æ�œç´¢å�¯èƒ½åŒ¹é…�的其他用户 ID。
+- æ·»åŠ ç»„æ—¶ï¼Œå¿…é¡»ä»Žæ–‡æœ¬æ¡†æ—�边的下拉列表ä¸é€‰æ‹©ç»„。Rancher å�‡å®šæ�¥è‡ªæ–‡æœ¬æ¡†çš„任何输入都是用户。
+- ç”¨æˆ·ç»„ä¸‹æ‹‰åˆ—è¡¨ä»…æ˜¾ç¤ºä½ æ‰€å±žçš„ç”¨æˆ·ç»„ã€‚å¦‚æžœä½ ä¸�是æŸ�个组的æˆ�å‘˜ï¼Œä½ å°†æ— æ³•æ·»åŠ è¯¥ç»„ã€‚
+
+:::
+
+## Okta 与 OpenLDAP �索
+
+ä½ å�¯ä»¥æ·»åŠ OpenLDAP å�Žç«¯æ�¥å��助用户和组æ�œç´¢ã€‚Rancher 将显示æ�¥è‡ª OpenLDAP æœ�务的其他用户和组。这å…�è®¸ä½ å°†æ�ƒé™�分é…�给用户ä¸�属于的组。
+
+### OpenLDAP 先决�件
+
+å¦‚æžœä½ ä½¿ç”¨ Okta 作为 IdPï¼Œä½ å�¯ä»¥[设置 LDAP 接å�£](https://help.okta.com/en-us/Content/Topics/Directory/LDAP-interface-main.htm)以供 Rancher ä½¿ç”¨ã€‚ä½ è¿˜å�¯ä»¥é…�置外部 OpenLDAP Server。
+
+ä½ å¿…é¡»ä½¿ç”¨ LDAP 绑定å¸�户(也称为 ServiceAccount)æ�¥é…�ç½® Rancher,以便æ�œç´¢å’Œæ£€ç´¢åº”具有访问æ�ƒé™�的用户和组的 LDAP æ�¡ç›®ã€‚ä¸�è¦�使用管ç�†å‘˜å¸�户或个人å¸�户作为 LDAP 绑定å¸�户。在 OpenLDAP ä¸[创建](https://help.okta.com/en-us/Content/Topics/users-groups-profiles/usgp-add-users.htm)一个专用å¸�户,对æ�œç´¢åº“下的用户和组具有å�ªè¯»è®¿é—®æ�ƒé™�。
+
+:::warning 安全注�事项
+
+OpenLDAP ServiceAccount 用于所有æ�œç´¢ã€‚æ— è®ºç”¨æˆ·ä¸ªäººçš„ SAML æ�ƒé™�是什么,Rancher 用户都将看到 OpenLDAP ServiceAccount å�¯ä»¥æŸ¥çœ‹çš„用户和组。
+
+:::
+
+
+> **使用 TLS?**
+>
+> 如果 OpenLDAP Server 使用的è¯�书是自ç¾å��的或æ�¥è‡ªæ— 法识别的è¯�书é¢�å�‘机构,则 Rancher 需è¦� PEM æ ¼å¼�çš„ CA è¯�书(包å�«æ‰€æœ‰ä¸é—´è¯�ä¹¦ï¼‰ã€‚ä½ éœ€è¦�在é…�置期间æ��ä¾›æ¤è¯�书,以便 Rancher 能够验è¯�è¯�书链。
+
+### 在 Rancher ä¸é…�ç½® OpenLDAP
+
+[�置 OpenLDAP Server�组和用户的设置](../configure-openldap/openldap-config-reference.md)。请注�,�支�嵌套组�员。
+
+> 在继ç»é…�置之å‰�,请熟悉[外部身份认è¯�é…�置和主è¦�用户](../../../../pages-for-subheaders/authentication-config.md#外部身份验è¯�é…�置和用户主体)。
+
+1. 使用分�了 [administrator](https://ranchermanager.docs.rancher.com/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/global-permissions) 角色(� _本地主体_)的本地用户登录到 Rancher。
+1. 在左上角,�击 **☰ > 用户 & 认�**。
+1. 在左侧导航æ �,å�•击**认è¯�**。
+1. �击 **Okta**,如果已�置 SAML,则�击**编辑�置**。
+1. 在**用户和组æ�œç´¢**下,选ä¸**é…�ç½® OpenLDAP Server**。
+
+å¦‚æžœä½ åœ¨æµ‹è¯•ä¸Ž OpenLDAP Server 的连接时é�‡åˆ°é—®é¢˜ï¼Œè¯·ç¡®ä¿�ä½ è¾“å…¥äº†ServiceAccount çš„å‡è¯�å¹¶æ£ç¡®é…�置了æ�œç´¢åº“ã€‚ä½ å�¯ä»¥æ£€æŸ¥ Rancher 日志æ�¥æŸ¥æ˜Žæ ¹æœ¬åŽŸå› ã€‚è°ƒè¯•æ—¥å¿—å�¯èƒ½åŒ…å�«æœ‰å…³é”™è¯¯çš„æ›´è¯¦ç»†ä¿¡æ�¯ã€‚请å�‚阅[如何å�¯ç”¨è°ƒè¯•日志](../../../../faq/technical-items.md#如何å�¯ç”¨è°ƒè¯•日志记录)了解更多信æ�¯ã€‚
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/authentication-config/configure-pingidentity.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/authentication-config/configure-pingidentity.md
new file mode 100644
index 00000000000..0eebb8363c9
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/authentication-config/configure-pingidentity.md
@@ -0,0 +1,62 @@
+---
+title: �置 PingIdentity (SAML)
+---
+
+å¦‚æžœä½ çš„ç»„ç»‡ä½¿ç”¨ Ping Identity Provider (IdP) 进行用户身份验è¯�ï¼Œä½ å�¯ä»¥é€šè¿‡é…�ç½® Rancher æ�¥å…�许用户使用 IdP å‡è¯�登录。
+
+> **先决�件**:
+>
+> - ä½ å¿…é¡»é…�置了 [Ping IdP æœ�务器](https://www.pingidentity.com/)。
+> - 以下是 Rancher Service Provider �置所需的 URL:
+> 元数� URL:`https:///v1-saml/ping/saml/metadata`
+> æ–言使用者æœ�务 (ACS) URL:`https:///v1-saml/ping/saml/acs`
+> 请注æ„�,在 Rancher ä¸ä¿�å˜éªŒè¯�é…�置之å‰�,这些 URL ä¸�会返回有效数æ�®ã€‚
+> - 从 IdP �务器导出 `metadata.xml` 文件。详情请�� [PingIdentity 文档](https://documentation.pingidentity.com/pingfederate/pf83/index.shtml#concept_exportingMetadata.html)。
+
+1. 在左上角,�击 **☰ > 用户 & 认�**。
+1. 在左侧导航æ �,å�•击**认è¯�**。
+1. �击 **Ping Identity**。
+1. 填写**é…�ç½® Ping è´¦å�·**表å�•。Ping IdP å…�è®¸ä½ æŒ‡å®šè¦�使用的数æ�®å˜å‚¨ã€‚ä½ å�¯ä»¥æ·»åŠ æ•°æ�®åº“或使用现有的 ldap æœ�åŠ¡å™¨ã€‚ä¾‹å¦‚ï¼Œå¦‚æžœä½ é€‰æ‹© Active Directory (AD) æœ�务器,下é�¢çš„示例将æ��述如何将 AD å±žæ€§æ˜ å°„åˆ° Rancher ä¸çš„å—æ®µï¼š
+
+ 1. **显示å��ç§°å—æ®µ**:包å�«ç”¨æˆ·æ˜¾ç¤ºå��ç§°çš„ AD 属性(例如:`displayName`)。
+
+ 1. **用户å��å—æ®µ**:包å�«ç”¨æˆ·å��/给定å��ç§°çš„ AD 属性(例如:`givenName`)。
+
+ 1. **UID å—æ®µ**:æ¯�个用户唯一的 AD 属性(例如:`sAMAccountName`ã€�`distinguishedName`)。
+
+ 1. **ç”¨æˆ·ç»„å—æ®µ**: 创建用于管ç�†ç»„æˆ�员关系的æ�¡ç›®ï¼ˆä¾‹å¦‚:`memberOf`)。
+
+ 1. **Entity ID å—æ®µ**(å�¯é€‰ï¼‰ï¼šä½ çš„å�ˆä½œä¼™ä¼´å·²å…¬å¸ƒçš„ã€�ä¾�èµ–å��议的ã€�å”¯ä¸€çš„æ ‡è¯†ç¬¦ã€‚è¯¥ ID å°†ä½ çš„ç»„ç»‡å®šä¹‰ä¸ºå°†æœ�务器用于 SAML 2.0 事务的实体。这个 ID å�¯ä»¥é€šè¿‡å¸¦å¤–ä¼ è¾“æˆ– SAML 元数æ�®æ–‡ä»¶èŽ·å¾—ã€‚
+
+ 1. **Rancher API 主机**ï¼šä½ çš„ Rancher Server çš„ URL。
+
+ 1. **ç§�é’¥**å’Œ**è¯�书**:密钥/è¯�书对,用于在 Rancher å’Œä½ çš„ IdP 之间创建一个安全外壳(SSH)。
+
+ ä½ å�¯ä»¥ä½¿ç”¨ openssl 命令进行创建。例如:
+
+ ```
+ openssl req -x509 -newkey rsa:2048 -keyout myservice.key -out myservice.cert -days 365 -nodes -subj "/CN=myservice.example.com"
+ ```
+ 1. **IDP 元数�**:[从 IdP �务器导出的 `metadata.xml` 文件](https://documentation.pingidentity.com/pingfederate/pf83/index.shtml#concept_exportingMetadata.html)。
+
+
+1. 完�**�置 Ping 账�**表��,�击**�用**。
+
+ Rancher ä¼šå°†ä½ é‡�定å�‘到 IdP 登录页é�¢ã€‚输入使用 Ping IdP 进行身份验è¯�çš„å‡è¯�,æ�¥éªŒè¯�ä½ çš„ Rancher PingIdentity é…�置。
+
+ :::note
+
+ ä½ å�¯èƒ½éœ€è¦�ç¦�用弹出窗å�£é˜»æ¢ç¨‹åº�æ‰�能看到 IdP 登录页é�¢ã€‚
+
+ :::
+
+**结果**:已将 Rancher é…�置为使用 PingIdentityã€‚ä½ çš„ç”¨æˆ·çŽ°åœ¨å�¯ä»¥ä½¿ç”¨ PingIdentity 登录å��登录 Rancher。
+
+:::note SAML 身份�供商注�事项
+
+- SAML å��è®®ä¸�支æŒ�æ�œç´¢æˆ–æŸ¥æ‰¾ç”¨æˆ·æˆ–ç»„ã€‚å› æ¤ï¼Œå°†ç”¨æˆ·æˆ–ç»„æ·»åŠ åˆ° Rancher æ—¶ä¸�会对其进行验è¯�。
+- æ·»åŠ ç”¨æˆ·æ—¶ï¼Œå¿…é¡»æ£ç¡®è¾“入确切的用户 ID(å�³ `UID` å—æ®µï¼‰ã€‚键入用户 ID 时,将ä¸�会æ�œç´¢å�¯èƒ½åŒ¹é…�的其他用户 ID。
+- æ·»åŠ ç»„æ—¶ï¼Œå¿…é¡»ä»Žæ–‡æœ¬æ¡†æ—�边的下拉列表ä¸é€‰æ‹©ç»„。Rancher å�‡å®šæ�¥è‡ªæ–‡æœ¬æ¡†çš„任何输入都是用户。
+- ç”¨æˆ·ç»„ä¸‹æ‹‰åˆ—è¡¨ä»…æ˜¾ç¤ºä½ æ‰€å±žçš„ç”¨æˆ·ç»„ã€‚å¦‚æžœä½ ä¸�是æŸ�个组的æˆ�å‘˜ï¼Œä½ å°†æ— æ³•æ·»åŠ è¯¥ç»„ã€‚
+
+:::
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/authentication-config/create-local-users.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/authentication-config/create-local-users.md
new file mode 100644
index 00000000000..e6589e67693
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/authentication-config/create-local-users.md
@@ -0,0 +1,15 @@
+---
+title: 本地身份验�
+---
+
+在é…�置外部验è¯�æ��供程åº�之å‰�ï¼Œä½ å°†é»˜è®¤ä½¿ç”¨æœ¬åœ°èº«ä»½éªŒè¯�。Rancher 将用户å¸�户信æ�¯ï¼ˆä¾‹å¦‚用户å��和密ç �)å˜å‚¨åœ¨æœ¬åœ°ã€‚默认情况下,用于首次登录 Rancher çš„ `admin` 用户就是一个本地用户。
+
+## æ·»åŠ æœ¬åœ°ç”¨æˆ·
+
+æ— è®ºæ˜¯å�¦ä½¿ç”¨å¤–部身份验è¯�æœ�åŠ¡ï¼Œä½ éƒ½åº”åˆ›å»ºä¸€äº›æœ¬åœ°èº«ä»½è®¤è¯�的用户,以便在外部验è¯�æœ�务é�‡åˆ°é—®é¢˜æ—¶ç»§ç»ä½¿ç”¨ Rancher。
+
+1. 在左上角,�击 **☰ > 用户 & 认�**。
+1. 在左侧导航æ �,å�•击**用户**。
+1. �击**创建**。
+1. 完æˆ�**æ·»åŠ ç”¨æˆ·**的表å�•。
+1. �击**创建**。
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/authentication-config/manage-users-and-groups.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/authentication-config/manage-users-and-groups.md
new file mode 100644
index 00000000000..b44cc440312
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/authentication-config/manage-users-and-groups.md
@@ -0,0 +1,77 @@
+---
+title: 用户和组
+---
+
+Rancher ä¾�赖用户和组æ�¥å†³å®šå…�许登录到 Rancher 的用户,以å�Šä»–们å�¯ä»¥è®¿é—®å“ªäº›èµ„æº�ã€‚ä½ é…�置外部身份验è¯�æ��供程åº�å�Žï¼Œè¯¥æ��供程åº�çš„ç”¨æˆ·å°†èƒ½å¤Ÿç™»å½•åˆ°ä½ çš„ Rancher Server。用户登录时,验è¯�æ��供程åº�å°†å�‘ä½ çš„ Rancher Server æ��供该用户所属的组列表。
+
+ä½ å�¯ä»¥é€šè¿‡å�‘资æº�æ·»åŠ ç”¨æˆ·æˆ–ç»„ï¼Œæ�¥æŽ§åˆ¶å…¶å¯¹é›†ç¾¤ã€�项目ã€�多集群应用ã€�全局 DNS æ��供程åº�和相关资æº�çš„è®¿é—®ã€‚å°†ç»„æ·»åŠ åˆ°èµ„æº�时,身份验è¯�æ��供程åº�ä¸å±žäºŽè¯¥ç»„的所有用户都将能够使用组的æ�ƒé™�访问该资æº�。有关角色和æ�ƒé™�的更多信æ�¯ï¼Œè¯·å�‚è§� [RBAC](../../../../pages-for-subheaders/manage-role-based-access-control-rbac.md)。
+
+## 管��员
+
+å�‘资æº�æ·»åŠ ç”¨æˆ·æˆ–ç”¨æˆ·ç»„æ—¶ï¼Œä½ å�¯ä»¥é€šè¿‡è¾“入用户或组的å��ç§°æ�¥æ�œç´¢ç”¨æˆ·æˆ–组。Rancher Server 会查询身份验è¯�æ��供程åº�,æ�¥æŸ¥æ‰¾ä¸Žä½ 输入的内容匹é…�的用户和组。æ�œç´¢ä»…é™�äºŽä½ ç™»å½•æ—¶ä½¿ç”¨çš„èº«ä»½éªŒè¯�æ��供程åº�ã€‚ä¾‹å¦‚ï¼Œå¦‚æžœä½ å�¯ç”¨äº† GitHub 身份验è¯�,但使用[本地](create-local-users.md)ç”¨æˆ·ç™»å½•ï¼Œåˆ™æ— æ³•æ�œç´¢ GitHub 用户或组。
+
+ä½ å�¯ä»¥æŸ¥çœ‹å’Œç®¡ç�†æ‰€æœ‰ç”¨æˆ·ï¼ŒåŒ…括本地用户和æ�¥è‡ªèº«ä»½éªŒè¯�æ��供程åº�的用户。在左上角,å�•击 **☰ > 用户 & 认è¯�**。在左侧导航æ �ä¸å�•击**用户**。
+
+:::note SAML 身份�供商注�事项
+
+- SAML å��è®®ä¸�支æŒ�æ�œç´¢æˆ–æŸ¥æ‰¾ç”¨æˆ·æˆ–ç»„ã€‚å› æ¤ï¼Œå°†ç”¨æˆ·æˆ–ç»„æ·»åŠ åˆ° Rancher æ—¶ä¸�会对其进行验è¯�。
+- æ·»åŠ ç”¨æˆ·æ—¶ï¼Œå¿…é¡»æ£ç¡®è¾“入确切的用户 ID(å�³ `UID` å—æ®µï¼‰ã€‚键入用户 ID 时,将ä¸�会æ�œç´¢å�¯èƒ½åŒ¹é…�的其他用户 ID。
+- æ·»åŠ ç»„æ—¶ï¼Œå¿…é¡»ä»Žæ–‡æœ¬æ¡†æ—�边的下拉列表ä¸é€‰æ‹©ç»„。Rancher å�‡å®šæ�¥è‡ªæ–‡æœ¬æ¡†çš„任何输入都是用户。
+- ç”¨æˆ·ç»„ä¸‹æ‹‰åˆ—è¡¨ä»…æ˜¾ç¤ºä½ æ‰€å±žçš„ç”¨æˆ·ç»„ã€‚å¦‚æžœä½ ä¸�是æŸ�个组的æˆ�å‘˜ï¼Œä½ å°†æ— æ³•æ·»åŠ è¯¥ç»„ã€‚
+
+:::
+
+## 用户信�
+
+Rancher 会维护通过身份验è¯�æ��供程åº�登录的æ¯�个用户的信æ�¯ï¼ŒåŒ…括用户是å�¦å…�许访问 Rancher Server,以å�Šç”¨æˆ·æ‰€å±žçš„组的列表。Rancher ä¿�ç•™æ¤ç”¨æˆ·ä¿¡æ�¯ï¼Œä»¥ä¾¿ CLIã€�API å’Œ kubectl 能够准确地å��æ˜ ç”¨æˆ·åŸºäºŽèº«ä»½éªŒè¯�æ��供程åº�ä¸çš„组æˆ�员关系的访问。
+
+当用户使用身份验��供程�登录到 UI 时,Rancher 将自动更新该用户信�。
+
+### 自动刷新用户信�
+
+Rancher 会定期刷新用户信æ�¯ï¼Œç”šè‡³åœ¨ç”¨æˆ·é€šè¿‡ UI 登录之å‰�也是如æ¤ã€‚ä½ å�¯ä»¥æŽ§åˆ¶ Rancher 执行刷新的频率。
+
+有两个�数�以控制这个�作:
+
+- **`auth-user-info-max-age-seconds`**
+
+ æ¤è®¾ç½®æŽ§åˆ¶ç”¨æˆ·ä¿¡æ�¯çš„æœ€å¤§è€�化时间,如果超过这个时间,Rancher 就会刷新信æ�¯ã€‚如果用户进行 API 调用(直接 UI 访问或通过使用 Rancher CLI 或 kubectl 调用),并且与 Rancher 上次刷新用户信æ�¯çš„æ—¶é—´é—´éš”大于æ¤è®¾ç½®ï¼Œåˆ™ Rancher 将触å�‘刷新。æ¤è®¾ç½®é»˜è®¤ä¸º `3600` 秒,å�³ 1 å°�时。
+
+- **`auth-user-info-resync-cron`**
+
+ æ¤è®¾ç½®æŽ§åˆ¶ç”¨äºŽæ‰€æœ‰ç”¨æˆ·é‡�æ–°å�Œæ¥èº«ä»½éªŒè¯�æ��供程åº�ä¿¡æ�¯çš„å®šæœŸä»»åŠ¡å‘¨æœŸã€‚æ— è®ºç”¨æˆ·æœ€è¿‘æ˜¯å�¦ç™»å½•或使用 API,自动刷新任务都会按照指定的时间间隔刷新用户信æ�¯ã€‚æ¤è®¾ç½®é»˜è®¤ä¸º `0 0 * * *`,å�³æ¯�天å�ˆå¤œè¿›è¡Œä¸€æ¬¡ã€‚有关æ¤è®¾ç½®çš„æœ‰æ•ˆå€¼çš„æ›´å¤šä¿¡æ�¯ï¼Œè¯·å�‚è§� [Cron 文档](https://en.wikipedia.org/wiki/Cron)。
+
+如果需�更改设置:
+
+1. 在左上角,�击 **☰ > 全局设置**。
+1. å‰�å¾€ä½ éœ€è¦�é…�置的设置,并点击 **â‹® > 编辑设置**。
+
+:::note
+
+由于 SAML ä¸�支æŒ�ç”¨æˆ·æŸ¥æ‰¾ï¼Œå› æ¤åŸºäºŽ SAML 的身份验è¯�æ��供程åº�ä¸�支æŒ�定期刷新用户信æ�¯ã€‚å�ªæœ‰å½“用户登录到 Rancher UI 时,æ‰�会刷新用户信æ�¯ã€‚
+
+:::
+### 手动刷新用户信�
+
+å¦‚æžœä½ ä¸�确定 Rancher 上一次执行用户信æ�¯è‡ªåŠ¨åˆ·æ–°çš„æ—¶é—´ï¼Œåˆ™å�¯ä»¥é€šè¿‡æ‰‹åŠ¨åˆ·æ–°æ�¥åˆ·æ–°æ‰€æœ‰ç”¨æˆ·çš„ä¿¡æ�¯ã€‚
+
+1. 在左上角,�击 **☰ > 用户 & 认�**。
+1. 在**用户**页�,�击**刷新用户组�员��**。
+
+**结果**:Rancher 刷新了所有用户的信æ�¯ã€‚请求æ¤åˆ·æ–°å°†æ›´æ–°å“ªäº›ç”¨æˆ·å�¯ä»¥è®¿é—® Rancher 以å�Šæ¯�个用户所属的所有组。
+
+:::note
+
+由于 SAML ä¸�支æŒ�ç”¨æˆ·æŸ¥æ‰¾ï¼Œå› æ¤åŸºäºŽ SAML 的身份验è¯�æ��供程åº�ä¸�支æŒ�手动刷新用户信æ�¯ã€‚å�ªæœ‰å½“用户登录到 Rancher UI 时,æ‰�会刷新用户信æ�¯ã€‚
+
+:::
+
+## 会�周期
+
+用户会�的默认生命周期(TTL)是�调的。默认的会�周期是 16 �时。
+
+1. 在左上角,�击 **☰ > 全局设置**。
+1. �往 **`auth-user-session-ttl-minutes`** 并�击**⋮ > 编辑设置**。
+1. 输入会è¯�应该æŒ�ç»çš„æ—¶é—´ï¼ˆä»¥åˆ†é’Ÿä¸ºå�•ä½�),然å�Žå�•击**Save**。
+
+**结果**:用户的 Rancher 登录会�在设定的分钟数�自动退出。
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/configure-microsoft-ad-federation-service-saml/configure-ms-adfs-for-rancher.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/configure-microsoft-ad-federation-service-saml/configure-ms-adfs-for-rancher.md
new file mode 100644
index 00000000000..858be390e9c
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/configure-microsoft-ad-federation-service-saml/configure-ms-adfs-for-rancher.md
@@ -0,0 +1,83 @@
+---
+title: 1. 在 Microsoft AD FS ä¸é…�ç½® Rancher
+---
+
+在é…�ç½® Rancher 以支æŒ� Active Directory Federation Service (AD FS) 之å‰�ï¼Œä½ å¿…é¡»åœ¨ AD FS ä¸å°† Rancher æ·»åŠ ä¸º [relying party trust](https://docs.microsoft.com/en-us/windows-server/identity/ad-fs/technical-reference/understanding-key-ad-fs-concepts)(信赖方信任)。
+
+1. 以管�用户身份登录 AD �务器。
+
+1. 打开 **AD FS Management** 控制å�°ã€‚在 **Actions** è�œå�•ä¸é€‰æ‹© **Add Relying Party Trust...**。然å�Žå�•击 **Start**。
+
+ 
+
+1. 选择 **Enter data about the relying party manually** 作为获�信赖方数�的选项。
+
+ 
+
+1. 为 **Relying Party Trust** 设置**显示�称**,例如 `Rancher`。
+
+ 
+
+1. 选择 **AD FS profile** 作为信赖方信任的�置文件。
+
+ 
+
+1. 留空 **optional token encryption certificate**ï¼Œå› ä¸º Rancher AD FS ä¸�会使用它。
+
+ 
+
+1. 选择 **Enable support for the SAML 2.0 WebSSO protocol** 并在 Service URL 处输入 `https:///v1-saml/adfs/saml/acs`。
+
+ 
+
+1. å°† `https:///v1-saml/adfs/saml/metadata` æ·»åŠ ä¸º **Relying party trust identifier**。
+
+ 
+
+1. 本教程ä¸�涉å�Šå¤šé‡�身份验è¯�ã€‚å¦‚æžœä½ æƒ³é…�置多é‡�身份验è¯�,请å�‚è§� [Microsoft 文档](https://docs.microsoft.com/en-us/windows-server/identity/ad-fs/operations/configure-additional-authentication-methods-for-ad-fs)。
+
+ 
+
+1. 在 **Choose Issuance Authorization RUles** ä¸ï¼Œä½ å�¯ä»¥æ ¹æ�®ç”¨ä¾‹é€‰æ‹©ä»»ä½•一个å�¯ç”¨é€‰é¡¹ã€‚但是考虑到本指å�—的目的,请选择 **Permit all users to access this relying party**。
+
+ 
+
+1. 检查所有设置å�Žï¼Œé€‰æ‹© **Next** æ�¥æ·»åŠ ä¿¡èµ–æ–¹ä¿¡ä»»ã€‚
+
+ 
+
+
+1. 选择 **Open the Edit Claim Rules...**。然��击 **Close**。
+
+ 
+
+1. 在 **Issuance Transform Rules** 选项å�¡ä¸ï¼Œå�•击 **Add Rule...**。
+
+ 
+
+1. 在 **Claim rule template** ä¸é€‰æ‹© **Send LDAP Attributes as Claims**。
+
+ 
+
+1. å°† **Claim rule name** 设置为所需的å��称(例如 `Rancher Attributes`)并选择 **Active Directory** 作为 **Attribute store**ã€‚åˆ›å»ºå¯¹åº”ä¸‹è¡¨çš„æ˜ å°„ï¼š
+
+ | LDAP 属性 | ä¼ å‡ºå£°æ˜Žç±»åž‹ |
+ | -------------------------------------------- | ------------------- |
+ | Given-Name | Given Name |
+ | User-Principal-Name | UPN |
+ | Token-Groups - Qualified by Long Domain Name | Group |
+ | SAM-Account-Name | �称 |
+
+
+ 
+
+1. 从 AD �务器的以下�置下载 `federationmetadata.xml`:
+```
+https:///federationmetadata/2007-06/federationmetadata.xml
+```
+
+**结果**ï¼šä½ å·²å°† Rancher æ·»åŠ ä¸ºä¾�èµ–ä¿¡ä»»æ–¹ã€‚çŽ°åœ¨ä½ å�¯ä»¥é…�ç½® Rancher æ�¥ä½¿ç”¨ AD。
+
+### å�Žç»æ“�作
+
+[在 Rancher ä¸é…�ç½® Microsoft AD FS ](configure-rancher-for-ms-adfs.md)
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/configure-microsoft-ad-federation-service-saml/configure-rancher-for-ms-adfs.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/configure-microsoft-ad-federation-service-saml/configure-rancher-for-ms-adfs.md
new file mode 100644
index 00000000000..b4a15d2bf4c
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/configure-microsoft-ad-federation-service-saml/configure-rancher-for-ms-adfs.md
@@ -0,0 +1,54 @@
+---
+title: 2. 在 Rancher ä¸é…�ç½® Microsoft AD FS
+---
+
+完æˆ�[在 Microsoft AD FS ä¸é…�ç½® Rancher](configure-ms-adfs-for-rancher.md) å�Žï¼Œå°†ä½ çš„ Active Directory Federation Service (AD FS) ä¿¡æ�¯è¾“å…¥ Rancher,以便 AD FS 用户å�¯ä»¥é€šè¿‡ Rancher 进行身份认è¯�。
+
+:::note �置 ADFS �务器的��说明:
+
+- SAML 2.0 WebSSO �议�务 URL 为:`https:///v1-saml/adfs/saml/acs`
+- ä¿¡èµ–æ–¹ä¿¡ä»»æ ‡è¯†ç¬¦ URL 为:`https:///v1-saml/adfs/saml/metadata`
+- ä½ å¿…é¡»ä»Ž AD FS æœ�务器导出 `federationmetadata.xml` æ–‡ä»¶ã€‚ä½ å�¯ä»¥åœ¨ `https:///federationmetadata/2007-06/federationmetadata.xml` 䏿‰¾åˆ°è¯¥æ–‡ä»¶ã€‚
+
+:::
+
+1. 在左上角,�击 **☰ > 用户 & 认�**。
+1. 在左侧导航æ �,å�•击**认è¯�**。
+1. �击 **ADFS**。
+1. 填写**é…�ç½® AD FS è´¦å�·**表å�•。Microsoft AD FS å…�è®¸ä½ æŒ‡å®šçŽ°æœ‰çš„ Active Directory (AD) æœ�务器。[以下é…�置示例](#é…�ç½®)æ��述了如何将 AD å±žæ€§æ˜ å°„åˆ° Rancher ä¸çš„å—æ®µã€‚
+1. 完�**�置 AD FS 账�**表��,�击**�用**。
+
+ Rancher ä¼šå°†ä½ é‡�定å�‘到 AD FS 登录页é�¢ã€‚输入使用 Microsoft AD FS 进行身份验è¯�çš„å‡è¯�,æ�¥éªŒè¯�ä½ çš„ Rancher AD FS é…�置。
+
+ :::note
+
+ ä½ å�¯èƒ½éœ€è¦�ç¦�用弹出窗å�£é˜»æ¢ç¨‹åº�æ‰�能看到 AD FS 登录页é�¢ã€‚
+
+ :::
+
+**结果**:已将 Rancher é…�置为使用 AD FSã€‚ä½ çš„ç”¨æˆ·çŽ°åœ¨å�¯ä»¥ä½¿ç”¨ AD FS 登录å��登录 Rancher。
+
+## �置
+
+| å—æ®µ | æ��è¿° |
+|---------------------------|-----------------|
+| 显示å��ç§°å—æ®µ | 包å�«ç”¨æˆ·æ˜¾ç¤ºå��ç§°çš„ AD 属性。 示例:`http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name` |
+| 用户å��å—æ®µ | 包å�«ç”¨æˆ·å��/给定å��ç§°çš„ AD 属性。 示例:`http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname` |
+| UID å—æ®µ | æ¯�个用户独有的 AD 属性。 示例:`http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn` |
+| ç”¨æˆ·ç»„å—æ®µ | 创建用于管ç�†ç»„æˆ�员关系的æ�¡ç›®ã€‚ 示例:`http://schemas.xmlsoap.org/claims/Group` |
+| Rancher API 主机 | Rancher Server 的 URL。 |
+| ç§�é’¥/è¯�书 | 在 Rancher å’Œä½ çš„ AD FS 之间创建安全外壳(SSH)的密钥/è¯�书对。确ä¿�å°† Common Name (CN) 设置为 Rancher Server URL。 [è¯�书创建命令](#cert-command) |
+| 元数æ�® XML | 从 AD FS æœ�务器导出的 `federationmetadata.xml` 文件。 ä½ å�¯ä»¥åœ¨ `https:///federationmetadata/2007-06/federationmetadata.xml` 找到该文件。 |
+
+
+
+
+:::tip
+
+ä½ å�¯ä»¥ä½¿ç”¨ openssl 命令生æˆ�è¯�书。例如:
+
+```
+openssl req -x509 -newkey rsa:2048 -keyout myservice.key -out myservice.cert -days 365 -nodes -subj "/CN=myservice.example.com"
+```
+
+:::
\ No newline at end of file
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/configure-openldap/openldap-config-reference.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/configure-openldap/openldap-config-reference.md
new file mode 100644
index 00000000000..581a85efc2c
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/configure-openldap/openldap-config-reference.md
@@ -0,0 +1,78 @@
+---
+title: OpenLDAP �置�考
+---
+
+有关�置 OpenLDAP 认�的更多详细信�,请��[官方文档](https://www.openldap.org/doc/)。
+
+> 在开始之�,请熟悉[外部身份验��置和主体用户](../../../../pages-for-subheaders/authentication-config.md#外部身份验��置和用户主体)的概念。
+
+
+## 背景:OpenLDAP 认��程
+
+1. 当用户å°�试使用其 LDAP å‡è¯�登录时,Rancher 会使用具有æ�œç´¢ç›®å½•和读å�–用户/组属性æ�ƒé™�çš„ ServiceAccount,创建与 LDAP æœ�务器的åˆ�始绑定。
+2. ç„¶å�Žï¼ŒRancher 使用æ�œç´¢ç›é€‰å™¨æ ¹æ�®ç”¨æˆ·å��å’Œé…�ç½®çš„å±žæ€§æ˜ å°„ä¸ºç”¨æˆ·æ�œç´¢ç›®å½•。
+3. 找到用户å�Žï¼Œå°†ä½¿ç”¨ç”¨æˆ·çš„ DN å’Œæ��供的密ç �,通过å�¦ä¸€ä¸ª LDAP 绑定请求对用户进行身份验è¯�。
+4. 身份验è¯�æˆ�功å�Žï¼ŒRancher 将基于用户对象的æˆ�员属性和é…�ç½®çš„ç”¨æˆ·æ˜ å°„å±žæ€§æ‰§è¡Œç»„æ�œç´¢ï¼Œæ�¥è§£æž�组æˆ�员。
+
+## OpenLDAP �务器�置
+
+ä½ å°†éœ€è¦�输入地å�€ï¼Œç«¯å�£å’Œå��è®®æ�¥è¿žæŽ¥åˆ° OpenLDAP æœ�务器。ä¸�安全æµ�é‡�çš„æ ‡å‡†ç«¯å�£ä¸º `389`,TLS æµ�é‡�çš„æ ‡å‡†ç«¯å�£ä¸º `636`。
+
+> **使用 TLS?**
+>
+> 如果 OpenLDAP æœ�务器使用的è¯�书是自ç¾å��的或ä¸�是æ�¥è‡ªè®¤å�¯çš„è¯�书é¢�å�‘机构,请确ä¿�手头有 PEM æ ¼å¼�çš„ CA è¯�书(包å�«æ‰€æœ‰ä¸é—´è¯�ä¹¦ï¼‰ã€‚ä½ å¿…é¡»åœ¨é…�置期间粘贴æ¤è¯�书,以便 Rancher 能够验è¯�è¯�书链。
+
+å¦‚æžœä½ ä¸�确定è¦�在用户/组`æ�œç´¢åº“`å—æ®µä¸è¾“å…¥ä»€ä¹ˆå€¼ï¼Œè¯·å’¨è¯¢ä½ çš„ LDAP 管ç�†å‘˜ï¼Œæˆ–å�‚è§� Active Directory 身份验è¯�文档ä¸çš„[使用 ldapsearch 确定æ�œç´¢åº“å’Œ Schema](../../../../how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/authentication-config/configure-active-directory.md#附录使用-ldapsearch-确定æ�œç´¢åº“å’Œ-schema) ç« èŠ‚ã€‚
+
+OpenLDAP �务器�数
+
+| �数 | �述 |
+|:--|:--|
+| 主机� | 指定 OpenLDAP �务器的主机�或 IP 地�。 |
+| 端å�£ | 指定 OpenLDAP æœ�务器监å�¬è¿žæŽ¥çš„端å�£ã€‚æœªåŠ å¯†çš„ LDAP 通常使用 389 çš„æ ‡å‡†ç«¯å�£ï¼Œè€Œ LDAPS 使用 636 端å�£ã€‚ |
+| TLS | 选䏿¤æ¡†å�¯å�¯ç”¨ SSL/TLS 上的 LDAP(通常称为 LDAPS)。如果æœ�务器使用自ç¾å��/ä¼�业ç¾å��çš„è¯�书,则还需è¦�粘贴 CA è¯�书。 |
+| æœ�务器连接超时 | Rancher åœ¨è®¤ä¸ºæ— æ³•è®¿é—®æœ�务器之å‰�ç‰å¾…的时间(秒)。 |
+| ServiceAccount æ ‡è¯†å��ç§° | 输入用于绑定,æ�œç´¢å’Œæ£€ç´¢ LDAP æ�¡ç›®çš„ç”¨æˆ·çš„æ ‡è¯†å��称(DN)。 |
+| ServiceAccount 密ç � | ServiceAccount 的密ç �。 |
+| 用户æ�œç´¢åº“ | è¾“å…¥ç›®å½•æ ‘ä¸å¼€å§‹æ�œç´¢ç”¨æˆ·å¯¹è±¡çš„èŠ‚ç‚¹çš„æ ‡è¯†å��称(DN)。所有用户都必须是æ¤åŸºç¡€æ ‡è¯†å��ç§°çš„å�Žä»£ã€‚例如,"ou=people,dc=acme,dc=com"。 |
+| 组æ�œç´¢åº“ | 如果组ä½�于`用户æ�œç´¢åº“`下é…�置的节点之外的其他节点下,则需è¦�在æ¤å¤„æ��ä¾›æ ‡è¯†å��称。å�¦åˆ™ï¼Œå°†æ¤å—段留空。例如:"ou=groups,dc=acme,dc=com"。 |
+
+## 用户/组 Schema �置
+
+å¦‚æžœä½ çš„ OpenLDAP 目录ä¸�å�ŒäºŽæ ‡å‡†çš„ OpenLDAP Schema,则必须完æˆ�**自定义 Schema** 部分实现匹é…�。
+
+请注æ„�,Rancher 使用本节ä¸é…�ç½®çš„å±žæ€§æ˜ å°„æ�¥æž„é€ æ�œç´¢ç›é€‰å™¨å’Œè§£æž�组æˆ�å‘˜ã€‚å› æ¤ï¼Œæˆ‘ä»¬å»ºè®®ä½ éªŒè¯�æ¤å¤„çš„é…�置是å�¦ä¸Žä½ 在 OpenLDAP ä¸ä½¿ç”¨çš„ Schema 匹é…�。
+
+å¦‚æžœä½ ä¸�确定 OpenLDAP æœ�务器ä¸ä½¿ç”¨çš„用户/组 Schemaï¼Œè¯·å’¨è¯¢ä½ çš„ LDAP 管ç�†å‘˜ï¼Œæˆ–å�‚è§� Active Directory 身份验è¯�文档ä¸çš„[使用 ldapsearch 确定æ�œç´¢åº“å’Œ Schema](../../../../how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/authentication-config/configure-active-directory.md#附录使用-ldapsearch-确定æ�œç´¢åº“å’Œ-schema) ç« èŠ‚ã€‚
+
+### 用户 Schema �置
+
+下表详细说明了用户 Schema �置的�数。
+
+用户 Schema �置�数
+
+| �数 | �述 |
+|:--|:--|
+| Object Class | 域ä¸ç”¨äºŽç”¨æˆ·å¯¹è±¡çš„对象类别å��称。如果定义了æ¤å�‚数,则仅指定对象类别的å��ç§° - *请勿*将其放在 LDAP 包装器ä¸ï¼Œä¾‹å¦‚ `&(objectClass=xxxx)`。 |
+| Username Attribute | 用户属性的值适�作为显示�称。 |
+| Login Attribute | 登录属性的值与用户登录 Rancher 时输入的å‡è¯�的用户å��部分匹é…�。通常是 `uid`。 |
+| User Member Attribute | 包å�«ç”¨æˆ·æ‰€å±žç»„çš„æ ‡è¯†å��称的用户属性。通常是 `memberOf` 或 `isMemberOf`。 |
+| Search Attribute | 当用户输入文本以在用户界é�¢ä¸æ·»åŠ ç”¨æˆ·æˆ–ç»„æ—¶ï¼ŒRancher 会查询 LDAP æœ�务器,并å°�è¯•æ ¹æ�®æ¤è®¾ç½®ä¸æ��供的属性匹é…�用户。å�¯ä»¥é€šè¿‡ä½¿ç”¨ç®¡é�“(“\|â€�)符å�·åˆ†éš”属性æ�¥æŒ‡å®šå¤šä¸ªå±žæ€§ã€‚ |
+| User Enabled Attribute | 如果 OpenLDAP æœ�务器的 Schema 支æŒ�使用用户属性的值æ�¥è¯„ä¼°è´¦å�·æ˜¯ç¦�用还是关é—,请输入该属性的å��称。默认的 OpenLDAP Schema ä¸�支æŒ�æ¤åŠŸèƒ½ï¼Œå› æ¤æ¤å—段通常留空。 |
+| Disabled Status Bitmask | ç¦�用/é”�定的用户账å�·çš„值。如果 `User Enabled Attribute` 是空的,则忽略æ¤å�‚数。 |
+
+### 组 Schema �置
+
+下表详细说明了组 Schema �置的�数。
+
+组 Schema �置�数
+
+| �数 | �述 |
+|:--|:--|
+| Object Class | 域ä¸ç”¨äºŽç»„æ�¡ç›®çš„对象类别å��称。如果定义了æ¤å�‚数,则仅指定对象类别的å��ç§° - *请勿*将其放在 LDAP 包装器ä¸ï¼Œä¾‹å¦‚ `&(objectClass=xxxx)`。 |
+| Name Attribute | �称属性的值适�作为显示�称。 |
+| Group Member User Attribute | **用户属性**çš„å��ç§°ã€‚å®ƒçš„æ ¼å¼�与 `Group Member Mapping Attribute` ä¸çš„组æˆ�员匹é…�。 |
+| Group Member Mapping Attribute | 包�组�员的组属性的�称。 |
+| Search Attribute | 在 UI ä¸å°†ç»„æ·»åŠ åˆ°é›†ç¾¤æˆ–é¡¹ç›®æ—¶ï¼Œç”¨äºŽæž„é€ æ�œç´¢ç›é€‰å™¨çš„属性。请å�‚è§�用户 Schema çš„ `Search Attribute`。 |
+| Group DN Attribute | 组属性的å��ç§°ï¼Œå…¶æ ¼å¼�与用户的组æˆ�员属性ä¸çš„值匹é…�。å�‚è§� `User Member Attribute`。 |
+| Nested Group Membership | æ¤è®¾ç½®å®šä¹‰ Rancher 是å�¦åº”è§£æž�嵌套组æˆ�å‘˜èº«ä»½ã€‚ä»…å½“ä½ çš„ç»„ç»‡ä½¿ç”¨è¿™äº›åµŒå¥—æˆ�员身份时æ‰�使用(å�³ä½ 有包å�«å…¶ä»–组作为æˆ�å‘˜çš„ç»„ï¼‰ã€‚å¦‚æžœä½ ä½¿ç”¨ Shibboleth,æ¤é€‰é¡¹ä¼šè¢«ç¦�用。 |
\ No newline at end of file
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/configure-shibboleth-saml/about-group-permissions.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/configure-shibboleth-saml/about-group-permissions.md
new file mode 100644
index 00000000000..69155120d28
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/configure-shibboleth-saml/about-group-permissions.md
@@ -0,0 +1,28 @@
+---
+title: Shibboleth 和 OpenLDAP 的组��
+---
+
+由于 Shibboleth 是 SAML æ��ä¾›è€…ï¼Œå› æ¤å®ƒä¸�支æŒ�æ�œç´¢ç”¨æˆ·ç»„的功能。虽然 Shibboleth 集æˆ�å�¯ä»¥éªŒè¯�用户å‡è¯�,但是如果没有其他é…�置,Shibboleth ä¸�能在 Rancher ä¸ç»™ç”¨æˆ·ç»„分é…�æ�ƒé™�。
+
+ä½ å�¯ä»¥é€šè¿‡é…�ç½® OpenLDAP æ ‡è¯†æ��供者æ�¥è§£å†³è¿™ä¸ªé—®é¢˜ã€‚如果让 Shibboleth 使用 OpenLDAP å�Žç«¯ï¼Œä½ 将能够在 Rancher 䏿�œç´¢ç»„,并从 Rancher UI 将集群ã€�项目或命å��空间ç‰èµ„æº�分é…�给用户组。
+
+### ��解释
+
+- **Shibboleth**:用于计算机网络和互è�”网的å�•点登录系统。它å…�许用户仅使用一ç§�身份登录到å�„ç§�系统。它验è¯�用户å‡è¯�,但ä¸�å�•独处ç�†ç»„æˆ�员身份。
+- **SAML**ï¼šå®‰å…¨å£°æ˜Žæ ‡è®°è¯è¨€ï¼ˆSecurity Assertion Markup Language),用于在身份æ��供程åº�å’Œæœ�务æ��供商之间交æ�¢èº«ä»½éªŒè¯�和授æ�ƒæ•°æ�®çš„å¼€æ”¾æ ‡å‡†ã€‚
+- **OpenLDAP**:轻型目录访问å��议(LDAP)的å…�费开æº�实现。它用于管ç�†ç»„织的计算机和用户。OpenLDAP 对 Rancher ç”¨æˆ·å¾ˆæœ‰ç”¨ï¼Œå› ä¸ºå®ƒæ”¯æŒ�组。å�ªè¦�组已å˜åœ¨äºŽèº«ä»½æ��供程åº�ä¸ï¼Œä½ å°±å�¯ä»¥åœ¨ Rancher ä¸ä¸ºç»„分é…�æ�ƒé™�,从而让组访问资æº�(例如集群,项目或命å��空间)。
+- **IdP 或 IDP**:身份æ��供程åº�。OpenLDAP 是身份æ��供程åº�的一个例å�。
+
+### å°† OpenLDAP 组æ�ƒé™�æ·»åŠ åˆ° Rancher 资æº�
+
+下图说明了 OpenLDAP 组的æˆ�员如何访问 Rancher ä¸è¯¥ç»„有æ�ƒè®¿é—®çš„资æº�。
+
+例如,集群所有者å�¯ä»¥å°† OpenLDAP ç»„æ·»åŠ åˆ°é›†ç¾¤ï¼Œä»Žè€Œè®©ç»„æœ‰æ�ƒæŸ¥çœ‹å¤§å¤šæ•°é›†ç¾¤çº§åˆ«çš„资æº�并创建新项目。然å�Žï¼ŒOpenLDAP 组æˆ�员在登录 Rancher å�Žå°±å�¯ä»¥è®¿é—®é›†ç¾¤ã€‚
+
+在这�情况下,OpenLDAP �许集群所有者在分���时�索组。如果没有 OpenLDAP,将�支��索组的功能。
+
+当 OpenLDAP 组的æˆ�员登录到 Rancher 时,用户将被é‡�定å�‘到 Shibboleth 并在那里输入用户å��和密ç �。
+
+Shibboleth 会验è¯�用户的å‡è¯�,并从 OpenLDAP 检索用户属性,其ä¸åŒ…括用户所在的组信æ�¯ã€‚ç„¶å�Ž Shibboleth å°†å�‘ Rancher å�‘é€�一个包å�«ç”¨æˆ·å±žæ€§çš„ SAML æ–言。Rancher 会使用组数æ�®ï¼Œä»¥ä¾¿ç”¨æˆ·å�¯ä»¥è®¿é—®ä»–所在的组有æ�ƒè®¿é—®çš„æ‰€æœ‰èµ„æº�。
+
+
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/create-pod-security-policies.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/create-pod-security-policies.md
new file mode 100644
index 00000000000..1136fdabc91
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/create-pod-security-policies.md
@@ -0,0 +1,78 @@
+---
+title: Pod 安全ç–ç•¥
+---
+
+:::caution
+Pod 安全ç–略仅在 Kubernetes v1.24 之å‰�å�¯ç”¨ã€‚[Pod å®‰å…¨æ ‡å‡†](pod-security-standards.md) 是内置的替代方案。
+:::
+
+[Pod 安全ç–略(PSP)](https://kubernetes.io/docs/concepts/security/pod-security-policy/)是用æ�¥æŽ§åˆ¶å®‰å…¨æ•�感相关 Pod 规范(例如 root 特æ�ƒï¼‰çš„对象。
+
+如果æŸ�个 Pod ä¸�满足 PSP 指定的æ�¡ä»¶ï¼ŒKubernetes å°†ä¸�å…�许它å�¯åŠ¨ï¼ŒRancher ä¸å°†æ˜¾ç¤ºé”™è¯¯æ¶ˆæ�¯ `Pod is forbidden: unable to validate...`。
+
+
+## PSP 工作原�
+
+ä½ å�¯ä»¥åœ¨é›†ç¾¤æˆ–项目级别分é…� PSP。
+
+PSP 通过继承的方�工作:
+
+- 默认情况下,分é…�给集群的 PSP 由其项目以å�Šæ·»åŠ åˆ°è¿™äº›é¡¹ç›®çš„ä»»ä½•å‘½å��空间继承。
+- **例外**ï¼šæ— è®º PSP 是分é…�给集群还是项目,未分é…�给项目的命å��空间ä¸�会继承 PSPã€‚å› ä¸ºè¿™äº›å‘½å��空间没有 PSP,所以这些命å��空间的工作负载 deployment 将失败,这是 Kubernetes 的默认行为。
+- ä½ å�¯ä»¥é€šè¿‡å°†ä¸�å�Œçš„ PSP 直接分é…�给项目æ�¥è¦†ç›–默认 PSP。
+
+在分é…� PSP 之å‰�å·²ç»�在集群或项目ä¸è¿�行的任何工作负载如果符å�ˆ PSP,则ä¸�ä¼šè¢«æ£€æŸ¥ã€‚ä½ éœ€è¦�克隆或å�‡çº§å·¥ä½œè´Ÿè½½ä»¥æŸ¥çœ‹å®ƒä»¬æ˜¯å�¦é€šè¿‡ PSP。
+
+在 [Kubernetes 文档](https://kubernetes.io/docs/concepts/policy/pod-security-policy/)ä¸é˜…读有关 Pod 安全ç–略的更多信æ�¯ã€‚
+
+## 默认 PSP
+
+Rancher 内置了三个默认 Pod 安全ç–ç•¥ (PSP),分别是 `restricted-noroot`(å�—é™� noroot),`restricted`(å�—é™�)和 `unrestricted`(ä¸�å�—é™�)ç–略。
+
+### ��-NoRoot
+
+æ¤ç–略基于 Kubernetes [示例å�—é™�ç–ç•¥](https://raw.githubusercontent.com/kubernetes/website/master/content/en/examples/policy/restricted-psp.yaml)。它æž�大地é™�制了å�¯ä»¥å°†å“ªäº›ç±»åž‹çš„ Pod 部署到集群或项目ä¸ã€‚这项ç–略:
+
+- é˜»æ¢ Pod 以特æ�ƒç”¨æˆ·èº«ä»½è¿�行,并防æ¢ç‰¹æ�ƒå�‡çº§ã€‚
+- 验è¯�æœ�务器所需的安全机制是å�¦åˆ°ä½�,例如é™�制哪些å�·å�ªèƒ½æŒ‚è½½åˆ°æ ¸å¿ƒå�·ç±»åž‹ï¼Œå¹¶é˜²æ¢æ·»åŠ root 补充组。
+
+### ��
+
+该ç–略是宽æ�¾ç‰ˆçš„ `restricted-noroot` ç–略,除了å…�许以特æ�ƒç”¨æˆ·èº«ä»½è¿�è¡Œå®¹å™¨å¤–ï¼Œå‡ ä¹Žæ‰€æœ‰é™�制都到ä½�。
+
+### ���
+
+该ç–ç•¥ç‰æ•ˆäºŽåœ¨ç¦�用 PSP 控制器的情况下è¿�行 Kubernetes。对于å�¯ä»¥å°†å“ªäº› Pod 部署到集群或项目ä¸ï¼Œå®ƒæ²¡æœ‰ä»»ä½•é™�制。
+
+:::note ���示:
+
+ç¦�用 PSP 时,默认 PSP **ä¸�会**自动从集群ä¸åˆ 除。如果ä¸�å†�需è¦�å®ƒä»¬ï¼Œä½ å¿…é¡»æ‰‹åŠ¨åˆ é™¤å®ƒä»¬ã€‚
+
+:::
+
+## 创建 PSP
+
+使用 Rancherï¼Œä½ å�¯ä»¥ä½¿ç”¨æˆ‘们的 GUI 创建 Pod 安全ç–略,而ä¸�是创建 YAML 文件。
+
+### �求
+
+Rancher �能为[使用 RKE �动的集群](../../../pages-for-subheaders/launch-kubernetes-with-rancher.md)分� PSP。
+
+ä½ å¿…é¡»å…ˆåœ¨é›†ç¾¤çº§åˆ«å�¯ç”¨ PSP,然å�Žæ‰�能将它们分é…�给项目。这å�¯ä»¥é€šè¿‡[编辑集群](../../../pages-for-subheaders/cluster-configuration.md)æ�¥é…�置。
+
+最好的�法是在集群级别设置 PSP。
+
+æˆ‘ä»¬å»ºè®®åœ¨é›†ç¾¤å’Œé¡¹ç›®åˆ›å»ºæœŸé—´æ·»åŠ PSP,而ä¸�æ˜¯å°†å…¶æ·»åŠ åˆ°çŽ°æœ‰çš„é¡¹ç›®æˆ–é›†ç¾¤ä¸ã€‚
+
+### 在 Rancher UI ä¸åˆ›å»º PSP
+
+1. 在左上角,�击 **☰ > 集群管�**。
+1. 在左侧导航æ �ä¸ï¼Œå�•击 **Pod 安全ç–ç•¥**。
+1. å�•击**æ·»åŠ ç–ç•¥**。
+1. 为ç–略命å��。
+1. å¡«å†™è¡¨æ ¼çš„æ¯�个部分。请å�‚阅 [Kubernetes 文档](https://kubernetes.io/docs/concepts/policy/pod-security-policy/),了解æ¯�个ç–略的作用。
+1. �击**创建**。
+
+## �置
+
+关于 PSP 的 Kubernetes 文档,请�阅[这里](https://kubernetes.io/docs/concepts/policy/pod-security-policy/)。
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/custom-branding.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/custom-branding.md
new file mode 100644
index 00000000000..59bd02daf07
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/custom-branding.md
@@ -0,0 +1,192 @@
+---
+title: 定制�牌
+---
+
+## 先决�件
+
+ä½ è‡³å°‘éœ€è¦�拥有集群æˆ�员æ�ƒé™�。
+
+## �牌�置
+
+��置�牌设置:
+
+1. �击**☰ > 全局设置**。
+2. �击**公��牌**。
+
+### 自有�牌公��称
+
+æ¤é€‰é¡¹å°†å¤§å¤šæ•°å‡ºçŽ°çš„ “Rancherâ€� 替æ�¢ä¸ºä½ æ��供的值。å��ç§°ä¸éœ€è¦�包å�« Rancher 的文件,例如 `rancher-compose.yml`,ä¸�会被更改。
+
+### 支�链接
+
+使用 URL 地���新的`�交问题`报告,而�是让用户��到 GitHub Issue 页�。�选择显示 Rancher 社区支�链接。
+
+### Logo
+
+ä¸Šä¼ æ·±è‰²å’Œæµ…è‰²çš„ Logo æ�¥æ›¿æ�¢é¡¶å±‚å¯¼èˆªæ ‡é¢˜ä¸çš„ Rancher logo。
+
+### 主颜色
+
+使用自定义颜色替æ�¢æ•´ä¸ª UI ä¸ä½¿ç”¨çš„主颜色。
+
+### 固定横幅
+
+在页眉ã€�é¡µè„šæˆ–ä¸¤è€…ä¸æ˜¾ç¤ºè‡ªå®šä¹‰å›ºå®šæ¨ªå¹…。
+
+��置横幅:
+
+1. �击**☰ > 全局设置**。
+2. 点击**横幅**。
+
+## 自定义导航链接
+
+在本节ä¸ï¼Œä½ 将了解如何é…�ç½®**集群仪表æ�¿**左侧导航æ �ä¸çš„链接。è¦�访问集群仪表æ�¿ï¼š
+
+1. 在左上角,�击 **☰ > 集群管�**。
+1. 在**集群**页é�¢ä¸Šï¼Œè½¬åˆ°ä½ 想è¦�自定义导航链接的集群,然å�Žå�•击 **Explore**。
+
+æ·»åŠ é“¾æŽ¥å�¯ä»¥è®©ä½ 快速访问安装在集群上的æœ�åŠ¡ã€‚ä¾‹å¦‚ï¼Œä½ å�¯ä»¥ä¸ºå®‰è£…了 Istio çš„é›†ç¾¤æ·»åŠ æŒ‡å�‘ Kiali UI 的链接,或者为安装了 Rancher Monitoring çš„é›†ç¾¤æ·»åŠ æŒ‡å�‘ Grafana UI 的链接。
+
+自定义链接�会影��以访问�项�务的用户。
+
+�以在顶层创建链接,并且�以将多个链接组�在一起。
+
+### æ·»åŠ è‡ªå®šä¹‰å¯¼èˆªé“¾æŽ¥
+
+:::note 先决�件:
+
+ä½ è‡³å°‘éœ€è¦�拥有集群æˆ�员或项目æˆ�员æ�ƒé™�。
+
+:::
+
+1. 点击 **☰ > 集群管�**。
+1. 在**集群**页é�¢ä¸Šï¼Œè½¬åˆ°è¦�æ·»åŠ è‡ªå®šä¹‰å¯¼èˆªé“¾æŽ¥çš„é›†ç¾¤ï¼Œç„¶å�Žå�•击 **Explore**。
+2. 在顶部导航è�œå�•ä¸ï¼Œå�•击 **ðŸ”�(资æº�æ�œç´¢ï¼‰**。
+3. 输入 **Nav** 并点击 **Nav Links**。
+4. �击**使用 YAML 文件创建**。
+5. 创建导航链接的最简å�•æ–¹æ³•æ˜¯æ·»åŠ ä»¥ä¸‹å—æ®µï¼š
+
+ name: linkname
+ toURL: https://example.com
+
+ 有关设置链接(包括å�¯é€‰å—段)的更多详细信æ�¯ï¼Œè¯·å�‚阅[链接é…�ç½®](#链接é…�ç½®)。
+6. �击**创建**。
+
+## 链接�置
+
+### `name`
+
+链接的显示�称。必填项。
+
+### `group`
+
+�击时展开的一组链接的�称。
+
+�选项。如果未�供,则显示为独立链接。
+
+组与独立链接分开显示,如下所示:
+
+
+
+### `iconSrc`
+
+Base64 æ ¼å¼�çš„ Logo å›¾æ ‡æº�。
+
+以下是 Base64 æ ¼å¼�çš„ Grafana Logo 示例:
+
+```
+data:image/png;base64,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
+```
+
+### `annotation`
+
+NavLink 自定义资�的 Kubernetes 注释。
+
+### `label`
+
+NavLink 自定义资æº�çš„ Kubernetes æ ‡ç¾ã€‚
+
+### `sideLabel`
+
+出现在左侧导航æ �ä¸çš„æ ‡ç¾ã€‚
+
+### `target`
+
+è®¾ç½®é“¾æŽ¥çš„é”šæ ‡è®° (``) çš„ç›®æ ‡å±žæ€§ã€‚è¯¥å±žæ€§ï¼ˆå�–决于æµ�览器)确定它是在新窗å�£ä¸æ‰“开还是在当å‰�选项å�¡ä¸æ‰“开。
+
+默认值为 `_self`,å�³åœ¨å½“å‰�选项å�¡ä¸Šæ‰“开链接。è¦�在新窗å�£æˆ–选项å�¡ä¸æ‰“å¼€é“¾æŽ¥ï¼Œè¯·å°†ç›®æ ‡è®¾ç½®ä¸º `_blank`。
+
+æœ‰å…³ç›®æ ‡å±žæ€§çš„è¯¦ç»†ä¿¡æ�¯ï¼Œè¯·å�‚阅[æ¤é¡µé�¢](https://www.w3schools.com/tags/att_a_target.asp)。
+
+### `toService`
+
+æœ‰äº”ä¸ªå—æ®µç”¨äºŽåˆ›å»ºå¦‚下所示的 URL:`https:///k8s/clusters//k8s/namespace//service/: :/proxy/`
+
+例如,Monitoring æœ�务的链接å�¯ä»¥è¿™æ ·è®¾ç½®ï¼š
+
+- �称:`rancher-monitoring-grafana`
+- 命�空间:`cattle-monitoring-system`
+- 路径:`proxy/?orgId=1`
+- 端�:`"80"`
+- Scheme:`http`
+
+需è¦�æ��ä¾› `toService` 或 `toURL` 指令ä¸çš„一个。
+
+### `toUrl`
+
+�以是任何链接,甚至�以是集群外部的链接。
+
+需è¦�æ��ä¾› `toService` 或 `toURL` 指令ä¸çš„一个。
+
+## 链接示例
+
+### `toUrl` 的链接示例
+
+以下 NavLink YAML 显示了将 NavLink �置到 Grafana 仪表�的示例:
+
+```yaml
+apiVersion: ui.cattle.io/v1
+kind: NavLink
+metadata:
+ name: grafana
+spec:
+ group: "Monitoring Dashboards"
+ toURL: https:///api/v1/namespaces/cattle-monitoring-system/services/http:rancher-monitoring-grafana:80/proxy/?orgId=1
+```
+
+æ·»åŠ ä¸Šè¿° YAML 会创建 Grafana 的链接,如以下截图所示:
+
+
+
+### `toService` 的链接示例
+
+以下 YAML æ˜¾ç¤ºäº†ç”¨äºŽé“¾æŽ¥ç›®æ ‡çš„ `toService` 示例:
+
+```yaml
+apiVersion: ui.cattle.io/v1
+kind: NavLink
+metadata:
+ annotations:
+ key: annotation
+ labels:
+ key: label
+ name: navlinkname
+spec:
+ description: This is a description field # Optional.
+ group: "group1" # �选。如果未�供,则显示为独立链接。
+ iconSrc: data:image/jpeg;base64,[icon source string is clipped for brevity]
+ label: This is a label # �选。
+ sideLabel: A side label. # �选。
+ target: _blank # å�¯é€‰ã€‚_blank 表示在新选项å�¡æˆ–窗å�£ä¸æ‰“开链接。
+ toService: # 需��供 toService 或 #toUrl。
+ name: rancher-monitoring-grafana
+ namespace: cattle-monitoring-system
+ path: proxy/?orgId=1
+ port: "80"
+ scheme: http
+```
+
+æ·»åŠ ä¸Šé�¢çš„ `toService` å�‚数会创建 Grafana 的链接,如以下截图所示:
+
+
+
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/global-default-private-registry.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/global-default-private-registry.md
new file mode 100644
index 00000000000..818ccfc025a
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/global-default-private-registry.md
@@ -0,0 +1,57 @@
+---
+title: �置全局默认�有镜�仓库
+---
+
+:::note
+本页介�了安装 Rancher �如何从 Rancher UI �置全局默认�有镜�仓库。
+
+有关如何在 Rancher 安装期间设置�有镜�仓库的说明,请�阅[离线安装指�](../../../pages-for-subheaders/air-gapped-helm-cli-install.md)。
+
+:::
+
+ç§�有镜åƒ�仓库是集群ä¸ç§�有ã€�一致且集ä¸çš„容器镜åƒ�æº�ã€‚ä½ å�¯ä»¥ä½¿ç”¨ç§�有容器镜åƒ�仓库,在组织内共享自定义基础镜åƒ�。
+
+在 Rancher ä¸è®¾ç½®ç§�有镜åƒ�仓库主è¦�有两ç§�æ–¹å¼�:
+
+* 通过全局视图ä¸çš„ **Settings** 选项å�¡è®¾ç½®å…¨å±€é»˜è®¤é•œåƒ�仓库。
+* 在集群级别设置下的高级选项ä¸è®¾ç½®ç§�有镜åƒ�仓库。
+
+全局默认镜åƒ�仓库适用于离线环境,å�¯ç”¨äºŽä¸�需è¦�å‡è¯�的镜åƒ�仓库。而集群级ç§�有镜åƒ�仓库用于需è¦�å‡è¯�çš„ç§�有镜åƒ�仓库。
+
+## å°†ä¸�需è¦�å‡è¯�çš„ç§�有镜åƒ�仓库设置为默认镜åƒ�仓库
+
+1. 登录 Rancher å¹¶é…�置默认管ç�†å‘˜å¯†ç �。
+1. 选择 **☰ > 全局设置**。
+1. 转到 `system-default-registry` 并选择 **⋮ > 编辑设置**。
+1. è¾“å…¥ä½ é•œåƒ�仓库的主机å��和端å�£ï¼ˆä¾‹å¦‚ `registry.yourdomain.com:port`)。ä¸�è¦�在文本å‰�åŠ ä¸Š `http://` 或 `https://`。
+
+**结果**:Rancher ä¼šä»Žä½ çš„ç§�有镜åƒ�ä»“åº“ä¸æ‹‰å�–系统镜åƒ�。
+
+### 带 RKE2 下游集群的命�空间�有镜�仓库
+
+默认情况下,大多数�有镜�仓库应该能与 RKE2 下游集群一起工作。
+
+ä½†æ˜¯ï¼Œå¦‚æžœä½ å°�试设置 URL æ ¼å¼�为 `website/subdomain:portnumber` 的命å��空间ç§�有镜åƒ�仓库,则需è¦�执行é¢�外的æ¥éª¤ï¼š
+
+1. 选择 **☰ > 集群管�**。
+1. åœ¨åˆ—è¡¨ä¸æ‰¾åˆ° RKE2 集群,然å�Žç‚¹å‡» **â‹® > 编辑é…�ç½®**。
+1. 从**集群é…�ç½®**è�œå�•ä¸ï¼Œé€‰æ‹©**镜åƒ�仓库**。
+1. 在**镜åƒ�仓库**ä¸ï¼Œé€‰æ‹©**é…�置高级 Containerd Mirror 和仓库认è¯�选项**选项。
+1. 在 **Mirrors** ä¸‹çš„æ–‡æœ¬å—æ®µä¸ï¼Œè¾“å…¥**镜åƒ�仓库主机å��**å’Œ **Mirror 端点**。
+1. å�•击**ä¿�å˜**。
+1. æ ¹æ�®éœ€è¦�对æ¯�个下游 RKE2 集群é‡�å¤�æ“�作。
+
+## 创建集群时é…�置使用å‡è¯�çš„ç§�有镜åƒ�仓库
+
+æ— æ³•ä¸ºæ¯�个 Rancher é…�置的集群全局设置具有授æ�ƒè®¤è¯�çš„ç§�有镜åƒ�ä»“åº“ã€‚å› æ¤ï¼Œå¦‚æžœä½ å¸Œæœ› Rancher é…�置的集群从使用å‡è¯�çš„ç§�有镜åƒ�ä»“åº“ä¸æ‹‰å�–镜åƒ�,则æ¯�æ¬¡åˆ›å»ºæ–°é›†ç¾¤æ—¶éƒ½å¿…é¡»é€šè¿‡é«˜çº§é›†ç¾¤é€‰é¡¹ä¼ é€’é•œåƒ�仓库å‡è¯�。
+
+由于创建集群å�Žæ— 法é…�ç½®ç§�有镜åƒ�ä»“åº“ï¼Œå› æ¤ä½ 需è¦�在åˆ�始集群设置期间执行这些æ¥éª¤ã€‚
+
+1. 选择 **☰ > 集群管�**。
+1. 在**集群**页�上,�击**创建**。
+1. 选择集群类型。
+1. 在**集群é…�ç½®**ä¸ï¼Œè½¬åˆ°**镜åƒ�仓库**选项å�¡ï¼Œç„¶å�Žé€‰æ‹©**为 Rancher 从ç§�有镜åƒ�ä»“åº“ä¸æ‹‰å�–镜åƒ�**。
+1. 输入镜åƒ�仓库主机å��å’Œå‡è¯�。
+1. �击**创建**。
+
+**结果**:新集群将从ç§�有镜åƒ�ä»“åº“ä¸æ‹‰å�–镜åƒ�。
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/cluster-and-project-roles.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/cluster-and-project-roles.md
new file mode 100644
index 00000000000..09b1cec4990
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/cluster-and-project-roles.md
@@ -0,0 +1,236 @@
+---
+title: 集群和项目角色
+---
+
+集群和项目角色定义集群或项目内的用户授�。
+
+�管�这些角色:
+
+1. �击 **☰ > 用户 & 认�**。
+1. 在左侧导航æ �ä¸ï¼Œå�•击**角色**并转到**集群**或**项目或命å��空间**选项å�¡ã€‚
+
+### æˆ�å‘˜èµ„æ ¼å’Œè§’è‰²åˆ†é…�
+
+é�žç®¡ç�†ç”¨æˆ·å�¯ä»¥è®¿é—®çš„项目和集群由 _æˆ�å‘˜èµ„æ ¼_ 决定。æˆ�å‘˜èµ„æ ¼æ˜¯æ ¹æ�®è¯¥é›†ç¾¤æˆ–项目ä¸åˆ†é…�的角色而有æ�ƒè®¿é—®ç‰¹å®šé›†ç¾¤æˆ–项目的用户列表。æ¯�个集群和项目都包å�«ä¸€ä¸ªé€‰é¡¹å�¡ï¼Œå…·æœ‰é€‚当æ�ƒé™�的用户å�¯ä»¥ä½¿ç”¨è¯¥é€‰é¡¹å�¡æ�¥ç®¡ç�†æˆ�å‘˜èµ„æ ¼ã€‚
+
+创建集群或项目时,Rancher 会自动将创建者分é…�为`所有者`。分é…�了`所有者`角色的用户å�¯ä»¥åœ¨é›†ç¾¤æˆ–项目ä¸ç»™å…¶ä»–用户分é…�角色。
+
+:::note
+
+默认情况下,é�žç®¡ç�†å‘˜ç”¨æˆ·æ— 法访问任何现有项目/集群。具有适当æ�ƒé™�的用户(通常是所有者)必须显å¼�分é…�项目和集群æˆ�å‘˜èµ„æ ¼ã€‚
+
+:::
+
+### 集群角色
+
+_集群角色_ æ˜¯ä½ å�¯ä»¥åˆ†é…�给用户的角色,以授予他们对集群的访问æ�ƒé™�。集群的两个主è¦�角色分别是`所有者`å’Œ`æˆ�员`。
+
+- **集群所有者:**
+
+ å�¯ä»¥å®Œå…¨æŽ§åˆ¶é›†ç¾¤å�Šå…¶ä¸çš„æ‰€æœ‰èµ„æº�。
+
+- **集群�员:**
+
+ �以查看大多数集群级别的资�并创建新项目。
+
+#### 自定义集群角色
+
+Rancher 支�将 _自定义集群角色_ 分�给普通用户,而�是典型的`所有者`或`�员`角色。这些角色�以是内置的自定义集群角色,也�以是 Rancher 管�员定义的角色。这些角色便于为集群内的普通用户定义更��或特定的访问��。有关内置自定义集群角色的列表,请�阅下表。
+
+#### 集群角色�考
+
+下表列出了�用的内置自定义集群角色,以�默认的集群级别角色`集群所有者`和`集群�员`是�包�该��:
+
+| 内置集群角色 | 所有者 | �员 |
+| ---------------------------------- | ------------- | --------------------------------- |
+| 创建项目 | ✓ | ✓ |
+| 管�集群备份            | ✓ | |
+| 管�集群应用商店 | ✓ | |
+| 管�集群�员 | ✓ | |
+| 管�节点[(�下表)](#管�节点��) | ✓ | |
+| 管ç�†å˜å‚¨ | ✓ | |
+| 查看所有项目 | ✓ | |
+| 查看集群应用商店 | ✓ | ✓ |
+| 查看集群�员 | ✓ | ✓ |
+| 查看节点 | ✓ | ✓ |
+
+#### 管�节点��
+
+下表列出了 RKE å’Œ RKE2 ä¸`管ç�†èŠ‚ç‚¹`角色å�¯ç”¨çš„æ�ƒé™�:
+
+| 管�节点�� | RKE | RKE2 |
+|-----------------------------|-------- |--------- |
+| SSH 访问 | ✓ | ✓ |
+| åˆ é™¤èŠ‚ç‚¹ | ✓ | ✓ |
+| 集群的垂直扩缩容 | ✓ | * |
+\***在 RKE2 ä¸ï¼Œä½ 必须拥有编辑集群的æ�ƒé™�æ‰�能对集群进行垂直扩缩容。**
+
+
+如果需è¦�了解å�„个集群角色如何访问 Kubernetes 资æº�,在 Rancher UI 䏿‰¾åˆ°è¿™äº›è§’色:
+
+1. 在左上角,�击 **☰ > 用户 & 认�**。
+1. 在左侧导航æ �ä¸ï¼Œå�•击**角色**。
+1. �击**集群**选项�。
+1. å�•击角色的å��ç§°ã€‚è¡¨æ ¼ä¼šæ˜¾ç¤ºè§’è‰²æŽˆæ�ƒçš„æ‰€æœ‰æ“�作和资æº�。
+
+:::note
+
+在查看 Rancher 创建的默认角色关è�”的资æº�时,如果在一行上有多个 Kubernetes API 资æº�,则该资æº�将带有 `(Custom)` æ ‡è¯†ã€‚è¿™ä¸�代表这个资æº�是自定义资æº�,而å�ªæ˜¯è¡¨æ˜Žå¤šä¸ª Kubernetes API 资æº�作为一个资æº�。
+
+:::
+
+### 为集群�员�供自定义集群角色
+
+在管�员[设置自定义集群角色�](custom-roles.md),集群所有者和管�员�以将这些角色分�给集群�员。
+
+è¦�将自定义角色分é…�给新的集群æˆ�å‘˜ï¼Œä½ å�¯ä»¥ä½¿ç”¨ Rancher UI。è¦�修改现有æˆ�员的æ�ƒé™�ï¼Œä½ éœ€è¦�使用 Rancher API 视图。
+
+�将角色分�给新的集群�员:
+
+
+
+
+1. 点击 **☰ > 集群管�**。
+1. 转到�将角色分�给�员的集群,然��击 **Explore**。
+1. �击**集群�员**。
+1. å�•击**æ·»åŠ **。
+1. 在**集群æ�ƒé™�**ä¸ï¼Œé€‰æ‹©è¦�分é…�ç»™æˆ�员的自定义集群角色。
+1. �击**创建**。
+
+
+
+
+1. 点击 **☰ > 集群管�**。
+1. 转到�将角色分�给�员的集群,然��击 **Explore**。
+1. 点击**集群 > 集群�员**。
+1. å�•击**æ·»åŠ **。
+1. 在**集群æ�ƒé™�**ä¸ï¼Œé€‰æ‹©è¦�分é…�ç»™æˆ�员的自定义集群角色。
+1. �击**创建**。
+
+
+
+
+**结果**:�员具有所分�的角色。
+
+�将自定义角色分�给现有集群�员:
+
+1. �击 **☰ > 用户 & 认�**。
+1. 找到�分�角色的�员。�击 **⋮ > 编辑�置**。
+1. å¦‚æžœä½ æ·»åŠ äº†è‡ªå®šä¹‰è§’è‰²ï¼Œå®ƒä»¬å°†æ˜¾ç¤ºåœ¨**自定义**ä¸ã€‚选择è¦�分é…�ç»™æˆ�员的角色。
+1. å�•击**ä¿�å˜**。
+
+**结果**:�员具有所分�的角色。
+
+### 项目角色
+
+_项目角色_ 是用于授予用户访问项目��的角色。主�的项目角色分别是`所有者`�`�员`和`�读`。
+
+- **项目所有者:**
+
+ å�¯ä»¥å®Œå…¨æŽ§åˆ¶é¡¹ç›®å�Šå…¶ä¸çš„æ‰€æœ‰èµ„æº�。
+
+- **项目�员:**
+
+ �以管�项目范围的资�,如命�空间和工作负载,但�能管�其他项目�员。
+
+:::note
+
+默认情况下,Rancher çš„`项目æˆ�员`角色继承自 `Kubernetes-edit` 角色,而`项目所有者`角色继承自 `Kubernetes-admin` è§’è‰²ã€‚å› æ¤ï¼Œ`项目æˆ�员`å’Œ`项目所有者`角色都能管ç�†å‘½å��ç©ºé—´ï¼ŒåŒ…æ‹¬åˆ›å»ºå’Œåˆ é™¤å‘½å��空间。
+
+:::
+
+- **�读:**
+
+ å�¯ä»¥æŸ¥çœ‹é¡¹ç›®ä¸çš„æ‰€æœ‰å†…容,但ä¸�能创建ã€�æ›´æ–°æˆ–åˆ é™¤ä»»ä½•å†…å®¹ã€‚
+
+:::danger
+
+如果用户分é…�到了项目的`所有者`或`æˆ�员`角色,用户会自动继承`命å��空间创建`角色。然而,这个角色是 [Kubernetes ClusterRole](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#role-and-clusterrole),这表示角色的范围会延展到集群ä¸çš„æ‰€æœ‰é¡¹ç›®ã€‚å› æ¤ï¼Œå¯¹äºŽæ˜¾å¼�分é…�到了项目`所有者`或`æˆ�员`角色的用户æ�¥è¯´ï¼Œå�³ä½¿å�ªæœ‰`å�ªè¯»`角色,这些用户也å�¯ä»¥åœ¨åˆ†é…�给他们的其他项目ä¸åˆ›å»ºå‘½å��空间。
+
+:::
+
+#### 自定义项目角色
+
+Rancher 支�将 _自定义项目角色_ 分�给普通用户,而�是典型的`所有者`�`�员`或`�读`角色。这些角色�以是内置的自定义项目角色,也�以是 Rancher 管�员定义的角色。这些角色便于为项目内的普通用户定义更��或特定的访问��。有关内置自定义项目角色的列表,请�阅下表。
+
+#### 项目角色�考
+
+下表列出了 Rancher ä¸å�¯ç”¨çš„内置自定义项目角色,以å�Šè¿™äº›è§’色是å�¦ç”±`所有者`,`æˆ�员`或`å�ªè¯»`角色授予的:
+
+| 内置项目角色 | 所有者 | �员 | �读 |
+| ---------------------------------- | ------------- | ----------------------------- | ------------- |
+| 管�项目�员 | ✓ | | |
+| 创建命�空间 | ✓ | ✓ | |
+| 管ç�†é…�ç½®æ˜ å°„ | ✓ | ✓ | |
+| 管� Ingress | ✓ | ✓ | |
+| 管�项目应用商店 | ✓ | | |
+| 管�密文 | ✓ | ✓ | |
+| 管� ServiceAccount | ✓ | ✓ | |
+| 管��务 | ✓ | ✓ | |
+| 管�� | ✓ | ✓ | |
+| 管�工作负载 | ✓ | ✓ | |
+| 查看密文 | ✓ | ✓ | |
+| 查看�置图 | ✓ | ✓ | ✓ |
+| 查看 Ingress | ✓ | ✓ | ✓ |
+| 查看项目�员 | ✓ | ✓ | ✓ |
+| 查看项目应用商店 | ✓ | ✓ | ✓ |
+| 查看 ServiceAccount | ✓ | ✓ | ✓ |
+| 查看�务 | ✓ | ✓ | ✓ |
+| 查看� | ✓ | ✓ | ✓ |
+| 查看工作负载 | ✓ | ✓ | ✓ |
+
+:::note 注�事项:
+
+- 上é�¢åˆ—出的æ¯�个项目角色(包括`所有者`ã€�`æˆ�员`å’Œ`å�ªè¯»`)å�‡ç”±å¤šä¸ªè§„则组æˆ�,这些规则授予对å�„ç§�资æº�的访问æ�ƒé™�ã€‚ä½ å�¯ä»¥åœ¨**全局 > 安全 > 角色**页é�¢ä¸ŠæŸ¥çœ‹è§’色å�Šå…¶è§„则。
+- 在查看 Rancher 创建的默认角色关è�”的资æº�时,如果在一行上有多个 Kubernetes API 资æº�,则该资æº�将带有 `(Custom)` æ ‡è¯†ã€‚è¿™ä¸�代表这个资æº�是自定义资æº�,而å�ªæ˜¯è¡¨æ˜Žå¤šä¸ª Kubernetes API 资æº�作为一个资æº�。
+- `管ç�†é¡¹ç›®æˆ�员`角色å…�许项目所有者管ç�†é¡¹ç›®çš„æ‰€æœ‰æˆ�员,**å¹¶**授予这些æˆ�员任何项目范围的角色(ä¸�论他们是å�¦æœ‰æ�ƒè®¿é—®é¡¹ç›®èµ„æº�)。å�•独分é…�æ¤è§’色时è¦�å°�心。
+
+:::
+
+### 定义自定义角色
+如å‰�æ‰€è¿°ï¼Œä½ å�¯ä»¥å®šä¹‰è‡ªå®šä¹‰è§’色,并将这些角色用在集群或项目ä¸ã€‚ä¸Šä¸‹æ–‡å—æ®µå®šä¹‰äº†è§’色是å�¦æ˜¾ç¤ºåœ¨é›†ç¾¤æˆ�员页é�¢ã€�项目æˆ�员页é�¢æˆ–å�Œæ—¶æ˜¾ç¤ºåœ¨è¿™ä¸¤ä¸ªé¡µé�¢ã€‚
+
+å®šä¹‰è‡ªå®šä¹‰è§’è‰²æ—¶ï¼Œä½ å�¯ä»¥æŽˆäºˆå¯¹ç‰¹å®šèµ„æº�的访问æ�ƒé™�,或指定自定义角色应继承的角色。自定义角色å�¯ä»¥ç”±ç‰¹å®šæŽˆæ�ƒå’Œç»§æ‰¿è§’色组æˆ�。所有授æ�ƒéƒ½æ˜¯ç´¯åŠ çš„ã€‚æ�¢è¨€ä¹‹ï¼Œå¦‚æžœä½ ä¸ºç‰¹å®šèµ„æº�定义更å�—é™�的授æ�ƒï¼Œè‡ªå®šä¹‰è§’色继承的角色ä¸å®šä¹‰çš„æ›´å¹¿æ³›çš„æŽˆæ�ƒ**ä¸�会**被覆盖。
+
+### 默认集群和项目角色
+
+默认情况下,在普通用户创建新集群或项目时,他们会自动分é…�到所有者的角色,å�³[集群所有者](#集群角色)或[项目所有者](#项目角色)。但是,在æŸ�些组织ä¸ï¼Œè¿™äº›è§’色å�¯èƒ½ä¼šè¢«è®¤ä¸ºæœ‰è¿‡å¤šçš„管ç�†è®¿é—®æ�ƒé™�。在这ç§�æƒ…å†µä¸‹ï¼Œä½ å�¯ä»¥å°†é»˜è®¤è§’色更改为更具é™�制性的角色,例如一组å�•独的角色或一个自定义角色。
+
+更改默认集群/项目角色有以下两�方法:
+
+- **分é…�自定义角色**ï¼šä¸ºä½ çš„[集群](#自定义集群角色)或[项目](#自定义项目角色)创建一个[自定义角色](custom-roles.md),然å�Žå°†è‡ªå®šä¹‰è§’色设置为默认。
+
+- **分��独的角色**:将多个[集群](#集群角色�考)/[项目](#项目角色�考)角色�置为默认角色,并分�给创建的用户。
+
+ ä¾‹å¦‚ï¼Œä½ å�¯ä»¥é€‰æ‹©æ··å�ˆä½¿ç”¨å¤šä¸ªè§’色(例如`管ç�†èŠ‚ç‚¹`å’Œ`管ç�†å˜å‚¨`),而ä¸�是使用继承的角色(例如`集群所有者`)。
+
+:::note
+
+- è™½ç„¶ä½ å�¯ä»¥[é”�定](locked-roles.md)一个默认角色,但系统ä»�会将这个角色分é…�给创建集群/项目的用户。
+- å�ªæœ‰åˆ›å»ºé›†ç¾¤/项目的用户æ‰�能继承他们的角色。对于之å�Žæ·»åŠ ä¸ºé›†ç¾¤/项目æˆ�å‘˜çš„ç”¨æˆ·ï¼Œä½ å¿…é¡»æ˜¾å¼�分é…�角色。
+
+:::
+
+### 为集群和项目创建者�置默认角色
+
+ä½ å�¯ä»¥æ›´æ”¹ä¸ºåˆ›å»ºé›†ç¾¤æˆ–项目的用户自动创建的角色:
+
+1. 在左上角,�击 **☰ > 用户 & 认�**。
+1. 在左侧导航æ �ä¸ï¼Œå�•击**角色**。
+1. �击**集群**或**项目或命�空间**选项�。
+1. æ‰¾åˆ°ä½ è¦�用作默认角色的自定义或å�•个角色。然å�Žé€šè¿‡é€‰æ‹© **â‹® > 编辑é…�ç½®**æ�¥ç¼–辑角色。
+1. 在**集群创建者的默认角色**或**项目创建者的默认角色**ä¸ï¼Œå°†è§’色å�¯ç”¨ä¸ºé»˜è®¤ã€‚
+1. å�•击**ä¿�å˜**。
+
+**结果**ï¼šé»˜è®¤è§’è‰²å·²æ ¹æ�®ä½ 的更改é…�置。分é…�给集群/项目创建者的角色会在**集群创建者的默认角色/项目创建者的默认角色**列ä¸å‹¾é€‰ã€‚
+
+如果è¦�åˆ é™¤é»˜è®¤è§’è‰²ï¼Œè¯·ç¼–è¾‘æ�ƒé™�,并在默认角色选项ä¸é€‰æ‹©**å�¦**。
+
+### 撤销集群æˆ�å‘˜èµ„æ ¼
+
+å¦‚æžœä½ æ’¤é”€ä¸€ä¸ªæ™®é€šç”¨æˆ·çš„é›†ç¾¤æˆ�å‘˜èµ„æ ¼ï¼Œè€Œä¸”è¯¥ç”¨æˆ·å·²æ˜¾å¼�分é…�集群的集群 _å’Œ_ 项目的æˆ�å‘˜èµ„æ ¼ï¼Œè¯¥æ™®é€šç”¨æˆ·å°†[失去集群角色](#集群角色)但[ä¿�留项目角色](#项目角色)。æ�¢å�¥è¯�说,å�³ä½¿ä½ å·²ç»�撤销了用户访问集群和其ä¸çš„节点的æ�ƒé™�,但该普通用户ä»�ç„¶å�¯ä»¥ï¼š
+
+- 访问他们拥有æˆ�å‘˜èµ„æ ¼çš„é¡¹ç›®ã€‚
+- 行使分�给他们的任何[�个项目角色](#项目角色�考)。
+
+å¦‚æžœä½ æƒ³å®Œå…¨æ’¤é”€ç”¨æˆ·åœ¨é›†ç¾¤ä¸çš„访问æ�ƒé™�,请å�Œæ—¶æ’¤é”€ä»–们的集群和项目æˆ�å‘˜èµ„æ ¼ã€‚
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/custom-roles.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/custom-roles.md
new file mode 100644
index 00000000000..0ab8560983b
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/custom-roles.md
@@ -0,0 +1,120 @@
+---
+title: 自定义角色
+---
+
+在 Rancher ä¸ï¼Œ_角色_ 决定了用户å�¯ä»¥åœ¨é›†ç¾¤æˆ–é¡¹ç›®ä¸æ‰§è¡Œå“ªäº›æ“�作。
+
+请注æ„�,_角色_ 与 _æ�ƒé™�_ ä¸�å�Œï¼Œæ�ƒé™�å†³å®šçš„æ˜¯ä½ å�¯ä»¥è®¿é—®å“ªäº›é›†ç¾¤å’Œé¡¹ç›®ã€‚
+
+:::danger
+
+自定义角色�以�用����。有关详细信�,请�阅[本节](#����)。
+
+:::
+
+
+## 先决�件
+
+è¦�完æˆ�æ¤é¡µé�¢ä¸Šçš„任务,需è¦�以下æ�ƒé™�之一:
+
+- [管�员全局��](global-permissions.md)。
+- 分�了[管�角色](global-permissions.md)的[自定义全局��](global-permissions.md#自定义全局��)。
+
+## 创建自定义角色
+
+虽然 Rancher æ��供一组开箱å�³ç”¨çš„é»˜è®¤ç”¨æˆ·è§’è‰²ï¼Œä½†ä½ è¿˜å�¯ä»¥åˆ›å»ºé»˜è®¤çš„自定义角色,从而在 Rancher ä¸ä¸ºç”¨æˆ·æ��供更精细的æ�ƒé™�。
+
+æ·»åŠ è‡ªå®šä¹‰è§’è‰²çš„æ¥éª¤å› Rancher 的版本而异。
+
+1. 在左上角,�击 **☰ > 用户 & 认�**。
+1. 在左侧导航æ �ä¸ï¼Œå�•击**角色**。
+1. 选择一个选项å�¡æ�¥ç¡®å®šè¦�æ·»åŠ çš„è§’è‰²çš„èŒƒå›´ã€‚è¿™äº›é€‰é¡¹å�¡æ˜¯ï¼š
+
+- **全局**:仅在�许�员管�全局范围的资�时,�以分�该角色。
+- **集群**:仅在å�‘é›†ç¾¤æ·»åŠ /管ç�†æˆ�员时,å�¯ä»¥åˆ†é…�该角色。
+- **项目或命å��空间**:仅在å�‘项目或命å��ç©ºé—´æ·»åŠ /管ç�†æˆ�员时,å�¯ä»¥åˆ†é…�该角色。
+
+1. æ ¹æ�®æ‰€éœ€è¦�的范围,å�•击**创建全局角色**ã€�**创建集群角色**或**创建项目或命å��空间的角色**。
+1. 输入角色的**�称**。
+1. å�¯é€‰ï¼šé€‰æ‹©**集群创建者的默认角色/项目创建者的默认角色**选项,以将该角色分é…�给集群/项目创建者。使用æ¤åŠŸèƒ½ï¼Œä½ å�¯ä»¥æ‰©å±•或é™�制集群/项目创建者的默认角色。
+
+ > 开箱�用的**集群创建者的默认角色**和**项目创建者的默认角色**分别是`集群所有者`和`项目所有者`。
+
+1. 使用**授�资�**选项将�个 [Kubernetes API 端点](https://kubernetes.io/docs/reference/)分�给角色。
+
+ > 在查看 Rancher 创建的默认角色关è�”的资æº�时,如果在一行上有多个 Kubernetes API 资æº�,则该资æº�将带有 `(Custom)` æ ‡è¯†ã€‚è¿™ä¸�代表这个资æº�是自定义资æº�,而å�ªæ˜¯è¡¨æ˜Žå¤šä¸ª Kubernetes API 资æº�作为一个资æº�。
+
+ > **资æº�**æ–‡æœ¬å—æ®µå�¯ä»¥ç”¨æ�¥æ�œç´¢é¢„定义的 Kubernetes API 资æº�,或者为授æ�ƒè¾“入自定义资æº�å��称。在æ¤å—段ä¸è¾“入资æº�å��ç§°å�Žï¼Œå¿…须从下拉列表ä¸é€‰æ‹©é¢„定义或`(自定义)`资æº�。
+
+ ä½ è¿˜å�¯ä»¥é€‰æ‹©æ¯�个分é…�的端点å�¯ç”¨çš„ cURL 方法(`Create`ã€�`Delete`ã€�`Get` ç‰ï¼‰ã€‚
+
+1. 使用 **Inherit from** 选项将å�„个 Rancher 角色分é…�ç»™ä½ çš„è‡ªå®šä¹‰è§’è‰²ã€‚è¯·æ³¨æ„�ï¼Œå¦‚æžœè‡ªå®šä¹‰è§’è‰²ä»Žçˆ¶è§’è‰²ç»§æ‰¿ï¼Œä½ éœ€è¦�å…ˆåˆ é™¤å�角色æ‰�èƒ½åˆ é™¤çˆ¶è§’è‰²ã€‚
+
+1. �击**创建**。
+
+## 创建从�一个角色继承的自定义角色
+
+å¦‚æžœä½ æœ‰ä¸€ç»„éœ€è¦�在 Rancher ä¸å…·æœ‰ç›¸å�Œè®¿é—®æ�ƒé™�的用户,一ç§�节çœ�时间的方法是创建一个新的自定义角色,而该角色的规则都是从å�¦ä¸€ä¸ªè§’色(例如管ç�†å‘˜è§’色)å¤�制而æ�¥çš„ã€‚è¿™æ ·ï¼Œä½ å�ªéœ€è¦�é…�置现有角色和新角色之间ä¸�å�Œçš„部分。
+
+ç„¶å�Žï¼Œä½ å�¯ä»¥å°†è‡ªå®šä¹‰è§’色分é…�给用户或组。该角色在用户首次登录 Rancher 时生效。
+
+�基于现有角色创建自定义角色:
+
+1. 在左上角,�击 **☰ > 用户 & 认�**。
+1. 在左侧导航æ �ä¸ï¼Œå�•击**角色**。
+1. å�•击**集群**或**项目或命å��空间**选项å�¡ã€‚æ ¹æ�®æ‰€éœ€è¦�的范围,å�•击**创建集群角色**或**创建项目或命å��空间的角色**。请注æ„�,å�ªæœ‰é›†ç¾¤è§’色和项目/命å��空间角色å�¯ä»¥ä»Žå�¦ä¸€ä¸ªè§’色继承。
+1. 输入角色的�称。
+1. 在 **Inherit From** 选项å�¡ä¸ï¼Œé€‰æ‹©è‡ªå®šä¹‰è§’色需è¦�从哪个角色继承æ�ƒé™�。
+1. 在**授æ�ƒèµ„æº�**选项å�¡ä¸ï¼Œé€‰æ‹©æ‹¥æœ‰è‡ªå®šä¹‰è§’色的用户è¦�å�¯ç”¨çš„ Kubernetes 资æº�æ“�作。
+
+ > **资æº�**æ–‡æœ¬å—æ®µå�¯ä»¥ç”¨æ�¥æ�œç´¢é¢„定义的 Kubernetes API 资æº�,或者为授æ�ƒè¾“入自定义资æº�å��称。在æ¤å—段ä¸è¾“入资æº�å��ç§°å�Žï¼Œå¿…须从下拉列表ä¸é€‰æ‹©é¢„定义或`(自定义)`资æº�。
+1. �选:将角色设置为默认。
+1. �击**创建**。
+
+## åˆ é™¤è‡ªå®šä¹‰è§’è‰²
+
+åˆ é™¤è‡ªå®šä¹‰è§’è‰²æ—¶ï¼Œå…·æœ‰æ¤è‡ªå®šä¹‰è§’色的所有全局角色绑定(Global Role Bindingsï¼‰éƒ½å°†è¢«åˆ é™¤ã€‚
+
+如果æŸ�个用户仅分é…�äº†ä¸€ä¸ªè‡ªå®šä¹‰å…¨å±€è§’è‰²ï¼Œè€Œä¸”ä½ åˆ é™¤äº†è¿™ä¸ªè§’è‰²ï¼Œè¯¥ç”¨æˆ·å°†ä¸�能å†�访问 Rancher。è¦�让用户é‡�新获得访问æ�ƒé™�,管ç�†å‘˜éœ€è¦�编辑用户并应用新的全局æ�ƒé™�。
+
+自定义角色å�¯ä»¥åˆ 除,但内置角色ä¸�èƒ½åˆ é™¤ã€‚
+
+è¦�åˆ é™¤è‡ªå®šä¹‰è§’è‰²ï¼š
+
+1. 在左上角,�击 **☰ > 用户 & 认�**。
+1. 在左侧导航æ �ä¸ï¼Œå�•击**角色**。
+2. 转到è¦�åˆ é™¤çš„è‡ªå®šä¹‰å…¨å±€è§’è‰²ï¼Œç„¶å�Žå�•击 **â‹® (…) > åˆ é™¤**。
+3. å�•击**åˆ é™¤**。
+
+## 为组分�自定义角色
+
+å¦‚æžœä½ æœ‰ä¸€ç»„éœ€è¦�在 Rancher ä¸å…·æœ‰ç›¸å�Œè®¿é—®æ�ƒé™�的用户,一ç§�节çœ�时间的方法是创建一个新的自定义角色。将角色分é…�给组时,组ä¸çš„用户在首次登录 Rancher 时就会拥有é…�置的访问级别。
+
+组ä¸çš„用户登录时,他们默认获得内置的**普通用户**全局角色。他们还将获得分é…�给他们的组的æ�ƒé™�。
+
+如果将用户从外部身份验è¯�系统的组ä¸åˆ 除,用户将失去分é…�给该组的自定义全局角色的æ�ƒé™�。但是,用户ä»�会拥有**普通用户**角色。
+
+:::note 先决�件:
+
+å�ªæœ‰åœ¨ä»¥ä¸‹æƒ…å†µä¸‹ï¼Œä½ æ‰�能将全局角色分é…�给组:
+
+* ä½ å·²è®¾ç½®[外部身份验è¯�æ��供程åº�](../../../../pages-for-subheaders/authentication-config.md#外部验è¯�与本地验è¯�)。
+* 外部身份验��供程�支�[用户组](../../authentication-permissions-and-global-configuration/authentication-config/manage-users-and-groups.md)。
+* ä½ å·²ä½¿ç”¨èº«ä»½éªŒè¯�æ��供程åº�设置了至少一个用户组。
+
+:::
+
+è¦�将自定义角色分é…�给组,请执行以下æ¥éª¤ï¼š
+
+1. 在左上角,�击 **☰ > 用户 & 认�**。
+1. 在左侧导航æ �ä¸ï¼Œå�•击**组**。
+1. 转到将分�自定义角色的组,然��击 **⋮ > 编辑�置**。
+1. å¦‚æžœä½ å·²åˆ›å»ºè§’è‰²ï¼Œè§’è‰²å°†æ˜¾ç¤ºåœ¨**自定义**ä¸ã€‚选择è¦�分é…�给组的自定义角色。
+1. å�¯é€‰ï¼šåœ¨**全局æ�ƒé™�**或**内置角色**ä¸ï¼Œé€‰æ‹©è¦�分é…�给该组的其他æ�ƒé™�。
+1. å�•击**ä¿�å˜**。
+
+**结果**:自定义角色将在组内用户登录 Rancher 时生效。
+
+## ����
+
+`é…�置应用商店`这个自定义æ�ƒé™�很强大,应谨慎使用。如果管ç�†å‘˜å°†`é…�置应用商店`æ�ƒé™�分é…�给普通用户,å�¯èƒ½ä¼šå¯¼è‡´æ�ƒé™�æ��å�‡ã€‚在这ç§�情况下,用户å�¯ä»¥è®©è‡ªå·±å¯¹ Rancher é…�置的集群进行管ç�†å‘˜è®¿é—®ã€‚å› æ¤ï¼Œæ‹¥æœ‰æ¤æ�ƒé™�的任何用户都应被视为管ç�†å‘˜ã€‚
\ No newline at end of file
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/global-permissions.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/global-permissions.md
new file mode 100644
index 00000000000..3fb65c5d7e0
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/global-permissions.md
@@ -0,0 +1,247 @@
+---
+title: 全局��
+---
+
+_æ�ƒé™�_ æ˜¯ä½ åœ¨ä¸ºç”¨æˆ·é€‰æ‹©è‡ªå®šä¹‰æ�ƒé™�æ—¶å�¯ä»¥åˆ†é…�的个人访问æ�ƒé™�。
+
+全局æ�ƒé™�定义用户在任何特定集群之外的授æ�ƒã€‚Rancher æ��供四ç§�开箱å�³ç”¨çš„默认全局æ�ƒé™�:`Administrator` (管ç�†å‘˜)ã€�`Restricted Admin` (å�—é™�管ç�†å‘˜)ã€�`Standard User` (æ ‡å‡†ç”¨æˆ·) å’Œ `User-Base` 用户。
+
+- **管ç�†å‘˜**:å�¯ä»¥å®Œå…¨æŽ§åˆ¶æ•´ä¸ª Rancher 系统和其ä¸çš„æ‰€æœ‰é›†ç¾¤ã€‚
+
+- **��管�员**:�以完全控制下游集群,但�能更改本地 Kubernetes 集群。
+
+- **普通用户**:å�¯ä»¥åˆ›å»ºæ–°é›†ç¾¤å¹¶ä½¿ç”¨å®ƒä»¬ã€‚普通用户还å�¯ä»¥åœ¨è‡ªå·±çš„集群ä¸å�‘其他用户分é…�集群æ�ƒé™�。
+
+- **User-Base 用户**:�有登录��。
+
+ä½ æ— æ³•æ›´æ–°æˆ–åˆ é™¤å†…ç½®çš„å…¨å±€æ�ƒé™�。
+
+## ��管�员
+
+Rancher 2.5 创建了一个新的 `restricted-admin` è§’è‰²ï¼Œä»¥é˜²æ¢æœ¬åœ° Rancher Server Kubernetes 集群的æ�ƒé™�æ��å�‡ã€‚æ¤è§’色对 Rancher 管ç�†çš„æ‰€æœ‰ä¸‹æ¸¸é›†ç¾¤å…·æœ‰å®Œå…¨ç®¡ç�†å‘˜æ�ƒé™�,但没有更改本地 Kubernetes 集群的æ�ƒé™�。
+
+`restricted-admin` å�¯ä»¥åˆ›å»ºå…¶ä»–具有å�Œæ ·è®¿é—®æ�ƒé™�çš„ `restricted-admin` 用户。
+
+Rancher è¿˜å¢žåŠ äº†ä¸€ä¸ªæ–°è®¾ç½®ï¼Œæ�¥å°†åˆ�å§‹å�¯åŠ¨çš„ç®¡ç�†å‘˜è®¾ç½®ä¸º `restricted-admin` 角色。该设置适用于 Rancher Server 首次å�¯åŠ¨æ—¶åˆ›å»ºçš„ç¬¬ä¸€ä¸ªç”¨æˆ·ã€‚å¦‚æžœè®¾ç½®äº†è¿™ä¸ªçŽ¯å¢ƒå�˜é‡�,则ä¸�会创建全局管ç�†å‘˜ï¼Œä¹Ÿå°±æ— 法通过 Rancher 创建全局管ç�†å‘˜ã€‚
+
+è¦�以 `restricted-admin` 作为åˆ�始用户æ�¥å�¯åЍ Rancherï¼Œä½ éœ€è¦�使用以下环境å�˜é‡�æ�¥å�¯åЍ Rancher Server:
+
+```
+CATTLE_RESTRICTED_DEFAULT_ADMIN=true
+```
+### `restricted-admin` 的��列表
+
+下表列出了 `restricted-admin` 与 `Administrator` 和 `Standard User` 角色相比应具有的��和�作:
+
+| 类别 | �作 | 全局管�员 | 普通用户 | ��管�员 | ��管�员的注�事项 |
+| -------- | ------ | ------------ | ------------- | ---------------- | ------------------------------- |
+| 本地集群功能 | 管�本地集群(列出�编辑�导入主机) | 是 | � | � | |
+| | 创建项目/命�空间 | 是 | � | � | |
+| | æ·»åŠ é›†ç¾¤/项目æˆ�员 | 是 | å�¦ | å�¦ | |
+| | 全局 DNS | 是 | � | � | |
+| | 访问 CRD 和 CR 的管�集群 | 是 | � | 是 | |
+| | å�¦å˜ä¸º RKE 模æ�¿ | 是 | å�¦ | å�¦ | |
+| 安全 | | | | | |
+| �用身份验� | �置身份验� | 是 | � | 是 | |
+| 角色 | 创建/分é…� GlobalRoles | 是 | å�¦ï¼ˆå�¯åˆ—出) | 是 | 认è¯� Webhook å…�许为已ç»�å˜åœ¨çš„æ�ƒé™�创建 globalrole |
+| | 创建/分é…� ClusterRoles | 是 | å�¦ï¼ˆå�¯åˆ—出) | 是 | ä¸�åœ¨æœ¬åœ°é›†ç¾¤ä¸ |
+| | 创建/分é…� ProjectRoles | 是 | å�¦ï¼ˆå�¯åˆ—出) | 是 | ä¸�åœ¨æœ¬åœ°é›†ç¾¤ä¸ |
+| 用户 | æ·»åŠ ç”¨æˆ·/编辑/åˆ é™¤/å�œç”¨ç”¨æˆ· | 是 | å�¦ | 是 | |
+| 组 | 将全局角色分�给组 | 是 | � | 是 | 在 Webhook �许的范围内 |
+| | 刷新组 | 是 | � | 是 | |
+| PSP | 管� PSP 模� | 是 | �(�列出) | 是 | 与 PSP 的全局管�员��相� |
+| 工具 | | | | | |
+| | 管� RKE 模� | 是 | � | 是 | |
+| | 管ç�†å…¨å±€åº”用商店 | 是 | å�¦ | 是 | æ— æ³•ç¼–è¾‘/åˆ é™¤å†…ç½®ç³»ç»Ÿåº”ç”¨å•†åº—ã€‚å�¯ä»¥ç®¡ç�† Helm 库 |
+| | 集群驱动 | 是 | � | 是 | |
+| | 主机驱动 | 是 | � | 是 | |
+| | GlobalDNS �供商 | 是 | 是(自己) | 是 | |
+| | GlobalDNS �目 | 是 | 是(自己) | 是 | |
+| 设置 | | | | | |
+| | 管�设置 | 是 | �(�列出) | �(�列出) | |
+| 用户 | | | | | |
+| | 管� API 密钥 | 是(管�所有) | 是(管�自己的) | 是(管�自己的) | |
+| | 管�节点模� | 是 | 是(管�自己的) | 是(管�自己的) | �能管�自己的节点模�,�能管�其他用户创建的节点模�。 |
+| | 管ç�†äº‘å‡è¯� | 是 | 是(管ç�†è‡ªå·±çš„) | 是(管ç�†è‡ªå·±çš„) | å�ªèƒ½ç®¡ç�†è‡ªå·±çš„云å‡è¯�,ä¸�能管ç�†å…¶ä»–用户创建的云å‡è¯�。 |
+| 下游集群 | 创建集群 | 是 | 是 | 是 | |
+| | 编辑集群 | 是 | 是 | 是 | |
+| | 轮��书 | 是 | | 是 | |
+| | 立�创建快照 | 是 | | 是 | |
+| | ��快照 | 是 | | 是 | |
+| | å�¦å˜ä¸º RKE 模æ�¿ | 是 | å�¦ | 是 | |
+| | �行 CIS 扫� | 是 | 是 | 是 | |
+| | æ·»åŠ æˆ�员 | 是 | 是 | 是 | |
+| | 创建项目 | 是 | 是 | 是 | |
+| 自 2.5 起的功能 Chart | | | | | |
+| | 安装 Fleet | 是 | | 是 | æ— æ³•åœ¨æœ¬åœ°é›†ç¾¤ä¸è¿�行 Fleet |
+| | 部署 EKS 集群 | 是 | 是 | 是 | |
+| | 部署 GKE 集群 | 是 | 是 | 是 | |
+| | 部署 AKS 集群 | 是 | 是 | 是 | |
+
+
+### 将全局管�员更改为��管�员
+
+如果 Rancher 已�有一个全局管�员,则应该将所有全局管�员更改为新的 `restricted-admin`。
+
+ä½ å�¯ä»¥å‰�å¾€**安全 > 用户**,并将所有管ç�†å‘˜è§’色转为å�—é™�管ç�†å‘˜ã€‚
+
+已登录的用户å�¯ä»¥æ ¹æ�®éœ€è¦�将自己更改为 `restricted-admin`,但这应该是他们的最å�Žä¸€æ¥æ“�作,å�¦åˆ™ä»–们将没有进行该æ“�作的æ�ƒé™�。
+
+## 分�全局��
+
+本地用户的全局��分�与使用外部身份验�登录 Rancher 的用户��。
+
+### 新本地用户的全局��
+
+在创建新本地用户时,请在填写**æ·»åŠ ç”¨æˆ·**表å�•时为他分é…�全局æ�ƒé™�。
+
+如果需�查看新用户的默认��:
+
+1. 在左上角,�击 **☰ > 用户 & 认�**。
+1. 在左侧导航æ �ä¸ï¼Œå�•击**角色**。
+1. **角色**页é�¢æœ‰æŒ‰èŒƒå›´åˆ†ç»„的角色选项å�¡ã€‚æ¯�个表都列出了范围内的角色。在**全局**选项å�¡çš„**新用户的默认角色**列ä¸ï¼Œé»˜è®¤æŽˆäºˆæ–°ç”¨æˆ·çš„æ�ƒé™�用å¤�é€‰æ ‡è®°è¡¨ç¤ºã€‚
+
+ä½ å�¯ä»¥[更改默认全局æ�ƒé™�æ�¥æ»¡è¶³ä½ 的需è¦�](#é…�置默认全局æ�ƒé™�)。
+
+### 使用外部身份验�程�的用户的全局��
+
+当用户首次使用外部身份验��供程�登录 Rancher 时,他们会自动分�到**新用户的默认角色**的全局��。默认情况下,Rancher 为新用户分� **Standard User** ��。
+
+如果需�查看新用户的默认��:
+
+1. 在左上角,�击 **☰ > 用户 & 认�**。
+1. 在左侧导航æ �ä¸ï¼Œå�•击**角色**。
+1. **角色**页é�¢æœ‰æŒ‰èŒƒå›´åˆ†ç»„的角色选项å�¡ã€‚æ¯�个表都列出了范围内的角色。在æ¯�个页é�¢çš„**新用户的默认角色**列ä¸ï¼Œé»˜è®¤æŽˆäºˆæ–°ç”¨æˆ·çš„æ�ƒé™�用å¤�é€‰æ ‡è®°è¡¨ç¤ºã€‚
+
+ä½ å�¯ä»¥[更改默认æ�ƒé™�æ�¥æ»¡è¶³ä½ 的需è¦�](#é…�置默认全局æ�ƒé™�)。
+
+���以[分�](#为�个用户�置全局��)给�个用户。
+
+如果外部身份验è¯�æ��供程åº�支æŒ�ç»„ï¼Œä½ å�¯ä»¥[å�Œæ—¶ä¸ºç»„ä¸çš„æ¯�个æˆ�员分é…�角色](#为组é…�置全局æ�ƒé™�)。
+
+## 自定义全局��
+
+使用自定义æ�ƒé™�å�¯ä»¥ä¸ºç”¨æˆ·é…�置在 Rancher ä¸çš„æ›´å�—é™�或指定的访问æ�ƒé™�。
+
+当æ�¥è‡ª[外部身份验è¯�系统](../../../../pages-for-subheaders/authentication-config.md)的用户首次登录 Rancher 时,他们会自动分é…�到一组全局æ�ƒé™�(以下简称æ�ƒé™�)。默认情况下,用户第一次登录å�Žä¼šè¢«åˆ›å»ºä¸ºç”¨æˆ·ï¼Œå¹¶åˆ†é…�到默认的`用户`æ�ƒé™�ã€‚æ ‡å‡†çš„`用户`æ�ƒé™�å…�许用户登录和创建集群。
+
+但是,在æŸ�些组织ä¸ï¼Œè¿™äº›æ�ƒé™�å�¯èƒ½ä¼šè¢«è®¤ä¸ºæ�ƒé™�è¿‡å¤§ã€‚ä½ å�¯ä»¥ä¸ºç”¨æˆ·åˆ†é…�一组更具é™�制性的自定义全局æ�ƒé™�,而ä¸�是为用户分é…� `Administrator` 或 `Standard User` 的默认全局æ�ƒé™�。
+
+默认角色(管ç�†å‘˜å’Œæ ‡å‡†ç”¨æˆ·ï¼‰éƒ½å†…置了多个全局æ�ƒé™�。系统管ç�†å‘˜è§’色包括所有全局æ�ƒé™�,而默认用户角色包括三个全局æ�ƒé™�,分别是创建集群,使用应用商店模æ�¿ï¼Œå’Œ User Base(登录 Rancher 的最低æ�ƒé™�)。æ�¢å�¥è¯�说,自定义全局æ�ƒé™�是模å�—åŒ–çš„ï¼Œå› æ¤ï¼Œå¦‚æžœä½ è¦�更改默认用户角色æ�ƒé™�ï¼Œä½ å�¯ä»¥é€‰æ‹©éœ€è¦�包括在新的默认用户角色ä¸çš„全局æ�ƒé™�å�集。
+
+管�员�以通过多�方�强制执行自定义全局��:
+
+- [更改新用户的默认��](#�置默认全局��)
+- [为�个用户�置全局��](#为�个用户�置全局��)
+- [为组�置全局��](#为组�置全局��)
+
+### 自定义全局���考
+
+下表列出了æ¯�个å�¯ç”¨çš„自定义全局æ�ƒé™�,以å�Šè¯¥æ�ƒé™�是å�¦åŒ…å�«åœ¨é»˜è®¤å…¨å±€æ�ƒé™� `Administrator`ã€�`Standard User` å’Œ `User-Base` ä¸ï¼š
+
+| 自定义全局�� | 管�员 | 普通用户 | User-Base |
+| ---------------------------------- | ------------- | ------------- |-----------|
+| 创建集群 | ✓ | ✓ | |
+| 创建 RKE 模� | ✓ | ✓ | |
+| 管�身份验� | ✓ | | |
+| 管�应用商店 | ✓ | | |
+| 管�集群驱动 | ✓ | | |
+| 管�主机驱动 | ✓ | | |
+| 管� PodSecurityPolicy 模� | ✓ | | |
+| 管�角色 | ✓ | | |
+| 管�设置 | ✓ | | |
+| 管�用户 | ✓ | | |
+| 使用应用商店模� | ✓ | ✓ | |
+| User-Base(基本登录访问) | ✓ | ✓ | |
+
+如果需�查看�个全局��对应哪些 Kubernetes 资�:
+
+1. 在左上角,�击 **☰ > 用户 & 认�**。
+1. 在左侧导航æ �ä¸ï¼Œå�•击**角色**。
+1. 如果å�•击å�•个角色的å��ç§°ï¼Œè¡¨æ ¼ä¼šæ˜¾ç¤ºè¯¥è§’è‰²æŽˆæ�ƒçš„æ‰€æœ‰æ“�作和资æº�。
+
+:::note 注�事项:
+
+- 上é�¢åˆ—出的æ¯�个æ�ƒé™�都包å�«å¤šä¸ªæœªåœ¨ Rancher UI ä¸åˆ—出的æ�ƒé™�。如果需è¦�获å�–完整æ�ƒé™�列表以å�Šç»„æˆ�æ�ƒé™�的规则,请通过 `/v3/globalRoles` API 进行访问。
+- 在查看 Rancher 创建的默认角色关è�”的资æº�时,如果在一行上有多个 Kubernetes API 资æº�,则该资æº�将带有 `(Custom)` æ ‡è¯†ã€‚è¿™ä¸�代表这个资æº�是自定义资æº�,而å�ªæ˜¯è¡¨æ˜Žå¤šä¸ª Kubernetes API 资æº�作为一个资æº�。
+
+:::
+
+### �置默认全局��
+
+å¦‚æžœä½ æƒ³é™�制新用户的默认æ�ƒé™�ï¼Œä½ å�¯ä»¥åˆ 除作为默认角色的`用户`æ�ƒé™�,然å�Žåˆ†é…�多个å�•独的æ�ƒé™�作为默认æ�ƒé™�ã€‚ä½ ä¹Ÿå�¯ä»¥åœ¨ä¸€ç»„å…¶ä»–æ ‡å‡†æ�ƒé™�ä¹‹ä¸Šæ·»åŠ ç®¡ç�†æ�ƒé™�。
+
+:::note
+
+默认角色仅分é…�给从外部身份验è¯�æ��供程åº�æ·»åŠ çš„ç”¨æˆ·ã€‚å¯¹äºŽæœ¬åœ°ç”¨æˆ·ï¼Œåœ¨å°†ç”¨æˆ·æ·»åŠ åˆ° Rancher 时,必须显å¼�分é…�全局æ�ƒé™�ã€‚ä½ å�¯ä»¥åœ¨æ·»åŠ ç”¨æˆ·æ—¶è‡ªå®šä¹‰è¿™äº›å…¨å±€æ�ƒé™�。
+
+:::
+
+è¦�更改在外部用户首次登录时分é…�给他们的默认全局æ�ƒé™�,请执行以下æ¥éª¤ï¼š
+
+1. 在左上角,�击 **☰ > 用户 & 认�**。
+1. 在左侧导航æ �ä¸ï¼Œå�•击**角色**。在**角色**页é�¢ä¸Šï¼Œç¡®ä¿�选择了**全局**选项å�¡ã€‚
+1. 查找è¦�æ·»åŠ æˆ–åˆ é™¤çš„é»˜è®¤æ�ƒé™�集。然å�Žï¼Œé€šè¿‡é€‰æ‹© **â‹® > 编辑é…�ç½®**æ�¥ç¼–辑æ�ƒé™�。
+1. 如果è¦�å°†æ�ƒé™�æ·»åŠ ä¸ºé»˜è®¤æ�ƒé™�,请选择**是:新用户的默认角色**,然å�Žå�•击**ä¿�å˜**。如果è¦�åˆ é™¤é»˜è®¤æ�ƒé™�,请编辑该æ�ƒé™�并选择**å�¦**。
+
+**结果**:默认全局æ�ƒé™�å·²æ ¹æ�®ä½ 的更改é…�置。分é…�给新用户的æ�ƒé™�会在**新用户的默认角色**åˆ—ä¸æ˜¾ç¤ºä¸ºå¤�é€‰æ ‡è®°ã€‚
+
+### 为�个用户�置全局��
+
+�为�个用户�置��:
+
+1. 在左上角,�击 **☰ > 用户 & 认�**。
+1. 在左侧导航æ �ä¸ï¼Œå�•击**用户**。
+1. 找到�更改访问级别的用户,然��击 **⋮ > 编辑�置**。
+1. 在**全局æ�ƒé™�**å’Œ**内置角色**部分ä¸ï¼Œé€‰ä¸ä½ 希望用户拥有的æ�ƒé™�çš„å¤�é€‰æ¡†ã€‚å¦‚æžœä½ åœ¨**角色**页é�¢åˆ›å»ºäº†è§’色,这些角色将出现在**自定义**éƒ¨åˆ†ï¼Œä½ ä¹Ÿå�¯ä»¥é€‰æ‹©è¿™äº›è§’色。
+1. å�•击**ä¿�å˜**。
+
+**结果**:用户的全局��已更新。
+
+### 为组�置全局��
+
+å¦‚æžœä½ æœ‰ä¸€ç»„éœ€è¦�在 Rancher 䏿œ‰ç›¸å�Œè®¿é—®æ�ƒé™�çš„ç”¨æˆ·ï¼Œä½ å�¯ä»¥ä¸€æ¬¡æ€§å°†æ�ƒé™�分é…�给整个组æ�¥èŠ‚çœ�æ—¶é—´ã€‚è¿™æ ·ï¼Œç»„ä¸çš„用户在第一次登录 Rancher 时能拥有相应级别的访问æ�ƒé™�。
+
+将自定义全局角色分é…�给组å�Žï¼Œè¯¥è§’色将在组ä¸ç”¨æˆ·ç™»å½• Rancher 时分é…�给用户。
+
+对于现有用户,新��将在用户退出 Rancher 并�新登录时,或当管�员[刷新用户组�员��](#刷新用户组�员��)时生效。
+
+对于新用户,新æ�ƒé™�在用户首次登录 Rancher 时生效。除了**新用户的默认角色**全局æ�ƒé™�外,æ�¥è‡ªè¯¥ç»„的新用户还将获得自定义全局角色的æ�ƒé™�。默认情况下,**新用户的默认角色**æ�ƒé™�ç‰å�ŒäºŽ **Standard User** 全局角色,但默认æ�ƒé™�å�¯ä»¥[é…�置。](#é…�置默认全局æ�ƒé™�)
+
+如果从外部身份验è¯�æ��供程åº�组ä¸åˆ 除用户,该用户将失去分é…�给该组的自定义全局角色的æ�ƒé™�ã€‚ä»–ä»¬å°†ç»§ç»æ‹¥æœ‰åˆ†é…�ç»™ä»–ä»¬çš„æ‰€æœ‰å‰©ä½™è§’è‰²ï¼Œè¿™é€šå¸¸åŒ…æ‹¬æ ‡è®°ä¸º**新用户的默认角色**的角色。Rancher 将在用户登出或管ç�†å‘˜[刷新用户组æˆ�员å��å�•](#刷新用户组æˆ�员å��å�•)æ—¶åˆ é™¤ä¸Žç»„å…³è�”çš„æ�ƒé™�。
+
+:::note 先决�件:
+
+å�ªæœ‰åœ¨ä»¥ä¸‹æƒ…å†µä¸‹ï¼Œä½ æ‰�能将全局角色分é…�给组:
+
+* ä½ å·²è®¾ç½®[外部身份验è¯�æ��供程åº�](../../../../pages-for-subheaders/authentication-config.md#外部验è¯�与本地验è¯�)。
+* 外部身份验��供程�支�[用户组](../authentication-config/manage-users-and-groups.md)。
+* ä½ å·²ä½¿ç”¨èº«ä»½éªŒè¯�æ��供程åº�设置了至少一个用户组。
+
+:::
+
+è¦�将自定义全局角色分é…�给组,请执行以下æ¥éª¤ï¼š
+
+1. 在左上角,�击 **☰ > 用户 & 认�**。
+1. 在左侧导航æ �ä¸ï¼Œå�•击**组**。
+1. è½¬åˆ°ä½ è¦�分é…�自定义全局角色的组,然å�Žå�•击 **â‹® > 编辑é…�ç½®**。
+1. 在**全局æ�ƒé™�**,**自定义**å’Œ/或**内置角色**部分ä¸ï¼Œé€‰æ‹©è¯¥ç»„应具有的æ�ƒé™�。
+1. �击**创建**。
+
+**结果**:自定义全局角色会在组内用户登录 Rancher 时生效。
+
+### 刷新用户组�员��
+
+当管�员更新组的全局��时,更改将在组�员退出 Rancher 并�新登录�生效。
+
+如果�让更改立�生效,管�员或集群所有者�以刷新用户组�员��。
+
+如果用户已ç»�从外部身份验è¯�æœ�务ä¸çš„组ä¸åˆ 除,管ç�†å‘˜ä¹Ÿå�¯èƒ½éœ€è¦�刷新用户组æˆ�员å��å�•。在这ç§�情况下,刷新æ“�作会让 Rancher 知é�“用户已从组ä¸åˆ 除。
+
+�刷新用户组�员��:
+
+1. 在左上角,�击 **☰ > 用户 & 认�**。
+1. 在左侧导航æ �ä¸ï¼Œå�•击**用户**。
+1. �击**刷新用户组�员��**。
+
+**结果**:对组�员��的所有更改都会生效。
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/locked-roles.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/locked-roles.md
new file mode 100644
index 00000000000..cb0ad71fa38
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/locked-roles.md
@@ -0,0 +1,38 @@
+---
+title: �定角色
+---
+
+ä½ å�¯ä»¥å°†è§’色设置为`é”�定`状æ€�。é”�定角色å�¯é˜²æ¢æŠŠè¿™äº›è§’色分é…�给用户。
+
+处于�定状�的角色具有如下特性:
+
+- æ— æ³•å†�分é…�给当下还没有被分é…�到该角色的用户。
+- å°†ç”¨æˆ·æ·»åŠ åˆ°é›†ç¾¤æˆ–é¡¹ç›®æ—¶ï¼Œä¸�会在**æˆ�员角色**下拉列表ä¸åˆ—出。
+- �会影�在�定该角色之�,已�分�了该角色的用户。�使���定了该角色,这些用户�然�留该角色�供的访问��。
+
+ **示例**:å�‡è®¾ä½ 的组织制定了一个内部ç–略,ç¦�æ¢æŠŠåˆ›å»ºé¡¹ç›®çš„æ�ƒé™�分é…�ç»™é›†ç¾¤ç”¨æˆ·ã€‚è¿™æ—¶å€™ä½ éœ€è¦�执行这个ç–略。
+
+ å› æ¤ï¼Œåœ¨å°†æ–°ç”¨æˆ·æ·»åŠ åˆ°é›†ç¾¤ä¹‹å‰�ï¼Œä½ éœ€è¦�é”�定以下角色:`集群所有者`,`集群æˆ�员`å’Œ`创建项目`。然å�Žï¼Œåˆ›å»ºä¸€ä¸ªæ–°çš„自定义角色,该角色的æ�ƒé™�与`集群æˆ�员`相å�Œï¼Œä½†æ²¡æœ‰åˆ›å»ºé¡¹ç›®çš„æ�ƒé™�。然å�Žï¼Œåœ¨å°†ç”¨æˆ·æ·»åŠ åˆ°é›†ç¾¤æ—¶ä½¿ç”¨è¿™ä¸ªæ–°çš„è‡ªå®šä¹‰è§’è‰²ã€‚
+
+以下用户�以�定角色:
+
+- 任何分�了`管�员`全局��的用户。
+- 任何分�了带有`管�角色`��的`自定义用户`。
+
+
+## �定/解�角色
+
+如果è¦�防æ¢å°†è§’色分é…�给用户,å�¯ä»¥å°†å…¶è®¾ç½®ä¸º`é”�定`状æ€�。
+
+ä½ å�¯ä»¥åœ¨ä¸¤ç§�情况下é”�定角色:
+
+- [æ·»åŠ è‡ªå®šä¹‰è§’è‰²](custom-roles.md)时。
+- 编辑现有角色时(�下文)。
+
+集群角色和项目/命�空间角色�以�定,而全局角色�能�定。
+
+1. 在左上角,�击 **☰ > 用户 & 认�**。
+1. 在左侧导航æ �ä¸ï¼Œå�•击**角色**。
+1. 转到**集群**选项�或**项目或命�空间**选项�。
+1. 找到��定(或解�)的角色,选择 **⋮ > 编辑�置**。
+1. 从**é”�定**选项ä¸ï¼Œé€‰æ‹©**是** 或**å�¦**。然å�Žç‚¹å‡»**ä¿�å˜**。
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/pod-security-standards.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/pod-security-standards.md
new file mode 100644
index 00000000000..1f56b62762f
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/pod-security-standards.md
@@ -0,0 +1,126 @@
+---
+title: Pod å®‰å…¨æ ‡å‡† (PSS) å’Œ Pod 安全准入 (PSA)
+---
+
+[Pod å®‰å…¨æ ‡å‡† (PSS)](https://kubernetes.io/docs/concepts/security/pod-security-standards/) å’Œ [Pod 安全准入 (PSA)](https://kubernetes.io/docs/concepts/security/pod-security-admission/) 为大é‡�工作负载定义了安全é™�制。
+它们在 Kubernetes v1.23 ä¸å�¯ç”¨å¹¶é»˜è®¤æ‰“开,并在 Kubernetes v1.25 å�Šæ›´é«˜ç‰ˆæœ¬ä¸æ›¿æ�¢äº† [Pod Security Policies (PSP)](https://kubernetes.io/docs/concepts/security/pod-security-policy/)。
+
+PSS 定义了工作负载的安全级别。PSA æ��述了 Pod å®‰å…¨ä¸Šä¸‹æ–‡å’Œç›¸å…³å—æ®µçš„è¦�求。PSA å�‚考 PSS 级别æ�¥å®šä¹‰å®‰å…¨é™�制。
+
+## å�‡çº§åˆ° Pod å®‰å…¨æ ‡å‡† (PSS)
+
+ç¡®ä¿�将所有 PSP 都è¿�移到了å�¦ä¸€ä¸ªå·¥ä½œè´Ÿè½½å®‰å…¨æœºåˆ¶ï¼ŒåŒ…æ‹¬å°†ä½ å½“å‰�çš„ PSP æ˜ å°„åˆ° Pod å®‰å…¨æ ‡å‡†ï¼Œä»¥ä¾¿ä½¿ç”¨ [PSA 控制器](https://kubernetes.io/docs/concepts/security/pod-security-admission/)执行。如果 PSA 控制器ä¸�能满足ä¼�ä¸šçš„æ‰€æœ‰éœ€æ±‚ï¼Œå»ºè®®ä½ ä½¿ç”¨ç–略引擎,例如 [OPA Gatekeeper](https://github.com/open-policy-agent/gatekeeper)ã€�[Kubewarden](https://www.kubewarden.io/)ã€�[Kyverno](https://kyverno.io/) 或 [NeuVector](https://neuvector.com/)。有关如何è¿�ç§» PSP 的更多信æ�¯ï¼Œè¯·å�‚é˜…ä½ é€‰æ‹©çš„ç–略引擎的文档。
+
+:::caution
+å¿…é¡»åœ¨åˆ é™¤ PodSecurityPolicy 对象_之å‰�_æ·»åŠ æ–°çš„ç–略执行机制。å�¦åˆ™ï¼Œä½ å�¯èƒ½ä¼šä¸ºé›†ç¾¤å†…的特æ�ƒå�‡çº§æ”»å‡»åˆ›é€ 机会。
+:::
+
+### 从 Rancher 维护的应用程åº�和市场工作负载ä¸åˆ 除 PodSecurityPolicies {#remove-psp-rancher-workloads}
+
+Rancher v2.7.2 æ��供了 Rancher 维护的 Helm Chart 的新主è¦�版本。v102.x.y å…�è®¸ä½ åˆ é™¤ä¸Žä»¥å‰�çš„ Chart 版本一起安装的 PSPã€‚è¿™ä¸ªæ–°ç‰ˆæœ¬ä½¿ç”¨æ ‡å‡†åŒ–çš„ `global.cattle.psp.enabled` 开关(默认关é—)替æ�¢äº†é�žæ ‡å‡†çš„ PSP 开关。
+
+ä½ å¿…é¡»åœ¨_ä»�使用 Kubernetes v1.24_ 时执行以下æ¥éª¤ï¼š
+1. æ ¹æ�®éœ€è¦�é…�ç½® PSA æŽ§åˆ¶å™¨ã€‚ä½ å�¯ä»¥ä½¿ç”¨ Rancher 的内置 [PSA é…�置模æ�¿](#psa-config-templates),或创建自定义模æ�¿å¹¶å°†å…¶åº”用于æ£åœ¨è¿�移的集群。
+
+1. 将活动的 PSP æ˜ å°„åˆ° Pod å®‰å…¨æ ‡å‡†ï¼š
+ 1. 查看集群ä¸å“ªäº› PSP ä»�处于活动状æ€�:
+ :::caution
+ æ¤ç–ç•¥å�¯èƒ½ä¼šé”™è¿‡å½“å‰�未è¿�行的工作负载,例如 CronJobsã€�当å‰�缩放为零的工作负载或尚未推出的工作负载。
+ :::
+
+ ```shell
+ kubectl get pods \
+ --all-namespaces \
+ --output jsonpath='{.items[*].metadata.annotations.kubernetes\.io\/psp}' \
+ | tr " " "\n" | sort -u
+ ```
+
+ 1. 按照[å°† PSP æ˜ å°„åˆ° Pod å®‰å…¨æ ‡å‡†](https://kubernetes.io/docs/reference/access-authn-authz/psp-to-pod-security-standards/)çš„ Kubernetes 指å�—å°† PSS 应用于ä¾�èµ– PSP 的工作负载。有关详细信æ�¯ï¼Œè¯·å�‚阅[从 PodSecurityPolicy è¿�移到内置 PodSecurity Admission 控制器](https://kubernetes.io/docs/tasks/configure-pod-container/migrate-from-psp/)。
+
+1. è¦�从 Rancher Chart ä¸åˆ 除 PSP,请在å�‡çº§åˆ° Kubernetes v1.25 _之å‰�_å°† Chart å�‡çº§åˆ°æœ€æ–°çš„ v102.x.y 版本。确ä¿� **Enable PodSecurityPolicies** 选项**å·²ç¦�用**ã€‚è¿™å°†åˆ é™¤ä¸Žä»¥å‰�çš„ Chart 版本一起安装的所有 PSP。
+
+:::info ���示
+å¦‚æžœä½ æƒ³å°† Chart å�‡çº§åˆ° v102.x.y,但ä¸�打算将集群å�‡çº§åˆ° Kubernetes v1.25 和弃用 PSP,请确ä¿�为æ¯�个è¦�å�‡çº§çš„ Chart 选择 **Enable PodSecurityPolicies** 选项。
+:::
+
+### 在 Kubernetes v1.25 �级�清�版本
+
+å¦‚æžœä½ åœ¨åˆ é™¤ Chart çš„ PSP æ—¶é�‡åˆ°é—®é¢˜ï¼Œæˆ–者 Chart ä¸�包å�«ç”¨äºŽåˆ 除 PSP 的内置机制,Chart å�‡çº§æˆ–åˆ é™¤å�¯èƒ½ä¼šå¤±è´¥å¹¶æ˜¾ç¤ºå¦‚下错误消æ�¯ï¼š
+```console
+Error: UPGRADE FAILED: resource mapping not found for name: "" namespace: "" from "": no matches for kind "PodSecurityPolicy" in version "policy/v1beta1"
+ensure CRDs are installed first
+```
+
+Helm å°�è¯•åœ¨é›†ç¾¤ä¸æŸ¥è¯¢å˜å‚¨åœ¨å…ˆå‰�版本的数æ�® blob ä¸çš„对象时,就会å�‘生这ç§�情况。è¦�清ç�†è¿™äº›ç‰ˆæœ¬å¹¶é�¿å…�æ¤é”™è¯¯ï¼Œè¯·ä½¿ç”¨ `helm-mapkubeapis` Helm æ�’件。è¦�详细了解 `helm-mapkubeapis`ã€�它的工作原ç�†ä»¥å�Šå¦‚ä½•é’ˆå¯¹ä½ çš„ç”¨ä¾‹è¿›è¡Œå¾®è°ƒï¼Œè¯·å�‚阅 [Helm 官方文档](https://github.com/helm/helm-mapkubeapis#readme)。
+
+请注æ„�,Helm æ�’ä»¶å®‰è£…åœ¨ä½ è¿�è¡Œå‘½ä»¤çš„æœºå™¨æœ¬åœ°ã€‚å› æ¤ï¼Œè¯·ç¡®ä¿�从å�Œä¸€å�°æœºå™¨è¿�行安装和清ç�†ã€‚
+
+#### 安装 `helm-mapkubeapis`
+
+1. 在打算使用 `helm-mapkubeapis` çš„æœºå™¨ä¸Šæ‰“å¼€ä½ çš„ç»ˆç«¯å¹¶å®‰è£…æ�’件:
+ ```shell
+ helm plugin install https://github.com/helm/helm-mapkubeapis
+ ```
+
+ ä½ å°†çœ‹åˆ°ç±»ä¼¼äºŽä»¥ä¸‹çš„è¾“å‡ºï¼š
+ ```console
+ Downloading and installing helm-mapkubeapis v0.4.1 ...
+ https://github.com/helm/helm-mapkubeapis/releases/download/v0.4.1/helm-mapkubeapis_0.4.1_darwin_amd64.tar.gz
+ Installed plugin: mapkubeapis
+ ```
+
+ :::info ���示
+ ç¡®ä¿� `helm-mapkubeapis` æ�’件至少为 v0.4.1ï¼Œå› ä¸ºæ—§ç‰ˆæœ¬_ä¸�_支æŒ�资æº�åˆ é™¤ã€‚
+ :::
+
+1. 验è¯�æ�’件是å�¦å·²æ£ç¡®å®‰è£…:
+ ```shell
+ helm mapkubeapis --help
+ ```
+
+ ä½ å°†çœ‹åˆ°ç±»ä¼¼äºŽä»¥ä¸‹çš„è¾“å‡ºï¼š
+ ```console
+ Map release deprecated or removed Kubernetes APIs in-place
+
+ Usage:
+ mapkubeapis [flags] RELEASE
+
+ Flags:
+ --dry-run simulate a command
+ -h, --help help for mapkubeapis
+ --kube-context string name of the kubeconfig context to use
+ --kubeconfig string path to the kubeconfig file
+ --mapfile string path to the API mapping file
+ --namespace string namespace scope of the release
+ ```
+
+#### 清���的版本
+
+安装 `helm-mapkubeapis` �件�,清��级到 Kubernetes v1.25 ���的版本。
+
+1. æ‰“å¼€ä½ çš„é¦–é€‰ç»ˆç«¯å¹¶é€šè¿‡è¿�行 `kubectl cluster-info` ç¡®ä¿�终端已连接到所需集群。
+
+1. è¿�行 `helm list --all-namespaces` åˆ—å‡ºä½ åœ¨é›†ç¾¤ä¸å®‰è£…的所有版本。
+
+1. 通过è¿�行 `helm mapkubeapis --dry-run --namespace ` 为è¦�清ç�†çš„æ¯�个版本执行试è¿�è¡Œã€‚ä½ å�¯ä»¥é€šè¿‡æ¤å‘½ä»¤çš„结果了解è¦�替æ�¢æˆ–åˆ é™¤å“ªäº›èµ„æº�。
+
+1. 最�,在查看更改�,使用 `helm mapkubeapis --namespace ` 执行完整�行。
+
+#### 将 Chart �级到支� Kubernetes v1.25 的版本
+
+清ç�†äº†å…·æœ‰ PSP 的所有版本å�Žï¼Œä½ å°±å�¯ä»¥ç»§ç»å�‡çº§äº†ã€‚对于 Rancher 维护的工作负载,请按照本文档[从 Rancher 维护的应用程åº�和市场工作负载ä¸åˆ 除 PodSecurityPolicies](#remove-psp-rancher-workloads) 部分ä¸çš„æ¥éª¤è¿›è¡Œæ“�作。
+如果工作负载�是由 Rancher 维护的,请�阅对应的�供商的文档。
+
+:::caution
+ä¸�è¦�è·³è¿‡æ¤æ¥éª¤ã€‚与 Kubernetes v1.25 ä¸�兼容的应用程åº�ä¸�能ä¿�è¯�在清ç�†å�Žæ£å¸¸å·¥ä½œã€‚
+:::
+
+## Pod 安全准入�置模� {#psa-config-templates}
+
+Rancher �供了 PSA �置模�。它们是�以应用到集群的预定义安全�置。Rancher 管�员(或具有��的人员)�以[创建�管�和编辑](./psa-config-templates.md) PSA 模�。
+
+### � PSA �制的集群上的 Rancher
+
+Rancher system 命å��空间也å�—到 PSA 模æ�¿æ��è¿°çš„é™�制性安全ç–略的影å“�ã€‚ä½ éœ€è¦�在分é…�模æ�¿å�Žè±�å…� Rancher çš„ system 命å��空间,å�¦åˆ™é›†ç¾¤å°†æ— 法æ£å¸¸è¿�行。有关详细信æ�¯ï¼Œè¯·å�‚阅 [Pod 安全准入 (PSA) é…�置模æ�¿](./psa-config-templates.md#è±�å…�必须的-rancher-命å��空间)。
+
+有关è¿�行 Rancher 所需的所有è±�å…�的完整文件,请å�‚阅æ¤[准入é…�置示例](../../../reference-guides/rancher-security/psa-restricted-exemptions.md)。
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/psa-config-templates.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/psa-config-templates.md
new file mode 100644
index 00000000000..c3b4d6252f4
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/psa-config-templates.md
@@ -0,0 +1,138 @@
+---
+title: Pod 安全准入 (PSA) �置模�
+---
+
+[Pod Security admission (PSA)](./pod-security-standards.md) é…�置模æ�¿æ˜¯ Rancher 自定义资æº� (CRD),在 Rancher v2.7.2 å�Šæ›´é«˜ç‰ˆæœ¬ä¸å�¯ç”¨ã€‚这些模æ�¿æ��供了å�¯åº”用于集群的预定义安全é…�置:
+
+- `rancher-privileged`:最宽æ�¾çš„é…�置。它ä¸�é™�制任何 Pod 行为,å…�许已知的æ�ƒé™�å�‡çº§ã€‚该ç–略没有è±�å…�。
+- `rancher-restricted`ï¼šä¸¥æ ¼é™�制的é…�置,é�µå¾ªå½“å‰�åŠ å›º pod çš„æœ€ä½³å®žè·µã€‚ä½ å¿…é¡»å¯¹ Rancher 组件进行[命å��空间级别è±�å…�](./pod-security-standards.md#å�—-psa-é™�制的集群上的-rancher)。
+
+## 分� Pod 安全准入 (PSA) �置模�
+
+ä½ å�¯ä»¥åœ¨åˆ›å»ºä¸‹æ¸¸é›†ç¾¤çš„å�Œæ—¶åˆ†é…� PSA 模æ�¿ã€‚ä½ è¿˜å�¯ä»¥é€šè¿‡é…�置现有集群æ�¥æ·»åŠ æ¨¡æ�¿ã€‚
+
+### 在集群创建期间分�模�
+
+
+
+1. 在左上角,�击 **☰ > 集群管�**。
+1. 在**集群**页�上,�击**创建**按钮。
+1. 选择�供商。
+1. 在**集群: 创建**页�上,转到**基本信� > 安全**。
+1. 在 **PSA é…�置模æ�¿**下拉è�œå�•ä¸ï¼Œé€‰æ‹©è¦�分é…�的模æ�¿ã€‚
+1. �击**创建**。
+
+### 将模�分�给现有集群
+
+1. 在左上角,�击 **☰ > 集群管�**。
+1. 在**集群**è¡¨ä¸æ‰¾åˆ°è¦�更新的集群,点击 **â‹®**。
+1. 选择**编辑�置**。
+1. 在 **PSA é…�置模æ�¿**下拉è�œå�•ä¸ï¼Œé€‰æ‹©è¦�分é…�的模æ�¿ã€‚
+1. å�•击**ä¿�å˜**。
+
+### åŠ å›ºé›†ç¾¤
+
+如果选择 **rancher-restricted** 模æ�¿ä½†ä¸�选择 **CIS é…�置文件**ï¼Œä½ å°†æ— æ³•æ»¡è¶³ CIS Benchmark。有关详细信æ�¯ï¼Œè¯·å�‚阅 [RKE2 åŠ å›ºæŒ‡å�—](../../../pages-for-subheaders/rke2-hardening-guide.md)。
+
+
+
+
+1. 在左上角,�击 **☰ > 集群管�**。
+1. 在**集群**页�上,�击**创建**按钮。
+1. 选择�供商。
+1. 在**æ·»åŠ é›†ç¾¤**页é�¢ä¸Šçš„**集群选项**下,å�•击 **高级选项**。
+1. 在 **PSA é…�置模æ�¿**下拉è�œå�•ä¸ï¼Œé€‰æ‹©è¦�分é…�的模æ�¿ã€‚
+1. �击**创建**。
+
+### 将模�分�给现有集群
+
+1. 在左上角,�击 **☰ > 集群管�**。
+1. 在**集群**è¡¨ä¸æ‰¾åˆ°è¦�更新的集群,点击 **â‹®**。
+1. 选择**编辑�置**。
+1. 在**编辑集群**页�上,转到**集群选项 > 高级选项**。
+1. 在 **PSA é…�置模æ�¿**ä¸ï¼Œé€‰æ‹©è¦�分é…�的模æ�¿ã€‚
+1. å�•击**ä¿�å˜**。
+
+
+
+
+## æ·»åŠ æˆ–ç¼–è¾‘ Pod 安全准入 (PSA) é…�置模æ�¿
+
+å¦‚æžœä½ æ‹¥æœ‰ç®¡ç�†å‘˜æ�ƒé™�,则å�¯ä»¥é€šè¿‡åˆ›å»ºå…¶ä»– PSA 模æ�¿æˆ–编辑现有模æ�¿æ�¥è‡ªå®šä¹‰å®‰å…¨é™�制和æ�ƒé™�。
+
+:::caution
+如果编辑使用ä¸çš„现有 PSA 模æ�¿ï¼Œæ›´æ”¹å°†åº”用​​于已分é…�给该模æ�¿çš„æ‰€æœ‰é›†ç¾¤ã€‚
+:::
+
+1. 在左上角,�击 **☰ > 集群管�**。
+1. 点击**高级选项**打开下拉��。
+1. 选择 **Pod 安全准入**。
+1. 找到�修改的模�,点击 **⋮**。
+1. 选择**编辑�置**�编辑模�。
+1. 完æˆ�é…�置编辑å�Žï¼Œå�•击**ä¿�å˜**。
+
+### �许�管�员用户管� PSA 模�
+
+å¦‚æžœä½ æƒ³å…�许其他用户管ç�†æ¨¡æ�¿ï¼Œä½ å�¯ä»¥å°†è¯¥ç”¨æˆ·ç»‘定到一个角色,并为该角色授予 `management.cattle.io/podsecurityadmissionconfigurationtemplates` 上的所有æ“�作 (`"*"`)。
+
+:::caution
+绑定到上述��的用户都能够更改使用该 PSA 模�的_所有_托管集群的�制级别,包括用户没有��的集群。
+:::
+
+## ��必须的 Rancher 命�空间
+
+在默认执行é™�制性安全ç–略的 Kubernetes 集群上è¿�行 Rancher æ—¶ï¼Œä½ éœ€è¦�[è±�å…�以下命å��空间](#è±�å…�命å��空间),å�¦åˆ™è¯¥ç–ç•¥å�¯èƒ½ä¼šé˜»æ¢ Rancher system pod æ£å¸¸è¿�行。
+
+- `calico-apiserver`
+- `calico-system`
+- `cattle-alerting`
+- `cattle-csp-adapter-system`
+- `cattle-epinio-system`
+- `cattle-externalip-system`
+- `cattle-fleet-local-system`
+- `cattle-fleet-system`
+- `cattle-gatekeeper-system`
+- `cattle-global-data`
+- `cattle-global-nt`
+- `cattle-impersonation-system`
+- `cattle-istio`
+- `cattle-istio-system`
+- `cattle-logging`
+- `cattle-logging-system`
+- `cattle-monitoring-system`
+- `cattle-neuvector-system`
+- `cattle-prometheus`
+- `cattle-sriov-system`
+- `cattle-system`
+- `cattle-ui-plugin-system`
+- `cattle-windows-gmsa-system`
+- `cert-manager`
+- `cis-operator-system`
+- `fleet-default`
+- `ingress-nginx`
+- `istio-system`
+- `kube-node-lease`
+- `kube-public`
+- `kube-system`
+- `longhorn-system`
+- `rancher-alerting-drivers`
+- `security-scan`
+- `tigera-operator`
+
+Rancherã€�Rancher 拥有的一些 Chart 以å�Š RKE2 å’Œ K3s å�‘行版都使用这些命å��空间。列出的命å��空间的一个å�集已ç»�在内置的 Rancher `rancher-restricted` ç–ç•¥ä¸è¢«è±�å…�,用于下游集群。有关è¿�行 Rancher 所需的所有è±�å…�的完整模æ�¿ï¼Œè¯·å�‚阅æ¤[准入é…�置示例](../../../reference-guides/rancher-security/psa-restricted-exemptions.md)。
+
+## ��命�空间
+
+å¦‚æžœä½ å°† `rancher-restricted` 模æ�¿åˆ†é…�给集群,默认情况下,é™�制会在命å��空间级别应用于整个集群。è¦�在æ¤é«˜åº¦å�—é™�çš„ç–略下è±�å…�特定的命å��空间,执行以下æ“�作:
+
+1. 在左上角,�击 **☰ > 集群管�**。
+1. 点击**高级选项**打开下拉��。
+1. 选择 **Pod 安全准入**。
+1. 找到�修改的模�,点击 **⋮**。
+1. 选择**编辑�置**。
+1. 选ä¸**è±�å…�**下的**命å��空间**å¤�选框以编辑**命å��空间**å—æ®µã€‚
+1. è±�å…�命å��空间å�Žï¼Œå�•击**ä¿�å˜**。
+
+:::note
+ä½ éœ€è¦�æ›´æ–°ç›®æ ‡é›†ç¾¤æ‰�能让新模æ�¿åœ¨é›†ç¾¤ä¸ç”Ÿæ•ˆã€‚è¦�触å�‘更新,在ä¸�更改值的情况下编辑和ä¿�å˜é›†ç¾¤ã€‚
+:::
diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/back-up-docker-installed-rancher.md b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/back-up-docker-installed-rancher.md
new file mode 100644
index 00000000000..51b24396cbd
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.8/how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/back-up-docker-installed-rancher.md
@@ -0,0 +1,74 @@
+---
+title: 备份 Docker 安装的 Rancher
+---
+
+æˆ�功使用 Docker 安装 Rancher å�Žï¼Œæˆ‘ä»¬å»ºè®®ä½ å®šæœŸåˆ›å»ºå¤‡ä»½ã€‚æœ€è¿‘åˆ›å»ºçš„å¤‡ä»½èƒ½è®©ä½ åœ¨æ„�外ç�¾éš¾å�‘生å�Žå¿«é€Ÿè¿›è¡Œæ�¢å¤�。
+
+## åœ¨ä½ å¼€å§‹å‰�
+
+在创建备份的过程ä¸ï¼Œä½ 将输入一系列命令。请使用环境ä¸çš„æ•°æ�®æ›¿æ�¢å� ä½�符。å� ä½�符用尖括å�·å’Œå¤§å†™å—æ¯�(如 ``)表示。以下是带有å� ä½�符的命令示例:
+
+```
+docker run --name busybox-backup- --volumes-from rancher-data- -v $PWD:/backup busybox tar pzcvf /backup/rancher-data-backup--.tar.gz /var/lib/rancher
+```
+
+在该命令ä¸ï¼Œ`` 是数æ�®å®¹å™¨å’Œå¤‡ä»½åˆ›å»ºæ—¥æœŸçš„å� ä½�符(例如,`9-27-18`)。
+
+请交å�‰å�‚è€ƒä¸‹æ–¹çš„å›¾ç‰‡å’Œè¡¨æ ¼ï¼Œäº†è§£èŽ·å�–æ¤å� ä½�符数æ�®çš„æ–¹æ³•。在开始[以下æ¥éª¤](#创建备份)之å‰�,请记下或å¤�制这些信æ�¯ã€‚
+
+