From 4d88df32b16e2afbbb791137ab4c24b108a33361 Mon Sep 17 00:00:00 2001 From: vickyhella Date: Tue, 13 Sep 2022 00:41:52 +0800 Subject: [PATCH 1/2] Add i18n and Chinese translation --- docusaurus.config.js | 16 + i18n/zh/code.json | 272 ++ .../current.json | 410 +++ .../docker-installs/docker-installs.md | 8 + .../rke-clusters/options/options.md | 6 + .../current/contribute-to-rancher.md | 137 + .../current/explanations.md | 6 + .../cis-scans/configuration-reference.md | 106 + .../cis-scans/custom-benchmark.md | 79 + .../cis-scans/rbac-for-cis-scans.md | 48 + .../skipped-and-not-applicable-tests.md | 54 + .../adapter-requirements.md | 97 + .../aws-cloud-marketplace/common-issues.md | 29 + .../aws-cloud-marketplace/install-adapter.md | 144 + .../uninstall-adapter.md | 22 + .../cloud-marketplace/supportconfig.md | 54 + .../fleet-gitops-at-scale/architecture.md | 9 + .../use-fleet-behind-a-proxy.md | 55 + .../fleet-gitops-at-scale/windows-support.md | 23 + .../integrations-in-rancher/harvester.md | 44 + .../install-istio-on-rke2-cluster.md | 38 + .../pod-security-policies.md | 54 + .../project-network-isolation.md | 22 + .../selectors-and-scrape-configurations.md | 121 + .../istio/cpu-and-memory-allocations.md | 64 + .../istio/disable-istio.md | 43 + .../istio/rbac-for-istio.md | 44 + .../flows-and-clusterflows.md | 75 + .../outputs-and-clusteroutputs.md | 294 ++ .../logging/logging-architecture.md | 29 + .../logging/logging-helm-chart-options.md | 97 + .../migrate-to-rancher-v2.5+-logging.md | 189 + .../logging/rbac-for-logging.md | 25 + .../logging/taints-and-tolerations.md | 66 + .../integrations-in-rancher/longhorn.md | 71 + .../built-in-dashboards.md | 112 + .../how-monitoring-works.md | 250 ++ .../promql-expressions.md | 366 ++ .../rbac-for-monitoring.md | 171 + .../windows-support.md | 59 + .../integrations-in-rancher/neuvector.md | 205 ++ .../integrations-in-rancher/opa-gatekeeper.md | 112 + .../current/faq.md | 70 + .../container-network-interface-providers.md | 205 ++ .../faq/deprecated-features-in-v2.5.md | 27 + .../current/faq/dockershim.md | 46 + .../faq/install-and-configure-kubectl.md | 30 + .../current/faq/networking/networking.md | 9 + .../faq/rancher-is-no-longer-needed.md | 62 + .../current/faq/security.md | 15 + .../current/faq/technical-items.md | 177 + .../current/faq/telemetry.md | 32 + .../current/getting-started.md | 10 + .../configure-layer-7-nginx-load-balancer.md | 261 ++ .../enable-api-audit-log.md | 559 +++ .../open-ports-with-firewalld.md | 108 + .../tune-etcd-for-large-installs.md | 40 + .../continuous-delivery.md | 14 + .../istio-traffic-management-features.md | 33 + .../rancher-on-arm64.md | 45 + .../unsupported-storage-drivers.md | 40 + .../air-gapped-upgrades.md | 91 + .../rancher-on-aks.md | 138 + .../rancher-on-amazon-eks.md | 176 + .../rancher-on-gke.md | 198 ++ .../rollbacks.md | 116 + .../troubleshooting.md | 189 + .../upgrades.md | 181 + .../installation-requirements/dockershim.md | 46 + .../install-docker.md | 18 + .../port-requirements.md | 339 ++ .../docker-install-commands.md | 150 + .../infrastructure-private-registry.md | 189 + .../install-kubernetes.md | 386 ++ .../install-rancher-ha.md | 264 ++ .../publish-images.md | 316 ++ .../install-kubernetes.md | 175 + .../install-rancher.md | 101 + .../set-up-infrastructure.md | 65 + .../certificate-troubleshooting.md | 90 + .../roll-back-docker-installed-rancher.md | 92 + .../upgrade-docker-installed-rancher.md | 397 +++ .../resources/add-tls-secrets.md | 46 + .../resources/bootstrap-password.md | 28 + .../resources/choose-a-rancher-version.md | 122 + .../resources/custom-ca-root-certificates.md | 25 + .../resources/helm-version-requirements.md | 13 + .../resources/local-system-charts.md | 15 + .../resources/update-rancher-certificate.md | 264 ++ .../resources/upgrade-cert-manager.md | 283 ++ .../upgrade-and-roll-back-kubernetes.md | 126 + ...de-kubernetes-without-upgrading-rancher.md | 89 + .../getting-started/introduction/overview.md | 66 + .../introduction/what-are-divio-docs.md | 100 + .../deploy-rancher-manager/aws-marketplace.md | 7 + .../deploy-rancher-manager/aws.md | 95 + .../deploy-rancher-manager/azure.md | 82 + .../deploy-rancher-manager/digitalocean.md | 74 + .../deploy-rancher-manager/equinix-metal.md | 118 + .../deploy-rancher-manager/gcp.md | 77 + .../deploy-rancher-manager/helm-cli.md | 145 + .../deploy-rancher-manager/hetzner-cloud.md | 76 + .../deploy-rancher-manager/outscale-qs.md | 76 + .../deploy-rancher-manager/vagrant.md | 51 + .../deploy-workloads/nodeports.md | 139 + .../deploy-workloads/workload-ingress.md | 73 + .../current/how-to-guides.md | 5 + .../configure-active-directory.md | 220 ++ .../configure-azure-ad.md | 316 ++ .../configure-freeipa.md | 61 + .../authentication-config/configure-github.md | 57 + .../configure-google-oauth.md | 112 + .../configure-keycloak-oidc.md | 145 + .../configure-keycloak-saml.md | 194 + .../configure-okta-saml.md | 69 + .../configure-pingidentity.md | 63 + .../create-local-users.md | 16 + .../manage-users-and-groups.md | 78 + .../configure-ms-adfs-for-rancher.md | 83 + .../configure-rancher-for-ms-adfs.md | 55 + .../about-group-permissions.md | 32 + .../manage-cluster-drivers.md | 43 + .../manage-node-drivers.md | 42 + .../access-or-share-templates.md | 65 + .../about-rke1-templates/apply-templates.md | 60 + .../creator-permissions.md | 58 + .../about-rke1-templates/enforce-templates.md | 44 + .../about-rke1-templates/example-use-cases.md | 71 + .../about-rke1-templates/infrastructure.md | 70 + .../manage-rke1-templates.md | 162 + .../override-template-settings.md | 15 + .../create-pod-security-policies.md | 69 + .../custom-branding.md | 215 ++ .../global-default-private-registry.md | 38 + .../manage-cluster-templates.md | 131 + .../cluster-and-project-roles.md | 240 ++ .../custom-roles.md | 121 + .../global-permissions.md | 251 ++ .../locked-roles.md | 39 + ...-alerts-for-periodic-scan-on-a-schedule.md | 40 + ...reate-a-custom-benchmark-version-to-run.md | 9 + ...able-alerting-for-rancher-cis-benchmark.md | 20 + .../install-rancher-cis-benchmark.md | 11 + .../run-a-scan-periodically-on-a-schedule.md | 20 + .../cis-scan-guides/run-a-scan.md | 22 + .../cis-scan-guides/skip-tests.md | 34 + .../uninstall-rancher-cis-benchmark.md | 9 + .../cis-scan-guides/view-reports.md | 12 + .../enable-istio-in-cluster.md | 30 + .../enable-istio-in-namespace.md | 54 + .../generate-and-view-traffic.md | 27 + .../istio-setup-guide/set-up-istio-gateway.md | 148 + .../set-up-traffic-management.md | 77 + .../istio-setup-guide/use-istio-sidecar.md | 361 ++ .../access-clusters/add-users-to-clusters.md | 67 + .../authorized-cluster-endpoint.md | 43 + .../use-kubectl-and-kubeconfig.md | 105 + .../add-a-pod-security-policy.md | 40 + .../assign-pod-security-policies.md | 26 + .../manage-clusters/clean-cluster-nodes.md | 366 ++ .../clone-cluster-configuration.md | 111 + .../about-glusterfs-volumes.md | 38 + .../about-persistent-storage.md | 73 + .../dynamically-provision-new-storage.md | 88 + .../install-iscsi-volumes.md | 34 + .../set-up-existing-storage.md | 86 + .../use-external-ceph-driver.md | 421 +++ .../nfs-storage.md | 76 + .../persistent-storage-in-amazon-ebs.md | 16 + .../vsphere-storage.md | 73 + .../use-aws-ec2-auto-scaling-groups.md | 576 +++ .../manage-clusters/nodes-and-node-pools.md | 186 + .../projects-and-namespaces.md | 188 + .../manage-clusters/rotate-certificates.md | 82 + .../manage-clusters/rotate-encryption-key.md | 49 + .../manage-projects/add-users-to-projects.md | 63 + .../manage-projects/ci-cd-pipelines.md | 16 + .../manage-projects/manage-namespaces.md | 75 + .../manage-pod-security-policies.md | 40 + .../about-project-resource-quotas.md | 59 + .../override-default-limit-in-namespaces.md | 34 + .../resource-quota-types.md | 28 + .../set-container-default-resource-limits.md | 40 + .../create-persistent-grafana-dashboard.md | 152 + .../customize-grafana-dashboard.md | 40 + .../debug-high-memory-usage.md | 20 + .../enable-monitoring.md | 75 + .../migrate-to-rancher-v2.5+-monitoring.md | 130 + .../customize-grafana-dashboards.md | 8 + .../enable-prometheus-federator.md | 83 + .../project-monitors.md | 18 + .../set-up-workloads.md | 15 + .../uninstall-prometheus-federator.md | 14 + .../set-up-monitoring-for-workloads.md | 29 + .../uninstall-monitoring.md | 20 + .../advanced-configuration/alertmanager.md | 44 + .../advanced-configuration/prometheus.md | 20 + .../advanced-configuration/prometheusrules.md | 81 + .../back-up-docker-installed-rancher.md | 71 + ...up-rancher-launched-kubernetes-clusters.md | 152 + .../back-up-rancher.md | 93 + .../migrate-rancher-to-new-cluster.md | 141 + .../restore-docker-installed-rancher.md | 74 + ...aunched-kubernetes-clusters-from-backup.md | 78 + .../restore-rancher.md | 93 + .../deploy-apps-across-clusters/fleet.md | 68 + .../multi-cluster-apps.md | 178 + .../helm-charts-in-rancher/create-apps.md | 132 + .../amazon-elb-load-balancer.md | 176 + .../ha-k3s-kubernetes-cluster.md | 74 + .../ha-rke1-kubernetes-cluster.md | 65 + .../ha-rke2-kubernetes-cluster.md | 59 + .../mysql-database-in-amazon-rds.md | 34 + .../nginx-load-balancer.md | 92 + .../nodes-in-amazon-ec2.md | 75 + .../high-availability-installs.md | 25 + .../k3s-for-rancher.md | 128 + .../rke1-for-rancher.md | 192 + .../rke2-for-rancher.md | 167 + .../recommended-cluster-architecture.md | 74 + .../roles-for-nodes-in-kubernetes.md | 51 + .../about-rancher-agents.md | 42 + .../rke1-vs-rke2-differences.md | 34 + .../other-cloud-providers/amazon.md | 154 + .../other-cloud-providers/azure.md | 112 + .../google-compute-engine.md | 58 + .../vsphere/configure-in-tree-vsphere.md | 21 + .../vsphere/configure-out-of-tree-vsphere.md | 66 + .../migrate-from-in-tree-to-out-of-tree.md | 108 + .../create-a-digitalocean-cluster.md | 103 + .../create-an-amazon-ec2-cluster.md | 288 ++ .../create-an-azure-cluster.md | 146 + .../provision-kubernetes-clusters-in-aos.md | 93 + .../vsphere/create-a-vm-template.md | 163 + .../vsphere/create-credentials.md | 43 + ...rovision-kubernetes-clusters-in-vsphere.md | 113 + .../azure-storageclass-configuration.md | 42 + .../network-requirements-for-host-gateway.md | 37 + .../windows-linux-cluster-feature-parity.md | 47 + .../workload-migration-guidance.md | 303 ++ ...quirements-for-rancher-managed-clusters.md | 127 + .../register-existing-clusters.md | 300 ++ .../aks.md | 155 + .../alibaba.md | 61 + .../gke.md | 103 + .../huawei.md | 102 + .../tencent.md | 101 + .../kubernetes-resources-setup/configmaps.md | 36 + .../create-services.md | 30 + .../encrypt-http-communication.md | 39 + .../horizontal-pod-autoscaler/about-hpas.md | 1 + .../manage-hpas-with-kubectl.md | 1 + .../manage-hpas-with-ui.md | 1 + .../test-hpas-with-kubectl.md | 1 + .../kubernetes-and-docker-registries.md | 166 + .../add-ingresses.md | 20 + .../ingress-configuration.md | 44 + .../layer-4-and-layer-7-load-balancing.md | 68 + .../kubernetes-resources-setup/secrets.md | 77 + .../workloads-and-pods/add-a-sidecar.md | 35 + .../workloads-and-pods/deploy-workloads.md | 58 + .../workloads-and-pods/roll-back-workloads.md | 15 + .../workloads-and-pods/upgrade-workloads.md | 21 + .../horizontal-pod-autoscaler.md | 27 + .../hpa-background/hpa-background.md | 40 + .../manage-hpa-with-kubectl.md | 205 ++ .../manage-hpa-with-rancher-ui.md | 52 + .../testing-hpa/testing-hpa.md | 532 +++ .../about-authentication.md | 105 + .../about-provisioning-drivers.md | 48 + .../about-rke1-templates.md | 127 + .../pages-for-subheaders/about-the-api.md | 84 + .../pages-for-subheaders/access-clusters.md | 32 + .../advanced-configuration.md | 16 + .../pages-for-subheaders/advanced-options.md | 6 + .../advanced-user-guides.md | 7 + .../air-gapped-helm-cli-install.md | 32 + .../amazon-eks-permissions.md | 111 + .../authentication-config.md | 18 + ...on-permissions-and-global-configuration.md | 54 + .../aws-cloud-marketplace.md | 32 + .../backup-restore-and-disaster-recovery.md | 96 + .../backup-restore-configuration.md | 10 + .../pages-for-subheaders/best-practices.md | 18 + ...checklist-for-production-ready-clusters.md | 49 + .../pages-for-subheaders/cis-scan-guides.md | 13 + .../current/pages-for-subheaders/cis-scans.md | 109 + .../pages-for-subheaders/cli-with-rancher.md | 5 + .../pages-for-subheaders/cloud-marketplace.md | 8 + .../cluster-configuration.md | 30 + .../configuration-options.md | 40 + ...re-microsoft-ad-federation-service-saml.md | 39 + .../configure-openldap.md | 53 + .../configure-shibboleth-saml.md | 102 + .../create-kubernetes-persistent-storage.md | 74 + .../custom-resource-configuration.md | 9 + .../deploy-apps-across-clusters.md | 15 + .../deploy-rancher-manager.md | 21 + .../deploy-rancher-workloads.md | 9 + .../downstream-cluster-configuration.md | 5 + .../enable-experimental-features.md | 123 + .../fleet-gitops-at-scale.md | 64 + .../gke-cluster-configuration.md | 323 ++ .../helm-charts-in-rancher.md | 154 + .../horizontal-pod-autoscaler.md | 1 + .../infrastructure-setup.md | 10 + .../install-cluster-autoscaler.md | 25 + ...install-upgrade-on-a-kubernetes-cluster.md | 338 ++ .../installation-and-upgrade.md | 94 + .../installation-references.md | 5 + .../installation-requirements.md | 186 + .../integrations-in-rancher.md | 7 + .../pages-for-subheaders/introduction.md | 5 + .../pages-for-subheaders/istio-setup-guide.md | 32 + .../current/pages-for-subheaders/istio.md | 125 + .../kubernetes-cluster-setup.md | 8 + .../kubernetes-clusters-in-rancher-setup.md | 77 + .../kubernetes-components.md | 18 + .../kubernetes-resources-setup.md | 70 + .../launch-kubernetes-with-rancher.md | 81 + .../load-balancer-and-ingress-controller.md | 62 + .../current/pages-for-subheaders/logging.md | 118 + .../machine-configuration.md | 5 + .../pages-for-subheaders/manage-clusters.md | 39 + .../manage-persistent-storage.md | 12 + .../manage-project-resource-quotas.md | 41 + .../pages-for-subheaders/manage-projects.md | 39 + .../manage-role-based-access-control-rbac.md | 26 + .../monitoring-alerting-guides.md | 13 + .../monitoring-and-alerting.md | 98 + .../monitoring-v2-configuration-guides.md | 52 + .../monitoring-v2-configuration.md | 11 + .../pages-for-subheaders/new-user-guides.md | 9 + .../node-template-configuration.md | 5 + .../current/pages-for-subheaders/nutanix.md | 20 + .../other-cloud-providers.md | 9 + .../other-installation-methods.md | 20 + .../other-troubleshooting-tips.md | 12 + .../current/pages-for-subheaders/pipelines.md | 287 ++ .../prometheus-federator-guides.md | 8 + .../prometheus-federator.md | 105 + .../provisioning-storage-examples.md | 12 + .../quick-start-guides.md | 21 + .../rancher-behind-an-http-proxy.md | 14 + .../rancher-managed-clusters.md | 21 + .../rancher-manager-architecture.md | 18 + .../rancher-on-a-single-node-with-docker.md | 208 ++ .../pages-for-subheaders/rancher-security.md | 89 + .../rancher-server-configuration.md | 12 + .../pages-for-subheaders/rancher-server.md | 19 + .../rancher-v2.6-hardening-guides.md | 59 + .../current/pages-for-subheaders/resources.md | 26 + .../pages-for-subheaders/selinux-rpm.md | 17 + .../set-up-cloud-providers.md | 43 + ...usters-from-hosted-kubernetes-providers.md | 30 + .../single-node-rancher-in-docker.md | 5 + .../use-existing-nodes.md | 140 + .../use-new-nodes-in-an-infra-provider.md | 153 + .../use-windows-clusters.md | 287 ++ .../pages-for-subheaders/user-settings.md | 16 + .../vsphere-cloud-provider.md | 14 + .../current/pages-for-subheaders/vsphere.md | 58 + .../workloads-and-pods.md | 79 + .../current/rancher-manager.md | 22 + .../current/reference-guides.md | 13 + .../about-the-api/api-tokens.md | 88 + .../minimum-eks-permissions.md | 224 ++ .../backup-configuration.md | 171 + .../backup-restore-configuration/examples.md | 294 ++ .../restore-configuration.md | 83 + .../storage-configuration.md | 58 + .../logging-best-practices.md | 88 + .../monitoring-best-practices.md | 112 + .../rancher-managed-clusters-in-vsphere.md | 59 + .../tips-to-set-up-containers.md | 53 + .../on-premises-rancher-in-vsphere.md | 86 + .../rancher-deployment-strategy.md | 45 + .../tips-for-running-rancher.md | 37 + .../cli-with-rancher/kubectl-utility.md | 32 + .../cli-with-rancher/rancher-cli.md | 88 + .../machine-configuration/amazon-ec2.md | 79 + .../machine-configuration/azure.md | 121 + .../machine-configuration/digitalocean.md | 34 + .../node-template-configuration/amazon-ec2.md | 50 + .../node-template-configuration/azure.md | 19 + .../digitalocean.md | 19 + .../node-template-configuration/nutanix.md | 58 + .../node-template-configuration/vsphere.md | 87 + .../aks-cluster-configuration.md | 226 ++ .../eks-cluster-configuration.md | 151 + .../gke-private-clusters.md | 50 + .../k3s-cluster-configuration.md | 147 + .../rke1-cluster-configuration.md | 348 ++ .../rke2-cluster-configuration.md | 354 ++ .../sync-clusters.md | 35 + .../rancher-agent-options.md | 54 + .../openldap-config-reference.md | 81 + .../installation-references/feature-flags.md | 43 + .../helm-chart-options.md | 274 ++ .../installation-references/tls-settings.md | 22 + .../reference-guides/kubernetes-concepts.md | 65 + .../monitoring-v2-configuration/examples.md | 25 + .../helm-chart-options.md | 70 + .../monitoring-v2-configuration/receivers.md | 305 ++ .../monitoring-v2-configuration/routes.md | 93 + .../servicemonitors-and-podmonitors.md | 35 + .../reference-guides/pipelines/concepts.md | 36 + .../pipelines/configure-persistent-data.md | 96 + .../pipelines/example-repositories.md | 90 + .../pipelines/example-yaml.md | 72 + .../pipelines/pipeline-configuration.md | 634 ++++ .../prometheus-federator/rbac.md | 33 + .../reference-guides/rancher-cluster-tools.md | 49 + .../architecture-recommendations.md | 104 + ...unicating-with-downstream-user-clusters.md | 132 + .../rancher-server-and-components.md | 25 + .../reference-guides/rancher-project-tools.md | 33 + .../kubernetes-security-best-practices.md | 12 + ...hardening-guide-with-cis-v1.6-benchmark.md | 647 ++++ ...ssessment-guide-with-cis-v1.6-benchmark.md | 2956 +++++++++++++++ ...hardening-guide-with-cis-v1.6-benchmark.md | 410 +++ ...ssessment-guide-with-cis-v1.6-benchmark.md | 3165 +++++++++++++++++ .../security-advisories-and-cves.md | 34 + .../selinux-rpm/about-rancher-selinux.md | 66 + .../selinux-rpm/about-rke2-selinux.md | 9 + .../rke1-template-example-yaml.md | 112 + .../advanced-options.md | 107 + .../http-proxy-configuration.md | 64 + .../current/reference-guides/system-tools.md | 31 + .../user-settings/api-keys.md | 60 + .../user-settings/manage-cloud-credentials.md | 52 + .../user-settings/manage-node-templates.md | 55 + .../user-settings/user-preferences.md | 18 + .../security/security-scan/security-scan.md | 6 + .../_cluster-capabilities-table.md | 24 + .../shared-files/_common-ports-table.md | 19 + .../current/troubleshooting.md | 45 + .../troubleshooting-controlplane-nodes.md | 52 + .../troubleshooting-etcd-nodes.md | 348 ++ .../troubleshooting-nginx-proxy.md | 69 + ...ing-worker-nodes-and-generic-components.md | 35 + .../other-troubleshooting-tips/dns.md | 221 ++ .../expired-webhook-certificate-rotation.md | 29 + .../kubernetes-resources.md | 256 ++ .../other-troubleshooting-tips/logging.md | 48 + .../other-troubleshooting-tips/networking.md | 122 + .../other-troubleshooting-tips/rancher-ha.md | 80 + .../registered-clusters.md | 68 + .../user-id-tracking-in-audit-logs.md | 23 + .../version-2.0-2.4.json | 410 +++ .../version-2.5.json | 386 ++ i18n/zh/docusaurus-theme-classic/footer.json | 6 + i18n/zh/docusaurus-theme-classic/navbar.json | 10 + 453 files changed, 47673 insertions(+) create mode 100644 i18n/zh/code.json create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current.json create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/backups/docker-installs/docker-installs.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/cluster-provisioning/rke-clusters/options/options.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/contribute-to-rancher.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/explanations.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/cis-scans/configuration-reference.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/cis-scans/custom-benchmark.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/cis-scans/rbac-for-cis-scans.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/cis-scans/skipped-and-not-applicable-tests.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/cloud-marketplace/aws-cloud-marketplace/adapter-requirements.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/cloud-marketplace/aws-cloud-marketplace/common-issues.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/cloud-marketplace/aws-cloud-marketplace/install-adapter.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/cloud-marketplace/aws-cloud-marketplace/uninstall-adapter.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/cloud-marketplace/supportconfig.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/fleet-gitops-at-scale/architecture.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/fleet-gitops-at-scale/use-fleet-behind-a-proxy.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/fleet-gitops-at-scale/windows-support.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/harvester.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/istio/configuration-options/install-istio-on-rke2-cluster.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/istio/configuration-options/pod-security-policies.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/istio/configuration-options/project-network-isolation.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/istio/configuration-options/selectors-and-scrape-configurations.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/istio/cpu-and-memory-allocations.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/istio/disable-istio.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/istio/rbac-for-istio.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/logging/custom-resource-configuration/flows-and-clusterflows.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/logging/custom-resource-configuration/outputs-and-clusteroutputs.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/logging/logging-architecture.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/logging/logging-helm-chart-options.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/logging/migrate-to-rancher-v2.5+-logging.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/logging/rbac-for-logging.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/logging/taints-and-tolerations.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/longhorn.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/monitoring-and-alerting/built-in-dashboards.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/monitoring-and-alerting/how-monitoring-works.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/monitoring-and-alerting/promql-expressions.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/monitoring-and-alerting/rbac-for-monitoring.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/monitoring-and-alerting/windows-support.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/neuvector.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/opa-gatekeeper.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/faq.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/faq/container-network-interface-providers.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/faq/deprecated-features-in-v2.5.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/faq/dockershim.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/faq/install-and-configure-kubectl.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/faq/networking/networking.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/faq/rancher-is-no-longer-needed.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/faq/security.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/faq/technical-items.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/faq/telemetry.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/getting-started.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/advanced-options/advanced-use-cases/configure-layer-7-nginx-load-balancer.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/advanced-options/advanced-use-cases/enable-api-audit-log.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/advanced-options/advanced-use-cases/open-ports-with-firewalld.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/advanced-options/advanced-use-cases/tune-etcd-for-large-installs.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/advanced-options/enable-experimental-features/continuous-delivery.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/advanced-options/enable-experimental-features/istio-traffic-management-features.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/advanced-options/enable-experimental-features/rancher-on-arm64.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/advanced-options/enable-experimental-features/unsupported-storage-drivers.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/air-gapped-upgrades.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/rancher-on-aks.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/rancher-on-amazon-eks.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/rancher-on-gke.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/rollbacks.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/troubleshooting.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/upgrades.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/installation-requirements/dockershim.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/installation-requirements/install-docker.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/installation-requirements/port-requirements.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/other-installation-methods/air-gapped-helm-cli-install/docker-install-commands.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/other-installation-methods/air-gapped-helm-cli-install/infrastructure-private-registry.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/other-installation-methods/air-gapped-helm-cli-install/install-kubernetes.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/other-installation-methods/air-gapped-helm-cli-install/install-rancher-ha.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/other-installation-methods/air-gapped-helm-cli-install/publish-images.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/other-installation-methods/rancher-behind-an-http-proxy/install-kubernetes.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/other-installation-methods/rancher-behind-an-http-proxy/install-rancher.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/other-installation-methods/rancher-behind-an-http-proxy/set-up-infrastructure.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/other-installation-methods/rancher-on-a-single-node-with-docker/certificate-troubleshooting.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/other-installation-methods/rancher-on-a-single-node-with-docker/roll-back-docker-installed-rancher.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/other-installation-methods/rancher-on-a-single-node-with-docker/upgrade-docker-installed-rancher.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/resources/add-tls-secrets.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/resources/bootstrap-password.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/resources/choose-a-rancher-version.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/resources/custom-ca-root-certificates.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/resources/helm-version-requirements.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/resources/local-system-charts.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/resources/update-rancher-certificate.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/resources/upgrade-cert-manager.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/upgrade-and-roll-back-kubernetes.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/upgrade-kubernetes-without-upgrading-rancher.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/getting-started/introduction/overview.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/getting-started/introduction/what-are-divio-docs.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/getting-started/quick-start-guides/deploy-rancher-manager/aws-marketplace.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/getting-started/quick-start-guides/deploy-rancher-manager/aws.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/getting-started/quick-start-guides/deploy-rancher-manager/azure.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/getting-started/quick-start-guides/deploy-rancher-manager/digitalocean.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/getting-started/quick-start-guides/deploy-rancher-manager/equinix-metal.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/getting-started/quick-start-guides/deploy-rancher-manager/gcp.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/getting-started/quick-start-guides/deploy-rancher-manager/helm-cli.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/getting-started/quick-start-guides/deploy-rancher-manager/hetzner-cloud.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/getting-started/quick-start-guides/deploy-rancher-manager/outscale-qs.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/getting-started/quick-start-guides/deploy-rancher-manager/vagrant.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/getting-started/quick-start-guides/deploy-workloads/nodeports.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/getting-started/quick-start-guides/deploy-workloads/workload-ingress.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/configure-active-directory.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/configure-azure-ad.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/configure-freeipa.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/configure-github.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/configure-google-oauth.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/configure-keycloak-oidc.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/configure-keycloak-saml.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/configure-okta-saml.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/configure-pingidentity.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/create-local-users.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/manage-users-and-groups.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/configure-microsoft-ad-federation-service-saml/configure-ms-adfs-for-rancher.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/configure-microsoft-ad-federation-service-saml/configure-rancher-for-ms-adfs.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/configure-shibboleth-saml/about-group-permissions.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-provisioning-drivers/manage-cluster-drivers.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-provisioning-drivers/manage-node-drivers.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/access-or-share-templates.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/apply-templates.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/creator-permissions.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/enforce-templates.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/example-use-cases.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/infrastructure.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/manage-rke1-templates.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/override-template-settings.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/create-pod-security-policies.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/custom-branding.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/global-default-private-registry.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/manage-cluster-templates.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/cluster-and-project-roles.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/custom-roles.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/global-permissions.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/locked-roles.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/cis-scan-guides/configure-alerts-for-periodic-scan-on-a-schedule.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/cis-scan-guides/create-a-custom-benchmark-version-to-run.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/cis-scan-guides/enable-alerting-for-rancher-cis-benchmark.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/cis-scan-guides/install-rancher-cis-benchmark.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/cis-scan-guides/run-a-scan-periodically-on-a-schedule.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/cis-scan-guides/run-a-scan.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/cis-scan-guides/skip-tests.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/cis-scan-guides/uninstall-rancher-cis-benchmark.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/cis-scan-guides/view-reports.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/istio-setup-guide/enable-istio-in-cluster.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/istio-setup-guide/enable-istio-in-namespace.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/istio-setup-guide/generate-and-view-traffic.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/istio-setup-guide/set-up-istio-gateway.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/istio-setup-guide/set-up-traffic-management.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/istio-setup-guide/use-istio-sidecar.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/access-clusters/add-users-to-clusters.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/access-clusters/authorized-cluster-endpoint.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/access-clusters/use-kubectl-and-kubeconfig.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/add-a-pod-security-policy.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/assign-pod-security-policies.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/clean-cluster-nodes.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/clone-cluster-configuration.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/create-kubernetes-persistent-storage/manage-persistent-storage/about-glusterfs-volumes.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/create-kubernetes-persistent-storage/manage-persistent-storage/about-persistent-storage.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/create-kubernetes-persistent-storage/manage-persistent-storage/dynamically-provision-new-storage.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/create-kubernetes-persistent-storage/manage-persistent-storage/install-iscsi-volumes.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/create-kubernetes-persistent-storage/manage-persistent-storage/set-up-existing-storage.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/create-kubernetes-persistent-storage/manage-persistent-storage/use-external-ceph-driver.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/create-kubernetes-persistent-storage/provisioning-storage-examples/nfs-storage.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/create-kubernetes-persistent-storage/provisioning-storage-examples/persistent-storage-in-amazon-ebs.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/create-kubernetes-persistent-storage/provisioning-storage-examples/vsphere-storage.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/install-cluster-autoscaler/use-aws-ec2-auto-scaling-groups.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/nodes-and-node-pools.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/projects-and-namespaces.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/rotate-certificates.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/rotate-encryption-key.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-projects/add-users-to-projects.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-projects/ci-cd-pipelines.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-projects/manage-namespaces.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-projects/manage-pod-security-policies.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-projects/manage-project-resource-quotas/about-project-resource-quotas.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-projects/manage-project-resource-quotas/override-default-limit-in-namespaces.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-projects/manage-project-resource-quotas/resource-quota-types.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-projects/manage-project-resource-quotas/set-container-default-resource-limits.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/monitoring-alerting-guides/create-persistent-grafana-dashboard.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/monitoring-alerting-guides/customize-grafana-dashboard.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/monitoring-alerting-guides/debug-high-memory-usage.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/monitoring-alerting-guides/enable-monitoring.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/monitoring-alerting-guides/migrate-to-rancher-v2.5+-monitoring.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/monitoring-alerting-guides/prometheus-federator-guides/customize-grafana-dashboards.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/monitoring-alerting-guides/prometheus-federator-guides/enable-prometheus-federator.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/monitoring-alerting-guides/prometheus-federator-guides/project-monitors.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/monitoring-alerting-guides/prometheus-federator-guides/set-up-workloads.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/monitoring-alerting-guides/prometheus-federator-guides/uninstall-prometheus-federator.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/monitoring-alerting-guides/set-up-monitoring-for-workloads.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/monitoring-alerting-guides/uninstall-monitoring.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/monitoring-v2-configuration-guides/advanced-configuration/alertmanager.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/monitoring-v2-configuration-guides/advanced-configuration/prometheus.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/monitoring-v2-configuration-guides/advanced-configuration/prometheusrules.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/back-up-docker-installed-rancher.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/back-up-rancher-launched-kubernetes-clusters.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/back-up-rancher.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/migrate-rancher-to-new-cluster.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/restore-docker-installed-rancher.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/restore-rancher-launched-kubernetes-clusters-from-backup.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/restore-rancher.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/deploy-apps-across-clusters/fleet.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/deploy-apps-across-clusters/multi-cluster-apps.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/helm-charts-in-rancher/create-apps.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/infrastructure-setup/amazon-elb-load-balancer.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/infrastructure-setup/ha-k3s-kubernetes-cluster.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/infrastructure-setup/ha-rke1-kubernetes-cluster.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/infrastructure-setup/ha-rke2-kubernetes-cluster.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/infrastructure-setup/mysql-database-in-amazon-rds.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/infrastructure-setup/nginx-load-balancer.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/infrastructure-setup/nodes-in-amazon-ec2.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-cluster-setup/high-availability-installs.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-cluster-setup/k3s-for-rancher.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-cluster-setup/rke1-for-rancher.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-cluster-setup/rke2-for-rancher.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/checklist-for-production-ready-clusters/recommended-cluster-architecture.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/checklist-for-production-ready-clusters/roles-for-nodes-in-kubernetes.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/about-rancher-agents.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/rke1-vs-rke2-differences.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/set-up-cloud-providers/other-cloud-providers/amazon.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/set-up-cloud-providers/other-cloud-providers/azure.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/set-up-cloud-providers/other-cloud-providers/google-compute-engine.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/set-up-cloud-providers/vsphere/configure-in-tree-vsphere.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/set-up-cloud-providers/vsphere/configure-out-of-tree-vsphere.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/set-up-cloud-providers/vsphere/migrate-from-in-tree-to-out-of-tree.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/use-new-nodes-in-an-infra-provider/create-a-digitalocean-cluster.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/use-new-nodes-in-an-infra-provider/create-an-amazon-ec2-cluster.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/use-new-nodes-in-an-infra-provider/create-an-azure-cluster.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/use-new-nodes-in-an-infra-provider/nutanix/provision-kubernetes-clusters-in-aos.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/use-new-nodes-in-an-infra-provider/vsphere/create-a-vm-template.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/use-new-nodes-in-an-infra-provider/vsphere/create-credentials.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/use-new-nodes-in-an-infra-provider/vsphere/provision-kubernetes-clusters-in-vsphere.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/use-windows-clusters/azure-storageclass-configuration.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/use-windows-clusters/network-requirements-for-host-gateway.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/use-windows-clusters/windows-linux-cluster-feature-parity.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/use-windows-clusters/workload-migration-guidance.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/node-requirements-for-rancher-managed-clusters.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/register-existing-clusters.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-clusters-from-hosted-kubernetes-providers/aks.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-clusters-from-hosted-kubernetes-providers/alibaba.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-clusters-from-hosted-kubernetes-providers/gke.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-clusters-from-hosted-kubernetes-providers/huawei.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-clusters-from-hosted-kubernetes-providers/tencent.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-resources-setup/configmaps.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-resources-setup/create-services.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-resources-setup/encrypt-http-communication.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-resources-setup/horizontal-pod-autoscaler/about-hpas.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-resources-setup/horizontal-pod-autoscaler/manage-hpas-with-kubectl.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-resources-setup/horizontal-pod-autoscaler/manage-hpas-with-ui.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-resources-setup/horizontal-pod-autoscaler/test-hpas-with-kubectl.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-resources-setup/kubernetes-and-docker-registries.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-resources-setup/load-balancer-and-ingress-controller/add-ingresses.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-resources-setup/load-balancer-and-ingress-controller/ingress-configuration.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-resources-setup/load-balancer-and-ingress-controller/layer-4-and-layer-7-load-balancing.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-resources-setup/secrets.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-resources-setup/workloads-and-pods/add-a-sidecar.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-resources-setup/workloads-and-pods/deploy-workloads.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-resources-setup/workloads-and-pods/roll-back-workloads.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-resources-setup/workloads-and-pods/upgrade-workloads.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/k8s-in-rancher/horizontal-pod-autoscaler/horizontal-pod-autoscaler.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/k8s-in-rancher/horizontal-pod-autoscaler/hpa-background/hpa-background.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/k8s-in-rancher/horizontal-pod-autoscaler/manage-hpa-with-kubectl/manage-hpa-with-kubectl.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/k8s-in-rancher/horizontal-pod-autoscaler/manage-hpa-with-rancher-ui/manage-hpa-with-rancher-ui.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/k8s-in-rancher/horizontal-pod-autoscaler/testing-hpa/testing-hpa.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/about-authentication.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/about-provisioning-drivers.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/about-rke1-templates.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/about-the-api.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/access-clusters.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/advanced-configuration.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/advanced-options.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/advanced-user-guides.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/air-gapped-helm-cli-install.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/amazon-eks-permissions.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/authentication-config.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/authentication-permissions-and-global-configuration.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/aws-cloud-marketplace.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/backup-restore-and-disaster-recovery.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/backup-restore-configuration.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/best-practices.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/checklist-for-production-ready-clusters.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/cis-scan-guides.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/cis-scans.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/cli-with-rancher.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/cloud-marketplace.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/cluster-configuration.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/configuration-options.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/configure-microsoft-ad-federation-service-saml.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/configure-openldap.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/configure-shibboleth-saml.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/create-kubernetes-persistent-storage.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/custom-resource-configuration.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/deploy-apps-across-clusters.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/deploy-rancher-manager.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/deploy-rancher-workloads.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/downstream-cluster-configuration.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/enable-experimental-features.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/fleet-gitops-at-scale.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/gke-cluster-configuration.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/helm-charts-in-rancher.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/horizontal-pod-autoscaler.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/infrastructure-setup.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/install-cluster-autoscaler.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/install-upgrade-on-a-kubernetes-cluster.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/installation-and-upgrade.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/installation-references.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/installation-requirements.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/integrations-in-rancher.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/introduction.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/istio-setup-guide.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/istio.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/kubernetes-cluster-setup.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/kubernetes-clusters-in-rancher-setup.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/kubernetes-components.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/kubernetes-resources-setup.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/launch-kubernetes-with-rancher.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/load-balancer-and-ingress-controller.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/logging.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/machine-configuration.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/manage-clusters.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/manage-persistent-storage.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/manage-project-resource-quotas.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/manage-projects.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/manage-role-based-access-control-rbac.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/monitoring-alerting-guides.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/monitoring-and-alerting.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/monitoring-v2-configuration-guides.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/monitoring-v2-configuration.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/new-user-guides.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/node-template-configuration.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/nutanix.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/other-cloud-providers.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/other-installation-methods.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/other-troubleshooting-tips.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/pipelines.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/prometheus-federator-guides.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/prometheus-federator.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/provisioning-storage-examples.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/quick-start-guides.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/rancher-behind-an-http-proxy.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/rancher-managed-clusters.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/rancher-manager-architecture.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/rancher-on-a-single-node-with-docker.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/rancher-security.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/rancher-server-configuration.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/rancher-server.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/rancher-v2.6-hardening-guides.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/resources.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/selinux-rpm.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/set-up-cloud-providers.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/set-up-clusters-from-hosted-kubernetes-providers.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/single-node-rancher-in-docker.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/use-existing-nodes.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/use-new-nodes-in-an-infra-provider.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/use-windows-clusters.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/user-settings.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/vsphere-cloud-provider.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/vsphere.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/workloads-and-pods.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/rancher-manager.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/about-the-api/api-tokens.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/amazon-eks-permissions/minimum-eks-permissions.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/backup-restore-configuration/backup-configuration.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/backup-restore-configuration/examples.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/backup-restore-configuration/restore-configuration.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/backup-restore-configuration/storage-configuration.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/best-practices/rancher-managed-clusters/logging-best-practices.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/best-practices/rancher-managed-clusters/monitoring-best-practices.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/best-practices/rancher-managed-clusters/rancher-managed-clusters-in-vsphere.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/best-practices/rancher-managed-clusters/tips-to-set-up-containers.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/best-practices/rancher-server/on-premises-rancher-in-vsphere.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/best-practices/rancher-server/rancher-deployment-strategy.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/best-practices/rancher-server/tips-for-running-rancher.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cli-with-rancher/kubectl-utility.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cli-with-rancher/rancher-cli.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cluster-configuration/downstream-cluster-configuration/machine-configuration/amazon-ec2.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cluster-configuration/downstream-cluster-configuration/machine-configuration/azure.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cluster-configuration/downstream-cluster-configuration/machine-configuration/digitalocean.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cluster-configuration/downstream-cluster-configuration/node-template-configuration/amazon-ec2.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cluster-configuration/downstream-cluster-configuration/node-template-configuration/azure.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cluster-configuration/downstream-cluster-configuration/node-template-configuration/digitalocean.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cluster-configuration/downstream-cluster-configuration/node-template-configuration/nutanix.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cluster-configuration/downstream-cluster-configuration/node-template-configuration/vsphere.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cluster-configuration/rancher-server-configuration/aks-cluster-configuration.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cluster-configuration/rancher-server-configuration/eks-cluster-configuration.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cluster-configuration/rancher-server-configuration/gke-cluster-configuration/gke-private-clusters.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cluster-configuration/rancher-server-configuration/k3s-cluster-configuration.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cluster-configuration/rancher-server-configuration/rke1-cluster-configuration.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cluster-configuration/rancher-server-configuration/rke2-cluster-configuration.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cluster-configuration/rancher-server-configuration/sync-clusters.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cluster-configuration/rancher-server-configuration/use-existing-nodes/rancher-agent-options.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/configure-openldap/openldap-config-reference.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/installation-references/feature-flags.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/installation-references/helm-chart-options.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/installation-references/tls-settings.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/kubernetes-concepts.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/monitoring-v2-configuration/examples.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/monitoring-v2-configuration/helm-chart-options.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/monitoring-v2-configuration/receivers.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/monitoring-v2-configuration/routes.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/monitoring-v2-configuration/servicemonitors-and-podmonitors.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/pipelines/concepts.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/pipelines/configure-persistent-data.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/pipelines/example-repositories.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/pipelines/example-yaml.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/pipelines/pipeline-configuration.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/prometheus-federator/rbac.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/rancher-cluster-tools.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/rancher-manager-architecture/architecture-recommendations.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/rancher-manager-architecture/communicating-with-downstream-user-clusters.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/rancher-manager-architecture/rancher-server-and-components.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/rancher-project-tools.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/rancher-security/kubernetes-security-best-practices.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/rancher-security/rancher-v2.6-hardening-guides/rke1-hardening-guide-with-cis-v1.6-benchmark.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/rancher-security/rancher-v2.6-hardening-guides/rke1-self-assessment-guide-with-cis-v1.6-benchmark.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/rancher-security/rancher-v2.6-hardening-guides/rke2-hardening-guide-with-cis-v1.6-benchmark.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/rancher-security/rancher-v2.6-hardening-guides/rke2-self-assessment-guide-with-cis-v1.6-benchmark.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/rancher-security/security-advisories-and-cves.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/rancher-security/selinux-rpm/about-rancher-selinux.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/rancher-security/selinux-rpm/about-rke2-selinux.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/rke1-template-example-yaml.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/single-node-rancher-in-docker/advanced-options.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/single-node-rancher-in-docker/http-proxy-configuration.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/system-tools.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/user-settings/api-keys.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/user-settings/manage-cloud-credentials.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/user-settings/manage-node-templates.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/user-settings/user-preferences.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/security/security-scan/security-scan.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/shared-files/_cluster-capabilities-table.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/shared-files/_common-ports-table.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/troubleshooting.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/troubleshooting/kubernetes-components/troubleshooting-controlplane-nodes.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/troubleshooting/kubernetes-components/troubleshooting-etcd-nodes.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/troubleshooting/kubernetes-components/troubleshooting-nginx-proxy.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/troubleshooting/kubernetes-components/troubleshooting-worker-nodes-and-generic-components.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/troubleshooting/other-troubleshooting-tips/dns.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/troubleshooting/other-troubleshooting-tips/expired-webhook-certificate-rotation.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/troubleshooting/other-troubleshooting-tips/kubernetes-resources.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/troubleshooting/other-troubleshooting-tips/logging.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/troubleshooting/other-troubleshooting-tips/networking.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/troubleshooting/other-troubleshooting-tips/rancher-ha.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/troubleshooting/other-troubleshooting-tips/registered-clusters.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/troubleshooting/other-troubleshooting-tips/user-id-tracking-in-audit-logs.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/version-2.0-2.4.json create mode 100644 i18n/zh/docusaurus-plugin-content-docs/version-2.5.json create mode 100644 i18n/zh/docusaurus-theme-classic/footer.json create mode 100644 i18n/zh/docusaurus-theme-classic/navbar.json diff --git a/docusaurus.config.js b/docusaurus.config.js index 66f0696263a..be86fea645c 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -11,6 +11,18 @@ module.exports = { organizationName: 'rancher', // Usually your GitHub org/user name. projectName: 'rancher-docs', // Usually your repo name. trailingSlash: false, + i18n: { + defaultLocale: "en", + locales: ["en", "zh"], + localeConfigs: { + en: { + label: "English", + }, + zh: { + label: "简体中文", + }, + }, + }, themeConfig: { algolia: { // The application ID provided by Algolia @@ -58,6 +70,10 @@ module.exports = { label: 'Docs', className: 'navbar__docs', }, + { + type: "localeDropdown", + position: "right", + }, { href: 'https://github.com/rancher/', label: 'GitHub', diff --git a/i18n/zh/code.json b/i18n/zh/code.json new file mode 100644 index 00000000000..b1ff31bdea7 --- /dev/null +++ b/i18n/zh/code.json @@ -0,0 +1,272 @@ +{ + "theme.ErrorPageContent.title": { + "message": "页面已崩溃。", + "description": "The title of the fallback page when the page crashed" + }, + "theme.ErrorPageContent.tryAgain": { + "message": "重试", + "description": "The label of the button to try again when the page crashed" + }, + "theme.NotFound.title": { + "message": "找不到页面", + "description": "The title of the 404 page" + }, + "theme.NotFound.p1": { + "message": "我们找不到您要找的页面。", + "description": "The first paragraph of the 404 page" + }, + "theme.NotFound.p2": { + "message": "请联系原始链接来源网站的所有者,并告知他们链接已损坏。", + "description": "The 2nd paragraph of the 404 page" + }, + "theme.AnnouncementBar.closeButtonAriaLabel": { + "message": "关闭", + "description": "The ARIA label for close button of announcement bar" + }, + "theme.BackToTopButton.buttonAriaLabel": { + "message": "回到顶部", + "description": "The ARIA label for the back to top button" + }, + "theme.blog.archive.title": { + "message": "历史博文", + "description": "The page & hero title of the blog archive page" + }, + "theme.blog.archive.description": { + "message": "历史博文", + "description": "The page & hero description of the blog archive page" + }, + "theme.blog.paginator.navAriaLabel": { + "message": "博文列表分页导航", + "description": "The ARIA label for the blog pagination" + }, + "theme.blog.paginator.newerEntries": { + "message": "较新的博文", + "description": "The label used to navigate to the newer blog posts page (previous page)" + }, + "theme.blog.paginator.olderEntries": { + "message": "较旧的博文", + "description": "The label used to navigate to the older blog posts page (next page)" + }, + "theme.blog.post.readingTime.plurals": { + "message": "{readingTime} 分钟阅读", + "description": "Pluralized label for \"{readingTime} min read\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" + }, + "theme.blog.post.readMoreLabel": { + "message": "阅读 {title} 的全文", + "description": "The ARIA label for the link to full blog posts from excerpts" + }, + "theme.blog.post.readMore": { + "message": "阅读更多", + "description": "The label used in blog post item excerpts to link to full blog posts" + }, + "theme.blog.post.paginator.navAriaLabel": { + "message": "博文分页导航", + "description": "The ARIA label for the blog posts pagination" + }, + "theme.blog.post.paginator.newerPost": { + "message": "较新一篇", + "description": "The blog post button label to navigate to the newer/previous post" + }, + "theme.blog.post.paginator.olderPost": { + "message": "较旧一篇", + "description": "The blog post button label to navigate to the older/next post" + }, + "theme.blog.post.plurals": { + "message": "{count} 篇博文", + "description": "Pluralized label for \"{count} posts\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" + }, + "theme.blog.tagTitle": { + "message": "{nPosts} 含有标签「{tagName}」", + "description": "The title of the page for a blog tag" + }, + "theme.tags.tagsPageLink": { + "message": "查看所有标签", + "description": "The label of the link targeting the tag list page" + }, + "theme.colorToggle.ariaLabel": { + "message": "切换浅色/暗黑模式(当前为{mode})", + "description": "The ARIA label for the navbar color mode toggle" + }, + "theme.colorToggle.ariaLabel.mode.dark": { + "message": "暗黑模式", + "description": "The name for the dark color mode" + }, + "theme.colorToggle.ariaLabel.mode.light": { + "message": "浅色模式", + "description": "The name for the light color mode" + }, + "theme.docs.breadcrumbs.home": { + "message": "主页面", + "description": "The ARIA label for the home page in the breadcrumbs" + }, + "theme.docs.breadcrumbs.navAriaLabel": { + "message": "页面路径", + "description": "The ARIA label for the breadcrumbs" + }, + "theme.docs.DocCard.categoryDescription": { + "message": "{count} 个项目", + "description": "The default description for a category card in the generated index about how many items this category includes" + }, + "theme.docs.paginator.navAriaLabel": { + "message": "文档分页导航", + "description": "The ARIA label for the docs pagination" + }, + "theme.docs.paginator.previous": { + "message": "上一页", + "description": "The label used to navigate to the previous doc" + }, + "theme.docs.paginator.next": { + "message": "下一页", + "description": "The label used to navigate to the next doc" + }, + "theme.docs.tagDocListPageTitle.nDocsTagged": { + "message": "{count} 篇文档带有标签", + "description": "Pluralized label for \"{count} docs tagged\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" + }, + "theme.docs.tagDocListPageTitle": { + "message": "{nDocsTagged}「{tagName}」", + "description": "The title of the page for a docs tag" + }, + "theme.docs.versionBadge.label": { + "message": "版本:{versionLabel}" + }, + "theme.common.headingLinkTitle": { + "message": "标题的直接链接", + "description": "Title for link to heading" + }, + "theme.common.editThisPage": { + "message": "编辑此页", + "description": "The link label to edit the current page" + }, + "theme.docs.versions.unreleasedVersionLabel": { + "message": "此为 {siteTitle} {versionLabel} 版尚未发行的文档。", + "description": "The label used to tell the user that he's browsing an unreleased doc version" + }, + "theme.docs.versions.unmaintainedVersionLabel": { + "message": "此为 {siteTitle} {versionLabel} 版的文档,现已不再积极维护。", + "description": "The label used to tell the user that he's browsing an unmaintained doc version" + }, + "theme.docs.versions.latestVersionSuggestionLabel": { + "message": "最新的文档请参阅{latestVersionLink} ({versionLabel})。", + "description": "The label used to tell the user to check the latest version" + }, + "theme.docs.versions.latestVersionLinkLabel": { + "message": "最新版本", + "description": "The label used for the latest version suggestion link label" + }, + "theme.lastUpdated.atDate": { + "message": "于 {date} ", + "description": "The words used to describe on which date a page has been last updated" + }, + "theme.lastUpdated.byUser": { + "message": "由 {user} ", + "description": "The words used to describe by who the page has been last updated" + }, + "theme.lastUpdated.lastUpdatedAtBy": { + "message": "最后{byUser}{atDate}更新", + "description": "The sentence used to display when a page has been last updated, and by who" + }, + "theme.navbar.mobileVersionsDropdown.label": { + "message": "选择版本", + "description": "The label for the navbar versions dropdown on mobile view" + }, + "theme.common.skipToMainContent": { + "message": "跳到主要内容", + "description": "The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation" + }, + "theme.tags.tagsListLabel": { + "message": "标签:", + "description": "The label alongside a tag list" + }, + "theme.blog.sidebar.navAriaLabel": { + "message": "最近博文导航", + "description": "The ARIA label for recent posts in the blog sidebar" + }, + "theme.CodeBlock.copied": { + "message": "复制成功", + "description": "The copied button label on code blocks" + }, + "theme.CodeBlock.copyButtonAriaLabel": { + "message": "复制代码到剪贴板", + "description": "The ARIA label for copy code blocks button" + }, + "theme.CodeBlock.copy": { + "message": "复制", + "description": "The copy button label on code blocks" + }, + "theme.CodeBlock.wordWrapToggle": { + "message": "切换自动换行", + "description": "The title attribute for toggle word wrapping button of code block lines" + }, + "theme.DocSidebarItem.toggleCollapsedCategoryAriaLabel": { + "message": "打开/收起侧边栏菜单「{label}」", + "description": "The ARIA label to toggle the collapsible sidebar category" + }, + "theme.navbar.mobileLanguageDropdown.label": { + "message": "选择语言", + "description": "The label for the mobile language switcher dropdown" + }, + "theme.TOCCollapsible.toggleButtonLabel": { + "message": "本页总览", + "description": "The label used by the button on the collapsible TOC component" + }, + "theme.docs.sidebar.collapseButtonTitle": { + "message": "收起侧边栏", + "description": "The title attribute for collapse button of doc sidebar" + }, + "theme.docs.sidebar.collapseButtonAriaLabel": { + "message": "收起侧边栏", + "description": "The title attribute for collapse button of doc sidebar" + }, + "theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel": { + "message": "← 回到主菜单", + "description": "The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)" + }, + "theme.docs.sidebar.expandButtonTitle": { + "message": "展开侧边栏", + "description": "The ARIA label and title attribute for expand button of doc sidebar" + }, + "theme.docs.sidebar.expandButtonAriaLabel": { + "message": "展开侧边栏", + "description": "The ARIA label and title attribute for expand button of doc sidebar" + }, + "theme.SearchBar.seeAll": { + "message": "查看全部 {count} 个结果" + }, + "theme.SearchBar.label": { + "message": "搜索", + "description": "The ARIA label and placeholder for search button" + }, + "theme.SearchPage.documentsFound.plurals": { + "message": "找到 {count} 份文件", + "description": "Pluralized label for \"{count} documents found\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" + }, + "theme.SearchPage.existingResultsTitle": { + "message": "「{query}」的搜索结果", + "description": "The search page title for non-empty query" + }, + "theme.SearchPage.emptyResultsTitle": { + "message": "在文档中搜索", + "description": "The search page title for empty query" + }, + "theme.SearchPage.inputPlaceholder": { + "message": "在此输入搜索字词", + "description": "The placeholder for search page input" + }, + "theme.SearchPage.inputLabel": { + "message": "搜索", + "description": "The ARIA label for search page input" + }, + "theme.SearchPage.algoliaLabel": { + "message": "通过 Algolia 搜索", + "description": "The ARIA label for Algolia mention" + }, + "theme.SearchPage.noResultsText": { + "message": "未找到任何结果", + "description": "The paragraph for empty search result" + }, + "theme.SearchPage.fetchingNewResults": { + "message": "正在获取新的搜索结果...", + "description": "The paragraph for fetching new search results" + } +} diff --git a/i18n/zh/docusaurus-plugin-content-docs/current.json b/i18n/zh/docusaurus-plugin-content-docs/current.json new file mode 100644 index 00000000000..b3123298fd0 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current.json @@ -0,0 +1,410 @@ +{ + "version.label": { + "message": "v2.6", + "description": "The label for version current" + }, + "sidebar.tutorialSidebar.category.Getting Started": { + "message": "开始使用", + "description": "The label for category Getting Started in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Introduction": { + "message": "介绍", + "description": "The label for category Introduction in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Quick Start Guides": { + "message": "快速入门指南", + "description": "The label for category Quick Start Guides in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Deploy Rancher Manager": { + "message": "部署 Rancher Manager", + "description": "The label for category Deploy Rancher Manager in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Deploy Rancher Workloads": { + "message": "部署 Rancher 工作负载", + "description": "The label for category Deploy Rancher Workloads in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Installation and Upgrade": { + "message": "安装和升级", + "description": "The label for category Installation and Upgrade in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Installation Requirements": { + "message": "安装要求", + "description": "The label for category Installation Requirements in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Install/Upgrade on a Kubernetes Cluster": { + "message": "在 Kubernetes 集群上安装/升级 Rancher", + "description": "The label for category Install/Upgrade on a Kubernetes Cluster in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Other Installation Methods": { + "message": "其他安装方式", + "description": "The label for category Other Installation Methods in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Air-Gapped Helm CLI Install": { + "message": "离线 Helm CLI 安装", + "description": "The label for category Air-Gapped Helm CLI Install in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Rancher on a Single Node with Docker": { + "message": "使用 Docker 将 Rancher 安装到单个节点中", + "description": "The label for category Rancher on a Single Node with Docker in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Rancher Behind an HTTP Proxy": { + "message": "HTTP 代理后的 Rancher", + "description": "The label for category Rancher Behind an HTTP Proxy in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Resources": { + "message": "资源", + "description": "The label for category Resources in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Advanced Options": { + "message": "高级选项", + "description": "The label for category Advanced Options in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Enable Experimental Features": { + "message": "启用实验功能", + "description": "The label for category Enable Experimental Features in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Advanced Use Cases": { + "message": "高级用例", + "description": "The label for category Advanced Use Cases in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.How-to Guides": { + "message": "操作指南", + "description": "The label for category How-to Guides in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.New User Guides": { + "message": "新用户指南", + "description": "The label for category New User Guides in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Kubernetes Cluster Setup": { + "message": "Kubernetes 集群设置", + "description": "The label for category Kubernetes Cluster Setup in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Infrastructure Setup": { + "message": "基础设施设置", + "description": "The label for category Infrastructure Setup in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Kubernetes Clusters in Rancher Setup": { + "message": "Rancher 设置中的 Kubernetes 集群", + "description": "The label for category Kubernetes Clusters in Rancher Setup in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Checklist for Production-Ready Clusters": { + "message": "生产就绪集群的检查清单", + "description": "The label for category Checklist for Production-Ready Clusters in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Set Up Clusters from Hosted Kubernetes Providers": { + "message": "通过托管的 Kubernetes 提供商设置集群", + "description": "The label for category Set Up Clusters from Hosted Kubernetes Providers in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Launch Kubernetes with Rancher": { + "message": "使用 Rancher 启动 Kubernetes", + "description": "The label for category Launch Kubernetes with Rancher in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Use New Nodes in an Infra Provider": { + "message": "在基础设施提供商中使用新节点", + "description": "The label for category Use New Nodes in an Infra Provider in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.vSphere": { + "message": "vSphere", + "description": "The label for category vSphere in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Nutanix": { + "message": "Nutanix", + "description": "The label for category Nutanix in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Use Windows Clusters": { + "message": "使用 Windows 集群", + "description": "The label for category Use Windows Clusters in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Set Up Cloud Providers": { + "message": "设置云提供商", + "description": "The label for category Set Up Cloud Providers in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Other Cloud Providers": { + "message": "其他云提供商", + "description": "The label for category Other Cloud Providers in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Kubernetes Resources Setup": { + "message": "Kubernetes 资源设置", + "description": "The label for category Kubernetes Resources Setup in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Workloads and Pods": { + "message": "工作负载和 Pod", + "description": "The label for category Workloads and Pods in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Horizontal Pod Autoscaler": { + "message": "Horizontal Pod Autoscaler", + "description": "The label for category Horizontal Pod Autoscaler in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Load Balancer and Ingress Controller": { + "message": "负载均衡器和 Ingress Controller", + "description": "The label for category Load Balancer and Ingress Controller in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Helm Charts in Rancher": { + "message": "Rancher 中的 Helm Chart", + "description": "The label for category Helm Charts in Rancher in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Deploy Apps Across Clusters": { + "message": "跨集群部署应用", + "description": "The label for category Deploy Apps Across Clusters in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Backup, Restore, and Disaster Recovery": { + "message": "备份、恢复和灾难恢复", + "description": "The label for category Backup, Restore, and Disaster Recovery in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Advanced User Guides": { + "message": "高级用户指南", + "description": "The label for category Advanced User Guides in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Authentication, Permissions, and Global Configuration": { + "message": "身份验证、权限和全局配置", + "description": "The label for category Authentication, Permissions, and Global Configuration in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.About Authentication": { + "message": "身份验证", + "description": "The label for category About Authentication in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Authentication Config": { + "message": "身份验证配置", + "description": "The label for category Authentication Config in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Configure Microsoft AD Federation Service (SAML)": { + "message": "配置 Microsoft AD FS (SAML)", + "description": "The label for category Configure Microsoft AD Federation Service (SAML) in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Configure Shibboleth (SAML)": { + "message": "配置 Shibboleth (SAML)", + "description": "The label for category Configure Shibboleth (SAML) in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Manage Role-Based Access Control (RBAC)": { + "message": "管理 RBAC", + "description": "The label for category Manage Role-Based Access Control (RBAC) in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.About Provisioning Drivers": { + "message": "配置驱动", + "description": "The label for category About Provisioning Drivers in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.About RKE1 Templates": { + "message": "RKE1 模板", + "description": "The label for category About RKE1 Templates in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Manage Clusters": { + "message": "管理集群", + "description": "The label for category Manage Clusters in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Access Clusters": { + "message": "访问集群", + "description": "The label for category Access Clusters in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Install Cluster Autoscaler": { + "message": "安装 Cluster Autoscaler", + "description": "The label for category Install Cluster Autoscaler in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Create Kubernetes Persistent Storage": { + "message": "创建 Kubernetes 持久存储", + "description": "The label for category Create Kubernetes Persistent Storage in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Manage Persistent Storage": { + "message": "管理持久存储", + "description": "The label for category Manage Persistent Storage in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Provisioning Storage Examples": { + "message": "配置存储示例", + "description": "The label for category Provisioning Storage Examples in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Manage Projects": { + "message": "管理项目", + "description": "The label for category Manage Projects in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Manage Project Resource Quotas": { + "message": "管理项目资源配额", + "description": "The label for category Manage Project Resource Quotas in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Monitoring/Alerting Guides": { + "message": "监控/告警指南", + "description": "The label for category Monitoring/Alerting Guides in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Prometheus Federator Guides": { + "message": "Prometheus Federator 指南", + "description": "The label for category Prometheus Federator Guides in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Monitoring V2 Configuration Guides": { + "message": "Monitoring V2 配置指南", + "description": "The label for category Monitoring V2 Configuration Guides in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Advanced Configuration": { + "message": "高级配置", + "description": "The label for category Advanced Configuration in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Istio Setup Guide": { + "message": "Istio 设置指南", + "description": "The label for category Istio Setup Guide in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.CIS Scan Guides": { + "message": "CIS 扫描指南", + "description": "The label for category CIS Scan Guides in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Reference Guides": { + "message": "参考指南", + "description": "The label for category Reference Guides in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Best Practices": { + "message": "最佳实践", + "description": "The label for category Best Practices in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Rancher Server": { + "message": "Rancher Server", + "description": "The label for category Rancher Server in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Rancher-Managed Clusters": { + "message": "Rancher 管理的集群", + "description": "The label for category Rancher-Managed Clusters in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Rancher Manager Architecture": { + "message": "Rancher Manager 架构", + "description": "The label for category Rancher Manager Architecture in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Cluster Configuration": { + "message": "集群配置", + "description": "The label for category Cluster Configuration in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Rancher Server Configuration": { + "message": "Rancher Server 配置", + "description": "The label for category Rancher Server Configuration in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.GKE Cluster Configuration": { + "message": "GKE 集群配置", + "description": "The label for category GKE Cluster Configuration in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Use Existing Nodes": { + "message": "使用现有节点", + "description": "The label for category Use Existing Nodes in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Downstream Cluster Configuration": { + "message": "下游集群配置", + "description": "The label for category Downstream Cluster Configuration in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Node Template Configuration": { + "message": "节点模板配置", + "description": "The label for category Node Template Configuration in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Machine Configuration": { + "message": "主机配置", + "description": "The label for category Machine Configuration in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Single-Node Rancher in Docker": { + "message": "Docker 中的单节点 Rancher", + "description": "The label for category Single-Node Rancher in Docker in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Installation References": { + "message": "安装参考", + "description": "The label for category Installation References in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Amazon EKS Permissions": { + "message": "Amazon EKS 权限", + "description": "The label for category Amazon EKS Permissions in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Backup & Restore Configuration": { + "message": "Backup 和 Restore 配置", + "description": "The label for category Backup & Restore Configuration in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Configure OpenLDAP": { + "message": "配置 OpenLDAP", + "description": "The label for category Configure OpenLDAP in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Monitoring V2 Configuration": { + "message": "Monitoring V2 配置", + "description": "The label for category Monitoring V2 Configuration in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Prometheus Federator": { + "message": "Prometheus Federator", + "description": "The label for category Prometheus Federator in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.User Settings": { + "message": "用户设置", + "description": "The label for category User Settings in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.CLI with Rancher": { + "message": "Rancher CLI", + "description": "The label for category CLI with Rancher in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.About the API": { + "message": "关于 API", + "description": "The label for category About the API in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Pipelines": { + "message": "流水线", + "description": "The label for category Pipelines in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Rancher Security": { + "message": "Rancher 安全", + "description": "The label for category Rancher Security in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Rancher v2.6 Hardening Guides": { + "message": "Rancher 2.6 强化指南", + "description": "The label for category Rancher v2.6 Hardening Guides in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.SELinux RPM": { + "message": "SELinux RPM", + "description": "The label for category SELinux RPM in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Explanations": { + "message": "说明", + "description": "The label for category Explanations in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Integrations in Rancher": { + "message": "Rancher 中的集成", + "description": "The label for category Integrations in Rancher in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.CIS Scans": { + "message": "CIS 扫描", + "description": "The label for category CIS Scans in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Fleet - GitOps at Scale": { + "message": "Fleet - 大规模的 GitOps", + "description": "The label for category Fleet - GitOps at Scale in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Istio": { + "message": "Istio", + "description": "The label for category Istio in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Configuration Options": { + "message": "配置选项", + "description": "The label for category Configuration Options in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Logging": { + "message": "Logging", + "description": "The label for category Logging in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Custom Resource Configuration": { + "message": "自定义资源配置", + "description": "The label for category Custom Resource Configuration in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Monitoring and Alerting": { + "message": "监控和告警", + "description": "The label for category Monitoring and Alerting in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.FAQ": { + "message": "常见问题", + "description": "The label for category FAQ in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Troubleshooting": { + "message": "故障排除", + "description": "The label for category Troubleshooting in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Kubernetes Components": { + "message": "Kubernetes 组件", + "description": "The label for category Kubernetes Components in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Other Troubleshooting Tips": { + "message": "其他故障排除提示", + "description": "The label for category Other Troubleshooting Tips in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Cloud Marketplace Integration": { + "message": "云 Marketplace 集成", + "description": "The label for category Cloud Marketplace Integration in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.AWS Marketplace Integration": { + "message": "AWS Marketplace 集成", + "description": "The label for category AWS Marketplace Integration in sidebar tutorialSidebar" + } +} diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/backups/docker-installs/docker-installs.md b/i18n/zh/docusaurus-plugin-content-docs/current/backups/docker-installs/docker-installs.md new file mode 100644 index 00000000000..0c3d24b6536 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/backups/docker-installs/docker-installs.md @@ -0,0 +1,8 @@ +--- +title: 备份和恢复 Docker 安装的 Rancher +shortTitle: Docker 安装 +weight: 10 +--- + +- [备份](../../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/current/cluster-provisioning/rke-clusters/options/options.md b/i18n/zh/docusaurus-plugin-content-docs/current/cluster-provisioning/rke-clusters/options/options.md new file mode 100644 index 00000000000..c304b710228 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/cluster-provisioning/rke-clusters/options/options.md @@ -0,0 +1,6 @@ +--- +title: RKE 集群配置 +weight: 2300 +--- + +本文已迁移到[此处](../../../reference-guides/cluster-configuration/rancher-server-configuration/rke1-cluster-configuration.md)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/contribute-to-rancher.md b/i18n/zh/docusaurus-plugin-content-docs/current/contribute-to-rancher.md new file mode 100644 index 00000000000..200b9cfc577 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/contribute-to-rancher.md @@ -0,0 +1,137 @@ +--- +title: 参与 Rancher 社区贡献 +weight: 700 +--- + +本节介绍 Rancher 使用的仓库、如何构建仓库以及提交 issue 时要包含的信息。 + +有关如何为 Rancher 项目开发做出贡献的更多详细信息,请参阅 [Rancher Developer Wiki](https://github.com/rancher/rancher/wiki)。Wiki 包含以下主题的资源: + +- 如何搭建 Rancher 开发环境并运行测试 +- Issue 在开发生命周期中的典型流程 +- 编码指南和开发最佳实践 +- 调试和故障排除 +- 开发 Rancher API + +在 Rancher Users Slack 上,开发者的频道是 **#developer**。 + +## 仓库 + +所有仓库都位于我们的主要 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)。 + +![Rancher diagram](/img/ranchercomponentsdiagram-2.6.svg)
+用于配置/管理 Kubernetes 集群的 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 镜像中。 + +## 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` 的输出,这些输出会显示进程/内存/磁盘的使用情况。 + +## 文档 + +如果你对我们的文档有修改意见,请在我们的文档仓库中提交 PR。 + +- [Rancher 2.x 文档仓库](https://github.com/rancher/docs):Rancher 2.x 所有文档都在这个仓库中。具体位于仓库的 `content` 文件夹中。 + +- [Rancher 1.x 文档仓库](https://github.com/rancher/rancher.github.io):Rancher 1.x 所有文档都在这个仓库中。具体位于仓库的 `rancher` 文件夹中。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/explanations.md b/i18n/zh/docusaurus-plugin-content-docs/current/explanations.md new file mode 100644 index 00000000000..4fb3fdd75fd --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/explanations.md @@ -0,0 +1,6 @@ +--- +title: 说明 +weight: 400 +--- + +**说明文档**主要用于为某个任务或主题背后的“原因”提供理论知识。说明文档是“理解导向”的,用于拓宽用户的知识。在本节中,用户可以找到有关主题的上下文和背景、替代方案和意见等,还可能找到历史原因、相关限制以及流程的工作原理。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/cis-scans/configuration-reference.md b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/cis-scans/configuration-reference.md new file mode 100644 index 00000000000..b078b6c4fe5 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/cis-scans/configuration-reference.md @@ -0,0 +1,106 @@ +--- +title: 配置 +weight: 3 +--- + +此配置参考用于帮助你管理由 `rancher-cis-benchmark` 应用创建的自定义资源。这些资源用于在集群上执行 CIS 扫描、跳过测试、设置扫描使用的测试配置文件和其他自定义配置。 + +要配置自定义资源,转到**集群**仪表板。要配置 CIS 扫描: + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 在**集群**页面上,转到要配置 CIS 扫描的集群,然后单击 **Explore**。 +1. 在左侧导航栏中,单击 **CIS Benchmark**。 + +### 扫描 + +扫描是用来根据定义的配置文件,在集群上触发 CIS 扫描的。扫描完成后会创建一份报告。 + +配置扫描时,你需要定义与 `scanProfileName` 参数一起使用的扫描配置文件的名称。 + +下面是一个 ClusterScan 自定义资源示例: + +```yaml +apiVersion: cis.cattle.io/v1 +kind: ClusterScan +metadata: + name: rke-cis +spec: + scanProfileName: rke-profile-hardened +``` + +### 配置文件 + +配置文件包含 CIS 扫描的配置,包括要使用的 Benchmark 测试版本以及要在该 Benchmark 测试中跳过的测试。 + +:::caution + +默认情况下,一些 ClusterScanProfile 会作为 `rancher-cis-benchmark` Chart 的一部分进行安装。如果用户编辑了这些默认 Benchmark 或配置文件,它们会在下一次 Chart 更新时被重置。因此,建议用户不要编辑默认的 ClusterScanProfile。 + +::: + +用户可以通过克隆 ClusterScanProfile 来创建自定义配置文件。 + +跳过的测试会列在 `skipTests` 参数下。 + +创建新配置文件时,你还需要命名配置文件。 + +`ClusterScanProfile` 示例如下: + +```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" +``` + +### Benchmark 版本 + +Benchmark 版本是指使用 `kube-bench` 运行的 Benchmark 名称,以及该 Benchmark 的有效配置参数。 + +`ClusterScanBenchmark` 定义了 CIS `BenchmarkVersion` 的名称和测试配置。`BenchmarkVersion` 名称是提供给 `kube-bench` 工具的参数。 + +默认情况下,一些 `BenchmarkVersion` 名称和测试配置会作为 CIS 扫描应用的一部分进行打包。启用此功能后,这些默认 BenchmarkVersion 将自动安装,用户可以使用它们来创建 ClusterScanProfile。 + +:::caution + +如果用户编辑了默认的 BenchmarkVersion,它们会在下一次 Chart 更新时被重置。因此,不建议编辑默认的 ClusterScanBenchmark。 + +::: + +ClusterScanBenchmark 由以下字段组成: + +- `ClusterProvider`:此 Benchmark 适用的集群提供商名称,例如,RKE、EKS、GKE。如果此基准测试可以在任何集群类型上运行,则留空。 +- `MinKubernetesVersion`:集群运行此 Benchmark 测试所需的最低 kubernetes 版本。如果不依赖特定的 Kubernetes 版本,则留空。 +- `MaxKubernetesVersion`:集群运行此 Benchmark 测试所需的最高 Kubernetes 版本。如果不依赖特定的 Kubernetes 版本,则留空。 + +`ClusterScanBenchmark` 示例如下: + +```yaml +apiVersion: cis.cattle.io/v1 +kind: ClusterScanBenchmark +metadata: + annotations: + meta.helm.sh/release-name: clusterscan-operator + meta.helm.sh/release-namespace: cis-operator-system + creationTimestamp: "2020-08-28T18:18:07Z" + generation: 1 + labels: + app.kubernetes.io/managed-by: Helm + name: cis-1.5 + resourceVersion: "203878" + selfLink: /apis/cis.cattle.io/v1/clusterscanbenchmarks/cis-1.5 + uid: 309e543e-9102-4091-be91-08d7af7fb7a7 +spec: + clusterProvider: "" + minKubernetesVersion: 1.15.0 +``` diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/cis-scans/custom-benchmark.md b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/cis-scans/custom-benchmark.md new file mode 100644 index 00000000000..b68f5d2d282 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/cis-scans/custom-benchmark.md @@ -0,0 +1,79 @@ +--- +title: 为集群扫描创建自定义 Benchmark 版本 +weight: 4 +--- + +每个 Benchmark 版本都定义了一组测试配置文件,这些文件定义了由 kube-bench 工具运行的 CIS 测试。 +`rancher-cis-benchmark` 应用安装了一些默认的 Benchmark 测试版本,这些版本列在了 CIS Benchmark 测试应用菜单下。 + +但是,某些 Kubernetes 集群可能需要自定义配置 Benchmark 测试。例如,Kubernetes 配置文件或证书的路径可能与上游 CIS Benchmark 的标准位置不同。 + +现在,你可以使用 `rancher-cis-benchmark` 应用来创建自定义 Benchmark 版本,从而运行集群扫描。 + +运行集群扫描时,你需要选择指向特定 Benchmark 版本的配置文件。 + +按照以下所有步骤添加自定义 Benchmark 版本并使用它运行扫描。 + +### 1. 准备自定义 Benchmark 版本 ConfigMap + +要创建自定义 Benchmark 版本,你需要先创建一个包含 Benchmark 版本配置文件的 ConfigMap,并将其上传到要运行扫描的 Kubernetes 集群。 + +假设要添加一个名为 `foo` 的自定义 Benchmark 版本,你可以按照以下步骤准备自定义 Benchmark 版本 ConfigMap: + +1. 创建一个名为 `foo` 的目录,并在该目录中放置所有配置 YAML 文件, kube-bench 工具会搜索这些文件。例如,通用 CIS 1.5 Benchmark 版本的配置 YAML 文件在[此处](https://github.com/aquasecurity/kube-bench/tree/master/cfg/cis-1.5)。 +1. 放置完整的 `config.yaml` 文件,其中包括所有要测试的组件。 +1. 将 Benchmark 版本名称添加到 `config.yaml` 的 `target_mapping` 中: + + ```yaml + target_mapping: + "foo": + - "master" + - "node" + - "controlplane" + - "etcd" + - "policies" + ``` +1. 通过创建 ConfigMap 将此目录上传到 Kubernetes 集群: + + ```yaml + kubectl create configmap -n foo --from-file= + ``` + +### 2. 将自定义 Benchmark 版本添加到集群 + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 在**集群**页面上,转到要添加自定义 Benchmark 的集群,然后单击 **Explore**。 +1. 在左侧导航栏中,单击 **CIS Benchmark > Benchmark 版本**。 +1. 单击**创建**。 +1. 输入自定义 Benchmark 版本的**名称**和描述。 +1. 选择要应用 Benchmark 版本的集群提供商。 +1. 在下拉列表中选择你已上传的 ConfigMap。 +1. 添加最低和最高 Kubernetes 版本限制(如果有)。 +1. 单击**创建**。 + +### 3. 为自定义 Benchmark 版本创建新配置文件 + +要使用你的自定义 Benchmark 版本运行扫描,你需要添加一个指向此 Benchmark 版本的新配置文件: + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 在**集群**页面上,转到要添加自定义 Benchmark 的集群,然后单击 **Explore**。 +1. 在左侧导航栏中,单击 **CIS Benchmark > 配置文件**。 +1. 单击**创建**。 +1. 设置**名称**和描述。在本例中,我们将其命名为 `foo-profile`。 +1. 在下拉列表中选择 Benchmark 版本。 +1. 单击**创建**。 + +### 4. 使用自定义 Benchmark 版本运行扫描 + +指向你的自定义 Benchmark 版本的 `foo` 配置文件创建完成后,你可以创建一个新的扫描,从而在 Benchmark 版本中运行自定义测试。 + +要运行扫描: + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 在**集群**页面上,转到要添加自定义 Benchmark 的集群,然后单击 **Explore**。 +1. 在左侧导航栏中,单击 **CIS Benchmark > 扫描**。 +1. 单击**创建**。 +1. 选择新的集群扫描配置文件。 +1. 单击**创建**。 + +**结果**:已生成带有扫描结果的报告。如需查看结果,请单击显示的扫描名称。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/cis-scans/rbac-for-cis-scans.md b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/cis-scans/rbac-for-cis-scans.md new file mode 100644 index 00000000000..2236977e505 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/cis-scans/rbac-for-cis-scans.md @@ -0,0 +1,48 @@ +--- +title: RBAC +shortTitle: RBAC +weight: 3 +--- + +本文介绍使用 rancher-cis-benchmark 应用所需的权限。 + +默认情况下,rancher-cis-benchmark 是集群管理员独有的功能。 + +但是,`rancher-cis-benchmark` Chart 安装了这两个默认的 `ClusterRole`: + +- cis-admin +- cis-view + +在 Rancher 中,默认情况下只有集群所有者和全局管理员具有 `cis-admin` 访问权限。 + +注意:如果你使用在 Rancher 2.5 中添加的 `cis-edit` 角色,该角色从 2.5.2 开始已被删除,删除的原因是该角色本质上与 `cis-admin` 相同。如果你为 `cis-edit` 创建了任何 clusterrolebinding,请更新这些绑定以使用 `cis-admin` ClusterRole。 + +## Cluster-Admin 访问 + +默认情况下,Rancher CIS 扫描是集群管理员独有的功能。 +换言之,只有 Rancher 全局管理员和集群的集群所有者可以: + +- 安装/卸载 rancher-cis-benchmark 应用。 +- 查看 CIS Benchmark CRD 的导航链接 - ClusterScanBenchmarks、ClusterScanProfiles、ClusterScans。 +- 列出默认的 ClusterScanBenchmarks 和 ClusterScanProfiles。 +- 创建/编辑/删除新的 ClusterScanProfiles。 +- 创建/编辑/删除新的 ClusterScan,从而在集群上运行 CIS 扫描。 +- 在 ClusterScan 完成后查看并下载 ClusterScanReport。 + + +## Kubernetes 默认角色的默认权限摘要 + +rancher-cis-benchmark 创建了三个 `ClusterRole`,并将 CIS Benchmark CRD 访问权限添加到以下默认 K8s `ClusterRole`: + +| Chart 创建的 ClusterRole | 默认 K8s ClusterRole | 角色赋予的权限 | +| ------------------------------| ---------------------------| ---------------------------| +| `cis-admin` | `admin` | 增刪查改(CRUD)clusterscanbenchmarks、clusterscanprofiles、clusterscans、clusterscanreports CR | +| `cis-view` | `view ` | 列出 (R) clusterscanbenchmarks、clusterscanprofiles、clusterscans、clusterscanreports CR | + + +默认情况下,只有 cluster-owner 角色能管理和使用 `rancher-cis-benchmark` 功能。 + +默认情况下,其他 Rancher 角色(cluster-member、project-owner 和 project-member)没有管理和使用 rancher-cis-benchmark 资源的权限。 + +但是,如果 cluster-owner 想将访问权限分配给其他用户,他们可以手动创建目标用户与上述 CIS ClusterRole 之间的 ClusterRoleBinding,从而实现权限分配。 +`rancher-cis-benchmark` ClusterRole 不支持自动角色聚合。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/cis-scans/skipped-and-not-applicable-tests.md b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/cis-scans/skipped-and-not-applicable-tests.md new file mode 100644 index 00000000000..4291a38840e --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/cis-scans/skipped-and-not-applicable-tests.md @@ -0,0 +1,54 @@ +--- +title: 跳过和不适用的测试 +weight: 3 +--- + +本文列出了在 RKE 的 permissive 测试配置文件中跳过的测试。 + +> 在 v2.5 生成的报告中,此页面上被跳过且不适用的测试将会计为不适用。跳过的测试计数只会涉及用户定义的跳过测试。这样,你可以区分用户要跳过的测试与 RKE permissive 测试配置文件中默认跳过的测试。 + +## CIS Benchmark v1.5 + +### CIS Benchmark v1.5 跳过的测试 + +| 数字 | 描述 | 跳过的原因 | +| ---------- | ------------- | --------- | +| 1.1.12 | 确保 etcd 数据目录所有权设置为 etcd:etcd(自动) | etcd 数据目录所有权需要系统 ServiceAccount。有关如何配置所有权的更多信息,请参阅 Rancher 的强化指南。 | +| 1.2.6 | 确保根据需要设置 --kubelet-certificate-authority 参数(自动) | 在生成服务证书时,功能可能会与某些云提供商所需的主机名覆盖一起中断。 | +| 1.2.16 | 确保设置了准入控制插件 PodSecurityPolicy(自动) | 启用 Pod 安全策略可能会导致应用意外失败。 | +| 1.2.33 | 确保能根据需要设置 --encryption-provider-config 参数(手动) | 启用加密会改变恢复加密数据的方式。 | +| 1.2.34 | 确保正确配置了加密提供程序(手动) | 启用加密会改变恢复加密数据的方式。 | +| 4.2.6 | 确保 --protect-kernel-defaults 参数设置为 true(自动) | 在配置集群之前需要系统级别的配置,才能将此参数设置为 true。 | +| 4.2.10 | 确保根据需要设置 --tls-cert-file 和 --tls-private-key-file 参数(自动) | 在生成服务证书时,功能可能会与某些云提供商所需的主机名覆盖一起中断。 | +| 5.1.5 | 确保未主动使用默认 ServiceAccount。(自动) | Kubernetes 提供了要使用的默认 ServiceAccount。 | +| 5.2.2 | 最小化需要共享主机进程 ID 命名空间的容器准入(自动) | 启用 Pod 安全策略可能会导致应用意外失败。 | +| 5.2.3 | 最小化需要共享主机 IPC 命名空间的容器准入(自动) | 启用 Pod 安全策略可能会导致应用意外失败。 | +| 5.2.4 | 最小化需要共享主机网络命名空间的容器准入(自动) | 启用 Pod 安全策略可能会导致应用意外失败。 | +| 5.2.5 | 使用 allowPrivilegeEscalation(自动)最小化容器的准入 | 启用 Pod 安全策略可能会导致应用意外失败。 | +| 5.3.2 | 确保所有命名空间都定义了网络策略(自动) | 启用网络策略可以防止某些应用进行相互通信。 | +| 5.6.4 | 确保不使用 Default 命名空间(自动) | Kubernetes 提供了一个 Default 命名空间。 | + +### CIS Benchmark v1.5 不适用的测试 + +| 数字 | 描述 | 不适用的原因 | +| ---------- | ------------- | --------- | +| 1.1.1 | 确保 API Server pod 规范文件权限具有 644 或更严格的设置(自动) | RKE 配置的集群不需要或维护 kube-apiserver 的配置文件。所有配置在容器运行时作为参数传入。 | +| 1.1.2 | 确保 API Server pod 规范文件所有权设置为 root:root(自动) | RKE 配置的集群不需要或维护 kube-apiserver 的配置文件。所有配置在容器运行时作为参数传入。 | +| 1.1.3 | 确保 Controller Manager pod 规范文件权限具有 644 或更严格的设置(自动) | RKE 配置的集群不需要或维护 controller-manager 的配置文件。所有配置在容器运行时作为参数传入。 | +| 1.1.4 | 确保 Controller Manager pod 规范文件所有权设置为 root:root(自动) | RKE 配置的集群不需要或维护 controller-manager 的配置文件。所有配置在容器运行时作为参数传入。 | +| 1.1.5 | 确保 Scheduler pod 规范文件权限具有 644 或更严格的设置(自动) | RKE 配置的集群不需要或维护 Scheduler 的配置文件。所有配置在容器运行时作为参数传入。 | +| 1.1.6 | 确保 Scheduler pod 规范文件所有权设置为 root:root(自动) | RKE 配置的集群不需要或维护 Scheduler 的配置文件。所有配置在容器运行时作为参数传入。 | +| 1.1.7 | 确保 etcd pod 规范文件权限具有 644 或更严格的设置(自动) | RKE 配置的集群不需要或维护 etcd 的配置文件。所有配置在容器运行时作为参数传入。 | +| 1.1.8 | 确保 etcd pod 规范文件所有权设置为 root:root(自动) | RKE 配置的集群不需要或维护 etcd 的配置文件。所有配置在容器运行时作为参数传入。 | +| 1.1.13 | 确保 admin.conf 文件权限具有 644 或更严格的设置(自动) | RKE 配置的集群不会在节点上存储 kubernetes 的默认 kubeconfig 凭证文件。 | +| 1.1.14 | 确保 admin.conf 文件所有权设置为 root:root(自动) | RKE 配置的集群不会在节点上存储 kubernetes 的默认 kubeconfig 凭证文件。 | +| 1.1.15 | 确保 scheduler.conf 文件权限具有 644 或更严格的设置(自动) | RKE 配置的集群不需要或维护 Scheduler 的配置文件。所有配置在容器运行时作为参数传入。 | +| 1.1.16 | 确保 scheduler.conf 文件所有权设置为 root:root(自动) | RKE 配置的集群不需要或维护 Scheduler 的配置文件。所有配置在容器运行时作为参数传入。 | +| 1.1.17 | 确保 controller-manager.conf 文件权限具有 644 或更严格的设置(自动) | RKE 配置的集群不需要或维护 controller-manager 的配置文件。所有配置在容器运行时作为参数传入。 | +| 1.1.18 | 确保将 controller-manager.conf 文件所有权设置为 root:root(自动) | RKE 配置的集群不需要或维护 controller-manager 的配置文件。所有配置在容器运行时作为参数传入。 | +| 1.3.6 | 确保 RotateKubeletServerCertificate 参数设置为 true(自动) | RKE 配置的集群直接使用 RKE 处理证书轮换。 | +| 4.1.1 | 确保 kubelet 服务文件权限具有 644 或更严格的设置(自动) | RKE 配置的集群不需要或维护 kubelet 服务的配置文件。所有配置在容器运行时作为参数传入。 | +| 4.1.2 | 确保 kubelet 服务文件所有权设置为 root:root(自动) | RKE 配置的集群不需要或维护 kubelet 服务的配置文件。所有配置在容器运行时作为参数传入。 | +| 4.1.9 | 确保 kubelet 配置文件权限具有 644 或更严格的设置(自动) | RKE 配置的集群不需要或维护 kubelet 的配置文件。所有配置在容器运行时作为参数传入。 | +| 4.1.10 | 确保 kubelet 配置文件所有权设置为 root:root(自动) | RKE 配置的集群不需要或维护 kubelet 的配置文件。所有配置在容器运行时作为参数传入。 | +| 4.2.12 | 确保 RotateKubeletServerCertificate 参数设置为 true(自动) | RKE 配置的集群直接使用 RKE 处理证书轮换。 | \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/cloud-marketplace/aws-cloud-marketplace/adapter-requirements.md b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/cloud-marketplace/aws-cloud-marketplace/adapter-requirements.md new file mode 100644 index 00000000000..de6c41a07d3 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/cloud-marketplace/aws-cloud-marketplace/adapter-requirements.md @@ -0,0 +1,97 @@ +--- +title: 先决条件 +weight: 1 +--- + +### 1. 设置许可证管理器和购买支持 + +首先,完成许可证管理器设置的[第一步](https://docs.aws.amazon.com/license-manager/latest/userguide/getting-started.html)。 +然后,转到 AWS Marketplace。找到 “Rancher Premium Support Billing Container Starter Pack”。最后,购买至少一项 Entitlement。 + +如果你已使用 “Rancher Setup” AWS Marketplace 产品安装了 Rancher,请跳至[步骤 4](#4-创建-oidc-提供商)。 + +> **注意**:每项 Entitlement 都对一定数量的节点授予访问支持的权限。你可以后续根据需要购买更多许可证。 + +### 2. 创建 EKS 集群 +按照 [Rancher 文档](../../../../getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/rancher-on-amazon-eks.md)创建 EKS 集群。进行到[安装 Rancher Helm Chart](../../../../getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/rancher-on-amazon-eks.md#8-安装-rancher-helm-chart)(最后一步)时,**停止并返回此页面**。该集群需要满足以下要求: + +- EKS 1.22 版本。 +- 集群中的每个节点都可以访问包含 Rancher 及其相关镜像的镜像仓库。 +- 集群中的每个节点都可以访问存储 CSP Adapter 的 ECR 仓库。 +- 集群中的每个节点都可以访问许可证管理器服务。 +- 集群中的每个节点都可以访问 STS 服务的全局端点。 + +### 3. 安装 Rancher + +除了在 [Rancher 文档](../../../../getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/rancher-on-amazon-eks.md#8-安装-rancher-helm-chart)中指定的 Rancher 安装选项外,你还需要启用其它指标。 +你可以通过 Helm CLI 使用以下选项来完成: + +```bash +--set extraEnv\[0\].name="CATTLE_PROMETHEUS_METRICS" --set-string extraEnv\[0\].value=true +``` + +你还可以使用 values.yaml,如下所示: + +```yaml +extraEnv: + - name: "CATTLE_PROMETHEUS_METRICS" + value: "true" +``` + +你还需要安装 Rancher 2.6.7 或更高版本。 + +### 4. 创建 OIDC 提供程序 + +按照 [AWS 文档](https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html)为上一节中指定的集群创建 OIDC 提供程序。 + +### 5. 创建 IAM 角色 + +CSP Adapter 需要 IAM 角色才能签入/签出 Entitlement。 + +首先,配置如下的信任策略。你需要将 `MY_AWS_ACC` 替换为你的 AWS 帐号,将 `MY_AWS_REGION` 替换为你的 AWS 区域,并将 `MY_OIDC_PROVIDER` 替换为你的 OIDC 提供商 ID: + +```json +{ + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Principal": { + "Federated": "arn:aws:iam::${MY_AWS_ACC}:oidc-provider/oidc.eks.${MY_AWS_REGION}.amazonaws.com/id/${MY_OIDC_PROVIDER}" + }, + "Action": "sts:AssumeRoleWithWebIdentity", + "Condition": { + "StringEquals": { + "oidc.eks.${MY_AWS_REGION}.amazonaws.com/id/${MY_OIDC_PROVIDER}:sub": "system:serviceaccount:cattle-csp-adapter-system:rancher-csp-adapter", + "oidc.eks.${MY_AWS_REGION}.amazonaws.com/id/${MY_OIDC_PROVIDER}:aud": "sts.amazonaws.com" + } + } + } + ] +} +``` + +接下来,为具有以下权限的角色使用策略: + +```json +{ + "Version": "2012-10-17", + "Statement": [ + { + "Sid": "RancherCSPAdapterPermissions", + "Effect": "Allow", + "Action": [ + "license-manager:ListReceivedLicenses", + "license-manager:CheckoutLicense", + "license-manager:ExtendLicenseConsumption", + "license-manager:CheckInLicense", + "license-manager:GetLicense", + "license-manager:GetLicenseUsage" + ], + "Resource": "*" + } + ] +} +``` + +保存角色的名称。稍后安装 CSP Adapter 时将需要它。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/cloud-marketplace/aws-cloud-marketplace/common-issues.md b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/cloud-marketplace/aws-cloud-marketplace/common-issues.md new file mode 100644 index 00000000000..f9879cbc7f6 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/cloud-marketplace/aws-cloud-marketplace/common-issues.md @@ -0,0 +1,29 @@ +--- +title: 常见问题 +weight: 4 +--- + +**安装 Adapter 后,Rancher 中出现一条横幅消息,上面写着 "AWS Marketplace Adapter: Unable to run the adapter, please check the adapter logs"** + +此错误表示 Adapter 安装到集群中时发生了一个错误,导致它无法正确签入/签出许可证。 + +这通常是因为 IAM 角色设置不正确。请查看[先决条件](./adapter-requirements.md)并确认: + +- 已创建一个 OIDC 提供程序,并且它已关联到运行 Rancher 的集群。 +- IAM 角色已配置为信任此 OIDC 提供程序。 +- IAM 角色至少具有策略中概述的权限。 + +如果上述所有配置均已正确配置,请联系支持寻求帮助。 + +**我看到一条横幅消息,上面写着 "AWS Marketplace Adapter: You have exceeded your licensed node count. At least x more license(s) are required in AWS to become compliant"** + +此消息表明你没有足够的 Entitlement 来满足 Rancher 当前管理的节点数量。 + +请记住以下限制: + +- 每个 Entitlement 仅对一定数量的节点有效。 +- 当前由 Rancher 管理的每个节点都计入你的总使用量(安装了集群 Rancher 的节点除外)。 +- 每个 Entitlement 最多可以被一个 Rancher 实例使用。例如,如果你的账户中有两个正在运行的 Rancher 实例(每个都安装在单独的 EKS 集群上),那么你至少需要两个 Entitlement。 + +你最近可能还卸载/重新安装了 Adapter。如果 Adapter 丢失了它当前管理的许可证的跟踪,则可能需要一个小时来解析许可证的实际状态。 + diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/cloud-marketplace/aws-cloud-marketplace/install-adapter.md b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/cloud-marketplace/aws-cloud-marketplace/install-adapter.md new file mode 100644 index 00000000000..46a9c22ba4e --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/cloud-marketplace/aws-cloud-marketplace/install-adapter.md @@ -0,0 +1,144 @@ +--- +title: 安装 Adapter +weight: 2 +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +> **重要提示**:如果你尝试重新安装 Adapter,你可能会在长达一小时的时间内收到不合规的错误消息。 + +### 1. 获取对 Local 集群的访问权限 + +> **注意**:只有管理员用户才能访问 Local 集群。因为 CSP Adapter 必须安装在 Local 集群中,所以此安装必须由管理员用户执行。 + +首先,单击 Local 集群并下载 kubeconfig 令牌。然后,使用下方的命令配置 CLI 以使用此新令牌,你需要将 `$TOKEN_PATH` 替换为文件系统上令牌的下载路径: + +```bash +export KUBECONFIG=$TOKEN_PATH +``` + +### 2. 创建 Adapter 命名空间 + +创建要安装 Adapter 的命名空间: + +```bash +kubectl create ns cattle-csp-adapter-system +``` + +### 3. 创建证书密文 + +Adapter 需要访问 Rancher 用来与 Rancher Server 通信的根 CA。有关 Rancher 支持的证书选项的更多信息,请参阅 [Chart 选项页面](../../../../reference-guides/installation-references/helm-chart-options.md)。 + +如果你的 Rancher 使用由公认的证书颁发机构(例如 Let's Encrypt)签发的证书,你可以跳到[步骤 4](#4-安装-chart)。 + +但是,如果你的 Rancher 使用了自定义证书(例如 Rancher 生成的证书或由私有证书颁发机构签发的证书),你需要为该 CA 提供 PEM 编码格式的证书以便 Adapter 可以与 Rancher 通信。 + +首先,检索 Rancher 正在使用的证书并将其放入名为 `ca-additional.pem` 的文件中。如果你使用 Rancher 生成的证书,你可以使用以下命令完成此操作: + +```bash +kubectl get secret tls-rancher -n cattle-system -o jsonpath="{.data.tls\.crt}" | base64 -d >> ca-additional.pem +``` + +然后,创建一个使用此证书的密文: + +```bash +kubectl -n cattle-csp-adapter-system create secret generic tls-ca-additional --from-file=ca-additional.pem +``` + +> **重要提示**:不要更改文件名或创建的密文的名称,否则可能会导致 Adapter 运行出错。 + +### 4. 安装 Chart + +首先,使用以下命令添加 `rancher/charts` 仓库: + +```bash +helm repo add rancher-charts https://charts.rancher.io +``` + +接下来,安装 CSP Adapter。你必须指定多个值,其中包括账号号码以及在先决条件中创建的角色的名称。 + +在下方的操作中,将 `$MY_ACC_NUM` 替换为你的 AWS 账号,将 `$MY_ROLE_NAME` 替换为先决条件中创建的角色的名称。 + +> **注意**:如果你使用 shell 变量,请不要使用引号。例如,MY_ACC_NUM=123456789012 可用,但 MY_ACC_NUM="123456789012" 将失败。 + +> **注意**:使用欧盟和英国的 AWS Marketplace 列表的账号需要额外指定 `--set image.repository=rancher/rancher-csp-adapter-eu` 选项。要查看你的账号在安装 Adapter 时是否需要此选项,请参阅 Marketplace 列表的使用说明。 + +> **注意**:请务必严格按照以下说明进行操作。尤其需要注意安装 1.0.1 版本 Adapter 的命令(使用 `--set image.tag=v1.0.1`),这是确保节点数量准确的关键。 + + + + +```bash +helm install rancher-csp-adapter rancher-charts/rancher-csp-adapter --namespace cattle-csp-adapter-system --set aws.enabled=true --set aws.roleName=$MY_ROLE_NAME --set-string aws.accountNumber=$MY_ACC_NUM --set image.tag=v1.0.1 +``` + + +你也可以使用 `values.yaml` 并指定以下选项: + +```yaml +image: +tag: v1.0.1 +aws: +enabled: true +accountNumber: "$MY_ACC_NUM" +roleName: $MY_ROLE_NAME +``` + +> **注意**:账号需要像上面那样以字符串格式指定,否则安装会失败。 + +然后,使用以下命令安装 Adapter: + +```bash +helm install rancher-csp-adapter rancher-charts/rancher-csp-adapter -f values.yaml +``` + + + + +```bash +helm install rancher-csp-adapter rancher-charts/rancher-csp-adapter --namespace cattle-csp-adapter-system --set aws.enabled=true --set aws.roleName=$MY_ROLE_NAME --set-string aws.accountNumber=$MY_ACC_NUM --set additionalTrustedCAs=true --set image.tag=v1.0.1 +``` + +你也可以使用 `values.yaml` 并指定以下选项: + +```yaml +image: +tag: v1.0.1 +aws: +enabled: true +accountNumber: "$MY_ACC_NUM" +roleName: $MY_ROLE_NAME +additionalTrustedCAs: true +``` + +> **注意**:账号需要像上面那样以字符串格式指定,否则安装会失败。 + +然后,使用以下命令安装 Adapter: + +```bash +helm install rancher-csp-adapter rancher-charts/rancher-csp-adapter -f values.yaml +``` + + + + +### 5. 管理证书更新 + +如果你在[步骤 3](#3-创建证书密文) 中创建了一个用于存储自定义证书的密文,则随着证书的轮换,你将需要更新此密文。 + +首先,使用以下命令删除 cattle-csp-adapter-system 命名空间中的原始密文: + +```bash +kubectl delete secret tls-ca-additional -n cattle-csp-adapter-system +``` + +然后,按照[步骤 3](#3-创建证书密文) 中的安装步骤,将密文的内容替换为更新后的值。 + +最后,重新启动 rancher-csp-adapter deployment 来确保更新后的值可供 Adapter 使用: + +```bash +kubectl rollout restart deploy rancher-csp-adapter -n cattle-csp-adapter-system +``` + +> **注意**:有一些方法(例如 cert-manager 的 [trust operator](https://cert-manager.io/docs/projects/trust/))可以帮助你减少手动轮换任务的数量。这些选项不受官方支持,但可能对想要自动化某些任务的用户有用。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/cloud-marketplace/aws-cloud-marketplace/uninstall-adapter.md b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/cloud-marketplace/aws-cloud-marketplace/uninstall-adapter.md new file mode 100644 index 00000000000..4b78d93e7ea --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/cloud-marketplace/aws-cloud-marketplace/uninstall-adapter.md @@ -0,0 +1,22 @@ +--- +title: 卸载 Adapter +weight: 3 +--- + +### 1. 使用 Helm 卸载 Adapter Chart: + +```bash +helm uninstall rancher-csp-adapter -n cattle-csp-adapter-system +``` + +### 2. 删除为 Adapter 创建的命名空间: + +```bash +kubectl delete ns cattle-csp-adapter-system +``` + +### 3. (可选)删除未完成的用户通知: + +```bash +kubectl delete RancherUserNotification csp-compliance +``` diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/cloud-marketplace/supportconfig.md b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/cloud-marketplace/supportconfig.md new file mode 100644 index 00000000000..00c8b5005fe --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/cloud-marketplace/supportconfig.md @@ -0,0 +1,54 @@ +--- +title: Supportconfig Bundle +weight: 100 +--- + +安装 CSP Adapter 后,你将能够生成一个 Supportconfig Bundle。此 Bundle 是一个 tar 包,可用于快速提供支持信息。 + +你可以通过 Rancher 或通过直接访问安装 Rancher 的集群来创建这些 Bundle。请注意,建议通过 Rancher 访问。 + +> **注意**:无论采用何种方法,只有管理员可以生成/下载 Supportconfig Bundle。 + +### 通过 Rancher 访问 + +首先,点击汉堡菜单。然后单击 `Get Support` 按钮。 + +![Get Support](/img/support-help.png) + +在下一页中,单击 `Generate Support Config` 按钮。 + +> **注意**:如果未安装 Adapter ,则不会出现生成 Supportconfig Bundle 的选项。你必须安装 CSP Adapter 才能生成 Supportconfig Bundle。 + +![Get Support](/img/generate-support-config.png) + +### 不通过 Rancher 进行访问 + +首先,为安装 Rancher 的集群生成 kubeconfig。 + +> **注意**:如果 Rancher 宕机,你将无法使用 Rancher 生成的 kubeconfig 令牌访问集群。 + +配置你的 shell 环境以使用此 kubeconfig 令牌: + +```bash +export KUBECONFIG=$MY_KUBECONFIG_PATH +``` + +建议在运行此命令时创建一个临时工作目录,如下所示: + +```bash +mkdir temp && cd temp +``` + +然后,检索 Supportconfig Bundle: + +```bash +mkdir rancher && kubectl get configmap csp-config -n cattle-csp-adapter-system -o=jsonpath='{.data.data}' >> rancher/config.json && tar -c -f supportconfig_rancher.tar rancher && rm -rf rancher +``` + +这将在你的当前目录中创建一个 `supportconfig_rancher.tar` 文件。 + +由于 gnu-tar 和 bsd-tar 不兼容,在 Mac 上运行这些命令的用户可能会遇到问题。如果支持部门在读取你制作的 Supportconfig 时出现问题,你可以先尝试在你的路径上将 gnu-tar 作为 `gtar` 进行访问,然后运行以下命令: + +```bash +mkdir rancher && kubectl get configmap csp-config -n cattle-csp-adapter-system -o=jsonpath='{.data.data}' >> rancher/config.json && gtar -c -f supportconfig_rancher.tar rancher && rm -rf rancher +``` diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/fleet-gitops-at-scale/architecture.md b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/fleet-gitops-at-scale/architecture.md new file mode 100644 index 00000000000..b93df60b22c --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/fleet-gitops-at-scale/architecture.md @@ -0,0 +1,9 @@ +--- +title: 架构 +weight: 1 +--- + +Fleet 可以管理来自 Git 的原始 Kubernetes YAML、Helm Chart、Kustomize 或三者的任何组合的部署。无论来源如何,所有资源都会动态转化为 Helm Chart,Helm 会用作引擎来将所有资源部署到集群中。这给了你高度的控制、一致性和可审计性。Fleet 不仅关注扩展能力,而且还提供高度的控制和可见性,从而让用户准确了解集群上安装的内容。 + +![架构](/img/fleet-architecture.svg) + diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/fleet-gitops-at-scale/use-fleet-behind-a-proxy.md b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/fleet-gitops-at-scale/use-fleet-behind-a-proxy.md new file mode 100644 index 00000000000..df2d6aca676 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/fleet-gitops-at-scale/use-fleet-behind-a-proxy.md @@ -0,0 +1,55 @@ +--- +title: 在代理后使用 Fleet +weight: 3 +--- + +在本节中,你将学习如何在一个设置中启用 Fleet,该设置有一个具有公共 IP 的 Rancher Server,以及一个没有公共 IP 但配置为使用代理的 Kubernetes 集群。 + +Rancher 不会与已注册的下游集群建立连接。部署在下游集群上的 Rancher agent 必须能够与 Rancher 建立连接。 + +要让 Fleet 在代理后工作,你需要为下游集群设置 **Agent 环境变量**。以下是集群级别的配置选项。 + +你可以通过 Rancher UI 为任何集群类型(包括注册集群和自定义集群)配置这些环境变量。可以在编辑现有集群或配置新集群时添加变量。 + +对于公共下游集群,[在 Rancher UI 中设置必要的环境变量](#在-rancher-ui-中设置环境变量)就足够了。 + +对于私有节点或私有集群,则需要在节点上设置环境变量。然后,在配置自定义集群或注册私有集群时,在 Rancher UI 中配置环境变量。有关如何在 K3s Kubernetes 集群中的 Ubuntu 节点上设置环境变量的示例,请参阅[本节](#在私有节点上设置环境变量)。 + +# 必要的环境变量 + +为代理添加 Fleet agent 环境变量时,将 替换为你的私有代理 IP。 + +| 变量名称 | 值 | +|------------------|--------| +| `HTTP_PROXY` | http://:8888 | +| `HTTPS_PROXY` | http://:8888 | +| `NO_PROXY` | 127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,.svc,.cluster.local | + +## 在 Rancher UI 中设置环境变量 + +要将环境变量添加到现有集群: + +1. 点击 **☰ > 集群管理**。 +1. 转到要添加环境变量的集群,然后单击 **⋮ > 编辑配置**。 +1. 单击**高级选项**。 +1. 单击**添加环境变量**。 +1. 输入[必要的环境变量](#必要的环境变量) +1. 单击**保存**。 + +**结果**:Fleet agent 会在代理后工作。 + +## 在私有节点上设置环境变量 + +对于私有节点和私有集群,代理环境变量需要在节点本身上设置,以及从 Rancher UI 配置。 + +此示例显示了如何在 K3s Kubernetes 集群中的 Ubuntu 节点上设置环境变量: + +``` +ssh -o ForwardAgent=yes ubuntu@ +ssh +export proxy_private_ip= +export HTTP_PROXY=http://${proxy_private_ip}:8888 +export HTTPS_PROXY=http://${proxy_private_ip}:8888 +export NO_PROXY=127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,.svc,.cluster.local +export KUBECONFIG=/etc/rancher/k3s/k3s.yaml +``` diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/fleet-gitops-at-scale/windows-support.md b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/fleet-gitops-at-scale/windows-support.md new file mode 100644 index 00000000000..d3b52663407 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/fleet-gitops-at-scale/windows-support.md @@ -0,0 +1,23 @@ +--- +title: Windows 支持 +weight: 2 +--- + + +在 Rancher 2.5.6 之前,`agent` 在具有 Windows 节点的下游集群上没有原生的 Windows 清单。这将导致集群的 `agent` pod 失败。 + +如果你从旧版本的 Rancher 升级到 2.5.6+,你可以在*下游集群*中部署具有以下工作流的工作 `agent`: + +1. 封锁所有 Windows 节点。 +1. 对 `agent` 工作负载应用以下容忍度。 +1. 取消所有 Windows 节点的封锁。 +1. 删除所有 `agent` pod。使用新的容忍度来创建新 pod。 +1. `agent` pod 运行并为 Fleet 启用了自动更新后,它们会更新到与 Windows 兼容的 `agent` 版本。 + +```yaml +tolerations: +- effect: NoSchedule + key: cattle.io/os + operator: Equal + value: linux +``` diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/harvester.md b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/harvester.md new file mode 100644 index 00000000000..d71c989b237 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/harvester.md @@ -0,0 +1,44 @@ +--- +title: Harvester 集成 +weight: 10 +--- + +Harvester 是 Rancher 2.6.1 新增的功能,[Harvester](https://docs.harvesterhci.io/) 是基于 Kubernetes 构建的开源超融合基础架构 (HCI) 软件。Harvester 安装在裸金属服务器上,提供集成的虚拟化和分布式存储功能。虽然 Harvester 使用 Kubernetes 运行,但它不需要用户了解 Kubernetes 概念,因此是一个更加用户友好的应用。 + +--- +**_v2.6.3 的新功能_** + +Harvester 已 GA。有关所有更新,请参阅 [Harvester 发行说明](https://github.com/harvester/harvester/releases)。 + +--- +### 功能开关 + +你可以使用 Harvester 的功能开关来管理 Harvester 在 Rancher 虚拟化管理页面的访问,用户可以在该页面直接导航到 Harvester 集群并访问 Harvester UI。Harvester 的功能开关是默认启用的。如需了解 Rancher 中功能开关的更多详细信息,请单击[此处](../../pages-for-subheaders/enable-experimental-features.md)。 + +要导航到 Harvester 集群,请单击 **☰ > 虚拟化管理**。在 **Harvester 集群**页面中,单击集群以转到该 Harvester 集群的视图。 + +* 如果启用了 Harvester 功能开关,则会从列出 Kubernetes 集群的任何页面或应用(例如 Fleet 和多集群应用)中过滤掉 Harvester 集群。 + +* 如果禁用了 Harvester 功能开关,并且导入了 Harvester 集群,Harvester 集群将显示在**集群管理**页面的 Rancher 集群列表中。仅当功能开关为关闭时,Harvester 集群才会显示在集群列表中。 + +* 集成 Harvester 后,你可以将 Harvester 集群导入 Rancher,对应的集群类型是 `Harvester`。 + +* 用户只能在**虚拟化管理**页面上导入 Harvester 集群。在**集群管理**页面上导入集群是不支持的,而且会出现警告。建议你返回**虚拟化管理**页面执行此操作。 + +### Harvester 主机驱动 + +在 Rancher 的 RKE 和 RKE2 选项中,[Harvester 主机驱动](https://docs.harvesterhci.io/v0.3/rancher/node-driver/)被标记为`技术预览`。在**创建**页面和启用驱动后的页面都是一样的情况。无论 Harvester 功能开关是否启用,主机驱动都是可用的。请注意,默认情况下主机驱动是关闭的。用户只能通过**集群管理**页面在 Harvester 上创建 RKE 或 RKE2 集群。 + +Harvester 允许通过 Harvester UI 上传和显示 `.ISO` 镜像,但 Rancher UI 不支持。这是因为 `.ISO` 镜像通常需要额外的设置,这会干扰干净的部署(即无需用户干预),并且它们通常不用于云环境。 + +如需了解 Rancher 中主机驱动的更多详细信息,请单击[此处](../../pages-for-subheaders/about-provisioning-drivers.md#主机驱动)。 + +### 限制 + +--- +**仅适用于 Rancher v2.6.1 和 v2.6.2**: + +- Harvester 0.3.0 不支持离线环境安装。 +- 不支持将 Harvester 0.2.0 升级到 0.3.0,也不支持升级到新的 1.0.0 版本。 + +--- diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/istio/configuration-options/install-istio-on-rke2-cluster.md b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/istio/configuration-options/install-istio-on-rke2-cluster.md new file mode 100644 index 00000000000..677e4dc4db0 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/istio/configuration-options/install-istio-on-rke2-cluster.md @@ -0,0 +1,38 @@ +--- +title: 在 RKE2 集群上安装 Istio 的其他步骤 +weight: 3 +--- + +通过**应用 & 应用市场**页面安装或升级 Istio Helm Chart 时: + +1. 如果要安装 Chart,请单击**在安装前自定义 Helm 选项**,然后单击**下一步**。 +1. 你将看到配置 Istio Helm Chart 的选项。在**组件**选项卡上,选中**启用 CNI** 旁边的框。 +1. 添加一个自定义覆盖文件,该文件指定 `cniBinDir` 和 `cniConfDir`。有关这些选项的更多信息,请参阅 [Istio 文档](https://istio.io/latest/docs/setup/additional-setup/cni/#helm-chart-parameters)。下方是一个示例: + + ```yaml + apiVersion: install.istio.io/v1alpha1 + kind: IstioOperator + spec: + components: + cni: + enabled: true + k8s: + overlays: + - apiVersion: "apps/v1" + kind: "DaemonSet" + name: "istio-cni-node" + patches: + - path: spec.template.spec.containers.[name:install-cni].securityContext.privileged + value: true + values: + cni: + image: rancher/mirrored-istio-install-cni:1.9.3 + excludeNamespaces: + - istio-system + - kube-system + logLevel: info + cniBinDir: /opt/cni/bin + cniConfDir: /etc/cni/net.d + ``` + +**结果**:现在你应该可以根据需要使用 Istio,包括 Sidecar 注入和通过 Kiali 进行监控。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/istio/configuration-options/pod-security-policies.md b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/istio/configuration-options/pod-security-policies.md new file mode 100644 index 00000000000..8ec8f3f1356 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/istio/configuration-options/pod-security-policies.md @@ -0,0 +1,54 @@ +--- +title: 在具有 Pod 安全策略的情况下启用 Istio +weight: 1 +--- + +如果你启用了限制性 Pod 安全策略(Pod Security Policy),由于 Istio 需要某些权限才能自行安装和管理 pod 基础设施,因此 Istio 可能无法正常运行。在本文中,我们将配置一个为 Istio 启用了 PSP 的集群,并设置 Istio CNI 插件。 + +Istio CNI 插件不再要求每个应用 pod 具有特权 `NET_ADMIN` 容器。如需更多信息,请参阅 [Istio CNI 插件文档](https://istio.io/docs/setup/additional-setup/cni)。请注意,[Istio CNI 插件处于 alpha 阶段](https://istio.io/about/feature-stages/)。 + +:::note 先决条件: + +- 集群必须是 RKE Kubernetes 集群。 +- 必须使用默认 PodSecurityPolicy 创建集群。 + +要在使用 Rancher UI 创建 Kubernetes 集群时启用 Pod 安全策略支持,请转到高级选项。在 Pod 安全策略支持中,单击启用,然后选择一个默认的 pod 安全策略。 + +::: + +1. [将 PodSecurityPolicy 设置为不受限制](#1-将-podsecuritypolicy-设置为不受限制) +2. [启用 CNI](#2-启用-cni) +3. [验证 CNI 是否正常工作](#3-验证-cni-是否正常工作) + +### 1. 将 PodSecurityPolicy 设置为不受限制 + +不受限制的 PSP 支持安装 Istio。 + +在安装 Istio 的项目或计划安装 Istio 的项目中,将 PSP 设置为 `unrestricted`。 + +1. 点击 **☰ > 集群管理**。 +1. 选择你创建的集群,并点击 **Explore**。 +1. 单击**集群 > 项目/命名空间**。 +1. 找到**项目: System**,然后选择 **⋮ > 编辑配置**。 +1. 将 Pod 安全策略选项更改为不受限制,然后单击**保存**。 + +### 2. 启用 CNI + +通过**应用 & 应用市场**安装或升级 Istio 时: + +1. 单击**组件**。 +2. 选中**启用 CNI**旁边的框。 +3. 完成 Istio 的安装或升级。 + +你也可以通过编辑 `values.yaml` 来启用 CNI: + +``` +istio_cni.enabled: true +``` + +在集群中启用 CNI 后,Istio 应该能成功安装。 + +### 3. 验证 CNI 是否正常工作 + +通过部署[示例应用](https://istio.io/latest/docs/examples/bookinfo/)或部署你自己的应用,来验证 CNI 是否正常工作。 + diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/istio/configuration-options/project-network-isolation.md b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/istio/configuration-options/project-network-isolation.md new file mode 100644 index 00000000000..8bbafd0ce0d --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/istio/configuration-options/project-network-isolation.md @@ -0,0 +1,22 @@ +--- +title: 项目网络隔离的其他步骤 +weight: 4 +--- + +在集群中: + +- 你同时使用了 Canal 网络插件与 Rancher 2.5.8 之前版本,或者同时使用了 Rancher 2.5.8+ 以及任意支持执行 Kubernetes 网络策略的 RKE 网络插件(例如 Canal 或 Cisco ACI 插件)。 +- 启用了项目网络隔离选项。 +- 安装了 Istio Ingress 模块。 + +默认情况下,Istio Ingress Gateway pod 无法将入口流量重定向到工作负载。这是因为安装了 Istio 的命名空间无法访问所有命名空间。为此你有两个选项。 + +第一个选项是在需要让 Istio 控制入口的每个命名空间中添加一个新的网络策略。你的策略需要包括以下几行: + +``` +- podSelector: + matchLabels: + app: istio-ingressgateway +``` + +第二个选项是将 `istio-system` 命名空间移动到 `system` 项目中,默认情况下该项目被排除在网络隔离之外。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/istio/configuration-options/selectors-and-scrape-configurations.md b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/istio/configuration-options/selectors-and-scrape-configurations.md new file mode 100644 index 00000000000..0f1fce2f5b7 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/istio/configuration-options/selectors-and-scrape-configurations.md @@ -0,0 +1,121 @@ +--- +title: 选择器和抓取配置 +weight: 2 +--- + +Monitoring 应用设置了 `prometheus.prometheusSpec.ignoreNamespaceSelectors=false`,即在默认情况下跨所有命名空间进行监控。 + +这样,你可以查看部署在具有 `istio-injection=enabled` 标签的命名空间中的资源的流量、指标和图。 + +如果你想将 Prometheus 限制为特定的命名空间,请设置 `prometheus.prometheusSpec.ignoreNamespaceSelectors=true`。完成此操作后,你需要添加其他配置来继续监控你的资源。 + + +### 通过将 ignoreNamespaceSelectors 设置为 True 来限制对特定命名空间的监控 + +要限制对特定命名空间的监控,你需要编辑 `ignoreNamespaceSelectors` Helm Chart 选项。你可以在安装或升级 Monitoring Helm Chart 时配置此选项: + +1. 安装或升级 Monitoring Helm Chart 时,编辑 values.yml 并设置 `prometheus.prometheusSpec.ignoreNamespaceSelectors=true`。 +1. 完成安装或升级。 + +**结果**:Prometheus 将仅用于特定命名空间。换言之,你需要设置以下配置之一才能继续在各种仪表板中查看数据。 + +### 让 Prometheus 检测其他命名空间中的资源 + +如果设置了 `prometheus.prometheusSpec.ignoreNamespaceSelectors=true`,则有两种方法让 Prometheus 检测其他命名空间中的资源: + +- **监控特定的命名空间**:在命名空间中添加一个 ServiceMonitor 或 PodMonitor 以及要抓取的目标。 +- **跨命名空间监控**:将 `additionalScrapeConfig` 添加到你的 rancher-monitoring 实例,从而抓取所有命名空间中的所有目标。 + +### 监控特定命名空间:创建 ServiceMonitor 或 PodMonitor + +此选项用于定义在特定命名空间中要监控的服务或 pod。 + +可用性权衡指的是,由于你无法跨命名空间进行监控,因此你必须为每个命名空间创建 ServiceMonitor 或 PodMonitor。 + +:::note 先决条件: + +为 `` 定义 ServiceMonitor 或 PodMonitor。下面提供了一个 ServiceMonitor 示例。 + +::: + +1. 点击 **☰ > 集群管理**。 +1. 选择你创建的集群,并点击 **Explore**。 +1. 在顶部导航栏中,打开 kubectl shell。 +1. 如果 ServiceMonitor 或 PodMonitor 文件存储在本地集群中,请运行 `kubectl create -f .yaml`。 +1. 如果 ServiceMonitor 或 PodMonitor 没有存储在本地,请运行 `cat<< EOF | kubectl apply -f -`,将文件内容粘贴到终端,然后运行 ​​`EOF` 来完成命令。 +1. 运行 `kubectl label namespace istio-injection=enabled` 来启用 Envoy sidecar 注入。 + +**结果**:Prometheus 可以抓取 ``。 + +
Istio 代理的 ServiceMonitor 示例
+ +```yaml +apiVersion: monitoring.coreos.com/v1 +kind: ServiceMonitor +metadata: + name: envoy-stats-monitor + namespace: istio-system + labels: + monitoring: istio-proxies +spec: + selector: + matchExpressions: + - {key: istio-prometheus-ignore, operator: DoesNotExist} + namespaceSelector: + any: true + jobLabel: envoy-stats + endpoints: + - path: /stats/prometheus + targetPort: 15090 + interval: 15s + relabelings: + - sourceLabels: [__meta_kubernetes_pod_container_port_name] + action: keep + regex: '.*-envoy-prom' + - action: labeldrop + regex: "__meta_kubernetes_pod_label_(.+)" + - sourceLabels: [__meta_kubernetes_namespace] + action: replace + targetLabel: namespace + - sourceLabels: [__meta_kubernetes_pod_name] + action: replace + targetLabel: pod_name +``` + +### 跨命名空间监控:将 ignoreNamespaceSelectors 设置为 False + +此设置为 Prometheus 提供额外的抓取配置来实现跨命名空间监控。 + +可用性权衡指的是 Prometheus 的所有 `additionalScrapeConfigs` 都维护在一个 Secret 中。如果在安装 Istio 之前已经使用 additionalScrapeConfigs 部署了监控,升级可能会变得困难。 + +1. 安装或升级 Monitoring Helm Chart 时,编辑 values.yml 并将 `prometheus.prometheusSpec.additionalScrapeConfigs` 数组设置为下方的**其它抓取配置**。 +1. 完成安装或升级。 + +**结果**:Promethe 会抓取所有带有 `istio-injection=enabled` 标签的命名空间。 + +
其它抓取配置
+ +```yaml +- job_name: 'istio/envoy-stats' + scrape_interval: 15s + metrics_path: /stats/prometheus + kubernetes_sd_configs: + - role: pod + relabel_configs: + - source_labels: [__meta_kubernetes_pod_container_port_name] + action: keep + regex: '.*-envoy-prom' + - source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port] + action: replace + regex: ([^:]+)(?::\d+)?;(\d+) + replacement: $1:15090 + target_label: __address__ + - action: labelmap + regex: __meta_kubernetes_pod_label_(.+) + - source_labels: [__meta_kubernetes_namespace] + action: replace + target_label: namespace + - source_labels: [__meta_kubernetes_pod_name] + action: replace + target_label: pod_name +``` diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/istio/cpu-and-memory-allocations.md b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/istio/cpu-and-memory-allocations.md new file mode 100644 index 00000000000..95ec8329be7 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/istio/cpu-and-memory-allocations.md @@ -0,0 +1,64 @@ +--- +title: CPU 和内存分配 +weight: 1 +--- + +本文介绍我们建议在集群中分配给 Istio 组件的最少计算资源。 + +每个组件的 CPU 和内存分配是[可配置](#配置资源分配)的。 + +在启用 Istio 之前,建议你先确认你的 Rancher worker 节点是否有足够的 CPU 和内存来运行 Istio 的所有组件。 + +:::tip + +在规模较大的部署中,我们强烈建议通过为每个 Istio 组件添加节点选择器,来将基础设施放置在集群中的专用节点上。 + +::: + +下表总结了每个核心 Istio 组件推荐配置的 CPU 和内存的最低资源请求和限制。 + +Kubernetes 中的资源请求指的是,除非该节点至少具有指定数量的可用内存和 CPU,否则工作负载不会部署在节点上。如果工作负载超过 CPU 或内存的限制,则可以将其从节点中终止或驱逐。有关管理容器资源限制的更多信息,请参阅 [Kubernetes 文档](https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/)。 + +| 工作负载 | CPU - 请求 | 内存 - 请求 | CPU - 限制 | 内存 - 限制 | +|----------------------|---------------|------------|-----------------|-------------------| +| 入口网关 | 100m | 128mi | 2000m | 1024mi | +| 出口网关 | 100m | 128mi | 2000m | 1024mi | +| istiod | 500m | 2048mi | 没有限制 | 没有限制 | +| proxy | 10m | 10mi | 2000m | 1024mi | +| **总计:** | **710m** | **2314Mi** | **6000m** | **3072Mi** | + +## 配置资源分配 + +你可以为每种类型的 Istio 组件单独配置资源分配。本节介绍了每个组件默认分配的资源。 + +为了更轻松地将工作负载调度到节点,集群管理员可以降低组件的 CPU 和内存资源请求。默认 CPU 和内存分配是我们推荐的最小值。 + +关于 Istio 配置的更多信息,请参阅 [Istio 官方文档](https://istio.io/)。 + +要配置分配给 Istio 组件的资源: + +1. 点击 **☰ > 集群管理**。 +1. 选择你创建的集群,并点击 **Explore**。 +1. 在左侧导航栏中,点击**应用 & 应用市场**。 +1. 点击**已安装的应用**。 +1. 转到 `istio-system` 命名空间。在某个 Istio 工作负载中(例如 `rancher-istio`),点击**⋮ > 编辑/升级**。 +1. 点击**升级**,然后通过更改 values.yaml 或添加[覆盖文件](../../../pages-for-subheaders/configuration-options.md#覆盖文件)来编辑基本组件。有关编辑覆盖文件的更多信息,请参阅[本节](cpu-and-memory-allocations.md#编辑覆盖文件)。 +1. 更改 CPU 或内存分配、调度各个组件的节点,或节点容忍度。 +1. 点击**升级**。然后,更改就能启用。 + +**结果**:已更新 Istio 组件的资源分配。 + +### 编辑覆盖文件 + +覆盖文件可以包含 [Istio Operator 规范](https://istio.io/latest/docs/reference/config/istio.operator.v1alpha1/#IstioOperatorSpec)中的任意值。包含 Istio 应用的覆盖文件只是覆盖文件潜在配置的一个示例。 + +只要文件包含 `kind: IstioOperator` 且 YAML 选项有效,文件就可以用作覆盖。 + +在 Istio 应用提供的示例覆盖文件中,以下部分能让你更改 Kubernetes 资源: + +``` +# k8s: +# resources: +# requests: +# cpu: 200m +``` diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/istio/disable-istio.md b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/istio/disable-istio.md new file mode 100644 index 00000000000..dbad849e3c7 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/istio/disable-istio.md @@ -0,0 +1,43 @@ +--- +title: 禁用 Istio +weight: 4 +--- + +本文介绍如何在集群中卸载 Istio,以及如何在命名空间或工作负载中禁用 Istio。 + +## 在集群中卸载 Istio + +要卸载 Istio: + +1. 点击 **☰ > 集群管理**。 +1. 选择你创建的集群,并点击 **Explore**。 +1. 在左侧导航栏中,单击**应用 & 应用市场 > 已安装的应用**。 +1. 在 `istio-system` 命名空间中,转到 `rancher-istio` 并单击 **⋮ > 删除**。 +1. 删除 `rancher-istio` 后,选择 `istio-system` 命名空间中所有剩余的应用,然后单击**删除**。 + +**结果**:已删除集群中的 `rancher-istio` 应用。Istio sidecar 不能部署在集群中的任何工作负载上。 + +:::note + +你不能再禁用和重新启用你的 Istio 安装。如果你想保存设置以供将来的安装使用,请查看并保存各个 YAML,以便在之后的安装中参考/重复使用。 + +::: + +**卸载疑难解答**:如果你没有按照卸载步骤操作,则可能会在卸载过程中遇到以下警告: + +`Error: uninstallation completed with 1 error(s): unable to build kubernetes objects for delete: unable to recognize "": no matches for kind "MonitoringDashboard" in version "monitoring.kiali.io/v1alpha1"` + +这可能意味着几种情况。第一种情况是你选择了 `istio-system` 命名空间中的所有应用并同时删除了它们,另一种情况是你在删除 `rancher-istio` Chart 之前删除了`rancher-istio` Chart 依赖项。由于卸载未正确完成,你将需要手动清理 `istio-system` 命名空间中剩余的资源。如果不想进行手动清理,你可以重新安装 `rancher-istio`,然后按照正确的顺序卸载它。 + +## 在命名空间中禁用 Istio + +1. 点击 **☰ > 集群管理**。 +1. 选择你创建的集群,并点击 **Explore**。 +1. 单击**集群 > 项目/命名空间**。 +1. 转到要启用 Istio 的命名空间,然后单击**⋮ > 启用 Istio 自动注入**。或者,你也可以单击命名空间,然后在命名空间详情页面上,单击**⋮ > 启用 Istio 自动注入**。 + +**结果**:如果工作负载部署到此命名空间,它们将没有 Istio sidecar。 + +## 从工作负载中移除 Istio Sidecar + +在命名空间中禁用 Istio,然后重新部署其中的工作负载。这些工作负载将在没有 Istio sidecar 的情况下部署。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/istio/rbac-for-istio.md b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/istio/rbac-for-istio.md new file mode 100644 index 00000000000..9b1dad92daf --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/istio/rbac-for-istio.md @@ -0,0 +1,44 @@ +--- +title: RBAC +weight: 3 +--- + +本文介绍访问 Istio 功能所需的权限。 + +Rancher Istio Chart 安装了三个 `ClusterRole`。 + +## Cluster-Admin 访问 + +默认情况下,只有具有 `cluster-admin` `ClusterRole` 的用户可以: + +- 在集群中安装 Istio 应用。 +- 为 Istio 配置资源分配。 + + +## Admin 和 Edit 权限 + +默认情况下,只有 Admin 和 Edit 角色可以: + +- 为命名空间启用和禁用 Istio sidecar 自动注入。 +- 将 Istio sidecar 添加到工作负载。 +- 查看集群的流量指标和流量图。 +- 配置 Istio 的资源(例如网关、目标规则或虚拟服务)。 + +## Kubernetes 默认角色的默认权限摘要 + +Istio 创建了三个 `ClusterRole`,并将 Istio CRD 访问权限添加到以下默认 K8s `ClusterRole`: + +| Chart 创建的 ClusterRole | 默认 K8s ClusterRole | Rancher 角色 | + ------------------------------:| ---------------------------:|---------:| +| `istio-admin` | admin | 项目所有者 | +| `istio-edit` | edit | 项目成员 | +| `istio-view` | view | 只读 | + +Rancher 将继续使用 cluster-owner、cluster-member、project-owner、project-member 等作为角色名称,但会使用默认角色来确定访问权限。每个默认的 K8s `ClusterRole` 都有不同的 Istio CRD 权限以及可以执行的 K8s 操作,包括 Create (C),Get (G),List (L),Watch (W),Update (U),Patch (P),Delete (D) 和 All (*)。 + + +| CRD | Admin | Edit | View | +|----------------------------| ------| -----| ----- +|
  • `config.istio.io`
    • `adapters`
    • `attributemanifests`
    • `handlers`
    • `httpapispecbindings`
    • `httpapispecs`
    • `instances`
    • `quotaspecbindings`
    • `quotaspecs`
    • `rules`
    • `templates`
| GLW | GLW | GLW | +|
  • `networking.istio.io`
    • `destinationrules`
    • `envoyfilters`
    • `gateways`
    • `serviceentries`
    • `sidecars`
    • `virtualservices`
    • `workloadentries`
| * | * | GLW | +|
  • `security.istio.io`
    • `authorizationpolicies`
    • `peerauthentications`
    • `requestauthentications`
| * | * | GLW | \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/logging/custom-resource-configuration/flows-and-clusterflows.md b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/logging/custom-resource-configuration/flows-and-clusterflows.md new file mode 100644 index 00000000000..a644eb672ae --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/logging/custom-resource-configuration/flows-and-clusterflows.md @@ -0,0 +1,75 @@ +--- +title: Flows 和 ClusterFlows +weight: 1 +--- + +有关配置 `Flow` 和 `ClusterFlow` 的完整详细信息,请参阅 [Banzai Cloud Logging Operator 文档](https://banzaicloud.com/docs/one-eye/logging-operator/configuration/flow/)。 + + +## Flows + +`Flow` 定义要收集和过滤哪些日志,以及将日志发送到哪个 Output。 + +`Flow` 是一个命名空间资源。换言之,只有部署了该 Flow 的命名空间日志才能被 `Flow` 收集。 + +你可以通过在 Rancher UI 中填写表单来配置 `Flow`。 + +有关 `Flow` 自定义资源的更多详细信息,请参阅 [FlowSpec](https://banzaicloud.com/docs/one-eye/logging-operator/configuration/crds/v1beta1/flow_types/)。 + +### Matches + +匹配语句用于选择从哪些容器中拉取日志。 + +你可以指定 match 语句,然后根据 Kubernetes 标签、容器和主机名来选择或排除日志。匹配语句会按照定义和处理的顺序进行评估,直到应用了第一个匹配的选择/排除规则。 + +你可以通过填写 Rancher UI 中的 `Flow` 或 `ClusterFlow` 表单来配置匹配。 + +使用 match 语句的详细示例,请参阅[日志路由的官方文档](https://banzaicloud.com/docs/one-eye/logging-operator/configuration/log-routing/)。 + +### Filters + +你可以在 `Flow` 中定义一个或多个过滤器。过滤器可以对日志执行各种操作,例如,添加其他数据、转换日志或解析记录中的值。`Flow` 中的过滤器会按定义的顺序应用。 + +有关 Banzai Cloud Logging Operator 支持的过滤器列表,请参阅[此页面](https://banzaicloud.com/docs/one-eye/logging-operator/configuration/plugins/filters/)。 + +过滤器需要在 YAML 中配置。 + +### Outputs + +此 `Output` 会接收来自 `Flow` 的日志。由于 `Flow` 是一个命名空间资源,因此 `Output` 必须与 `Flow` 位于相同的命名空间中。 + +在 Rancher UI 中填写 `Flow` 或 `ClusterFlow` 表单时,你可以引用`Output`。 + +## ClusterFlows + +为 `ClusterFlow` 配置匹配、过滤器和 `Output` 的方式与 `Flow` 的配置方式相同。主要区别在于 `ClusterFlow` 是集群级别的,并且可以跨所有命名空间配置日志收集。 + +你可以通过在 Rancher UI 中填写表单来配置 `ClusterFlow`。 + +`ClusterFlow` 选择集群中所有命名空间的日志后,集群的日志会被收集并记录到所选的 `ClusterOutput`。 + +## YAML 示例 + +以下示例 `Flow` 转换了默认命名空间的日志消息,并将日志发送到 S3 `Output`: + +```yaml +apiVersion: logging.banzaicloud.io/v1beta1 +kind: Flow +metadata: + name: flow-sample + namespace: default +spec: + filters: + - parser: + remove_key_name_field: true + parse: + type: nginx + - tag_normaliser: + format: ${namespace_name}.${pod_name}.${container_name} + localOutputRefs: + - s3-output + match: + - select: + labels: + app: nginx +``` diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/logging/custom-resource-configuration/outputs-and-clusteroutputs.md b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/logging/custom-resource-configuration/outputs-and-clusteroutputs.md new file mode 100644 index 00000000000..bcde0c0a929 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/logging/custom-resource-configuration/outputs-and-clusteroutputs.md @@ -0,0 +1,294 @@ +--- +title: Outputs 和 ClusterOutputs +weight: 2 +--- + +有关配置 `Output` 和 `ClusterOutput` 的完整详细信息,请参阅 [Banzai Cloud Logging Operator 文档](https://banzaicloud.com/docs/one-eye/logging-operator/configuration/output/)。 + +## Outputs + +`Output` 资源定义了你的 `Flow` 可以发送日志消息的位置。`Output` 是 Logging `Flow` 的最后阶段。 + +`Output` 是命名空间资源,换言之,只有同一命名空间内的 `Flow` 可以访问它。 + +你可以在这些定义中使用密文,但这些密文也必须位于同一命名空间中。 + +你可以通过在 Rancher UI 中填写表单来配置 `Output`。 + +有关 `Output` 自定义资源的更多详细信息,请参阅 [OutputSpec](https://banzaicloud.com/docs/one-eye/logging-operator/configuration/crds/v1beta1/output_types/)。 + +Rancher UI 提供了用于配置以下类型 `Output` 的表单: + +- Amazon ElasticSearch +- Azure Storage +- Cloudwatch +- Datadog +- Elasticsearch +- File +- Fluentd +- GCS +- Kafka +- Kinesis Stream +- LogDNA +- LogZ +- Loki +- New Relic +- Splunk +- SumoLogic +- Syslog + +Rancher UI 提供了用于配置 `Output` 类型、目标和访问凭证(如果适用)的表单。 + +有关 Logging Operator 支持的日志插件配置示例,请参阅 [Logging Operator 文档](https://banzaicloud.com/docs/one-eye/logging-operator/configuration/plugins/outputs/)。 + +## ClusterOutputs + +`ClusterOutput` 定义了一个没有命名空间限制的 `Output`。只有在与 Logging Operator 部署在同一命名空间中时,它才能生效。 + +你可以通过在 Rancher UI 中填写表单来配置 `ClusterOutput`。 + +有关 `ClusterOutput` 自定义资源的更多详细信息,请参阅 [ClusterOutput](https://banzaicloud.com/docs/one-eye/logging-operator/configuration/crds/v1beta1/clusteroutput_types/)。 + +## YAML 示例 + +安装 Logging 后,你可以参考以下示例来构建你自己的 Logging 流水线: + +- [ClusterOutput 设为 ElasticSearch](#clusteroutput-设为-elasticsearch) +- [Output 设为 Splunk](#output-设为-splunk) +- [Output 设为 Syslog](#output-设为-syslog) +- [不支持的 Output](#不支持的-output) + +### ClusterOutput 设为 ElasticSearch + +假设你想将集群中的所有日志发送到 `elasticsearch` 集群。首先,创建一个集群 `Output`: + +```yaml +apiVersion: logging.banzaicloud.io/v1beta1 +kind: ClusterOutput +metadata: + name: "example-es" + namespace: "cattle-logging-system" +spec: + elasticsearch: + host: elasticsearch.example.com + port: 9200 + scheme: http +``` + +在与 Operator 相同的命名空间(`cattle-logging-system`)中,我们创建了这个 `ClusterOutput`(没有 elasticsearch 配置)。每次创建 `ClusterFlow` 或 `ClusterOutput` 时,我们都必须将其放在 `cattle-logging-system` 命名空间中。 + +配置日志的目的位置后,我们可以尝试将所有日志都配置到该 `ClusterOutput`: + +```yaml +apiVersion: logging.banzaicloud.io/v1beta1 +kind: ClusterFlow +metadata: + name: "all-logs" + namespace: "cattle-logging-system" +spec: + globalOutputRefs: + - "example-es" +``` + +现在,我们应该能看到配置的包含日志的索引。 + + +### Output 设为 Splunk + +有时候,你的应用程序团队可能只想将某个命名空间的日志发送到 `splunk` 服务器。对于这种情况,你可以使用命名空间范围的 `Output` 和 `Flow`。 + +在开始之前,先设置该团队的应用程序 `coolapp`。 + +```yaml +apiVersion: v1 +kind: Namespace +metadata: + name: devteam +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: coolapp + namespace: devteam + labels: + app: coolapp +spec: + replicas: 2 + selector: + matchLabels: + app: coolapp + template: + metadata: + labels: + app: coolapp + spec: + containers: + - name: generator + image: paynejacob/loggenerator:latest +``` + +`coolapp` 运行时,我们将使用与创建 `ClusterOutput` 时类似的路径。但是,我们不使用 `ClusterOutput`,而是在应用程序的命名空间中创建 `Output`。 + +```yaml +apiVersion: logging.banzaicloud.io/v1beta1 +kind: Output +metadata: + name: "devteam-splunk" + namespace: "devteam" +spec: + splunkHec: + hec_host: splunk.example.com + hec_port: 8088 + protocol: http +``` + +然后,再次为 `Output` 提供一些日志: + +```yaml +apiVersion: logging.banzaicloud.io/v1beta1 +kind: Flow +metadata: + name: "devteam-logs" + namespace: "devteam" +spec: + localOutputRefs: + - "devteam-splunk" +``` + + +### Output 设为 Syslog + +假设你想将集群中的所有日志发送到 `syslog` 服务器。首先,我们创建一个 `ClusterOutput`: + +```yaml +apiVersion: logging.banzaicloud.io/v1beta1 +kind: ClusterOutput +metadata: + name: "example-syslog" + namespace: "cattle-logging-system" +spec: + syslog: + buffer: + timekey: 30s + timekey_use_utc: true + timekey_wait: 10s + flush_interval: 5s + format: + type: json + app_name_field: test + host: syslog.example.com + insecure: true + port: 514 + transport: tcp +``` + +配置日志的目的位置后,我们可以尝试将所有日志都配置到该 `Output`: + +```yaml +apiVersion: logging.banzaicloud.io/v1beta1 +kind: ClusterFlow +metadata: + name: "all-logs" + namespace: cattle-logging-system +spec: + globalOutputRefs: + - "example-syslog" +``` + +### 不支持的 Output + +对于最后一个示例,我们创建一个 `Output` 来将日志写入到不是开箱即用的目标位置: + +:::note Syslog 注意事项: + +`Syslog` 是受支持的 `Output`。但是,此示例仍提供了不受支持的插件概述。 + +::: + +```yaml +apiVersion: v1 +kind: Secret +metadata: + name: syslog-config + namespace: cattle-logging-system +type: Opaque +stringData: + fluent-bit.conf: | + [INPUT] + Name forward + Port 24224 + + [OUTPUT] + Name syslog + InstanceName syslog-output + Match * + Addr syslog.example.com + Port 514 + Cluster ranchers + +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: fluentbit-syslog-forwarder + namespace: cattle-logging-system + labels: + output: syslog +spec: + selector: + matchLabels: + output: syslog + template: + metadata: + labels: + output: syslog + spec: + containers: + - name: fluentbit + image: paynejacob/fluent-bit-out-syslog:latest + ports: + - containerPort: 24224 + volumeMounts: + - mountPath: "/fluent-bit/etc/" + name: configuration + volumes: + - name: configuration + secret: + secretName: syslog-config +--- +apiVersion: v1 +kind: Service +metadata: + name: syslog-forwarder + namespace: cattle-logging-system +spec: + selector: + output: syslog + ports: + - protocol: TCP + port: 24224 + targetPort: 24224 +--- +apiVersion: logging.banzaicloud.io/v1beta1 +kind: ClusterFlow +metadata: + name: all-logs + namespace: cattle-logging-system +spec: + globalOutputRefs: + - syslog +--- +apiVersion: logging.banzaicloud.io/v1beta1 +kind: ClusterOutput +metadata: + name: syslog + namespace: cattle-logging-system +spec: + forward: + servers: + - host: "syslog-forwarder.cattle-logging-system" + require_ack_response: false + ignore_network_errors_at_startup: false +``` + +现在,我们分解这里的内容。首先,我们创建一个容器 Deployment,该容器具有额外的 `syslog` 插件并支持转发自另一个 `fluentd` 的日志。接下来,我们创建一个配置为 Deployment 转发器的 `Output`。然后,Deployment `fluentd` 会将所有日志转发到配置的 `syslog` 目标。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/logging/logging-architecture.md b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/logging/logging-architecture.md new file mode 100644 index 00000000000..a5de3ee1067 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/logging/logging-architecture.md @@ -0,0 +1,29 @@ +--- +title: 架构 +weight: 1 +--- + +本节介绍了 Rancher Logging 应用程序的架构。 + +有关 Banzai Cloud Logging Operator 工作原理的更多详细信息,请参阅[官方文档](https://banzaicloud.com/docs/one-eye/logging-operator/#architecture)。 + +### Banzai Cloud Logging Operator 工作原理 + +Logging Operator 自动部署和配置 Kubernetes 日志流水线。它会在每个节点上部署和配置一个 Fluent Bit DaemonSet,从而收集节点文件系统中的容器和应用程序日志。 + +Fluent Bit 查询 Kubernetes API 并使用 pod 的元数据来丰富日志,然后将日志和元数据都传输到 Fluentd。Fluentd 会接收和过滤日志并将日志传输到多个`Output`。 + +以下自定义资源用于定义了如何过滤日志并将日志发送到 `Output`: + +- `Flow` 是一个命名空间自定义资源,它使用过滤器和选择器将日志消息路由到对应的 `Output`。 +- `ClusterFlow` 用于路由集群级别的日志消息。 +- `Output` 是一个命名空间资源,用于定义发送日志消息的位置。 +- `ClusterOutput` 定义了一个所有 `Flow` 和 `ClusterFlow` 都可用的 `Output`。 + +每个 `Flow` 都必须引用一个 `Output`,而每个 `ClusterFlow` 都必须引用一个 `ClusterOutput`。 + +[Banzai 文档](https://banzaicloud.com/docs/one-eye/logging-operator/#architecture)中的下图显示了新的 Logging 架构: + +
Banzai Cloud Logging Operator 如何与 Fluentd 和 Fluent Bit 一起使用
+ +![Banzai Cloud Logging Operator 如何与 Fluentd 一起使用](/img/banzai-cloud-logging-operator.png) diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/logging/logging-helm-chart-options.md b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/logging/logging-helm-chart-options.md new file mode 100644 index 00000000000..d48db34f13a --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/logging/logging-helm-chart-options.md @@ -0,0 +1,97 @@ +--- +title: rancher-logging Helm Chart 选项 +shortTitle: Helm Chart 选项 +weight: 4 +--- + + +### 启用/禁用 Windows 节点 Logging + +要启用或禁用 Windows 节点 Logging,你可以在 `values.yaml` 中将 `global.cattle.windows.enabled` 设置为 `true` 或 `false`。 + +默认情况下,如果使用 Cluster Dashboard UI 在 Windows 集群上安装了 Logging 应用程序,Windows 节点的 Logging 就会启用。 + +在这种情况下,将 `global.cattle.windows.enabled` 设置为 `false` 会禁用集群上的 Windows 节点 Logging。 +禁用后,仍会从 Windows 集群中的 Linux 节点收集日志。 + +:::note + +目前存在一个[问题](https://github.com/rancher/rancher/issues/32325),在 Windows 集群中禁用 Windows Logging 后执行 `helm upgrade` 时不会删除 Windows nodeAgent。在这种情况下,如果已安装 Windows nodeAgents,用户可能需要手动卸载它们。 + +::: + +### 使用自定义 Docker 根目录 + +如果使用了自定义 Docker 根目录,你可以在 `values.yaml` 中设置 `global.dockerRootDirectory`。 + +这将确保创建的 Logging CR 使用你指定的路径,而不是使用默认的 Docker `data-root` 位置。 + +请注意,这只影响 Linux 节点。 + +如果集群中有任何 Windows 节点,则更改将不适用于这些节点。 + +### 为自定义污点添加 NodeSelector 设置和容忍度 + +你可以添加 `nodeSelector` 设置,并通过编辑 Logging Helm Chart 值来添加其他`容忍度`。有关详细信息,请参阅[此页面](taints-and-tolerations.md)。 + +### 启用 Logging 应用程序以使用 SELinux + +:::note 要求: + +Logging v2 已在 RHEL/CentOS 7 和 8 上使用 SELinux 进行了测试。 + +::: + +[安全增强型 Linux (SELinux)](https://en.wikipedia.org/wiki/Security-Enhanced_Linux) 是对 Linux 的安全增强。被政府机构使用之后,SELinux 已成为行业标准,并在 CentOS 7 和 8 上默认启用。 + +要配合使用 Logging V2 与 SELinux,我们建议你根据[此页面](../../../pages-for-subheaders/selinux-rpm.md#安装-rancher-selinux-rpm)的安装说明安装 `rancher-selinux` RPM。 + +然后,在安装 Logging 应用程序时,在 `values.yaml` 中将 `global.seLinux.enabled` 更改为 `true`,使 Chart 支持 SELinux。 + +### 其他日志来源 + +默认情况下,Rancher 会收集所有类型集群的 [controlplane 组件](https://kubernetes.io/docs/concepts/overview/components/#control-plane-components)和[节点组件](https://kubernetes.io/docs/concepts/overview/components/#node-components)的日志。 + +在某些情况下,Rancher 也能收集其他的日志。 + +下表总结了每种节点类型可以收集的其他日志来源: + +| 日志来源 | Linux 节点(包括在 Windows 集群中) | Windows 节点 | +| --- | --- | ---| +| RKE | ✓ | ✓ | +| RKE2 | ✓ | | +| K3s | ✓ | | +| AKS | ✓ | | +| EKS | ✓ | | +| GKE | ✓ | | + +要将托管 Kubernetes 的提供商作为额外的日志来源,在安装或升级 Logging Helm Chart 时,请启用 **Enable enhanced cloud provider logging** 选项。 + +启用后,Rancher 会收集提供商开放可用的所有其他节点和 controlplane 日志,不同提供商可能有所不同。 + +如果你已经使用了云提供商的日志解决方案,例如 AWS CloudWatch 或 Google Cloud Operations Suite(以前称为 Stackdriver),由于原生解决方案可以不受限制地访问所有日志,因此你无需启用此选项。 + +### Systemd 配置 + +在 Rancher Logging 中,你必须为 K3s 和 RKE2 Kubernetes 发行版配置 `SystemdLogPath`。 + +K3s 和 RKE2 Kubernetes 发行版将日志写入到 journald,它是 systemd 的子系统,用于日志记录。要收集这些日志,你需要定义 `systemdLogPath`。默认路径是 `run/log/journal`,但某些 Linux 发行版不默认使用该路径。例如,Ubuntu 默认使用 `var/log/journal`。要确定你的 `systemdLogPath` 配置,请参阅以下步骤。 + +**Systemd 配置步骤:** + +* 在其中一个节点上运行 `cat /etc/systemd/journald.conf | grep -E ^\#?Storage | cut -d"=" -f2`。 +* 如果返回 `persistent`,则你的 `systemdLogPath` 是 `/var/log/journal`。 +* 如果返回 `volatile`,则你的 `systemdLogPath` 是 `/run/log/journal`。 +* 如果返回 `auto`,则检查 `/var/log/journal` 是否存在。 + * 如果 `/var/log/journal` 存在,则使用 `/var/log/journal`。 + * 如果 `/var/log/journal` 不存在,则使用 `/run/log/journal`。 + +:::note 注意事项: + +如果返回的值不包括在上述描述中,Rancher Logging 将无法收集 controlplane 日志。要解决此问题,你需要在每个 controlplane 节点上执行以下操作。 + +* 在 journald.conf 中设置 `Storage=volatile`。 +* 重启主机。 +* 将 `systemdLogPath` 设置为 `/run/log/journal`。 + +::: \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/logging/migrate-to-rancher-v2.5+-logging.md b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/logging/migrate-to-rancher-v2.5+-logging.md new file mode 100644 index 00000000000..a492951eee4 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/logging/migrate-to-rancher-v2.5+-logging.md @@ -0,0 +1,189 @@ +--- +title: 迁移到 Rancher 2.5 Logging +weight: 2 +--- +Rancher 2.5 彻底修改了 Logging 功能。我们现在使用了 Banzai Cloud 的 [logging operator](https://github.com/banzaicloud/logging-operator),Rancher 配置了此工具以供部署 Logging 使用。 + +在新的 Logging 功能的众多特性和变化中,其中一项是取消了项目级别的 Logging 配置。取而代之的是在命名空间级别配置 Logging。集群级日志仍然可用,但配置选项不同。 + +## 安装 + +要在 Rancher 2.5+ 中安装 Logging,请参阅[安装说明](../../../pages-for-subheaders/logging.md#启用-logging)。 + +### 名词解释 + +在 Rancher 2.5+ 中,你需要在**集群仪表板**中配置 Logging。要在安装 Logging 应用程序后配置 Logging 自定义资源,请转到左侧导航栏并单击 **Logging**。这个菜单的选项可以配置集群和命名空间的 Logging。 + +:::note + +Logging 是按集群安装的。你将需要在集群之间切换以配置每个集群的 Logging。 + +::: + +对于 Rancher 2.5+ 中的 Logging 应用程序,你需要了解以下四个关键概念: + +1. Outputs + + `Outputs` 是一种配置资源,用于确定收集日志的目的位置。这是存储 ElasticSearch、Kafka 等聚合器设置的地方。`Outputs` 是命名空间资源。 + +2. Flows + + `Flows` 是一种配置资源,用于确定日志的收集、过滤和目标位置规则。在一个 Flow 中,你需要配置要收集哪些日志、如何改变或过滤它们,以及将日志发送到哪个 `Output`。`Flows` 是命名空间资源,可以连接到同一命名空间中的 `Output` 或 `ClusterOutput`。 + +3. ClusterOutputs + + `ClusterOutputs` 的功能与 `Outputs` 相同,但 ClusterOutput 是集群级别资源。在集群范围内收集日志或要为集群中的所有命名空间提供 `Output` 时,`ClusterOutput` 是必需的。 + +4. ClusterFlows + + `ClusterFlows` 的功能与 `Flows` 相同,但 ClusterFlow 是集群级别资源。它们用于为整个集群配置日志收集,而不是在命名空间级别进行逐个配置。`ClusterFlows` 也是定义改变和过滤器的地方,在功能上与 `Flows` 相同。 + +## 集群日志 + +要在 Rancher 2.5+ 中配置集群级别的 Logging,你需要设置 `ClusterFlow`。此对象定义了日志的来源、要应用的转换或过滤器,以及日志的一个或多个 `Output`。 + +:::note 重要提示: + +`ClusterFlow` 必须在 `cattle-logging-system` 命名空间中定义。如果在其他命名空间中定义,`ClusterFlow` 将不起作用。 + +::: + +在旧版 Logging 中,如果要收集整个集群的日志,你只需要启用集群级别的 Logging 并定义所需的 `Output`。Rancher 2.5+ Logging 保留了这个基本方法。要复制旧版集群级别日志,请执行以下步骤: + +1. 根据[输出配置](#输出配置)下的说明定义 `ClusterOutput`。 +2. 创建一个 `ClusterFlow`,确保它在 `cattle-logging-system` 命名空间中创建。 + 1. 删除 `Flow` 定义的所有 _Include_ 和 _Exclude_ 规则。这将确保能收集所有日志。 + 2. 如果不需要,你可以不配置任何过滤器(默认不需要创建)。 + 3. 定义你的集群 `Output`。 + +操作完成后,集群中所有源(所有 pod 和所有系统组件)上收集的日志都会发送到定义在 `ClusterFlow` 中的 `Output` 处。 + +## 项目日志 + +Rancher 2.5+ Logging 不支持项目。换言之,如果要收集运行在项目命名空间中的 pod 日志,你需要为这些命名空间定义 `Flow`。 + +要收集指定命名空间的日志,请执行以下步骤: + +1. 根据[输出配置](#输出配置)下的说明定义 `Output` 或 `ClusterOutput`。 +2. 创建一个 `Flow`,确保它在你要收集日志的命名空间中创建。 + 1. 如果有需要,你可以定义 _Include_ 或 _Exclude_ 规则。如果删除所有规则,则会收集目标命名空间中的所有 pod 日志。 + 2. 如果不需要,你可以不配置任何过滤器(默认不需要创建)。 + 3. 定义你的 Output,可以是 `ClusterOutput` 或 `Output` 对象。 + +操作完成后,命名空间中所有源(pod)上收集的日志都会发送到你在 `Flow` 中定义的 `Output` 处。 + +:::note + +要收集项目中的日志,请在项目中的每个命名空间中重复上述步骤。你也可以使用通用标签(例如 `project=my-project`)标记你的项目工作负载,并使用 `ClusterFlow` 收集匹配此标签的所有 pod 的日志。 + +::: + +## 输出配置 +旧版 Logging 中有五个日志目标位置可供选择,分别是 Elasticsearch、Splunk、Kafka、Fluentd 和 Syslog。除 Syslog 外,这些目标位置都可用于 2.5+ Logging。 + + +### Elasticsearch + +| 旧版 Logging | 2.5+ Logging | 注意 | +|-----------------------------------------------|-----------------------------------|-----------------------------------------------------------| +| 端点 | Target -> Host | 确保指定了协议 (https/http) 以及端口。 | +| X-Pack Security -> Username | Access -> User | | +| X-Pack Security -> Password | Access -> Password | 密码必须存储在密文中。 | +| SSL Configuration -> Client Private Key | SSL -> Client Key | 密钥必须存储在密文中。 | +| SSL Configuration -> Client Certificate | SSL -> Client Cert | 证书必须存储在密文中。 | +| SSL Configuration -> Client Key Password | SSL -> Client Key Pass | 密码必须存储在密文中。 | +| SSL Configuration -> Enabled SSL Verification | SSL -> Certificate Authority File | 证书必须存储在密文中。 | + + +在旧版 Logging 中,索引是根据“索引模式”中的格式自动创建的。在 2.5 Logging 中,默认的操作已更改为记录单个索引。你仍然可以编辑 YAML 并输入以下值,从而在 `Output` 对象上配置索引模式功能: + +```yaml +... +spec: + elasticsearch: + ... + logstash_format: true + logstash_prefix: + logstash_dateformat: "%Y-%m-%d" +``` + +将 `` 替换为要创建的索引的前缀。在旧版 Logging 中,默认值是集群的名称。 + +### Splunk + +| 旧版 Logging | 2.5+ Logging | 注意 | +|------------------------------------------|----------------------------------------|----------------------------------------------------------------------------------------| +| HEC Configuration -> Endpoint | Target -> Host | 协议(https/http)和端口必须与主机分开定义。 | +| HEC Configuration -> Token | Access -> Token | 令牌必须作为密文存储。 | +| HEC Configuration -> Index | Edit as YAML -> `index` | `index` 字段必须作为 YAML 键添加到 `spec.splunkHec` 下。 | +| HEC Configuration -> Source | Edit as YAML -> `source` | `source` 字段必须作为 YAML 键添加到 `spec.splunkHec` 下。 | +| SSL Configuration -> Client Private Key | Edit as YAML -> `client_key` | `client_key` 字段必须作为 YAML 键添加到 `spec.splunkHec` 下。详见(1)。 | +| SSL Configuration -> Client Certificate | Edit as YAML -> `client_cert` | `client_cert` 字段必须作为 YAML 键添加到 `spec.splunkHec` 下。详见(1)。 | +| SSL Configuration -> Client Key Password | _Not Supported_ | 现在不支持为客户端私钥指定密码。 | +| SSL Configuration -> SSL Verify | Edit as YAML -> `ca_file` or `ca_path` | `ca_file` 或 `ca_path` 字段必须作为 YAML 键添加到 `spec.splunkHec` 下。详见(2)。 | + +_(1) `client_key` 和 `client_cert` 的值必须分别是密钥和证书文件的路径。这些文件必须挂载到 `rancher-logging-fluentd` pod 中才能使用_。 + +_(2) 用户可以配置 `ca_file`(PEM 编码的 CA 证书的路径)或 `ca_path`(包含 PEM 格式的 CA 证书的目录路径)。这些文件必须挂载到 `rancher-logging-fluentd` pod 中才能使用_。 + +### Kafka + +| 旧版 Logging | 2.5+ Logging | 注意 | +|-----------------------------------------|----------------------------|------------------------------------------------------| +| Kafka Configuration -> Endpoint Type | - | 不再支持将 Zookeeper 作为端点类型。 | +| Kafka Configuration -> Endpoint | Target -> Brokers | 逗号分隔的 Broker 列表(host:port)。 | +| Kafka Configuration -> Topic | Target -> Default Topic | | +| SSL Configuration -> Client Private Key | SSL -> SSL Client Cert | 证书必须作为密文存储。 | +| SSL Configuration -> Client Certificate | SSL -> SSL Client Cert Key | 密钥必须作为密文存储。 | +| SSL Configuration -> CA Certificate PEM | SSL -> SSL CA Cert | 证书必须作为密文存储。 | +| SASL Configuration -> Username | Access -> Username | 用户名必须存储在密文中。 | +| SASL Configuration -> Password | Access -> Password | 密码必须存储在密文中。 | +| SASL Configuration -> Scram Mechanism | Access -> Scram Mechanism | 输入机制为字符串,例如“sha256”或“sha512”。 | + +### Fluentd + +v2.5.2 开始只支持使用“以表单编辑”选项来添加单个 Fluentd 服务器。要添加多个服务器,请将 `Output` 编辑为 YAML 并输入多个服务器。 + +| 旧版 Logging | 2.5+ Logging | 注意 | +|------------------------------------------|-----------------------------------------------------|----------------------------------------------------------------------| +| Fluentd Configuration -> Endpoint | Target -> Host, Port | 分别输入主机和端口。 | +| Fluentd Configuration -> Shared Key | Access -> Shared Key | 共享密钥必须存储为密文。 | +| Fluentd Configuration -> Username | Access -> Username | 用户名必须存储为密文。 | +| Fluentd Configuration -> Password | Access -> Password | 密码必须存储为密文。 | +| Fluentd Configuration -> Hostname | Edit as YAML -> `host` | `host` 字段作为 YAML 键设置在 `spec.forward.servers[n]`下。 | +| Fluentd Configuration -> Weight | Edit as YAML -> `weight` | `weight` 字段作为 YAML 键设置在 `spec.forward.servers[n]`下。 | +| SSL Configuration -> Use TLS | - | 不需要显式启用。定义客户端证书字段即可。 | +| SSL Configuration -> Client Private Key | Edit as YAML -> `tls_private_key_path` | `spec.forward` 下的字段设置为 YAML 键。详见(1)。 | +| SSL Configuration -> Client Certificate | Edit as YAML -> `tls_client_cert_path` | `spec.forward` 下的字段设置为 YAML 键。详见(1)。 | +| SSL Configuration -> Client Key Password | Edit as YAML -> `tls_client_private_key_passphrase` | `spec.forward` 下的字段设置为 YAML 键。详见(1)。 | +| SSL Configuration -> SSL Verify | Edit as YAML -> `tls_insecure_mode` | `spec.forward` 下的字段设置为 YAML 键。默认:`false`。 | +| SSL Configuration -> CA Certificate PEM | Edit as YAML -> `tls_cert_path` | `spec.forward` 下的字段设置为 YAML 键。详见(1)。 | +| Enable Gzip Compression | - | 2.5+ Logging 不再支持。 | + +_(1) 这些值将被指定为文件的路径。这些文件必须挂载到 `rancher-logging-fluentd` pod 中才能使用。_ + +### Syslog + +从 v2.5.2 开始,使用 2.5+ Logging 的 `Output` 不支持 syslog。 + +## 自定义日志字段 + +要添加自定义日志字段,你需要将以下 YAML 添加到你的 `Flow` 配置中: + +```yaml +... +spec: + filters: + - record_modifier: + records: + - foo: "bar" +``` + +(将 `foo: "bar"` 替换为要添加的自定义日志字段) + +## 系统日志 + +在旧版 Logging 中,你需要在设置集群 Logging 时选中“包括系统日志”来收集系统组件的日志。在 v2.5+ Logging 中,系统日志可以通过以下两种方式之一来收集: + +1. 收集所有集群日志,不指定任何匹配或排除规则。该设置会收集集群所有容器的日志,其中包括系统日志。 +2. 通过为系统组件添加匹配规则来专门收集系统日志。要收集的组件决定了具体的匹配规则。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/logging/rbac-for-logging.md b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/logging/rbac-for-logging.md new file mode 100644 index 00000000000..6e0da0d5737 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/logging/rbac-for-logging.md @@ -0,0 +1,25 @@ +--- +shortTitle: RBAC +title: Logging 的 RBAC +weight: 3 +--- + +Rancher Logging 有两个角色,分别是 `logging-admin` 和 `logging-view`。 + +- `logging-admin` 允许用户完全访问命名空间的 `Flow` 和 `Output`。 +- `logging-view` 允许用户*查看*命名空间的 `Flow` 和 `Output`,以及 `ClusterFlow` 和 `ClusterOutput`。 + +:::note 为什么选择一个角色而不是另一个角色? + +`ClusterFlow` 和 `ClusterOutput` 资源的编辑权限非常强大。任何拥有该权限的用户都能编辑集群中的所有日志。 + +::: + +在 Rancher 中,集群管理员角色是唯一可以完全访问所有 `rancher-logging` 资源的角色。集群成员无法编辑或读取任何 Logging 资源。项目所有者和成员具有以下权限: + +| 项目所有者 | 项目成员 | +--- | --- +| 能够在其项目命名空间中创建命名空间级别的 `Flow` 和 `Output` | 只能查看项目命名空间中的 `Flow` 和 `Output` | +| 可以从项目命名空间中收集任何日志 | 无法在其项目命名空间中收集任何日志 | + +如果项目所有者和项目成员需要使用 Logging,他们需要在项目中至少有*一个*命名空间。如果没有,他们可能看不到顶部导航下拉列表中的 Logging 按钮。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/logging/taints-and-tolerations.md b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/logging/taints-and-tolerations.md new file mode 100644 index 00000000000..0b642fd92c5 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/logging/taints-and-tolerations.md @@ -0,0 +1,66 @@ +--- +title: 处理污点和容忍度 +weight: 6 +--- + +在 Kubernetes 节点上添加污点会导致 pod 排斥在该节点上运行。 + +除非 pod 对该节点的污点具有`容忍度`(toleration),否则 Pod 将在集群中的其他节点上运行。 + +[污点和容忍度](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/)可以与 `PodSpec` 中的 `nodeSelector` [字段](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector)一起使用,从而实现*相反的*污点效果。 + +`nodeSelector` 可以使 pod 被吸引到某类节点。 + +两者都能让 pod 选择在哪个节点上运行。 + +- [Rancher Logging 堆栈中的默认实现](#rancher-日志堆栈中的默认实现) +- [为自定义污点添加 NodeSelector 设置和容忍度](#为自定义污点添加-nodeselector-设置和容忍度) + + +### Rancher 日志堆栈中的默认实现 + +默认情况下,Rancher 使用 `cattle.io/os=linux` 来将污点应用到所有 Linux 节点,而不影响 Windows 节点。 +日志堆栈 pod 具有针对此污点的`容忍度`,因此它们能够运行在 Linux 节点上。 +此外,大多数日志堆栈 pod 仅在 Linux 上运行,并添加了 `nodeSelector` 以确保它们在 Linux 节点上运行。 + +此示例 Pod YAML 文件显示了与容忍度一起使用的 nodeSelector: + +```yaml +apiVersion: v1 +kind: Pod +# metadata... +spec: + # containers... + tolerations: + - key: cattle.io/os + operator: "Equal" + value: "linux" + effect: NoSchedule + nodeSelector: + kubernetes.io/os: linux +``` + +在上面的示例中,我们确保了的 pod 仅在 Linux 节点上运行,并且为所有 Linux 节点上的污点添加了`容忍度`。 + +你可以对 Rancher 现有的污点或你自己的自定义污点执行相同的操作。 + +### 为自定义污点添加 NodeSelector 设置和容忍度 + +如果要添加你自己的 `nodeSelector` 设置,或者要为其他污点添加 `容忍度`,你可以将以下内容传递给 Chart 的值: + +```yaml +tolerations: + # insert tolerations... +nodeSelector: + # insert nodeSelector... +``` + +这些值会将这两个设置添加到 `fluentd`、`fluentbit`和 `logging-operator` 容器中。 +本质上,这些是日志堆栈中所有 pod 的全局设置。 + +但是,如果你想*仅*为 `fluentbit` 容器添加容忍度,你可以将以下内容添加到 Chart 的值中: + +```yaml +fluentbit_tolerations: + # insert tolerations list for fluentbit containers only... +``` diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/longhorn.md b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/longhorn.md new file mode 100644 index 00000000000..cf2c66e0c71 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/longhorn.md @@ -0,0 +1,71 @@ +--- +title: Longhorn - Kubernetes 的云原生分布式块存储 +shortTitle: Longhorn 存储 +weight: 19 +--- + +[Longhorn](https://longhorn.io/) 是一个轻量级、可靠、易用的 Kubernetes 分布式块存储系统。 + +Longhorn 是免费的开源软件。Longhorn 最初由 Rancher Labs 开发,现在正在作为云原生计算基金会的沙盒项目进行开发。它可以通过 Helm、kubectl 或 Rancher UI 安装在任何 Kubernetes 集群上。有关其架构的更多信息,请参阅[此处](https://longhorn.io/docs/latest/concepts/)。 + +使用 Longhorn,你可以: + +- 将 Longhorn 卷用作 Kubernetes 集群中分布式有状态应用程序的持久存储 +- 将你的块存储分区为 Longhorn 卷,以便在有或没有云提供商的情况下使用 Kubernetes 卷 +- 跨多个节点和数据中心复制块存储以提高可用性 +- 将备份数据存储在 NFS 或 AWS S3 等外部存储中 +- 创建跨集群灾难恢复卷,以便使用另一个 Kubernetes 集群中的备份快速恢复主 Kubernetes 集群中的数据 +- 计划卷的定期快照,并将定期备份调度到 NFS 或兼容 S3 的辅助存储 +- 使用备份来恢复卷 +- 在不中断持久卷的情况下升级 Longhorn + +
Longhorn 仪表板
+ +![Longhorn 仪表板](/img/longhorn-screenshot.png) + +### 使用 Rancher 安装 Longhorn + +1. 满足所有[安装要求](https://longhorn.io/docs/latest/deploy/install/#installation-requirements)。 +1. 转到要安装 Longhorn 的集群。 +1. 单击**应用 & 应用市场**。 +1. 单击 **Chart**。 +1. 点击 **Longhorn**。 +1. 可选:要自定义初始设置,请单击 **Longhorn 默认设置**并编辑配置。如需自定义设置的帮助,请参阅 [Longhorn 文档](https://longhorn.io/docs/latest/references/settings/)。 +1. 单击**安装**。 + +**结果**:Longhorn 已部署到 Kubernetes 集群中。 + +### 从 Rancher UI 访问 Longhorn + +1. 转到安装了 Longhorn 的集群。在左侧导航菜单中,单击 **Longhorn**。 +1. 在此页面上,你可以编辑 Longhorn 管理的 Kubernetes 资源。要查看 Longhorn UI,请单击**概述**中的 **Longhorn** 按钮。 + +**结果**:你将转到 Longhorn UI,你可以在那里管理 Longhorn 卷及其在 Kubernetes 集群中的副本,还可以查看位于另一个 Kubernetes 集群或 S3 中的 Longhorn 存储辅助备份。 + +### 从 Rancher UI 卸载 Longhorn + +1. 转到安装了 Longhorn 的集群,然后单击**应用 & 应用市场**。 +1. 点击**已安装的应用**。 +1. 转到 `longhorn-system` 命名空间并选中 `longhorn` 和 `longhorn-crd` 应用程序旁边的框。 +1. 单击**删除**并确认**删除**。 + +**结果**:Longhorn 已被卸载。 + +### GitHub 仓库 + +Longhorn 项目在[此处](https://github.com/longhorn/longhorn)。 + +### 文档 + +Longhorn 文档在[此处](https://longhorn.io/docs/)。 + +### 架构 + +Longhorn 为每个卷创建专用的存储控制器,并在存储在多个节点上的多个副本之间同步复制该卷。 + +存储控制器和副本本身是使用 Kubernetes 编排的。 + +有关其架构的更多信息,请参阅[此处](https://longhorn.io/docs/latest/concepts/)。 + +
Longhorn 架构
+![Longhorn 架构](/img/longhorn-architecture.svg) diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/monitoring-and-alerting/built-in-dashboards.md b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/monitoring-and-alerting/built-in-dashboards.md new file mode 100644 index 00000000000..e50672c5165 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/monitoring-and-alerting/built-in-dashboards.md @@ -0,0 +1,112 @@ +--- +title: 内置仪表板 +weight: 3 +--- + + +## Grafana UI + +你可以使用 [Grafana](https://grafana.com/grafana/) 对存储在各个地方的指标进行查询、可视化、告警和了解。你能与你的团队创建、探索和共享仪表板,并培养数据驱动的文化。 + +要查看时间序列数据可视化的默认仪表板,请转到 Grafana UI。 + +### 自定义 Grafana + +要查看和自定义用于支持 Grafana 仪表板的 PromQL 查询,请参阅[此页面](../../../how-to-guides/advanced-user-guides/monitoring-alerting-guides/customize-grafana-dashboard.md)。 + +### 持久化 Grafana 仪表板 + +要创建持久化 Grafana 仪表板,请参阅[此页面](../../../how-to-guides/advanced-user-guides/monitoring-alerting-guides/create-persistent-grafana-dashboard.md)。 + +### 访问 Grafana + +有关 Grafana 的 RBAC,请参阅[本节](rbac-for-monitoring.md#grafana-的-rbac)。 + + +## Alertmanager UI + +安装 `rancher-monitoring` 后,会部署 Prometheus Alertmanager UI,从而让你查看告警以及当前的 Alertmanager 配置。 + +:::note + +本节参考假设你已经熟悉 Monitoring 组件的协同工作方式。有关 Alertmanager 的详细信息,请参阅[本节](how-monitoring-works.md#alertmanager-工作原理)。 + +::: + +### 访问 Alertmanager UI + +Alertmanager UI 可让你查看最近触发的告警。 + +:::note 先决条件: + +必须安装 `rancher-monitoring` 应用。 + +::: + +要查看 Alertmanager UI: + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 在**集群**页面上,转到要查看 Alertmanager UI 的集群,然后单击 **Explore**。 +1. 在左侧导航栏中,单击**监控**。 +1. 单击 **Alertmanager**。 + +**结果**:在新选项卡中打开 Alertmanager UI。如需配置帮助,请参阅[官方 Alertmanager 文档](https://prometheus.io/docs/alerting/latest/alertmanager/)。 + +有关在 Rancher 中配置 Alertmanager 的更多信息,请参阅[此页面](../../../how-to-guides/advanced-user-guides/monitoring-v2-configuration-guides/advanced-configuration/alertmanager.md)。 + +
Alertmanager UI
+![Alertmanager UI](/img/alertmanager-ui.png) + + +### 查看默认告警 + +要查看默认触发的告警,请转到 Alertmanager UI 并单击**展开所有组**。 + + +## Prometheus UI + +默认情况下,[kube-state-metrics service](https://github.com/kubernetes/kube-state-metrics) 向 monitoring 应用提供 CPU 和内存利用率的大量信息。这些指标涵盖了跨命名空间的 Kubernetes 资源。换言之,如果你要查看服务的资源指标,你无需为其创建新的 ServiceMonitor。由于数据已经在时间序列数据库中,你可以转到 Prometheus UI 并运行 PromQL 查询来获取信息。你可以使用相同的查询来配置 Grafana 仪表板,从而显示这些指标随时间变化的图表。 + +要查看 Prometheus UI,请安装 `rancher-monitoring`。然后: + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 在**集群**页面上,转到要查看 Prometheus UI 的集群,然后单击 **Explore**。 +1. 在左侧导航栏中,单击**监控**。 +1. 单击 **Prometheus Graph**。 + +
Prometheus Graph UI
+ +![Prometheus Graph UI](/img/prometheus-graph-ui.png) + +### 查看 Prometheus 目标 + +要查看你正在监控的服务,你需要查看你的目标。目标是由 ServiceMonitor 和 PodMonitor 设置的,指的是指标抓取的的源。你无需直接编辑目标,但 Prometheus UI 可为你提供抓取的所有指标来源的概览。 + +要查看 Prometheus 目标,请安装 `rancher-monitoring`。然后: + + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 在**集群**页面上,转到要查看 Prometheus 目标的集群,然后单击 **Explore**。 +1. 在左侧导航栏中,单击**监控**。 +1. 单击 **Prometheus 目标**。 + +
Prometheus UI 中的目标
+![Prometheus 目标 UI](/img/prometheus-targets-ui.png) + +### 查看 PrometheusRules + +当你定义规则时(在 PrometheusRule 资源的 RuleGroup 中声明),[规则本身的规范](https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#rule)会包含标签,然后 Alertmanager 会使用这些标签来确定接收对应告警的路由。 + +要查看 PrometheusRule,请安装 `rancher-monitoring`。然后: + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 在**集群**页面上,转到要可视化的集群,然后单击 **Explore**。 +1. 在左侧导航栏中,单击**监控**。 +1. 点击 **Prometheus 规则**。 + +你还可以在 Prometheus UI 中查看规则: + +
Prometheus UI 中的规则
+![PrometheusRules UI](/img/prometheus-rules-ui.png) + +有关在 Rancher 中配置 PrometheusRule 的更多信息,请参阅[此页面](../../../how-to-guides/advanced-user-guides/monitoring-v2-configuration-guides/advanced-configuration/prometheusrules.md)。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/monitoring-and-alerting/how-monitoring-works.md b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/monitoring-and-alerting/how-monitoring-works.md new file mode 100644 index 00000000000..6b58e08fef9 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/monitoring-and-alerting/how-monitoring-works.md @@ -0,0 +1,250 @@ +--- +title: Monitoring 的工作原理 +weight: 1 +--- + + +## 1. 架构概述 + +_**下文描述了数据如何流经 Monitoring V2 应用程序:**_ + +### Prometheus Operator + +Prometheus Operator 观察正在创建的 ServiceMonitors、PodMonitors 和 PrometheusRules。在创建 Prometheus 配置资源时,Prometheus Operator 会调用 Prometheus API 来同步新配置。如本节末尾的图所示,Prometheus Operator 充当 Prometheus 和 Kubernetes 之间的中介,调用 Prometheus API 来同步 Prometheus 与 Kubernetes 中的监控相关资源。 + +### ServiceMonitor 和 PodMonitor + +ServiceMonitor 和 PodMonitor 以声明方式指定需要监控的目标,例如 Service 和 Pod。 + +- 目标是根据配置的 Prometheus 抓取间隔定期抓取的,而抓取的指标存储在 Prometheus 时间序列数据库(Time Series Database,TSDB)中。 + +- 为了执行抓取,你需要使用标签选择器来定义 ServiceMonitor 和 PodMonitor,这些标签选择器用于确定要抓取的 Service 或 Pod,并能确定端点(端点能确定抓取如何在给定目标上进行,例如在 TCP 10252 中抓取指标,通过 IP 地址 x.x.x.x 进行代理)。 + +- 开箱即用地,Monitoring V2 附带了一些预配置的 Exporter,这些 Exporter 根据其所在的 Kubernetes 集群的类型进行部署。有关详细信息,请参阅[抓取和公开指标](#5-抓取和公开指标)。 + +### PushProx 的工作原理 + +- 某些内部 Kubernetes 组件是通过部署在 Monitoring V2 中名为 **PushProx** 的代理来抓取的。通过 PushProx 向 Prometheus 公开指标的 Kubernetes 组件分别是 `kube-controller-manager`、`kube-scheduler`, `etcd` 和 `kube-proxy`。 + +- 对于每个 PushProx Exporter,我们在所有目标节点上都部署一个 PushProx 客户端。例如,将 PushProx 客户端部署到 kube-controller-manager 的所有 controlplane 节点、kube-etcd 的所有 etcd 节点上,和 kubelet 的所有节点上。 + +- 我们为每个 Exporter 部署了一个 PushProx 代理。导出指标的流程如下: + +1. PushProx 客户端与 PushProx 代理建立出站连接。 +1. 然后,客户端会轮询代理以获取进入代理的抓取请求。 +1. 当代理收到来自 Prometheus 的抓取请求时,客户端会将其视为轮询的结果。 +1. 客户端抓取内部组件。 +1. 内部组件通过将指标推回代理来响应。 + + +

使用 PushProx 导出指标的过程:
+ +![使用 PushProx 导出指标的过程](/img/pushprox-process.svg) + +### PrometheusRules + +PrometheusRule 用于定义指标或时间序列数据库查询触发告警的规则。规则是按时间间隔评估的。 + +- **记录规则**根据已收集的现有序列创建一个新的时间序列。它们常用于预先计算的复杂查询。 +- **告警规则**运行特定查询,如果查询评估为非零值,则从 Prometheus 触发告警。 + +### 告警路由 + +一旦 Prometheus 确定需要触发告警,就会将告警转发到 **Alertmanager**。 + +- 告警包含来自 PromQL 查询本身的标签,以及指定初始 PrometheusRule 时设置的其他标签和注释。 + +- 在接收任何告警之前,Alertmanager 会用配置中指定的**路由 (Route)** 和**接收器 (Receiver)** 来形成一个路由树,所有传入的告警都会在该路由树上进行评估。路由树的每个节点都可以根据附加到 Prometheus 告警的标签来指定要进行的其他分组、标签和过滤。路由树上的节点(通常是叶节点)还可以指定到达的告警需要发送到什么接收器,例如 Slack、PagerDuty、SMS 等。请注意,Alertmanager 首先向 **alertingDriver** 发送告警,然后 alertingDriver 再将告警发送或转发到正确的目标位置。 + +- 路由和接收器也通过 Alertmanager Secret 存储在 Kubernetes API 中。当 Secret 更新时,Alertmanager 也会自动更新。请注意,路由仅通过标签发生(而不是通过注释等)。 + +
数据如何流经 Monitoring 应用程序
+ + +## 2. Prometheus 的工作原理 + +### 存储时间序列数据 + +收集 Exporter 的指标后,Prometheus 将时间序列存储在本地磁盘时间序列数据库中。Prometheus 可以选择与远程系统集成,但 `rancher-monitoring` 使用本地存储来存储时间序列数据库。 + +存储后,用户可以使用 PromQL(Prometheus 的查询语言)查询此 TSDB。 + +PromQL 查询可以通过以下两种方式进行可视化: + +1. 通过在 Prometheus 的 Graph UI 中提供查询,UI 会显示数据的简单图形视图。 +1. 通过创建包含 PromQL 查询和其他格式化指令的 Grafana 仪表板,这些指令用于标记轴、添加单位、更改颜色、使用替代可视化等。 + +### 为 Prometheus 定义规则 + +规则定义了 Prometheus 需要在常规 `evaluationInterval` 上执行的查询,从而执行某些操作,例如触发告警(告警规则)或根据 TSDB 中存在的其他查询(记录规则)预先计算查询。这些规则编码在 PrometheusRules 自定义资源中。创建或更新 PrometheusRule 自定义资源后,Prometheus Operator 会观察变化,并调用 Prometheus API 来定期同步 Prometheus 当前正在评估的规则集。 + +PrometheusRule 支持定义一个或多个 RuleGroup。每个 RuleGroup 由一组 Rule 对象组成,每个 Rule 对象均能表示告警或记录规则,并具有以下字段: + +- 新告警或记录的名称 +- 新告警或记录的 PromQL 表达式 +- 用于标记告警或记录的标签(例如集群名称或严重性) +- 对需要在告警通知上显示的其他重要信息进行编码的注释(例如摘要、描述、消息、Runbook URL 等)。记录规则不需要此字段。 + +在评估[规则](https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/api.md#rule)时,Prometheus 将执行配置的 PromQL 查询,添加其他标签(或注释 - 仅用于告警规则),并为规则执行所需的操作。例如,如果某个告警规则将 `team:front-end` 作为标签添加到配置的 PromQL 查询,该标签会尾附到触发的告警,这将允许 Alertmanager 将告警转发到正确的接收器。 + +### 告警和记录规则 + +Prometheus 不会维护告警是否处于 active 状态。它在每个评估间隔内重复触发告警,并根据 Alertmanager 对告警进行分组和过滤成有意义的通知。 + +`evaluation_interval` 常量定义了 Prometheus 根据时间序列数据库评估告警规则的频率。与 `scrape_interval` 类似,`evaluation_interval` 的默认值也是一分钟。 + +规则包含在一组规则文件中。规则文件包括告警规则和记录规则,但只有告警规则才会在评估后触发告警。 + +对于记录规则,Prometheus 会运行查询,然后将其存储为时间序列。如果需要存储非常昂贵或耗时的查询的结果,这种合成的时间序列则非常有用,因此你可以在后续更快地进行查询它们。 + +告警规则是更常用的。每当告警规则评估为正数时,Prometheus 都会触发告警。 + +在触发告警之前,Rule 文件会根据实际用例将标签和注释添加到告警中: + +- 标签用于标识告警的信息,并可能影响告警的路由。例如,如果在发送有关某个容器的告警时,你可以使用容器 ID 作为标签。 + +- 注释用于表示不影响告警路由位置的信息,例如 Runbook 或错误消息。 + +## 3. Alertmanager 的工作原理 + +Alertmanager 处理由 Prometheus server 等客户端应用发送的告警。它负责以下任务: + +- 删除重复数据,分组,并将告警路由到正确的接收器集成(例如电子邮件、PagerDuty 或 OpsGenie) + +- 静音和抑制告警 + +- 跟踪随时间触发的告警 + +- 发送告警的状态,即告警是否正在触发,或者是否已经解决 + +### 由 alertingDrivers 转发的告警 + +安装 alertingDriver 后会根据 alertingDriver 的配置创建一个 `Service`,可用作 Teams 或 SMS 的接收器 URL。接收器中的 URL 会指向 alertingDrivers。因此 Alertmanager 首先向 alertingDriver 发送告警,然后 alertingDriver 将告警转发或发送到正确的目的位置。 + +### 将告警路由到接收器 + +Alertmanager 负责协调告警的发送位置。它允许你根据标签对告警进行分组,并根据标签匹配情况来触发告警。一个最顶层路由会接受所有告警。然后,Alertmanager 会根据告警是否匹配下一个路由的条件,继续将告警路由到接收器。 + +虽然 Rancher UI 表单只允许编辑两层深的路由树,但你可以通过编辑 Alertmanager Secret 来配置更深的嵌套路由结构。 + +### 配置多个接收器 + +你可以编辑 Rancher UI 中的表单来设置一个接收器资源,其中包含 Alertmanager 将告警发送到你的通知系统所需的所有信息。 + +通过在 Alertmanager 或接收器配置中编辑自定义 YAML,你还可以将告警发送到多个通知系统。有关详细信息,请参阅[接收器配置](../../../reference-guides/monitoring-v2-configuration/receivers.md#配置多个接收器)。 + +## 4. Monitoring V2 特定组件 + +Prometheus Operator 引入了一组[自定义资源定义](https://github.com/prometheus-operator/prometheus-operator#customresourcedefinitions),允许用户通过在集群上创建和修改这些自定义资源来部署和管理 Prometheus 和 Alertmanager 实例。 + +Prometheus Operator 会根据 Rancher UI 中编辑的资源和配置选项的实时状态来自动更新 Prometheus 配置。 + +### 默认部署的资源 + +默认情况下,由 [kube-prometheus](https://github.com/prometheus-operator/kube-prometheus) 项目策划的一组资源会作为 Rancher Monitoring 安装的一部分部署到你的集群上,用来设置基本的 Monitoring/Alerting 堆栈。 + +你可以在 [`rancher-monitoring`](https://github.com/rancher/charts/tree/main/charts/rancher-monitoring) Helm Chart 中找到部署到你的集群以支持此解决方案的资源,该 chart 密切跟踪由 Prometheus 社区维护的上游 [kube-prometheus-stack](https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack) Helm Chart,并在 [CHANGELOG.md](https://github.com/rancher/charts/blob/main/charts/rancher-monitoring/CHANGELOG.md) 中跟踪变更。 + +### 默认 Exporter + +Monitoring V2 部署了三个默认 Exporter,它们为 Prometheus 提供额外的指标来存储: + +1. `node-exporter`:公开 Linux 主机的硬件和操作系统指标。有关 `node-exporter` 的更多信息,请参阅[上游文档](https://prometheus.io/docs/guides/node-exporter/)。 + +1. `windows-exporter`:公开 Windows 主机的硬件和操作系统指标(仅部署在 Windows 集群上)。有关 `windows-exporter` 的更多信息,请参阅[上游文档](https://github.com/prometheus-community/windows_exporter)。 + +1. `kube-state-metrics`:公开跟踪 Kubernetes API 中包含的资源状态的其他指标(例如,pod、工作负载等)。有关 `kube-state-metrics` 的更多信息,请参阅[上游文档](https://github.com/kubernetes/kube-state-metrics/tree/master/docs)。 + +ServiceMonitor 和 PodMonitor 将按照[此定义](#定义要抓取的指标)来抓取这些 Exporter。Prometheus 会存储这些指标,你可以通过 Prometheus 的 UI 或 Grafana 查询结果。 + +有关记录规则、告警规则和 Alertmanager 的更多信息,请参阅[架构](#1-架构概述)。 + +### Rancher UI 中公开的组件 + +安装 monitoring 应用后,你将能够在 Rancher UI 中编辑以下组件: + +| 组件 | 组件类型 | 编辑的目的和常见用例 | +|--------------|------------------------|---------------------------| +| ServiceMonitor | 自定义资源 | 设置 Kubernetes Service 来获取其自定义指标。自动更新 Prometheus 自定义资源中的抓取配置。 | +| PodMonitor | 自定义资源 | 设置 Kubernetes Pod 来获取其自定义指标。自动更新 Prometheus 自定义资源中的抓取配置。 | +| 接收器 | 配置块(Alertmanager 的一部分) | 修改将告警发送到什么位置的信息(例如,Slack、PagerDuty 等)以及发送告警的其他必要信息(例如,TL​​S 证书、代理 URL 等)。自动更新 Alertmanager 自定义资源。 | +| Route | 配置块(Alertmanager 的一部分) | 修改用于根据标签过滤、标记和分组告警的路由树,并将告警发送到所需的接收器。自动更新 Alertmanager 自定义资源。 | +| PrometheusRule | 自定义资源 | 定义其他查询,这些查询能触发告警或定义 Prometheus TSDB 中现有的物化视图。自动更新 Prometheus 自定义资源。 | + +### PushProx + +PushProx 允许 Prometheus 跨网络边界抓取指标,这样,用户就不用必须为 Kubernetes 集群中每个节点上的内部 Kubernetes 组件公开指标端口。 + +由于 Kubernetes 组件的指标通常暴露在集群中节点的主机网络上,PushProx 部署了一个客户端 DaemonSet,这些客户端位于每个节点的主机网络上,并与位于 Kubernetes API 上的单个代理建立出站连接。然后,你可以让 Prometheus 通过代理将抓取请求发送到每个客户端,这样,Prometheus 能从内部 Kubernetes 组件抓取指标,而不需要打开任何入站节点端口。 + +有关更多信息,请参阅[使用 PushProx 抓取指标](#使用-pushprox-抓取指标)。 + +## 5. 抓取和公开指标 + +### 定义要抓取的指标 + +ServiceMonitor 和 PodMonitor 定义了 Prometheus 要抓取的目标。[Prometheus 自定义资源](https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/design.md#prometheus)告诉 Prometheus 应该使用哪个 ServiceMonitor 或 PodMonitor 来确定从哪里抓取指标。 + +Prometheus Operator 观察 ServiceMonitor 和 PodMonitor。当它观察到二者被创建或更新时,它会调用 Prometheus API 来更新 Prometheus 自定义资源中的抓取配置,并使该配置与 ServiceMonitor 或 PodMonitor 中的抓取配置保持同步。此抓取配置告诉 Prometheus 从哪些端点抓取指标,以及如何标记这些端点的指标。 + +Prometheus 会根据 `scrape_interval`(默认为一分钟)来抓取定义在抓取配置中的所有指标。 + +抓取配置可以作为 Prometheus 自定义资源的一部分被查看,该资源在 Rancher UI 中公开。 + +### Prometheus Operator 如何设置指标抓取 + +Prometheus Deployment 或 StatefulSet 能抓取指标,而 Prometheus 的配置由 Prometheus 自定义资源控制。Prometheus Operator 会观察 Prometheus 和 Alertmanager 资源,当它们被创建时,Prometheus Operator 使用用户定义的配置,为 Prometheus 或 Alertmanager 创建一个 Deployment 或 StatefulSet。 + +如果 Prometheus Operator 观察到正在创建的 ServiceMonitor、PodMonitor 和 PrometheusRule,它就知道需要在 Prometheus 中更新抓取配置。首先,会通过更新 Prometheus 的 Deployment 或 StatefulSet 卷中的配置和规则文件来更新 Prometheus。然后,再调用 Prometheus API 来同步新配置,从而将 Prometheus Deployment 或 StatefulSet 修改到位。 + +### 如何公开 Kubernetes 组件指标 + +Prometheus 从称为 [exporter](https://prometheus.io/docs/instrumenting/exporters/) 的 deployment 中抓取指标,exporter 以 Prometheus 可以抓取的格式导出时间序列数据。在 Prometheus 中,时间序列由属于相同指标和相同标记维度集的时间戳值流组成。 + +### 使用 PushProx 抓取指标 + +某些内部 Kubernetes 组件是通过部署在 Monitoring V2 中名为 PushProx 的代理来抓取的。有关 PushProx 的详细信息,请参阅[此处](#pushprox-的工作原理)和上面的[架构](#1-架构概述)部分。 + +### 抓取指标 + +Prometheus 直接抓取以下 Kubernetes 组件: + +- kubelet\* +- ingress-nginx\*\* +- coreDns/kubeDns +- kube-api-server + +\* 你可以选择通过 `hardenedKubelet.enabled` 来使用 PushProx,但这不是默认设置。 + +\*\* RKE 和 RKE2 集群默认部署 ingress-nginx,并将其视为内部 Kubernetes 组件。 + + +### 基于 Kubernetes 发行版抓取指标 + +指标的抓取方式根据 Kubernetes 发行版而有所不同。有关术语的帮助,请参阅[此处](#名词解释)。详情见下表: + +
指标如何暴露给 Prometheus
+ +| Kubernetes 组件 | RKE | RKE2 | KubeADM | K3s | +|-----|-----|-----|-----|-----| +| kube-controller-manager | rkeControllerManager.enabled | rke2ControllerManager.enabled | kubeAdmControllerManager.enabled | k3sServer.enabled | +| kube-scheduler | rkeScheduler.enabled | rke2Scheduler.enabled | kubeAdmScheduler.enabled | k3sServer.enabled | +| etcd | rkeEtcd.enabled | rke2Etcd.enabled | kubeAdmEtcd.enabled | 不可用 | +| kube-proxy | rkeProxy.enabled | rke2Proxy.enabled | kubeAdmProxy.enabled | k3sServer.enabled | +| kubelet | 收集 kubelet 直接公开的指标 | 收集 kubelet 直接公开的指标 | 收集 kubelet 直接公开的指标 | 收集 kubelet 直接公开的指标 | +| ingress-nginx* | 收集 kubelet 直接公开的指标,由 rkeIngressNginx.enabled 公开 | 收集 kubelet 直接公开的指标,由 rke2IngressNginx.enabled 公开 | 不可用 | 不可用 | +| coreDns/kubeDns | 收集 coreDns/kubeDns 直接公开的指标 | 收集 coreDns/kubeDns 直接公开的指标 | 收集 coreDns/kubeDns 直接公开的指标 | 收集 coreDns/kubeDns 直接公开的指标 | +| kube-api-server | 收集 kube-api-server 直接公开的指标 | 收集 kube-api-server 直接公开的指标 | 收集 kube-appi-server 直接公开的指标 | 收集 kube-api-server 直接公开的指标 | + +\* RKE 和 RKE2 集群默认部署 ingress-nginx,并将其视为内部 Kubernetes 组件。 + +### 名词解释 + +- **kube-scheduler**:内部 Kubernetes 组件,该组件使用 pod 规范中的信息来决定在哪个节点上运行 pod。 +- **kube-controller-manager**:负责节点管理(检测节点是否失败)、pod 复制,以及端点创建的内部 Kubernetes 组件。 +- **etcd**:Kubernetes 内部组件,它是 Kubernetes 用于持久存储所有集群信息的分布式键/值存储。 +- **kube-proxy**:内部 Kubernetes 组件,用于监控 API server 的 pod/service 更改以保持网络最新状态。 +- **kubelet**:内部 Kubernetes 组件,用于为 pod 监视节点上的 API server 并确保这些 pod 能运行。 +- **ingress-nginx**:用于 Kubernetes 的 Ingress controller,使用 NGINX 作为反向代理和负载均衡器。 +- **coreDns/kubeDns**:负责 DNS 的内部 Kubernetes 组件。 +- **kube-api-server**:负责为其他 master 组件公开 API 的主要内部 Kubernetes 组件。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/monitoring-and-alerting/promql-expressions.md b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/monitoring-and-alerting/promql-expressions.md new file mode 100644 index 00000000000..aaad6d16a0a --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/monitoring-and-alerting/promql-expressions.md @@ -0,0 +1,366 @@ +--- +title: PromQL 表达式参考 +weight: 6 +--- + +本文档中的 PromQL 表达式可用于配置告警。 + +关于查询 Prometheus 时间序列数据库的更多信息,请参阅 [Prometheus 官方文档](https://prometheus.io/docs/prometheus/latest/querying/basics/)。 + + +## 集群指标 + +### 集群 CPU 利用率 + +| 目录 | 表达式 | +| --- | --- | +| 详情 | `1 - (avg(irate(node_cpu_seconds_total{mode="idle"}[5m])) by (instance))` | +| 摘要 | `1 - (avg(irate(node_cpu_seconds_total{mode="idle"}[5m])))` | + +### 集群平均负载 + +| 目录 | 表达式 | +| --- | --- | +| 详情 |
load1`sum(node_load1) by (instance) / count(node_cpu_seconds_total{mode="system"}) by (instance)`
load5`sum(node_load5) by (instance) / count(node_cpu_seconds_total{mode="system"}) by (instance)`
load15`sum(node_load15) by (instance) / count(node_cpu_seconds_total{mode="system"}) by (instance)`
| +| 摘要 |
load1`sum(node_load1) by (instance) / count(node_cpu_seconds_total{mode="system"})`
load5`sum(node_load5) by (instance) / count(node_cpu_seconds_total{mode="system"})`
load15`sum(node_load15) by (instance) / count(node_cpu_seconds_total{mode="system"})`
| + +### 集群内存利用率 + +| 目录 | 表达式 | +| --- | --- | +| 详情 | `1 - sum(node_memory_MemAvailable_bytes) by (instance) / sum(node_memory_MemTotal_bytes) by (instance)` | +| 摘要 | `1 - sum(node_memory_MemAvailable_bytes) / sum(node_memory_MemTotal_bytes)` | + +### 集群磁盘利用率 + +| 目录 | 表达式 | +| --- | --- | +| 详情 | `(sum(node_filesystem_size_bytes{device!="rootfs"}) by (instance) - sum(node_filesystem_free_bytes{device!="rootfs"}) by (instance)) / sum(node_filesystem_size_bytes{device!="rootfs"}) by (instance)` | +| 摘要 | `(sum(node_filesystem_size_bytes{device!="rootfs"}) - sum(node_filesystem_free_bytes{device!="rootfs"})) / sum(node_filesystem_size_bytes{device!="rootfs"})` | + +### 集群磁盘 I/O + +| 目录 | 表达式 | +| --- | --- | +| 详情 |
read`sum(rate(node_disk_read_bytes_total[5m])) by (instance)`
written`sum(rate(node_disk_written_bytes_total[5m])) by (instance)`
| +| 摘要 |
read`sum(rate(node_disk_read_bytes_total[5m]))`
written`sum(rate(node_disk_written_bytes_total[5m]))`
| + +### 集群网络数据包 + +| 目录 | 表达式 | +| --- | --- | +| 详情 |
receive-droppedsum(rate(node_network_receive_drop_total{device!~"lo | veth.* | docker.* | flannel.* | cali.* | cbr.*"}[5m])) by (instance)
receive-errssum(rate(node_network_receive_errs_total{device!~"lo | veth.* | docker.* | flannel.* | cali.* | cbr.*"}[5m])) by (instance)
receive-packetssum(rate(node_network_receive_packets_total{device!~"lo | veth.* | docker.* | flannel.* | cali.* | cbr.*"}[5m])) by (instance)
transmit-droppedsum(rate(node_network_transmit_drop_total{device!~"lo | veth.* | docker.* | flannel.* | cali.* | cbr.*"}[5m])) by (instance)
transmit-errssum(rate(node_network_transmit_errs_total{device!~"lo | veth.* | docker.* | flannel.* | cali.* | cbr.*"}[5m])) by (instance)
transmit-packetssum(rate(node_network_transmit_packets_total{device!~"lo | veth.* | docker.* | flannel.* | cali.* | cbr.*"}[5m])) by (instance)
| +| 摘要 |
receive-droppedsum(rate(node_network_receive_drop_total{device!~"lo | veth.* | docker.* | flannel.* | cali.* | cbr.*"}[5m]))
receive-errssum(rate(node_network_receive_errs_total{device!~"lo | veth.* | docker.* | flannel.* | cali.* | cbr.*"}[5m]))
receive-packetssum(rate(node_network_receive_packets_total{device!~"lo | veth.* | docker.* | flannel.* | cali.* | cbr.*"}[5m]))
transmit-droppedsum(rate(node_network_transmit_drop_total{device!~"lo | veth.* | docker.* | flannel.* | cali.* | cbr.*"}[5m]))
transmit-errssum(rate(node_network_transmit_errs_total{device!~"lo | veth.* | docker.* | flannel.* | cali.* | cbr.*"}[5m]))
transmit-packetssum(rate(node_network_transmit_packets_total{device!~"lo | veth.* | docker.* | flannel.* | cali.* | cbr.*"}[5m]))
| + +### 集群网络 I/O + +| 目录 | 表达式 | +| --- | --- | +| 详情 |
receivesum(rate(node_network_receive_bytes_total{device!~"lo | veth.* | docker.* | flannel.* | cali.* | cbr.*"}[5m])) by (instance)
transmitsum(rate(node_network_transmit_bytes_total{device!~"lo | veth.* | docker.* | flannel.* | cali.* | cbr.*"}[5m])) by (instance)
| +| 摘要 |
receivesum(rate(node_network_receive_bytes_total{device!~"lo | veth.* | docker.* | flannel.* | cali.* | cbr.*"}[5m]))
transmitsum(rate(node_network_transmit_bytes_total{device!~"lo | veth.* | docker.* | flannel.* | cali.* | cbr.*"}[5m]))
| + +## 节点指标 + +### 节点 CPU 利用率 + +| 目录 | 表达式 | +| --- | --- | +| 详情 | `avg(irate(node_cpu_seconds_total{mode!="idle", instance=~"$instance"}[5m])) by (mode)` | +| 摘要 | `1 - (avg(irate(node_cpu_seconds_total{mode="idle", instance=~"$instance"}[5m])))` | + +### 节点平均负载 + +| 目录 | 表达式 | +| --- | --- | +| 详情 |
load1`sum(node_load1{instance=~"$instance"}) / count(node_cpu_seconds_total{mode="system",instance=~"$instance"})`
load5`sum(node_load5{instance=~"$instance"}) / count(node_cpu_seconds_total{mode="system",instance=~"$instance"})`
load15`sum(node_load15{instance=~"$instance"}) / count(node_cpu_seconds_total{mode="system",instance=~"$instance"})`
| +| 摘要 |
load1`sum(node_load1{instance=~"$instance"}) / count(node_cpu_seconds_total{mode="system",instance=~"$instance"})`
load5`sum(node_load5{instance=~"$instance"}) / count(node_cpu_seconds_total{mode="system",instance=~"$instance"})`
load15`sum(node_load15{instance=~"$instance"}) / count(node_cpu_seconds_total{mode="system",instance=~"$instance"})`
| + +### 节点内存利用率 + +| 目录 | 表达式 | +| --- | --- | +| 详情 | `1 - sum(node_memory_MemAvailable_bytes{instance=~"$instance"}) / sum(node_memory_MemTotal_bytes{instance=~"$instance"})` | +| 摘要 | `1 - sum(node_memory_MemAvailable_bytes{instance=~"$instance"}) / sum(node_memory_MemTotal_bytes{instance=~"$instance"}) ` | + +### 节点磁盘利用率 + +| 目录 | 表达式 | +| --- | --- | +| 详情 | `(sum(node_filesystem_size_bytes{device!="rootfs",instance=~"$instance"}) by (device) - sum(node_filesystem_free_bytes{device!="rootfs",instance=~"$instance"}) by (device)) / sum(node_filesystem_size_bytes{device!="rootfs",instance=~"$instance"}) by (device)` | +| 摘要 | `(sum(node_filesystem_size_bytes{device!="rootfs",instance=~"$instance"}) - sum(node_filesystem_free_bytes{device!="rootfs",instance=~"$instance"})) / sum(node_filesystem_size_bytes{device!="rootfs",instance=~"$instance"})` | + +### 节点磁盘 I/O + +| 目录 | 表达式 | +| --- | --- | +| 详情 |
read`sum(rate(node_disk_read_bytes_total{instance=~"$instance"}[5m]))`
written`sum(rate(node_disk_written_bytes_total{instance=~"$instance"}[5m]))`
| +| 摘要 |
read`sum(rate(node_disk_read_bytes_total{instance=~"$instance"}[5m]))`
written`sum(rate(node_disk_written_bytes_total{instance=~"$instance"}[5m]))`
| + +### 节点网络数据包 + +| 目录 | 表达式 | +| --- | --- | +| 详情 |
receive-droppedsum(rate(node_network_receive_drop_total{device!~"lo | veth.* | docker.* | flannel.* | cali.* | cbr.*",instance=~"$instance"}[5m])) by (device)
receive-errssum(rate(node_network_receive_errs_total{device!~"lo | veth.* | docker.* | flannel.* | cali.* | cbr.*",instance=~"$instance"}[5m])) by (device)
receive-packetssum(rate(node_network_receive_packets_total{device!~"lo | veth.* | docker.* | flannel.* | cali.* | cbr.*",instance=~"$instance"}[5m])) by (device)
transmit-droppedsum(rate(node_network_transmit_drop_total{device!~"lo | veth.* | docker.* | flannel.* | cali.* | cbr.*",instance=~"$instance"}[5m])) by (device)
transmit-errssum(rate(node_network_transmit_errs_total{device!~"lo | veth.* | docker.* | flannel.* | cali.* | cbr.*",instance=~"$instance"}[5m])) by (device)
transmit-packetssum(rate(node_network_transmit_packets_total{device!~"lo | veth.* | docker.* | flannel.* | cali.* | cbr.*",instance=~"$instance"}[5m])) by (device)
| +| 摘要 |
receive-droppedsum(rate(node_network_receive_drop_total{device!~"lo | veth.* | docker.* | flannel.* | cali.* | cbr.*",instance=~"$instance"}[5m]))
receive-errssum(rate(node_network_receive_errs_total{device!~"lo | veth.* | docker.* | flannel.* | cali.* | cbr.*",instance=~"$instance"}[5m]))
receive-packetssum(rate(node_network_receive_packets_total{device!~"lo | veth.* | docker.* | flannel.* | cali.* | cbr.*",instance=~"$instance"}[5m]))
transmit-droppedsum(rate(node_network_transmit_drop_total{device!~"lo | veth.* | docker.* | flannel.* | cali.* | cbr.*",instance=~"$instance"}[5m]))
transmit-errssum(rate(node_network_transmit_errs_total{device!~"lo | veth.* | docker.* | flannel.* | cali.* | cbr.*",instance=~"$instance"}[5m]))
transmit-packetssum(rate(node_network_transmit_packets_total{device!~"lo | veth.* | docker.* | flannel.* | cali.* | cbr.*",instance=~"$instance"}[5m]))
| + +### 节点网络 I/O + +| 目录 | 表达式 | +| --- | --- | +| 详情 |
receivesum(rate(node_network_receive_bytes_total{device!~"lo | veth.* | docker.* | flannel.* | cali.* | cbr.*",instance=~"$instance"}[5m])) by (device)
transmitsum(rate(node_network_transmit_bytes_total{device!~"lo | veth.* | docker.* | flannel.* | cali.* | cbr.*",instance=~"$instance"}[5m])) by (device)
| +| 摘要 |
receivesum(rate(node_network_receive_bytes_total{device!~"lo | veth.* | docker.* | flannel.* | cali.* | cbr.*",instance=~"$instance"}[5m]))
transmitsum(rate(node_network_transmit_bytes_total{device!~"lo | veth.* | docker.* | flannel.* | cali.* | cbr.*",instance=~"$instance"}[5m]))
| + +## ETCD 指标 + +### ETCD 有一个 Leader + +`max(etcd_server_has_leader)` + +### Leader 更换次数 + +`max(etcd_server_leader_changes_seen_total)` + +### 失败的 Proposal 数量 + +`sum(etcd_server_proposals_failed_total)` + +### GRPC 客户端流量 + +| 目录 | 表达式 | +| --- | --- | +| 详情 |
in`sum(rate(etcd_network_client_grpc_received_bytes_total[5m])) by (instance)`
out`sum(rate(etcd_network_client_grpc_sent_bytes_total[5m])) by (instance)`
| +| 摘要 |
in`sum(rate(etcd_network_client_grpc_received_bytes_total[5m]))`
out`sum(rate(etcd_network_client_grpc_sent_bytes_total[5m]))`
| + +### 对等流量 + +| 目录 | 表达式 | +| --- | --- | +| 详情 |
in`sum(rate(etcd_network_peer_received_bytes_total[5m])) by (instance)`
out`sum(rate(etcd_network_peer_sent_bytes_total[5m])) by (instance)`
| +| 摘要 |
in`sum(rate(etcd_network_peer_received_bytes_total[5m]))`
out`sum(rate(etcd_network_peer_sent_bytes_total[5m]))`
| + +### 数据库大小 + +| 目录 | 表达式 | +| --- | --- | +| 详情 | `sum(etcd_debugging_mvcc_db_total_size_in_bytes) by (instance)` | +| 摘要 | `sum(etcd_debugging_mvcc_db_total_size_in_bytes)` | + +### 活动流 + +| 目录 | 表达式 | +| --- | --- | +| 详情 |
lease-watch`sum(grpc_server_started_total{grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}) by (instance) - sum(grpc_server_handled_total{grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}) by (instance)`
watch`sum(grpc_server_started_total{grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}) by (instance) - sum(grpc_server_handled_total{grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}) by (instance)`
| +| 摘要 |
lease-watch`sum(grpc_server_started_total{grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"}) - sum(grpc_server_handled_total{grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"})`
watch`sum(grpc_server_started_total{grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"}) - sum(grpc_server_handled_total{grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"})`
| + +### Raft 方案 + +| 目录 | 表达式 | +| --- | --- | +| 详情 |
applied`sum(increase(etcd_server_proposals_applied_total[5m])) by (instance)`
committed`sum(increase(etcd_server_proposals_committed_total[5m])) by (instance)`
pending`sum(increase(etcd_server_proposals_pending[5m])) by (instance)`
failed`sum(increase(etcd_server_proposals_failed_total[5m])) by (instance)`
| +| 摘要 |
applied`sum(increase(etcd_server_proposals_applied_total[5m]))`
committed`sum(increase(etcd_server_proposals_committed_total[5m]))`
pending`sum(increase(etcd_server_proposals_pending[5m]))`
failed`sum(increase(etcd_server_proposals_failed_total[5m]))`
| + +### RPC 速率 + +| 目录 | 表达式 | +| --- | --- | +| 详情 |
total`sum(rate(grpc_server_started_total{grpc_type="unary"}[5m])) by (instance)`
fail`sum(rate(grpc_server_handled_total{grpc_type="unary",grpc_code!="OK"}[5m])) by (instance)`
| +| 摘要 |
total`sum(rate(grpc_server_started_total{grpc_type="unary"}[5m]))`
fail`sum(rate(grpc_server_handled_total{grpc_type="unary",grpc_code!="OK"}[5m]))`
| + +### 磁盘操作 + +| 目录 | 表达式 | +| --- | --- | +| 详情 |
commit-called-by-backend`sum(rate(etcd_disk_backend_commit_duration_seconds_sum[1m])) by (instance)`
fsync-called-by-wal`sum(rate(etcd_disk_wal_fsync_duration_seconds_sum[1m])) by (instance)`
| +| 摘要 |
commit-called-by-backend`sum(rate(etcd_disk_backend_commit_duration_seconds_sum[1m]))`
fsync-called-by-wal`sum(rate(etcd_disk_wal_fsync_duration_seconds_sum[1m]))`
| + +### 磁盘同步持续时间 + +| 目录 | 表达式 | +| --- | --- | +| 详情 |
wal`histogram_quantile(0.99, sum(rate(etcd_disk_wal_fsync_duration_seconds_bucket[5m])) by (instance, le))`
db`histogram_quantile(0.99, sum(rate(etcd_disk_backend_commit_duration_seconds_bucket[5m])) by (instance, le))`
| +| 摘要 |
wal`sum(histogram_quantile(0.99, sum(rate(etcd_disk_wal_fsync_duration_seconds_bucket[5m])) by (instance, le)))`
db`sum(histogram_quantile(0.99, sum(rate(etcd_disk_backend_commit_duration_seconds_bucket[5m])) by (instance, le)))`
| + +## Kubernetes 组件指标 + +### API Server 请求延迟 + +| 目录 | 表达式 | +| --- | --- | +| 详情 | `avg(apiserver_request_latencies_sum / apiserver_request_latencies_count) by (instance, verb) /1e+06` | +| 摘要 | `avg(apiserver_request_latencies_sum / apiserver_request_latencies_count) by (instance) /1e+06` | + +### API Server 请求速率 + +| 目录 | 表达式 | +| --- | --- | +| 详情 | `sum(rate(apiserver_request_count[5m])) by (instance, code)` | +| 摘要 | `sum(rate(apiserver_request_count[5m])) by (instance)` | + +### 调度失败的 Pod + +| 目录 | 表达式 | +| --- | --- | +| 详情 | `sum(kube_pod_status_scheduled{condition="false"})` | +| 摘要 | `sum(kube_pod_status_scheduled{condition="false"})` | + +### Controller Manager 队列深度 + +| 目录 | 表达式 | +| --- | --- | +| 详情 |
volumes`sum(volumes_depth) by instance`
deployment`sum(deployment_depth) by instance`
replicaset`sum(replicaset_depth) by instance`
service`sum(service_depth) by instance`
serviceaccount`sum(serviceaccount_depth) by instance`
endpoint`sum(endpoint_depth) by instance`
daemonset`sum(daemonset_depth) by instance`
statefulset`sum(statefulset_depth) by instance`
replicationmanager`sum(replicationmanager_depth) by instance`
| +| 摘要 |
volumes`sum(volumes_depth)`
deployment`sum(deployment_depth)`
replicaset`sum(replicaset_depth)`
service`sum(service_depth)`
serviceaccount`sum(serviceaccount_depth)`
endpoint`sum(endpoint_depth)`
daemonset`sum(daemonset_depth)`
statefulset`sum(statefulset_depth)`
replicationmanager`sum(replicationmanager_depth)`
| + +### 调度器 E2E 调度延迟 + +| 目录 | 表达式 | +| --- | --- | +| 详情 | `histogram_quantile(0.99, sum(scheduler_e2e_scheduling_latency_microseconds_bucket) by (le, instance)) / 1e+06` | +| 摘要 | `sum(histogram_quantile(0.99, sum(scheduler_e2e_scheduling_latency_microseconds_bucket) by (le, instance)) / 1e+06)` | + +### 调度器抢占尝试 + +| 目录 | 表达式 | +| --- | --- | +| 详情 | `sum(rate(scheduler_total_preemption_attempts[5m])) by (instance)` | +| 摘要 | `sum(rate(scheduler_total_preemption_attempts[5m]))` | + +### Ingress Controller 连接数 + +| 目录 | 表达式 | +| --- | --- | +| 详情 |
reading`sum(nginx_ingress_controller_nginx_process_connections{state="reading"}) by (instance)`
waiting`sum(nginx_ingress_controller_nginx_process_connections{state="waiting"}) by (instance)`
writing`sum(nginx_ingress_controller_nginx_process_connections{state="writing"}) by (instance)`
accepted`sum(ceil(increase(nginx_ingress_controller_nginx_process_connections_total{state="accepted"}[5m]))) by (instance)`
active`sum(ceil(increase(nginx_ingress_controller_nginx_process_connections_total{state="active"}[5m]))) by (instance)`
handled`sum(ceil(increase(nginx_ingress_controller_nginx_process_connections_total{state="handled"}[5m]))) by (instance)`
| +| 摘要 |
reading`sum(nginx_ingress_controller_nginx_process_connections{state="reading"})`
waiting`sum(nginx_ingress_controller_nginx_process_connections{state="waiting"})`
writing`sum(nginx_ingress_controller_nginx_process_connections{state="writing"})`
accepted`sum(ceil(increase(nginx_ingress_controller_nginx_process_connections_total{state="accepted"}[5m])))`
active`sum(ceil(increase(nginx_ingress_controller_nginx_process_connections_total{state="active"}[5m])))`
handled`sum(ceil(increase(nginx_ingress_controller_nginx_process_connections_total{state="handled"}[5m])))`
| + +### Ingress Controller 请求处理时间 + +| 目录 | 表达式 | +| --- | --- | +| 详情 | `topk(10, histogram_quantile(0.95,sum by (le, host, path)(rate(nginx_ingress_controller_request_duration_seconds_bucket{host!="_"}[5m]))))` | +| 摘要 | `topk(10, histogram_quantile(0.95,sum by (le, host)(rate(nginx_ingress_controller_request_duration_seconds_bucket{host!="_"}[5m]))))` | + +## Rancher Logging 指标 + + +### Fluentd 缓冲区队列速率 + +| 目录 | 表达式 | +| --- | --- | +| 详情 | `sum(rate(fluentd_output_status_buffer_queue_length[5m])) by (instance)` | +| 摘要 | `sum(rate(fluentd_output_status_buffer_queue_length[5m]))` | + +### Fluentd 输入速率 + +| 目录 | 表达式 | +| --- | --- | +| 详情 | `sum(rate(fluentd_input_status_num_records_total[5m])) by (instance)` | +| 摘要 | `sum(rate(fluentd_input_status_num_records_total[5m]))` | + +### Fluentd 输出错误率 + +| 目录 | 表达式 | +| --- | --- | +| 详情 | `sum(rate(fluentd_output_status_num_errors[5m])) by (type)` | +| 摘要 | `sum(rate(fluentd_output_status_num_errors[5m]))` | + +### Fluentd 输出速率 + +| 目录 | 表达式 | +| --- | --- | +| 详情 | `sum(rate(fluentd_output_status_num_records_total[5m])) by (instance)` | +| 摘要 | `sum(rate(fluentd_output_status_num_records_total[5m]))` | + +## 工作负载指标 + +### 工作负载 CPU 利用率 + +| 目录 | 表达式 | +| --- | --- | +| 详情 |
cfs throttled seconds`sum(rate(container_cpu_cfs_throttled_seconds_total{namespace="$namespace",pod_name=~"$podName",container_name!=""}[5m])) by (pod_name)`
user seconds`sum(rate(container_cpu_user_seconds_total{namespace="$namespace",pod_name=~"$podName",container_name!=""}[5m])) by (pod_name)`
system seconds`sum(rate(container_cpu_system_seconds_total{namespace="$namespace",pod_name=~"$podName",container_name!=""}[5m])) by (pod_name)`
usage seconds`sum(rate(container_cpu_usage_seconds_total{namespace="$namespace",pod_name=~"$podName",container_name!=""}[5m])) by (pod_name)`
| +| 摘要 |
cfs throttled seconds`sum(rate(container_cpu_cfs_throttled_seconds_total{namespace="$namespace",pod_name=~"$podName",container_name!=""}[5m]))`
user seconds`sum(rate(container_cpu_user_seconds_total{namespace="$namespace",pod_name=~"$podName",container_name!=""}[5m]))`
system seconds`sum(rate(container_cpu_system_seconds_total{namespace="$namespace",pod_name=~"$podName",container_name!=""}[5m]))`
usage seconds`sum(rate(container_cpu_usage_seconds_total{namespace="$namespace",pod_name=~"$podName",container_name!=""}[5m]))`
| + +### 工作负载内存利用率 + +| 目录 | 表达式 | +| --- | --- | +| 详情 | `sum(container_memory_working_set_bytes{namespace="$namespace",pod_name=~"$podName", container_name!=""}) by (pod_name)` | +| 摘要 | `sum(container_memory_working_set_bytes{namespace="$namespace",pod_name=~"$podName", container_name!=""})` | + +### 工作负载网络数据包 + +| 目录 | 表达式 | +| --- | --- | +| 详情 |
receive-packets`sum(rate(container_network_receive_packets_total{namespace="$namespace",pod_name=~"$podName",container_name!=""}[5m])) by (pod_name)`
receive-dropped`sum(rate(container_network_receive_packets_dropped_total{namespace="$namespace",pod_name=~"$podName",container_name!=""}[5m])) by (pod_name)`
receive-errors`sum(rate(container_network_receive_errors_total{namespace="$namespace",pod_name=~"$podName",container_name!=""}[5m])) by (pod_name)`
transmit-packets`sum(rate(container_network_transmit_packets_total{namespace="$namespace",pod_name=~"$podName",container_name!=""}[5m])) by (pod_name)`
transmit-dropped`sum(rate(container_network_transmit_packets_dropped_total{namespace="$namespace",pod_name=~"$podName",container_name!=""}[5m])) by (pod_name)`
transmit-errors`sum(rate(container_network_transmit_errors_total{namespace="$namespace",pod_name=~"$podName",container_name!=""}[5m])) by (pod_name)`
| +| 摘要 |
receive-packets`sum(rate(container_network_receive_packets_total{namespace="$namespace",pod_name=~"$podName",container_name!=""}[5m]))`
receive-dropped`sum(rate(container_network_receive_packets_dropped_total{namespace="$namespace",pod_name=~"$podName",container_name!=""}[5m]))`
receive-errors`sum(rate(container_network_receive_errors_total{namespace="$namespace",pod_name=~"$podName",container_name!=""}[5m]))`
transmit-packets`sum(rate(container_network_transmit_packets_total{namespace="$namespace",pod_name=~"$podName",container_name!=""}[5m]))`
transmit-dropped`sum(rate(container_network_transmit_packets_dropped_total{namespace="$namespace",pod_name=~"$podName",container_name!=""}[5m]))`
transmit-errors`sum(rate(container_network_transmit_errors_total{namespace="$namespace",pod_name=~"$podName",container_name!=""}[5m]))`
| + +### 工作负载网络 I/O + +| 目录 | 表达式 | +| --- | --- | +| 详情 |
receive`sum(rate(container_network_receive_bytes_total{namespace="$namespace",pod_name=~"$podName",container_name!=""}[5m])) by (pod_name)`
transmit`sum(rate(container_network_transmit_bytes_total{namespace="$namespace",pod_name=~"$podName",container_name!=""}[5m])) by (pod_name)`
| +| 摘要 |
receive`sum(rate(container_network_receive_bytes_total{namespace="$namespace",pod_name=~"$podName",container_name!=""}[5m]))`
transmit`sum(rate(container_network_transmit_bytes_total{namespace="$namespace",pod_name=~"$podName",container_name!=""}[5m]))`
| + +### 工作负载磁盘 I/O + +| 目录 | 表达式 | +| --- | --- | +| 详情 |
read`sum(rate(container_fs_reads_bytes_total{namespace="$namespace",pod_name=~"$podName",container_name!=""}[5m])) by (pod_name)`
write`sum(rate(container_fs_writes_bytes_total{namespace="$namespace",pod_name=~"$podName",container_name!=""}[5m])) by (pod_name)`
| +| 摘要 |
read`sum(rate(container_fs_reads_bytes_total{namespace="$namespace",pod_name=~"$podName",container_name!=""}[5m]))`
write`sum(rate(container_fs_writes_bytes_total{namespace="$namespace",pod_name=~"$podName",container_name!=""}[5m]))`
| + +## Pod 指标 + +### Pod CPU 利用率 + +| 目录 | 表达式 | +| --- | --- | +| 详情 |
cfs throttled seconds`sum(rate(container_cpu_cfs_throttled_seconds_total{container_name!="POD",namespace="$namespace",pod_name="$podName", container_name!=""}[5m])) by (container_name)`
usage seconds`sum(rate(container_cpu_usage_seconds_total{container_name!="POD",namespace="$namespace",pod_name="$podName", container_name!=""}[5m])) by (container_name)`
system seconds`sum(rate(container_cpu_system_seconds_total{container_name!="POD",namespace="$namespace",pod_name="$podName", container_name!=""}[5m])) by (container_name)`
user seconds`sum(rate(container_cpu_user_seconds_total{container_name!="POD",namespace="$namespace",pod_name="$podName", container_name!=""}[5m])) by (container_name)`
| +| 摘要 |
cfs throttled seconds`sum(rate(container_cpu_cfs_throttled_seconds_total{container_name!="POD",namespace="$namespace",pod_name="$podName", container_name!=""}[5m]))`
usage seconds`sum(rate(container_cpu_usage_seconds_total{container_name!="POD",namespace="$namespace",pod_name="$podName", container_name!=""}[5m]))`
system seconds`sum(rate(container_cpu_system_seconds_total{container_name!="POD",namespace="$namespace",pod_name="$podName", container_name!=""}[5m]))`
user seconds`sum(rate(container_cpu_user_seconds_total{container_name!="POD",namespace="$namespace",pod_name="$podName", container_name!=""}[5m]))`
| + +### Pod 内存利用率 + +| 目录 | 表达式 | +| --- | --- | +| 详情 | `sum(container_memory_working_set_bytes{container_name!="POD",namespace="$namespace",pod_name="$podName",container_name!=""}) by (container_name)` | +| 摘要 | `sum(container_memory_working_set_bytes{container_name!="POD",namespace="$namespace",pod_name="$podName",container_name!=""})` | + +### Pod 网络数据包 + +| 目录 | 表达式 | +| --- | --- | +| 详情 |
receive-packets`sum(rate(container_network_receive_packets_total{namespace="$namespace",pod_name="$podName",container_name!=""}[5m]))`
receive-dropped`sum(rate(container_network_receive_packets_dropped_total{namespace="$namespace",pod_name="$podName",container_name!=""}[5m]))`
receive-errors`sum(rate(container_network_receive_errors_total{namespace="$namespace",pod_name="$podName",container_name!=""}[5m]))`
transmit-packets`sum(rate(container_network_transmit_packets_total{namespace="$namespace",pod_name="$podName",container_name!=""}[5m]))`
transmit-dropped`sum(rate(container_network_transmit_packets_dropped_total{namespace="$namespace",pod_name="$podName",container_name!=""}[5m]))`
transmit-errors`sum(rate(container_network_transmit_errors_total{namespace="$namespace",pod_name="$podName",container_name!=""}[5m]))`
| +| 摘要 |
receive-packets`sum(rate(container_network_receive_packets_total{namespace="$namespace",pod_name="$podName",container_name!=""}[5m]))`
receive-dropped`sum(rate(container_network_receive_packets_dropped_total{namespace="$namespace",pod_name="$podName",container_name!=""}[5m]))`
receive-errors`sum(rate(container_network_receive_errors_total{namespace="$namespace",pod_name="$podName",container_name!=""}[5m]))`
transmit-packets`sum(rate(container_network_transmit_packets_total{namespace="$namespace",pod_name="$podName",container_name!=""}[5m]))`
transmit-dropped`sum(rate(container_network_transmit_packets_dropped_total{namespace="$namespace",pod_name="$podName",container_name!=""}[5m]))`
transmit-errors`sum(rate(container_network_transmit_errors_total{namespace="$namespace",pod_name="$podName",container_name!=""}[5m]))`
| + +### Pod 网络 I/O + +| 目录 | 表达式 | +| --- | --- | +| 详情 |
receive`sum(rate(container_network_receive_bytes_total{namespace="$namespace",pod_name="$podName",container_name!=""}[5m]))`
transmit`sum(rate(container_network_transmit_bytes_total{namespace="$namespace",pod_name="$podName",container_name!=""}[5m]))`
| +| 摘要 |
receive`sum(rate(container_network_receive_bytes_total{namespace="$namespace",pod_name="$podName",container_name!=""}[5m]))`
transmit`sum(rate(container_network_transmit_bytes_total{namespace="$namespace",pod_name="$podName",container_name!=""}[5m]))`
| + +### Pod 磁盘 I/O + +| 目录 | 表达式 | +| --- | --- | +| 详情 |
read`sum(rate(container_fs_reads_bytes_total{namespace="$namespace",pod_name="$podName",container_name!=""}[5m])) by (container_name)`
write`sum(rate(container_fs_writes_bytes_total{namespace="$namespace",pod_name="$podName",container_name!=""}[5m])) by (container_name)`
| +| 摘要 |
read`sum(rate(container_fs_reads_bytes_total{namespace="$namespace",pod_name="$podName",container_name!=""}[5m]))`
write`sum(rate(container_fs_writes_bytes_total{namespace="$namespace",pod_name="$podName",container_name!=""}[5m]))`
| + +## 容器指标 + +### 容器 CPU 利用率 + +| 目录 | 表达式 | +| --- | --- | +| cfs throttled seconds | `sum(rate(container_cpu_cfs_throttled_seconds_total{namespace="$namespace",pod_name="$podName",container_name="$containerName"}[5m]))` | +| usage seconds | `sum(rate(container_cpu_usage_seconds_total{namespace="$namespace",pod_name="$podName",container_name="$containerName"}[5m]))` | +| system seconds | `sum(rate(container_cpu_system_seconds_total{namespace="$namespace",pod_name="$podName",container_name="$containerName"}[5m]))` | +| user seconds | `sum(rate(container_cpu_user_seconds_total{namespace="$namespace",pod_name="$podName",container_name="$containerName"}[5m]))` | + +### 容器内存利用率 + +`sum(container_memory_working_set_bytes{namespace="$namespace",pod_name="$podName",container_name="$containerName"})` + +### 容器磁盘 I/O + +| 目录 | 表达式 | +| --- | --- | +| read | `sum(rate(container_fs_reads_bytes_total{namespace="$namespace",pod_name="$podName",container_name="$containerName"}[5m]))` | +| write | `sum(rate(container_fs_writes_bytes_total{namespace="$namespace",pod_name="$podName",container_name="$containerName"}[5m]))` | diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/monitoring-and-alerting/rbac-for-monitoring.md b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/monitoring-and-alerting/rbac-for-monitoring.md new file mode 100644 index 00000000000..452e6c19aa7 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/monitoring-and-alerting/rbac-for-monitoring.md @@ -0,0 +1,171 @@ +--- +title: RBAC +shortTitle: RBAC +weight: 2 +--- +本节描述了 RBAC 在 Rancher Monitoring 中的作用。 + + +## 集群管理员 + +默认情况下,只有具有 cluster-admin `ClusterRole` 的用户才能: + +- 将 `rancher-monitoring` 应用安装到集群上,并在 Chart 部署上执行所有其他相关配置。 + - 例如,是否创建了默认仪表板,要将哪些 Exporter 部署到集群上以收集指标等。 +- 通过 Prometheus CR 在集群中创建/修改/删除 Prometheus deployment。 +- 通过 Alertmanager CR 在集群中创建/修改/删除 Alertmanager deployment。 +- 通过在命名空间中创建 ConfigMap 来保留新的 Grafana 仪表板或数据源。 +- 通过 `cattle-monitoring-system` 命名空间中的 Secret 将某些 Prometheus 指标暴露给 HPA 的 K8s Custom Metrics API。 + +## 具有基于 Kubernetes ClusterRole 权限的用户 + +`rancher-monitoring` Chart 安装了以下三个 `ClusterRole`。默认情况下,它们会聚合到相应的 K8s `ClusterRole` 中: + +| ClusterRole | 聚合到默认的 K8s ClusterRole | +| ------------------------------| ---------------------------| +| `monitoring-admin` | `admin` | +| `monitoring-edit` | `edit` | +| `monitoring-view` | `view ` | + +这些 `ClusterRole` 根据可执行的操作提供对 Monitoring CRD 的不同访问级别: + +| CRD (monitoring.coreos.com) | Admin | Edit | View | +| ------------------------------| ---------------------------| ---------------------------| ---------------------------| +|
  • `prometheuses`
  • `alertmanagers`
| Get, List, Watch | Get, List, Watch | Get, List, Watch | +|
  • `servicemonitors`
  • `podmonitors`
  • `prometheusrules`
| * | * | Get, List, Watch | + +在较高级别上,默认情况下会分配以下权限。 + +### 具有 Kubernetes 管理员/编辑权限的用户 + +只有具有 cluster-admin、admin 或 edit 的 `ClusterRole` 可以: + +- 通过 ServiceMonitor 和 PodMonitor CR 修改 Prometheus deployment 的抓取配置。 +- 通过 PrometheusRules CR 修改 Prometheus deployment 的告警/记录规则。 + +### 具有 Kubernetes 查看权限的用户 + +只有具有 Kubernetes `ClusterRole` 的用户可以: + +- 查看集群内部署的 Prometheuses 的配置。 +- 查看集群内部署的 Alertmanagers 的配置。 +- 通过 ServiceMonitor 和 PodMonitor CR 查看 Prometheus deployment 的抓取配置。 +- 通过 PrometheusRules CR 查看 Prometheus deployment 的告警/记录规则。 + +### 其他监控角色 + +Monitoring 还会创建其他 `Role`,这些角色默认情况下不会分配给用户,而是在集群中创建。你可以部署引用角色的 `RoleBinding` 来将角色绑定到命名空间。要使用 `kubectl` 而不是通过 Rancher 来定义 `RoleBinding`,请单击[此处](#使用-kubectl-分配-role-和-clusterrole)。 + +管理员应使用这些角色为用户提供更细粒度的访问权限: + +| 角色 | 用途 | +| ------------------------------| ---------------------------| +| monitoring-config-admin | 允许管理员为用户分配角色,以便查看/编辑 cattle-monitoring-system 命名空间中的 Secret 和 ConfigMap。修改此命名空间中的 Secret/ConfigMap 可以允许用户更改集群的 Alertmanager 配置、Prometheus Adapter 配置、其他 Grafana 数据源、TLS 密钥等。 | +| monitoring-config-edit | 允许管理员为用户分配角色,以便查看/编辑 cattle-monitoring-system 命名空间中的 Secret 和 ConfigMap。修改此命名空间中的 Secret/ConfigMap 可以允许用户更改集群的 Alertmanager 配置、Prometheus Adapter 配置、其他 Grafana 数据源、TLS 密钥等。 | +| monitoring-config-view | 允许管理员为用户分配角色,以便查看 cattle-monitoring-system 命名空间中的 Secret 和 ConfigMap。查看此命名空间中的 Secret/ConfigMap 可以允许用户观察集群的 Alertmanager 配置、Prometheus Adapter 配置、其他 Grafana 数据源、TLS 密钥等。 | +| monitoring-dashboard-admin | 允许管理员为用户分配角色,以便查看/编辑 cattle-dashboards 命名空间中的 ConfigMap。此命名空间中的 ConfigMap 将对应于持久化到集群上的 Grafana 仪表板。 | +| monitoring-dashboard-edit | 允许管理员为用户分配角色,以便查看/编辑 cattle-dashboards 命名空间中的 ConfigMap。此命名空间中的 ConfigMap 将对应于持久化到集群上的 Grafana 仪表板。 | +| monitoring-dashboard-view | 允许管理员为用户分配角色,以便查看 cattle-dashboards 命名空间中的 ConfigMap。此命名空间中的 ConfigMap 将对应于持久化到集群上的 Grafana 仪表板。 | + +### 其他监控集群角色 + +Monitoring 还会创建其他 `ClusterRole`,这些角色默认情况下不会分配给用户,而是在集群中创建。默认情况下,这些角色不会聚合,但你可以部署引用角色的 `RoleBinding` 或 `ClusterRoleBinding` 来将角色绑定到命名空间。要使用 `kubectl` 而不是通过 Rancher 来定义 `RoleBinding`,请单击[此处](#使用-kubectl-分配-role-和-clusterrole)。 + +| 角色 | 用途 | +| ------------------------------| ---------------------------| +| monitoring-ui-view | _从 Monitoring v2 14.5.100+ 开始可用_。通过授权用户列出 Prometheus、Alertmanager 和 Grafana 端点,并通过 Rancher 代理向 Prometheus、Grafana 和 Alertmanager UI 进行 GET 请求,来允许用户对外部 Monitoring UI 进行只读访问。 | + +### 使用 kubectl 分配 Role 和 ClusterRole + +使用 Rancher 将 `Role` 或 `ClusterRole` 附加到用户或组的另一种方法,是在你创建的 YAML 文件中定义绑定。你必须首先使用 YAML 文件配置 `RoleBinding`,然后运行 `kubectl apply` 命令来应用配置更改。 + + +* **Role**:以下 YAML 文件示例可帮助你在 Kubernetes 中配置 `RoleBinding`。你需要填写下方的 `name`(区分大小写): + +```yaml +# monitoring-config-view-role-binding.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: monitoring-config-view + namespace: cattle-monitoring-system +roleRef: + kind: Role + name: monitoring-config-view + apiGroup: rbac.authorization.k8s.io +subjects: +- kind: User + name: u-b4qkhsnliz # this can be found via `kubectl get users -A` + apiGroup: rbac.authorization.k8s.io +``` + +* **kubectl**:以下 `kubectl` 示例命令用于应用 YAML 文件中创建的绑定。如前所述,你需要相应地填写你的 YAML 文件名。 + + * `kubectl apply -f monitoring-config-view-role-binding.yaml` + + +## 具有 Rancher 权限的用户 + +Rancher 部署的默认角色(即 cluster-owner、cluster-member、project-owner、project-member)、Kubernetes 默认角色,以及 rancher-monitoring Chart 部署的角色之间的关系如下: + +
默认 Rancher 权限和对应的 Kubernetes ClusterRole
+ +| Rancher 角色 | Kubernetes 角色 | Monitoring ClusterRole/Role | ClusterRoleBinding/RoleBinding | +| --------- | --------- | --------- | --------- | +| cluster-owner | cluster-admin | N/A | ClusterRoleBinding | +| cluster-member | admin | monitoring-admin | ClusterRoleBinding | +| project-owner | admin | monitoring-admin | 项目命名空间中的 RoleBinding | +| project-member | edit | monitoring-edit | 项目命名空间中的 RoleBinding | + +除这些默认角色之外,你还可以将以下的其他 Rancher 项目角色应用于集群成员,以提供对 Monitoring 的其他访问。这些 Rancher 角色将与 Monitoring Chart 部署的 ClusterRole 相关联: + +
非默认的 Rancher 权限和对应的 Kubernetes ClusterRole
+ +| Rancher 角色 | Kubernetes ClusterRole | 可用 Rancher 版本 | 可用 Monitoring V2 版本 | +|--------------------------|-------------------------------|-------|------| +| 查看 Monitoring\* | [monitoring-ui-view](#monitoring-ui-view) | 2.4.8+ | 9.4.204+ | + +\* 如果某个用户绑定了 Rancher 的 **View Monitoring** 角色,该用户只有在有 UI 链接时才有权访问外部 Monitoring UI。要访问 Monitoring Pane 以获取这些链接,用户必须是至少一个项目的项目成员。 + +### 2.5.x 中的差异 + +在 Rancher 2.5.x 中,分配了 project-member 或 project-owner 角色的用户将无法访问 Prometheus 或 Grafana,因为我们仅在集群级别创建 Grafana 或 Prometheus。 + +此外,虽然 project-owner 仍然只能添加默认在项目命名空间内抓取资源的 ServiceMonitor/PodMonitor,但 PrometheusRule 并不局限于单个命名空间/项目。因此,即使 project-owner 无法查看/编辑/删除在项目命名空间之外创建的任何规则,project-owner 在其项目命名空间内创建的任何告警规则或记录规则都将应用于整个集群。 + +### 分配其他访问权限 + +如果 cluster-admin 想要为不具有 rancher-monitoring chart 角色的用户提供 admin/edit 访问权限,则存在下表的潜在影响: + +| CRD (monitoring.coreos.com) | 是否会在命名空间/项目之外造成影响 | 影响 | +|----------------------------| ------| ----------------------------| +| `prometheuses` | 是。该资源可以从整个集群中的任何目标中抓取指标(除非 Operator 本身进行了额外的配置)。 | 用户将能够定义应在集群中创建的新集群级 Prometheus deployment 的配置。 | +| `alertmanagers` | 否 | 用户将能够定义应在集群中创建的新集群级 Alertmanager deployment 的配置。注意:如果你只想允许用户配置路由和接收器等设置,你应该只提供对 Alertmanager Config Secret 的访问权限。 | +|
  • `servicemonitors`
  • `podmonitors`
| 否(默认)。可以通过 Prometheus CR 上的 `ignoreNamespaceSelectors` 进行配置。 | 用户将能够通过 Prometheus,在他们被授予此权限的命名空间内的 Service/Pod 暴露的端点上设置抓取。 | +| `prometheusrules` | 是。PrometheusRules 是集群范围的。 | 用户将能够根据在整个集群中收集的任何系列,在 Prometheus 上定义告警或记录规则。 | + +| K8s 资源 | 命名空间 | 是否会在命名空间/项目之外造成影响 | 影响 | +|----------------------------| ------| ------| ----------------------------| +|
  • `secrets`
  • `configmaps`
| `cattle-monitoring-system` | 是。此命名空间中的 Config 和 Secret 会影响整个监控/告警流水线。 | 用户将能够创建或编辑 Secret/ ConfigMap,例如 Alertmanager Config、Prometheus Adapter 配置、TLS 密文、其他 Grafana 数据源等。这会对所有集群监控/告警产生广泛影响。 | +|
  • `secrets`
  • `configmaps`
| `cattle-dashboards` | 是。此命名空间中的 Config 和 Secret 可以创建仪表板,对在集群级别收集的所有指标进行查询。 | 用户将能够创建仅保留新 Grafana 仪表板的 Secret/ConfigMap。 | + + + +## Grafana 的 RBAC + +对于经过 Kubernetes 认证并可以访问 Rancher Monitoring Chart 部署的 Grafana 服务的任何用户,Rancher 允许他们通过 Rancher Dashboard UI 访问 Grafana。默认情况下,所有能够访问 Grafana 的用户都被赋予 [Viewer](https://grafana.com/docs/grafana/latest/permissions/organization_roles/#viewer-role) 角色,能查看 Rancher 部署的任何默认仪表板。 + +但是,如果有需要的话,用户可以选择以 [Admin](https://grafana.com/docs/grafana/latest/permissions/organization_roles/#admin-role) 身份登录 Grafana。Grafana 实例的默认 Admin 用户名和密码是 `admin`/`prom-operator`,但你也可以在部署或升级 Chart 时替换凭证。 + +要查看 Grafana UI,请安装 `rancher-monitoring`。然后: + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 在**集群**页面上,转到要可视化的集群,然后单击 **Explore**。 +1. 在左侧导航栏中,单击**监控**。 +1. 点击 **Grafana**。 + +
Grafana 中的集群计算资源仪表板
+![Grafana 中的集群计算资源仪表板](/img/cluster-compute-resources-dashboard.png) + +
Grafana 中的默认仪表板
+![Grafana 中的默认仪表板](/img/grafana-default-dashboard.png) \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/monitoring-and-alerting/windows-support.md b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/monitoring-and-alerting/windows-support.md new file mode 100644 index 00000000000..abc2dc161fa --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/monitoring-and-alerting/windows-support.md @@ -0,0 +1,59 @@ +--- +title: Monitoring V2 的 Windows 集群支持 +shortTitle: Windows 支持 +weight: 5 +--- + +_从 v2.5.8 起可用_ + +从 Monitoring V2 14.5.100(Rancher 2.5.8 的默认版本)开始,Monitoring V2 可以部署在 Windows 集群上,并将使用 [prometheus-community/windows_exporter](https://github.com/prometheus-community/windows_exporter)(旧名是 `wmi_exporter`)来抓取 Windows 节点的指标。 + + +## 与 Monitoring V1 的对比 + +由于命名已根据上游从 `wmi_exporter` 更改为 `windows_exporter`,因此 `windows_exporter` 收集的指标会标记为 `windows_` 而不是 `wmi_`。 + +此外,由于主机指标将直接发布到暴露在 windows-exporter Pod 上的端口上,因此 Monitoring V2 for Windows 将不再要求用户在 Windows 主机上保持打开端口 9796。此功能由 `wins` v0.1.0 最近的更改提供,以支持在 Pod 上发布暴露在 hostNetwork 上的端口,这些 Pod 使用 wins 来运行一个有特权的 Windows 二进制文件作为主机进程。 + +## 集群要求 + +Monitoring V2 for Windows 只能从最低是 `wins` v0.1.0 的 Windows 主机中抓取指标。要完全部署 Monitoring V2 for Windows,你的所有主机都必须满足此要求。 + +如果你在 Rancher 2.5.8 中配置新的 RKE1 集群,你的集群应该已经满足此要求。 + +### 将现有集群升级到 wins v0.1.0 + +如果集群是在 Rancher 2.5.8 之前配置的(即使当前 Rancher 版本是 2.5.8),你将无法成功部署 Monitoring V2 for Windows,除非你将每台主机的 wins 版本升级到 v0.1.0 或以上版本。 + +为了方便此次升级,Rancher 2.5.8 发布了一个全新的 Helm Chart,名为 `rancher-wins-upgrader`。 + +> **先决条件**:确保已卸载 Monitoring V1 for Windows。 + +1. 使用以下覆盖部署 `rancher-wins-upgrader`: + ```yaml + # 通过先前已列入白名单的进程路径 + # 来引导 win-upgrader 安装,这是因为正常安装路径 + # c:\\etc\\rancher\\wins\\wins-upgrade.exe 通常不会被列入白名单。 + # 因此,我们使用 Monitoring V1 之前所用的 + # 已列入白名单的进程路径。 + masquerade: + enabled: true + as: c:\\etc\wmi-exporter\wmi-exporter.exe + ``` + :::note 非默认 Windows 前缀路径的注意事项: + + - 如果你使用具有非默认 `win_prefix_path` 的 `cluster.yml` 来设置 RKE 集群,你需要将 `c:\\` 替换为你的前缀路径字段的值来修改 `masquerade.as`。 + + - 例如,如果你使用 `win_prefix_path: 'c:\host\opt\'`,则需要设置为 `as: c:\host\opt\etc\wmi-exporter\wmi-exporter.exe`。 + + ::: + +2. 成功升级所有主机后,请再次使用默认值部署 Helm Chart,以避免与以下设置发生冲突: + ```yaml + masquerade: + enabled: false + ``` + +**结果**:主机已准备好安装 Monitoring V2。你可以选择卸载 `rancher-wins-upgrader` Chart,或将其保留在集群中以方便将来升级。 + +有关如何使用它的更多信息,请参阅 Chart 的 [README.md](https://github.com/rancher/wins/blob/master/charts/rancher-wins-upgrader/README.md)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/neuvector.md b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/neuvector.md new file mode 100644 index 00000000000..ca259e898b9 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/neuvector.md @@ -0,0 +1,205 @@ +--- +title: NeuVector 集成 +weight: 22 +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +### Rancher 中的 NeuVector 集成 + +[NeuVector 5.x](https://open-docs.neuvector.com/) 是一个开源的,以容器为中心的安全应用程序,Rancher 2.6.5 现已集成 NeuVector。NeuVector 在运行时为关键应用程序和数据提供实时的合规、可见和保护功能。NeuVector 提供具有 CIS Benchmark 和漏洞扫描的防火墙、容器进程/文件系统监控和安全审计。有关 Rancher 安全性的更多信息,请参阅[安全文档](../../pages-for-subheaders/rancher-security.md)。 + +NeuVector 可以通过 Helm Chart 启用。你可以在**应用 & 应用市场**或 Rancher UI 中的**集群工具**中安装该 Chart。安装 Helm Chart 后,用户可以轻松地[在 Rancher 中部署和管理 NeuVector 集群](https://open-docs.neuvector.com/deploying/rancher#deploy-and-manage-neuvector-through-rancher-apps-marketplace)。 + +### 使用 Rancher 安装 NeuVector + +Harvester Helm Chart 用于管理 Rancher 中 NeuVector UI 的访问,用户可以在 Rancher 中直接跳转,然后部署和管理 NeuVector 集群。 + +**通过"应用 & 应用市场"导航并安装 NeuVector Chart**: + +1. 点击 **☰ > 集群管理**。 +1. 在 Clusters 页面上,转到要部署 NeuVector 的集群,然后单击 **Explore**。 +1. 转到 **应用 & 应用市场 > Charts**,然后从 Chart 仓库中安装 **NeuVector**。 +1. 不同的集群类型需要不同的容器运行时。配置 Helm Chart 值时,转到**容器运行时**,然后根据集群类型选择运行时。最后,再次单击**安装**。 + +以下是一些例子: + +- RKE1:`docker` +- K3s 和 RKE2:`k3scontainerd` +- AKS:`containerd` 适用于 v1.19 及更高版本 +- EKS:`docker` 适用于 v1.22 及以下版本;`containerd` 适用于 v1.23 及更高版本 +- GKE:`containerd`(请参阅 [Google 文档](https://cloud.google.com/kubernetes-engine/docs/concepts/using-containerd)了解更多信息) + + :::note + + 在安装过程中一次只能选择一个容器运行时引擎。 + + ::: + +**通过集群工具导航并安装 NeuVector Chart**: + +1. 点击 **☰ > 集群管理**。 +1. 在 Clusters 页面上,转到要部署 NeuVector 的集群,然后单击 **Explore**。 +1. 点击左侧导航栏底部的**集群工具**。 +1. 按照上面的步骤 4 相应地选择你的容器运行时,然后再次单击**安装**。 + +### 从 Rancher UI 访问 NeuVector + +1. 导航到安装了 NeuVector 的集群的 Cluster Explorer。在左侧导航栏中,单击 **NeuVector**。 +1. 单击外部链接以转到 NeuVector UI。选择链接后,用户必须接受`最终用户许可协议`才能访问 NeuVector UI。 + +### 从 Rancher UI 卸载 NeuVector + +**通过"应用 & 应用市场"卸载**: + +1. 点击 **☰ > 集群管理**。 +1. 在**应用 & 应用市场**下,点击**已安装的应用**。 +1. 在 `cattle-neuvector-system` 下,选择 NeuVector 应用程序(如果需要,还可以选择相关的 CRD),然后单击**删除**。 + +**通过集群工具卸载**: + +1. 点击 **☰ > 集群管理**。 +1. 单击屏幕左下角的**集群工具**,然后单击 NeuVector Chart 下方的垃圾桶图标。如果需要,选择`删除与此应用关联的 CRD`,然后单击**删除**。 + +### GitHub 仓库 + +NeuVector 项目在[这里](https://github.com/neuvector/neuvector)。 + +### 文档 + +NeuVector 文档在[这里](https://open-docs.neuvector.com/)。 + +### 架构 + +NeuVector 安全解决方案包含四种类型的安全容器,分别是 Controller、Enforcer、Manager 和 Scanner。它还提供了一个称为 All-in-One 的特殊容器(主要用于 Docker 原生部署),能将 Controller、Enforcer 和 Manager 功能组合在一个容器中。此外,还有一个 Updater,运行该程序时会更新 CVE 数据库。 + +- **Controller**:管理 NeuVector Enforcer 容器;为管理控制台提供 REST API。 +- **Enforcer**:执行安全策略。 +- **Manager**:提供一个 web-UI 和 CLI 控制台来管理 NeuVector 平台。 +- **All-in-One**:包括 Controller、Enforcer 和 Manager。 +- **Scanner**:对镜像、容器和节点执行漏洞和合规性扫描。 +- **Updater**:更新 Neuvector 的 CVE 数据库(运行的时候);重新部署 scanner pod。 + +
**NeuVector 安全容器:**
+![NeuVector 安全容器](/img/neuvector-security-containers.png) + +
**NeuVector 架构:**
+![NeuVector 架构](/img/neuvector-architecture.png) + +要了解有关 NeuVector 架构的更多信息,请参阅[此处](https://open-docs.neuvector.com/basics/overview#architecture)。 + +### CPU 和内存分配 + +以下是默认 NeuVector Chart 安装部署的最低计算资源推荐。请注意,未设置资源限制。 + +| 容器 | CPU - 请求 | 内存 - 请求 | +|------------|--------|---------| +| Controller | 3(每个控制器需要 1GB 1vCPU) | * | +| Enforcer | 所有节点上 (500MB .5vCPU) | 1GB | +| Manager | 1 (500MB .5vCPU) | * | +| Scanner | 3 (100MB .5vCPU) | * | + +\* Controller、Manager 和 Scanner 容器合计至少需要 1GB 内存。 + + +### 强化集群支持 - Calico 和 Canal + + + + +- 如果 PSP 设置为 true,则所有 NeuVector 组件都是可部署的。 + +**_v2.6.7 新功能_** + +你需要为强化集群环境进行额外的配置,如下所示: + +1. 点击 **☰ > 集群管理**。 +1. 选择你创建的集群,并点击 **Explore**。 +1. 在左侧导航栏中,点击**应用 & 应用市场**。 +1. 安装(或升级到)NeuVector 版本 `100.0.1+up2.2.2`。 + +- 在 **编辑选项** > **其它配置**下,选中复选框来启用 **Pod 安全策略**(无需其他配置): + + ![为 RKE1 强化集群启用 PSP](/img/psp-nv-rke.png) + +1. 点击右下角的**安装**。 + + + + + +- 如果 PSP 设置为 true,则可以部署 NeuVector 组件 Controller 和 Enforcer。 + + +**仅适用于 NeuVector Chart 版本 100.0.0+up2.2.0**: + +- 对于 Manager、Scanner 和 Updater 组件,需要进行额外的配置,如下所示: + +``` +kubectl patch deploy neuvector-manager-pod -n cattle-neuvector-system --patch '{"spec":{"template":{"spec":{"securityContext":{"runAsUser": 5400}}}}}' +kubectl patch deploy neuvector-scanner-pod -n cattle-neuvector-system --patch '{"spec":{"template":{"spec":{"securityContext":{"runAsUser": 5400}}}}}' +kubectl patch cronjob neuvector-updater-pod -n cattle-neuvector-system --patch '{"spec":{"jobTemplate":{"spec":{"template":{"spec":{"securityContext":{"runAsUser": 5400}}}}}}}' +``` +
+ +**_v2.6.7 新功能_** + +你需要为强化集群环境进行额外的配置。 + +> **注意**:你必须更新 RKE2 和 K3s 强化集群中的配置,如下所示。 + +1. 点击 **☰ > 集群管理**。 +1. 选择你创建的集群,并点击 **Explore**。 +1. 在左侧导航栏中,点击**应用 & 应用市场**。 +1. 安装(或升级到)NeuVector 版本 `100.0.1+up2.2.2`。 + +- 在 **编辑选项** > **其它配置**下,选中复选框来启用 **Pod 安全策略**。请注意,对于 `Manager runAsUser ID`、`Scanner runAsUser ID` 和 `Updater runAsUser ID`,你还必须输入大于 `0` 的值: + + ![为 RKE2 和 K3s 强化集群启用 PSP](/img/psp-nv-rke2.png) + +1. 点击右下角的**安装**。 + +
+
+ + +### 启用 SELinux 的集群支持 - Calico 和 Canal + +要在 RKE2 集群上启用 SELinux,请执行以下步骤: + +- 如果 PSP 设置为 true,则可以部署 NeuVector 组件 Controller 和 Enforcer。 + + +**仅适用于 NeuVector Chart 版本 100.0.0+up2.2.0**: + +- 对于 Manager、Scanner 和 Updater 组件,需要进行额外的配置,如下所示: + +``` +kubectl patch deploy neuvector-manager-pod -n cattle-neuvector-system --patch '{"spec":{"template":{"spec":{"securityContext":{"runAsUser": 5400}}}}}' +kubectl patch deploy neuvector-scanner-pod -n cattle-neuvector-system --patch '{"spec":{"template":{"spec":{"securityContext":{"runAsUser": 5400}}}}}' +kubectl patch cronjob neuvector-updater-pod -n cattle-neuvector-system --patch '{"spec":{"jobTemplate":{"spec":{"template":{"spec":{"securityContext":{"runAsUser": 5400}}}}}}}' +``` + +### 离线环境中的集群支持 + +- 所有 NeuVector 组件都可部署在离线环境中的集群上,无需任何额外配置。 + + +### 支持限制 + +* 目前仅支持管理员和集群所有者。 + +* 不支持 Fleet 多集群部署。 + +* Windows 集群不支持 NeuVector。 + + +### 其他限制 + +* 目前,如果 NeuVector partner Chart 已存在,则 NeuVector 功能 Chart 的安装会失败。要解决此问题,请卸载 NeuVector partner Chart 并重新安装 NeuVector 功能 Chart。 + +* Controller 未准备好时,有可能无法从 Rancher UI 访问 NeuVector UI。在此期间,Controller 将尝试重新启动,并且需要几分钟才能进入 active 状态。 + +* 安装 NeuVector Chart 时,不会针对不同的集群类型自动检测容器运行时。要解决此问题,你可以手动指定运行时。 + diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/opa-gatekeeper.md b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/opa-gatekeeper.md new file mode 100644 index 00000000000..9e2830df3c0 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/explanations/integrations-in-rancher/opa-gatekeeper.md @@ -0,0 +1,112 @@ +--- +title: OPA Gatekeeper +weight: 16 +--- + +为了确保一致性和合规性,每个组织都需要能够以自动化的方式在环境中定义和执行策略。[OPA(Open Policy Agent)](https://www.openpolicyagent.org/) 是一个策略引擎,用于基于策略控制云原生环境。Rancher 支持在 Kubernetes 集群中启用 OPA Gatekeeper,并且还安装了一些内置的策略定义(也称为约束模板)。 + +OPA 提供了一种高级声明性语言,可以让你将策略指定为代码,还能扩展简单的 API,从而减轻策略决策的负担。 + +[OPA Gatekeeper](https://github.com/open-policy-agent/gatekeeper) 是一个提供 OPA 和 Kubernetes 集成的项目。OPA Gatekeeper 提供: + +- 一个可扩展的参数化策略库。 +- 用于实例化策略库的原生 Kubernetes CRD,也称为“约束”。 +- 用于扩展策略库的原生 Kubernetes CRD,也称为“约束模板”。 +- 审计功能。 + +要了解更多关于 OPA 的信息,请参阅[官方文档](https://www.openpolicyagent.org/docs/latest/)。 + +## OPA Gatekeeper 集成的工作原理 + +Kubernetes 支持通过准入控制器(准入控制器)webhook 来扩展 API Server 的功能,创建、更新或删除资源时都会调用这些 webhook。Gatekeeper 作为验证 webhook 安装,并执行由 Kubernetes CRD(Custom Resource Definition)定义的策略。除了使用准入控制之外,Gatekeeper 还能审计 Kubernetes 集群中的现有资源,并对违反当前策略的情况进行标记。 + +OPA Gatekeeper 由 Rancher 的 Helm system Chart 提供,它安装在名为 `gatekeeper-system` 的命名空间中。 + +## 在集群中启用 OPA Gatekeeper + +:::note + +Rancher 2.5 改进了 OPA Gatekeeper 应用。无法从 Rancher 2.4 升级到 Rancher 2.5 中的新版本。如果你在 Rancher 2.4 中安装了 OPA Gatekeeper,则需要在旧 UI 中卸载 OPA Gatekeeper 及其 CRD,然后在 Rancher 2.5 中重新安装它。如需卸载 CRD,请在 kubectl 控制台中运行 `kubectl delete crd configs.config.gatekeeper.sh constrainttemplates.templates.gatekeeper.sh` 命令。 + +::: + +:::note 先决条件: + +只有管理员和集群所有者才能启用 OPA Gatekeeper。 + +::: + +你可以在**应用 & 应用市场**页面安装 OPA Gatekeeper Helm Chart。 + +### 启用 OPA Gatekeeper + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 在**集群**页面中,转到要启用 OPA Gatekeeper 的集群,然后单击 **Explore**。 +1. 在左侧导航栏中,点击**应用 & 应用市场**。 +1. 点击 **Charts** 并点击 **OPA Gatekeeper**。 +1. 单击**安装**。 + +**结果**:已将 OPA Gatekeeper 部署到你的 Kubernetes 集群。 + +## 约束模板 + +[约束模板](https://github.com/open-policy-agent/gatekeeper#constraint-templates)是 Kubernetes 自定义资源,用于定义要由 Gatekeeper 应用的 OPA 策略的架构和 Rego 逻辑。有关 Rego 策略语言的更多信息,请参阅[官方文档](https://www.openpolicyagent.org/docs/latest/policy-language/)。 + +启用 OPA Gatekeeper 后,Rancher 默认会安装一些模板。 + +要列出集群中安装的约束模板,请转到 OPA Gatekeeper 下的左侧菜单,然后单击**模板**。 + +Rancher 还支持通过导入 YAML 定义来创建你自己的约束模板。 + +## 创建和配置约束 + +[约束](https://github.com/open-policy-agent/gatekeeper#constraints)是 Kubernetes 自定义资源,用于定义要应用约束模板的对象范围。约束模板和约束共同定义一个完整的策略。 + +:::note 先决条件: + +集群中已启用 OPA Gatekeeper。 + +::: + +要列出已安装的约束,请转到 OPA Gatekeeper 下的左侧菜单,然后单击**约束**。 + +可以从约束模板创建新的约束。 + +Rancher 支持通过使用方便的表单来创建约束,你可以在该表单中输入各种约束字段。 + +**以 YAML 文件编辑**选项也可以用于配置约束的 YAML 定义。 + +### 使 Rancher 的 System 命名空间不受约束 + +创建约束时,请确保该约束不应用于任何 Rancher 或 Kubernetes System 命名空间。如果不排除 System 命名空间,则可能会出现 system 命名空间下的许多资源被标记为违反约束。 + +要让约束仅限制用户命名空间,请在约束的**匹配**字段下指定这些命名空间。 + +此外,该约束可能会干扰其他 Rancher 功能并拒绝部署系统工作负载。为避免这种情况,请从你的约束中排除所有 Rancher 特定的命名空间。 + +## 在集群中实施约束 + +如果**执行动作**为 **Deny**,约束会立即启用,并拒绝任何违反策略的请求。默认情况下,执行的值为 **Deny**。 + +如果**执行动作** 为 **Dryrun**,违反策略的资源仅会记录在约束的状态字段中。 + +要强制执行约束,请使用表单创建约束。在**执行动作**字段中,选择 **Deny**。 + +## 集群中的审计和违规 + +OPA Gatekeeper 运行定期审计,以检查现有资源是否违反强制执行的约束。你可以在安装 Gatekeeper 时配置审计间隔(默认 300 秒)。 + +Gatekeeper 页面上列出了违反已定义的约束的情况。 + +此外,你也可以在**约束**页面中找到违反约束的数量。 + +每个约束的详细信息视图列出了违反约束的资源的信息。 + +## 禁用 Gatekeeper + +1. 导航到集群的仪表板视图。 +1. 在左侧菜单中,展开集群菜单并单击 **OPA Gatekeeper**。 +1. 单击 **⋮ > 禁用**。 + +**结果**:禁用 OPA Gatekeeper 后,所有约束模板和约束也将被删除。 + diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/faq.md b/i18n/zh/docusaurus-plugin-content-docs/current/faq.md new file mode 100644 index 00000000000..5a61118f20f --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/faq.md @@ -0,0 +1,70 @@ +--- +title: 常见问题 +weight: 500 +--- + +本文包含了用户常见的 Rancher 2.x 问题。 + +有关常见技术问题,请参阅[常见技术问题解答](faq/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 2.3.0 开始,我们支持 Windows Server 1809 容器。有关如何使用 Windows Worker 节点设置集群的详细信息,请参阅[为 Windows 配置自定义集群](pages-for-subheaders/use-windows-clusters.md)。 + +
+ +**Rancher 是否支持 Istio?** + +从 Rancher 2.3.0 开始,我们支持 [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/current/faq/container-network-interface-providers.md b/i18n/zh/docusaurus-plugin-content-docs/current/faq/container-network-interface-providers.md new file mode 100644 index 00000000000..5730b1a8449 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/faq/container-network-interface-providers.md @@ -0,0 +1,205 @@ +--- +title: CNI 网络插件 +description: 了解容器网络接口 (CNI)、Rancher 提供的 CNI 网络插件、提供商的功能,以及如何选择网络提供商 +weight: 2300 +--- + +## 什么是 CNI? + +CNI(容器网络接口)是一个[云原生计算基金会项目](https://cncf.io/),它包含了一些规范和库,用于编写在 Linux 容器中配置网络接口的一系列插件。CNI 只关注容器的网络连接,并在容器被删除时移除所分配的资源。 + +Kubernetes 使用 CNI 作为网络提供商和 Kubernetes Pod 网络之间的接口。 + +![CNI Logo](/img/cni-logo.png) + +有关更多信息,请访问 [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 不会使用此模型,但你可以对其进行配置。 + +![封装网络](/img/encapsulated-network.png) + +### 什么是非封装网络? + +该网络模型提供了一个 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 可以使用此模型进行配置,即使这不是默认模式。 + +![非封装网络](/img/unencapsulated-network.png) + +## Rancher 提供哪些 CNI 插件? + +### RKE Kubernetes 集群 + +Rancher 开箱即用地为 RKE Kubernetes 集群提供了几个 CNI 网络插件,分别是 Canal、Flannel、Calico 和 Weave。 + +如果你使用 Rancher 创建新的 Kubernetes 集群,你可以选择你的 CNI 网络插件。 + +#### Canal + +![Canal Logo](/img/canal-logo.png) + +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)。 + +![](/img/canal-diagram.png) + +有关详细信息,请参阅 [Canal GitHub 页面](https://github.com/projectcalico/canal)。 + +#### Flannel + +![Flannel Logo](/img/flannel-logo.png) + +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 Diagram](/img/flannel-diagram.png) + +有关详细信息,请参阅 [Flannel GitHub 页面](https://github.com/flannel-io/flannel)。 + +#### Weave + +![Weave Logo](/img/weave-logo.png) + +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 Logo](/img/calico-logo.png) + +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`。 + +::: + +![Calico Diagram](/img/calico-diagram.svg) + +有关详细信息,请参阅以下页面: + +- [Project Calico 官方网站](https://www.projectcalico.org/) +- [Calico 项目 GitHub 页面](https://github.com/projectcalico/calico) + +#### Cilium + +![Cilium Logo](/img/cilium-logo.png) + +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/current/faq/deprecated-features-in-v2.5.md b/i18n/zh/docusaurus-plugin-content-docs/current/faq/deprecated-features-in-v2.5.md new file mode 100644 index 00000000000..1580b03555a --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/faq/deprecated-features-in-v2.5.md @@ -0,0 +1,27 @@ +--- +title: Rancher 弃用的功能 +weight: 100 +--- + +### 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/current/faq/dockershim.md b/i18n/zh/docusaurus-plugin-content-docs/current/faq/dockershim.md new file mode 100644 index 00000000000..5050e001de0 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/faq/dockershim.md @@ -0,0 +1,46 @@ +--- +title: Dockershim +weight: 300 +--- + +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/current/faq/install-and-configure-kubectl.md b/i18n/zh/docusaurus-plugin-content-docs/current/faq/install-and-configure-kubectl.md new file mode 100644 index 00000000000..1cd670939a4 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/faq/install-and-configure-kubectl.md @@ -0,0 +1,30 @@ +--- +title: 安装和配置 kubectl +weight: 100 +--- + +`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/current/faq/networking/networking.md b/i18n/zh/docusaurus-plugin-content-docs/current/faq/networking/networking.md new file mode 100644 index 00000000000..b170d772b8e --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/faq/networking/networking.md @@ -0,0 +1,9 @@ +--- +title: 网络 +weight: 8005 +--- + +网络常见问题 + +- [CNI 网络插件](../container-network-interface-providers.md) + diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/faq/rancher-is-no-longer-needed.md b/i18n/zh/docusaurus-plugin-content-docs/current/faq/rancher-is-no-longer-needed.md new file mode 100644 index 00000000000..15b9039760f --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/faq/rancher-is-no-longer-needed.md @@ -0,0 +1,62 @@ +--- +title: 卸载 Rancher +weight: 8010 +--- + +本文介绍了如果你不再需要 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)](../pages-for-subheaders/rancher-manager-architecture.md#4-授权集群端点),而且你必须从 Rancher UI 下载了集群的 kubeconfig 文件。RKE 集群默认启用授权集群端点。通过使用此端点,你可以直接使用 kubectl 访问你的集群,而不用通过 Rancher Server 的[认证代理](../pages-for-subheaders/rancher-manager-architecture.md#1-认证代理)进行通信。有关配置 kubectl 以使用授权集群端点的说明,请参阅[使用 kubectl 和 kubeconfig 文件直接访问集群](../how-to-guides/advanced-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。 + +从 Rancher 2.5.8 开始,在高可用性 (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/current/faq/security.md b/i18n/zh/docusaurus-plugin-content-docs/current/faq/security.md new file mode 100644 index 00000000000..7f2c131a66d --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/faq/security.md @@ -0,0 +1,15 @@ +--- +title: 安全 +weight: 8007 + +--- + +**是否有强化指南?** + +强化指南现在位于[安全](../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/current/faq/technical-items.md b/i18n/zh/docusaurus-plugin-content-docs/current/faq/technical-items.md new file mode 100644 index 00000000000..29fe3614fbf --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/faq/technical-items.md @@ -0,0 +1,177 @@ +--- +title: 技术 +weight: 8006 +--- + +### 如何重置管理员密码? + +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-1.10.md#external-dependencies)。 + +### 如何访问 Rancher 创建的节点? + +你可以转到**节点**视图,然后下载用于访问 Rancher 创建的节点的 SSH 密钥。选择要访问的节点并单击行尾 **⋮** 按钮,然后选择**下载密钥**,如下图所示。 + +![下载密钥](/img/downloadsshkeys.png) + +解压缩下载的 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/advanced-user-guides/manage-clusters/clean-cluster-nodes.md)来清理节点。 + +在集群中移除并清理节点时,你可以将节点重新添加到集群中。 + +### 如何将其他参数/绑定/环境变量添加到 Rancher 启动的 Kubernetes 集群的 Kubernetes 组件中? + +你可以使用集群选项中的[配置文件](../reference-guides/cluster-configuration/rancher-server-configuration/rke1-cluster-configuration.md#集群配置文件)选项来添加其他参数/​​绑定/环境变量。有关详细信息,请参阅 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/current/faq/telemetry.md b/i18n/zh/docusaurus-plugin-content-docs/current/faq/telemetry.md new file mode 100644 index 00000000000..ca785fc0979 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/faq/telemetry.md @@ -0,0 +1,32 @@ +--- +title: 遥测 +weight: 8008 +--- + +### 什么是遥测? + +遥测(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/current/getting-started.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started.md new file mode 100644 index 00000000000..b56e58de70d --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started.md @@ -0,0 +1,10 @@ +--- +title: 开始使用 +--- + +**开始使用**章节能帮助你快速启动和运行 Rancher。 + +本章节旨在帮助用户部署 Rancher 和工作负载,并快速有效地安装或升级 Rancher。 + +请参阅[简介](./pages-for-subheaders/introduction.md)、[快速入门指南](./pages-for-subheaders/quick-start-guides.md)以及[安装和升级](./pages-for-subheaders/installation-and-upgrade.md)部分了解更多信息。 + diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/advanced-options/advanced-use-cases/configure-layer-7-nginx-load-balancer.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/advanced-options/advanced-use-cases/configure-layer-7-nginx-load-balancer.md new file mode 100644 index 00000000000..c7badd2b702 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/advanced-options/advanced-use-cases/configure-layer-7-nginx-load-balancer.md @@ -0,0 +1,261 @@ +--- +title: 7 层 NGINX 负载均衡器上的 TLS 终止(Docker 安装) +weight: 252 +--- + +如果你的开发或测试环境要求在负载均衡器上终止 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)。 + +
+ +## 常见问题和故障排除 + +如果你需要对证书进行故障排除,请参见[此章节](../../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 +``` + +Rancher 2.5 开始需要[特权访问](../../../../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/current/getting-started/installation-and-upgrade/advanced-options/advanced-use-cases/enable-api-audit-log.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/advanced-options/advanced-use-cases/enable-api-audit-log.md new file mode 100644 index 00000000000..8182d532566 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/advanced-options/advanced-use-cases/enable-api-audit-log.md @@ -0,0 +1,559 @@ +--- +title: 启用 API 审计日志以记录系统事件 +weight: 4 +--- + +你可以启用 API 审计日志来记录各个用户发起的系统事件的顺序。通过查看日志,你可以了解发生了什么事件、事件发生的时间,事件发起人,以及事件影响的集群。启用此功能后,所有 Rancher API 的请求和响应都会写入日志中。 + +API 审计可以在 Rancher 安装或升级期间启用。 + +## 启用 API 审计日志 + +你可以将环境变量传递给 Rancher Server 容器,从而启用和配置审计日志。请参见以下文档,在安装时启用该功能: + +- [Docker 安装](../../../../reference-guides/single-node-rancher-in-docker/advanced-options.md#api-审计日志) + +- [Kubernetes 安装](../../../../reference-guides/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/current/getting-started/installation-and-upgrade/advanced-options/advanced-use-cases/open-ports-with-firewalld.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/advanced-options/advanced-use-cases/open-ports-with-firewalld.md new file mode 100644 index 00000000000..1ec56cb5e26 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/advanced-options/advanced-use-cases/open-ports-with-firewalld.md @@ -0,0 +1,108 @@ +--- +title: 使用 firewalld 打开端口 +weight: 1 +--- + +> 我们建议禁用 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`,将[防火墙端口规则](../../installation-requirements/port-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/current/getting-started/installation-and-upgrade/advanced-options/advanced-use-cases/tune-etcd-for-large-installs.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/advanced-options/advanced-use-cases/tune-etcd-for-large-installs.md new file mode 100644 index 00000000000..33ab11b1635 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/advanced-options/advanced-use-cases/tune-etcd-for-large-installs.md @@ -0,0 +1,40 @@ +--- +title: 为大型安装进行 etcd 调优 +weight: 2 +--- + +当你运行具有 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/current/getting-started/installation-and-upgrade/advanced-options/enable-experimental-features/continuous-delivery.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/advanced-options/enable-experimental-features/continuous-delivery.md new file mode 100644 index 00000000000..c5a13655e02 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/advanced-options/enable-experimental-features/continuous-delivery.md @@ -0,0 +1,14 @@ +--- +title: 持续交付 +weight: 3 +--- + +从 Rancher 2.5 开始,[Fleet](../../../../how-to-guides/new-user-guides/deploy-apps-across-clusters/fleet.md) 已经预装在 Rancher 中,且从 Rancher 2.6 开始,Fleet 不能再完全禁用。但是,你可以使用 `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/current/getting-started/installation-and-upgrade/advanced-options/enable-experimental-features/istio-traffic-management-features.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/advanced-options/enable-experimental-features/istio-traffic-management-features.md new file mode 100644 index 00000000000..53ca6353482 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/advanced-options/enable-experimental-features/istio-traffic-management-features.md @@ -0,0 +1,33 @@ +--- +title: UI 管理 Istio 虚拟服务和目标规则 +weight: 2 +--- + +此功能可启动一个 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/current/getting-started/installation-and-upgrade/advanced-options/enable-experimental-features/rancher-on-arm64.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/advanced-options/enable-experimental-features/rancher-on-arm64.md new file mode 100644 index 00000000000..0096c84b12c --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/advanced-options/enable-experimental-features/rancher-on-arm64.md @@ -0,0 +1,45 @@ +--- +title: "在 ARM64 上运行 Rancher(实验性)" +weight: 3 +--- + +:::caution + +在使用 ARM64 架构的节点上运行 Rancher 目前还处在实验阶段,Rancher 尚未正式支持该功能。因此,我们不建议你在生产环境中使用 ARM64 架构的节点。 + +::: + +如果你的节点使用 ARM64 架构,你可以使用以下选项: + +- 在 ARM64 架构的节点上运行 Rancher + - 此选项仅适用于 Docker 安装。请知悉,以下安装命令取代了 [Docker 安装](../../../../../versioned_docs/version-2.0-2.4/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 或更高版本 + +如需了解如何配置集群选项,请参见[集群选项](cluster-provisioning/rke-clusters/options/)。 + +以下是未经测试的功能: + +- Monitoring、告警、Notifiers、流水线和 Logging +- 通过应用商店发布应用 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/advanced-options/enable-experimental-features/unsupported-storage-drivers.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/advanced-options/enable-experimental-features/unsupported-storage-drivers.md new file mode 100644 index 00000000000..9bfc4d7c22f --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/advanced-options/enable-experimental-features/unsupported-storage-drivers.md @@ -0,0 +1,40 @@ +--- +title: 使用非默认支持的存储驱动 +weight: 1 +--- + +此功能允许你使用不是默认启用的存储提供商和卷插件。 + +如需启用或禁用此功能,请参见[启用实验功能主页](../../../../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/current/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/air-gapped-upgrades.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/air-gapped-upgrades.md new file mode 100644 index 00000000000..683570efe8a --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/air-gapped-upgrades.md @@ -0,0 +1,91 @@ +--- +title: 在离线环境中渲染 Helm 模板 +shortTitle: 离线升级 +weight: 1 +--- + +:::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/current/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/rancher-on-aks.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/rancher-on-aks.md new file mode 100644 index 00000000000..b517edc9f1e --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/rancher-on-aks.md @@ -0,0 +1,138 @@ +--- +title: 在 Azure Kubernetes Service 上安装 Rancher +shortTitle: AKS +weight: 3 +--- + +本文介绍了如何在微软的 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 的版本更新到 v1.22 或更高版本,则 ingress-nginx 的版本也需要[更新](https://kubernetes.github.io/ingress-nginx/#faq-migration-to-apiversion-networkingk8siov1)。 + +::: + +``` +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 地址的限制在每个订阅的区域级别生效。 + +以下命令安装了带有 Kubernetes 负载均衡器服务的 `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 +``` + +## 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 安装命令。 + +**_v2.6.7 新功能_** + +在此设置之上安装 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/current/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/rancher-on-amazon-eks.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/rancher-on-amazon-eks.md new file mode 100644 index 00000000000..27b5aea647d --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/rancher-on-amazon-eks.md @@ -0,0 +1,176 @@ +--- +title: 在 Amazon EKS 上安装 Rancher +shortTitle: Amazon EKS +weight: 3 +--- + +本文介绍了在 EKS 上安装 Rancher 的两种方法。 + +第一种方法是使用 CloudFormation 在 EKS 集群上部署 Rancher Server。该方法的指南是与 Amazon Web Services 合作创建的,旨在展示如何按照最佳实践部署 Rancher。 + +第二种方法是使用命令行工具安装带有 Ingress 的 EKS 集群。如果你想在 EKS 上使用 Rancher 时使用较少的资源,请使用此方法。 + +如果你已经有一个 EKS Kubernetes 集群,请直接跳转到[安装 Ingress](#5-安装-ingress)这个步骤。然后按照[此处](../../../pages-for-subheaders/install-upgrade-on-a-kubernetes-cluster.md#安装-rancher-helm-chart)的步骤安装 Rancher Helm Chart。 + + +## 使用 AWS 最佳实践的快速入门 + +Rancher 和 Amazon Web Services 合作编写了一份快速入门指南,用于按照 AWS 的最佳实践,在 EKS 集群上部署 Rancher。详情请参见[部署指南](https://aws-quickstart.github.io/quickstart-eks-rancher/)。 + +快速入门指南提供了在 EKS 上部署 Rancher 的三个选项: + +- **将 Rancher 部署到新的 VPC 和新的 Amazon EKS 集群中**:该选项构建了一个由 VPC、子网、NAT 网关、安全组、堡垒主机、Amazon EKS 集群和其他基础设施组件组成的全新 AWS 环境。然后将 Rancher 部署到这个新的 EKS 集群中。 +- **将 Rancher 部署到现有 VPC 和新的 Amazon EKS 集群中**:此选项在现有 AWS 基础架构中配置 Rancher。 +- **将 Rancher 部署到现有的 VPC 和现有的 Amazon EKS 集群中**。此选项在现有 AWS 基础架构中配置 Rancher。 + +使用默认参数为新的 Virtual Private Cloud(VPC)和新的 Amazon EKS 集群按照此快速入门部署,会在 AWS Cloud 中构建以下 Rancher 环境: + +- 跨越三个可用区的高可用架构。\* +- 根据 AWS 最佳实践,配置有公共和私有子网的 VPC,为你提供 AWS 上你自己的虚拟网络。\* +- 在公共子网中: + - 管理网络地址转换(NAT)网关,以允许资源的出站互联网访问。\* + - 自动扩缩组中的 Linux 堡垒主机,允许对公共和私有子网中的 Amazon Elastic Compute Cloud (Amazon EC2) 实例进行入站安全 Shell (SSH) 访问。\* +- 私有子网中: + - 自动扩缩组中的 Kubernetes 节点。\* + - 网络负载均衡器(未显示),用于访问 Rancher 控制台。 +- 使用 AWS Systems Manager 自动化进行 Rancher 部署。 +- 用于 EKS 集群的 Amazon EKS 服务,它提供了 Kubernetes controlplane。\* +- 用于访问 Rancher 部署的 Amazon Route 53 DNS 记录。 + +\* 将快速启动部署到现有 Amazon EKS 集群中的 CloudForm 模板会跳过标有星号(\*)的组件,并提示你查看现有 VPC 配置。 + +## 为 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 的版本更新到 v1.22 或更高版本,则 ingress-nginx 的版本也需要[更新](https://kubernetes.github.io/ingress-nginx/#faq-migration-to-apiversion-networkingk8siov1)。 + +``` +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。 + +以下命令安装了一个 `nginx-ingress-controller`和一个 LoadBalancer 服务。因此,NGINX 前面会有一个 ELB(Elastic Load Balancer): + +``` +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 +``` + +### 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 安装命令。 + +**_v2.6.7 新功能_** + +在此设置之上安装 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/current/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/rancher-on-gke.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/rancher-on-gke.md new file mode 100644 index 00000000000..7f03aec181e --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/rancher-on-gke.md @@ -0,0 +1,198 @@ +--- +title: 在 GKE 集群上安装 Rancher +shortTitle: GKE +weight: 3 +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +在本节中,你将学习如何使用 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 版本。 + +**注意**:如果 Kubernetes 的版本更新到 v1.22 或更高版本,则 ingress-nginx 的版本也需要[更新](https://kubernetes.github.io/ingress-nginx/#faq-migration-to-apiversion-networkingk8siov1)。 + +``` +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 安装命令。 + +**_v2.6.7 新功能_** + +在此设置之上安装 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/current/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/rollbacks.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/rollbacks.md new file mode 100644 index 00000000000..771fa67e711 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/rollbacks.md @@ -0,0 +1,116 @@ +--- +title: 回滚 +weight: 3 +--- + + +## 回滚到 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。 + +::: + +### 将 Rancher Deployment 规模扩展到 0 + +1. 在左上角,点击 **☰ > local**。 +1. 在左侧主菜单中,点击**工作负载**。 +1. 在**工作负载**下,点击 **Deployments**。 +1. 点击上方下拉菜单以调整筛选条件。选择 **cattle-system** 作为筛选条件。 +1. 找到 `rancher` deployment 的行,并点击**⋮ > 编辑配置**。 +1. 将**副本数量**改为 0。 +1. 滚动到底部并点击**保存**。 + +### 创建 Restore 自定义资源 + +1. 点击 **☰ > 集群管理**。 +1. 找到你的本地集群,并点击 **Explore**。 +1. 在左侧导航栏中,点击 **Rancher 备份 > 还原**。 + :::note + + 如果 Rancher Backups 应用不可见,你需要到**应用 & 应用市场**的 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/current/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/troubleshooting.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/troubleshooting.md new file mode 100644 index 00000000000..2a4304acbab --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/troubleshooting.md @@ -0,0 +1,189 @@ +--- +title: Rancher Server Kubernetes 集群的问题排查 +weight: 276 +--- + +本文介绍如何对安装在 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-2/3) 进行排查。 + + +### 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/current/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/upgrades.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/upgrades.md new file mode 100644 index 00000000000..6a36ce1eea9 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/upgrades.md @@ -0,0 +1,181 @@ +--- +title: 升级 +weight: 2 +--- +本文介绍如何升级使用 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 仓库](../../../reference-guides/installation-references/helm-chart-options.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)。 + +### 升级 Rancher Server 并使用隐藏的本地集群 + +如果你从使用 Helm Chart 选项 `--add-local=false` 启动的 Rancher Server 升级到 Rancher 2.5,你需要在升级时取消该标志。否则,Rancher Server 将无法启动。`restricted-admin` 角色可以继续用来限制对本地集群的访问。详情请参见[本章节](../../../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/global-permissions.md#在-rancher-中使用隐藏的-local-集群进行升级)。 + +### 使用 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](../../../reference-guides/installation-references/helm-chart-options.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-stable https://releases.rancher.com/server-charts/stable + ``` + 注意:不支持升级到 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=v2.4.11 + ``` + +### 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 + +这个命令会列出更多的值。此处展示的只是其中一个值的例子。 + +::: + + +如果要将 cert-manager 从 v1.5 或更早的版本升级到最新版本,请参阅 [cert-manager upgrade docs](../resources/upgrade-cert-manager.md#选项-c:升级-1.5-及以下版本的-cert-manager) 了解如何在不卸载或重新安装 Rancher 的情况下升级 cert-manager。否则,请按照以下[ Rancher 升级步骤](#rancher-升级步骤)进行操作。 + +#### Rancher 升级步骤 + +保留你的所有设置把 Rancher 升级到最新版本。 + +将上一步中的所有值用 `--set key=value`追加到命令中。 + +``` +helm upgrade rancher rancher-/rancher \ + --namespace cattle-system \ + --set hostname=rancher.my.org +``` + +:::note + +以上是一个例子,可能有更多上一步的值需要追加。 + +::: + +另外,你也可以将当前的值导出到一个文件中,并在升级时引用该文件。例如,如果你只需要改变 Rancher 的版本: + +``` +helm get values rancher -n cattle-system -o yaml > values.yaml + +helm upgrade rancher rancher-/rancher \ + --namespace cattle-system \ + -f values.yaml \ + --version=2.4.5 +``` + +### 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/current/getting-started/installation-and-upgrade/installation-requirements/dockershim.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/installation-requirements/dockershim.md new file mode 100644 index 00000000000..5135e1cce20 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/installation-requirements/dockershim.md @@ -0,0 +1,46 @@ +--- +title: Dockershim +weight: 300 +--- + +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。 + +要在 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/current/getting-started/installation-and-upgrade/installation-requirements/install-docker.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/installation-requirements/install-docker.md new file mode 100644 index 00000000000..ea47b1c8388 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/installation-requirements/install-docker.md @@ -0,0 +1,18 @@ +--- +title: 安装 Docker +weight: 1 +--- + +在使用 Helm 或 Docker 在节点上安装 Rancher Server 前,你需要先安装 Docker。 + +Docker 有几个安装方法。一种方法是参见 [Docker 官方文档](https://docs.docker.com/install/)以了解如何在 Linux 上安装 Docker。不同 Linux 发行版的安装步骤可能有所不同。 + +另一种方式是使用 Rancher 的 Docker 安装脚本,该脚本可用于较新的 Docker 版本。 + +例如,你可执行以下命令,在 Ubuntu 上安装 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)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/installation-requirements/port-requirements.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/installation-requirements/port-requirements.md new file mode 100644 index 00000000000..6fe3224535a --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/installation-requirements/port-requirements.md @@ -0,0 +1,339 @@ +--- +title: 端口要求 +description: 了解 Rancher 正常运行所需的端口要求,包括 Rancher 节点和下游 Kubernetes 集群节点 +weight: 300 +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; +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 | `35.160.43.145`,`35.167.242.46`,`52.33.59.17` | Rancher catalog(git.rancher.io) | +| 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 Agent 节点 | Kubernetes API | +| 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 | 5473 | Calico-node pod 连接到 typha pod | 使用 Calico 部署时需要 | +| HTTP | 8080 | 执行外部 SSL 终止的负载均衡器/代理 | 使用外部 SSL 终止时的 Rancher UI/API | +| HTTPS | 8443 |
  • 托管/注册的 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 管理面板的端口要求
+ +![基本端口要求](/img/port-communications.svg) + +:::tip + +如果你对安全性的关注不是太高,而且也愿意多打开几个端口,你可以参考[常用端口](#常用端口)中列出的端口,而不是参考下方的表格。 + +::: + +### 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/kubernetes-clusters-in-rancher-setup/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.opensuse.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/current/getting-started/installation-and-upgrade/other-installation-methods/air-gapped-helm-cli-install/docker-install-commands.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/other-installation-methods/air-gapped-helm-cli-install/docker-install-commands.md new file mode 100644 index 00000000000..7887ed5f058 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/other-installation-methods/air-gapped-helm-cli-install/docker-install-commands.md @@ -0,0 +1,150 @@ +--- +title: Docker 安装命令 +weight: 1 +--- + +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 版本](../../../../reference-guides/installation-references/helm-chart-options.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 版本](../../../../reference-guides/installation-references/helm-chart-options.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 版本](../../../../reference-guides/installation-references/helm-chart-options.md)的版本标签。 | + +:::note + +使用 `--no-cacerts` 作为容器的参数,以禁用 Rancher 生成的默认 CA 证书。 + +::: + +特权访问是[必须](#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/current/getting-started/installation-and-upgrade/other-installation-methods/air-gapped-helm-cli-install/infrastructure-private-registry.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/other-installation-methods/air-gapped-helm-cli-install/infrastructure-private-registry.md new file mode 100644 index 00000000000..d48c7ac3ce2 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/other-installation-methods/air-gapped-helm-cli-install/infrastructure-private-registry.md @@ -0,0 +1,189 @@ +--- +title: '1. 设置基础设施和私有镜像仓库' +weight: 100 +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +本文介绍如何在离线环境中,为 Rancher Management server 配置底层基础设施。你还将设置 Rancher 节点中必须可用的 Docker 私有仓库。 + +离线环境是 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 个私有 Docker 镜像仓库**:用于将 Docker 镜像分发到你的主机。 + +### 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 选项](../../../../reference-guides/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. 配置私有 Docker 镜像仓库 + +Rancher 支持使用私有镜像仓库进行离线安装。你必须有自己的私有镜像仓库或使用其他方式将 Docker 镜像分发到主机。 + +在后续设置 K3s Kubernetes 集群时,你需要创建一个[私有镜像仓库配置文件](https://rancher.com/docs/k3s/latest/en/installation/private-registry/),其中包含此镜像仓库的信息。 + +如需获得创建私有镜像仓库的帮助,请参见 [Docker 官方文档](https://docs.docker.com/registry/deploying/#run-an-externally-accessible-registry)。 + + + + +如需在高可用 RKE 集群中安装 Rancher Management Server,我们建议配置以下基础设施: + +- **3 个 Linux 节点**:可以是你的云提供商(例如 Amazon EC2,GCE 或 vSphere)中的虚拟机。 +- **1 个负载均衡器**:用于将前端流量转发到这三个节点中。 +- **1 个 DNS 记录**:用于将 URL 映射到负载均衡器。此 DNS 记录将成为 Rancher Server 的 URL,下游集群需要可以访问到这个地址。 +- **1 个私有 Docker 镜像仓库**:用于将 Docker 镜像分发到你的主机。 + +这些节点必须位于同一个区域或数据中心。但是你可以把这些服务器放在不同的可用区。 + +### 为什么使用三个节点? + +在 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 选项](../../../../reference-guides/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. 配置私有 Docker 镜像仓库 + +Rancher 支持使用安全的 Docker 私有镜像仓库进行离线安装。你必须有自己的私有镜像仓库或使用其他方式将 Docker 镜像分发到主机。 + +在后续设置 RKE Kubernetes 集群时,你需要创建一个[私有镜像仓库配置文件](https://rancher.com/docs/rke/latest/en/config-options/private-registries/),其中包含此镜像仓库的信息。 + +如需获得创建私有镜像仓库的帮助,请参见 [Docker 官方文档](https://docs.docker.com/registry/deploying/#run-an-externally-accessible-registry)。 + + + + +:::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 节点 + +此主机会断开互联网链接,但需要能与你的私有镜像仓库连接。 + +请确保你的节点满足[操作系统,Docker,硬件和网络](../../../../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 私有镜像仓库在堡垒服务器中进行离线安装。你必须有自己的私有镜像仓库或使用其他方式将 Docker 镜像分发到主机。 + +如需获得创建私有镜像仓库的帮助,请参见 [Docker 官方文档](https://docs.docker.com/registry/)。 + + + + +### 后续操作 +[收集镜像并发布到你的私有镜像仓库](publish-images.md) diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/other-installation-methods/air-gapped-helm-cli-install/install-kubernetes.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/other-installation-methods/air-gapped-helm-cli-install/install-kubernetes.md new file mode 100644 index 00000000000..d04e00f5537 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/other-installation-methods/air-gapped-helm-cli-install/install-kubernetes.md @@ -0,0 +1,386 @@ +--- +title: '3. 安装 Kubernetes(Docker 安装请跳过)' +weight: 300 +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +:::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 版本,请参见[支持维护条款](https://rancher.com/support-maintenance-terms/)。 + +如需指定 K3s 版本,在运行 K3s 安装脚本时,使用 `INSTALL_K3S_VERSION` 环境变量。 + +从 [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.sh +``` + +在每个 Agent 上安装 K3s: + +``` +INSTALL_K3S_SKIP_DOWNLOAD=true K3S_URL=https://myserver:6443 K3S_TOKEN=mynodetoken ./install.sh +``` + +请确保你将 `myserver` 替换为 Server 的 IP 或有效 DNS,并将 `mynodetoken` 替换为 Server 节点上的 node-token。 +node-token 位于 Server 节点上的 `/var/lib/rancher/k3s/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。 + +### 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/current/getting-started/installation-and-upgrade/other-installation-methods/air-gapped-helm-cli-install/install-rancher-ha.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/other-installation-methods/air-gapped-helm-cli-install/install-rancher-ha.md new file mode 100644 index 00000000000..27a077c063a --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/other-installation-methods/air-gapped-helm-cli-install/install-rancher-ha.md @@ -0,0 +1,264 @@ +--- +title: 4. 安装 Rancher +weight: 400 +--- + +本文介绍如何在高可用 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 版本](../../../../reference-guides/installation-references/helm-chart-options.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-stable https://releases.rancher.com/server-charts/stable + ``` + 注意:不支持升级到 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 终止](../../../../reference-guides/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. 渲染 Rancher Helm 模板 + +根据你在[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: + +:::note + +v2.6.4 兼容 cert-manager 版本 1.6.2 和 1.7.1。推荐使用 v1.7.x,因为 v 1.6.x 将在 2022 年 3 月 30 日结束生命周期。 + +::: + +```plain +helm fetch jetstack/cert-manager --version v1.7.1 +``` + +##### 3. 渲染 cert-manager 模板 + +使用你想用来安装 Chart 的选项来渲染 cert-manager 模板。记住要设置 `image.repository` 选项,以从你的私有镜像仓库拉取镜像。此操作会创建一个包含 Kubernetes manifest 文件的 `cert-manager` 目录。 + +```plain +helm template cert-manager ./cert-manager-v1.7.1.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 \ + --set startupapicheck.image.repository=/quay.io/jetstack/cert-manager-ctl +``` + +##### 4. 下载 cert-manager CRD + +为 cert-manager 下载所需的 CRD 文件: +```plain +curl -L -o cert-manager/cert-manager-crd.yaml https://github.com/cert-manager/cert-manager/releases/download/v1.7.1/cert-manager.crds.yaml +``` + +##### 5. 渲染 Rancher 模板 + +渲染 Rancher 模板来声明你的选项。参考下表来替换每个占位符。Rancher 需要配置为使用私有镜像仓库,以便配置所有 Rancher 启动的 Kubernetes 集群或 Rancher 工具。 + + +| 占位符 | 描述 | +------------|------------- +| `` | 输出压缩包的版本号。 | +| `` | 指向负载均衡器的 DNS 名称。 | +| `` | 你的私有镜像仓库的 DNS 名称。 | +| `` | 在 K8s 集群上运行的 cert-manager 版本。 | + +```plain +helm template rancher ./rancher-.tgz --output-dir . \ + --no-hooks \ # 避免生成 Helm 钩子文件 + --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 工具。 + +| 占位符 | 描述 | +| -------------------------------- | ----------------------------------------------- | +| `` | 输出压缩包的版本号。 | +| `` | 指向负载均衡器的 DNS 名称。 | +| `` | 你的私有镜像仓库的 DNS 名称。 | + +```plain + helm template rancher ./rancher-.tgz --output-dir . \ + --no-hooks \ # 避免生成 Helm 钩子文件 + --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 template rancher ./rancher-.tgz --output-dir . \ + --no-hooks \ # 避免生成 Helm 钩子文件 + --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 +``` + +**可选**:如需安装特定的 Rancher 版本,设置`rancherImageTag` 的值,例如:`--set rancherImageTag=v2.3.6` + +然后,参见[添加 TLS 密文](../../resources/add-tls-secrets.md)发布证书文件,以便 Rancher 和 Ingress Controller 可以使用它们。 + +### 4. 安装 Rancher + +将渲染的 manifest 目录复制到可以访问 Rancher Server 集群的系统中,以完成安装。 + +使用 `kubectl` 来创建命名空间和应用渲染的 manifest。 + +如果你使用自签名证书(在[选项B. 选择 SSL 配置](#b-选择-ssl-配置)中),安装 cert-manager。 + +#### 自签名证书安装 - 安装 Cert-manager + +
+ 单击展开 + +如果你使用自签名证书,安装 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 + ``` + + :::note + + 如果你运行的 Kubernetes 版本是 1.15 或更低版本,你需要在以上的 `kubectl apply` 命令中添加 `--validate=false`,否则你将看到 cert-manager CRD 资源中的 `x-kubernetes-preserve-unknown-fields` 字段校验错误提示。这是 kubectl 执行资源校验方式产生的良性错误。 + + ::: + +3. 启动 cert-manager. + ```plain + kubectl apply -R -f ./cert-manager + ``` + +
+ +#### 使用 kubectl 安装 Rancher + +```plain +kubectl create namespace cattle-system +kubectl -n cattle-system apply -R -f ./rancher +``` +安装已完成。 + +:::caution + +如果你不想发送遥测数据,在首次登录时退出[遥测](../../../../faq/telemetry.md)。如果在离线安装的环境中让这个功能处于 active 状态,socket 可能无法打开。 + +::: + +## 其他资源 + +以下资源可能对安装 Rancher 有帮助: + +- [Rancher Helm Chart 选项](../../../../reference-guides/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/current/getting-started/installation-and-upgrade/other-installation-methods/air-gapped-helm-cli-install/publish-images.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/other-installation-methods/air-gapped-helm-cli-install/publish-images.md new file mode 100644 index 00000000000..30de77bf246 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/other-installation-methods/air-gapped-helm-cli-install/publish-images.md @@ -0,0 +1,316 @@ +--- +title: '2. 收集镜像并发布到私有仓库' +weight: 200 +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +本文介绍如何配置私有镜像仓库,以便在安装 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` 文件中。 + + +:::note + +v2.6.4 兼容 cert-manager 版本 1.6.2 和 1.7.1。推荐使用 v1.7.x,因为 v 1.6.x 将在 2022 年 3 月 30 日结束生命周期。 + +::: + +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.7.1 + 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 v0.12.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/current/getting-started/installation-and-upgrade/other-installation-methods/rancher-behind-an-http-proxy/install-kubernetes.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/other-installation-methods/rancher-behind-an-http-proxy/install-kubernetes.md new file mode 100644 index 00000000000..b12f3181c30 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/other-installation-methods/rancher-behind-an-http-proxy/install-kubernetes.md @@ -0,0 +1,175 @@ +--- +title: '2. 安装 Kubernetes' +weight: 200 +--- + +基础设施配置好后,你可以设置一个 RKE 集群来安装 Rancher。 + +首先,你需要在所有三个 Linux 节点上安装 Docker 并设置 HTTP 代理。因此,你可以在这三个节点上执行以下步骤。 + +为方便起见,将代理的 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 +``` + +接下来配置 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 +``` + +#### 离线代理 + +_v2.6.4 的新功能_ + +你现在可以在配置的离线集群中配置主机驱动集群,以使用代理进行出站连接。 + +除了为代理服务器设置默认规则外,你还需要额外添加如下所示的规则,以从代理的 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 +``` + +* [helm](https://helm.sh/docs/intro/install/) + +``` +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 +``` + +接下来,创建一个描述 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/current/getting-started/installation-and-upgrade/other-installation-methods/rancher-behind-an-http-proxy/install-rancher.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/other-installation-methods/rancher-behind-an-http-proxy/install-rancher.md new file mode 100644 index 00000000000..b24edc1f87c --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/other-installation-methods/rancher-behind-an-http-proxy/install-rancher.md @@ -0,0 +1,101 @@ +--- +title: 3. 安装 Rancher +weight: 300 +--- + +在前文的操作后,你已经有了一个运行的 RKE 集群,现在可以在其中安装 Rancher 了。出于安全考虑,所有到 Rancher 的流量都必须使用 TLS 加密。在本教程中,你将使用 [cert-manager](https://cert-manager.io/)自动颁发自签名证书。在实际使用情况下,你可使用 Let's Encrypt 或自己的证书。 + +:::note + +这些安装指南假定你使用的是 Helm 3。 + +::: + +### 安装 cert-manager + +添加 cert-manager Helm 仓库: + +``` +helm repo add jetstack https://charts.jetstack.io +``` + +为 cert-manager 创建命名空间: + +``` +kubectl create namespace cert-manager +``` + +安装 cert-manager 的 CustomResourceDefinitions: + +:::note + +v2.6.4 兼容 cert-manager 版本 1.6.2 和 1.7.1。推荐使用 v1.7.x,因为 v 1.6.x 将在 2022 年 3 月 30 日结束生命周期。 + +::: + +``` +kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.7.1/cert-manager.crds.yaml +``` + +使用 Helm 安装 cert-manager。请注意,cert-manager 还需要你配置代理,以防它需要与 Let's Encrypt 或其他外部证书颁发商进行通信: + +``` +helm upgrade --install cert-manager jetstack/cert-manager \ + --namespace cert-manager --version v1.7.1 \ + --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 选项](../../../../reference-guides/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/current/getting-started/installation-and-upgrade/other-installation-methods/rancher-behind-an-http-proxy/set-up-infrastructure.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/other-installation-methods/rancher-behind-an-http-proxy/set-up-infrastructure.md new file mode 100644 index 00000000000..cda04e0563c --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/other-installation-methods/rancher-behind-an-http-proxy/set-up-infrastructure.md @@ -0,0 +1,65 @@ +--- +title: '1. 配置基础设施' +weight: 100 +--- + +在本节中,你将为 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 选项](../../../../reference-guides/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/current/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/current/getting-started/installation-and-upgrade/other-installation-methods/rancher-on-a-single-node-with-docker/certificate-troubleshooting.md new file mode 100644 index 00000000000..76e4855e6a3 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/other-installation-methods/rancher-on-a-single-node-with-docker/certificate-troubleshooting.md @@ -0,0 +1,90 @@ +--- +title: 证书故障排除 +weight: 4 +--- +### 如何确定我的证书格式是否为 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/current/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/current/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..d5beb794963 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/other-installation-methods/rancher-on-a-single-node-with-docker/roll-back-docker-installed-rancher.md @@ -0,0 +1,92 @@ +--- +title: 回滚 Docker 安装的 Rancher +weight: 1015 +--- + +如果 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>![占位符参考](/img/placeholder-ref-2.png) + +| 占位符 | 示例 | 描述 | +| -------------------------- | -------------------------- | ------------------------------------------------------- | +| `` | `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/current/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/current/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..bc25b33f336 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/other-installation-methods/rancher-on-a-single-node-with-docker/upgrade-docker-installed-rancher.md @@ -0,0 +1,397 @@ +--- +title: 升级 Docker 安装的 Rancher +weight: 1010 +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +本文介绍如何升级通过 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 仓库](../../../../reference-guides/installation-references/helm-chart-options.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> + +![占位符参考](/img/placeholder-ref.png) + +| 占位符 | 示例 | 描述 | +| -------------------------- | -------------------------- | --------------------------------------------------------- | +| `` | `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 版本](../../../../reference-guides/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 版本](../../../../reference-guides/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 版本](../../../../reference-guides/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 版本](../../../../reference-guides/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 版本](../../../../reference-guides/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 版本](../../../../reference-guides/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 版本](../../../../reference-guides/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 版本](../../../../reference-guides/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/current/getting-started/installation-and-upgrade/resources/add-tls-secrets.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/resources/add-tls-secrets.md new file mode 100644 index 00000000000..5b1d8ad680e --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/resources/add-tls-secrets.md @@ -0,0 +1,46 @@ +--- +title: 添加 TLS 密文 +weight: 2 +--- + +我们使用证书和密钥将 `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 的连接。 + +将 CA 证书拷贝到名为 `cacerts.pem` 的文件中,然后使用 `kubectl` 在 `cattle-system` 命名空间中创建 `tls-ca` 密文。 + +``` +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/current/getting-started/installation-and-upgrade/resources/bootstrap-password.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/resources/bootstrap-password.md new file mode 100644 index 00000000000..9c270760235 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/resources/bootstrap-password.md @@ -0,0 +1,28 @@ +--- +title: 引导密码 +weight: 800 +--- + +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/current/getting-started/installation-and-upgrade/resources/choose-a-rancher-version.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/resources/choose-a-rancher-version.md new file mode 100644 index 00000000000..cacc9d7d133 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/resources/choose-a-rancher-version.md @@ -0,0 +1,122 @@ +--- +title: 选择 Rancher 版本 +weight: 1 +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +本节介绍如何选择 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-stable https://releases.rancher.com/server-charts/stable + ``` + 注意:不支持升级到 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/current/getting-started/installation-and-upgrade/resources/custom-ca-root-certificates.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/resources/custom-ca-root-certificates.md new file mode 100644 index 00000000000..67a8d34ec80 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/resources/custom-ca-root-certificates.md @@ -0,0 +1,25 @@ +--- +title: 自定义 CA 根证书 +weight: 1 +--- + +如果你在内部生产环境使用 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 选项](../../../reference-guides/installation-references/helm-chart-options.md#额外的授信-ca) + diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/resources/helm-version-requirements.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/resources/helm-version-requirements.md new file mode 100644 index 00000000000..2df7f9d42ba --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/resources/helm-version-requirements.md @@ -0,0 +1,13 @@ +--- +title: Helm 版本要求 +weight: 3 +--- + +本文介绍 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/current/getting-started/installation-and-upgrade/resources/local-system-charts.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/resources/local-system-charts.md new file mode 100644 index 00000000000..324b64f77e3 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/resources/local-system-charts.md @@ -0,0 +1,15 @@ +--- +title: 离线安装中设置本地 System Charts +weight: 120 +--- + +[System Charts](https://github.com/rancher/system-charts) 仓库包含 Monitoring、Logging、告警和全局 DNS 等功能所需的所有应用项。 + +在 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/current/getting-started/installation-and-upgrade/resources/update-rancher-certificate.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/resources/update-rancher-certificate.md new file mode 100644 index 00000000000..da6e0b43ab5 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/resources/update-rancher-certificate.md @@ -0,0 +1,264 @@ +--- +title: 更新 Rancher 证书 +weight: 10 +--- + +# 更新私有 CA 证书 + +本文介绍如何更新 Rancher [高可用 Kubernetes 安装](../../../pages-for-subheaders/install-upgrade-on-a-kubernetes-cluster.md) 中 Ingress 的 SSL 证书,以及如何从默认的自签名证书切换到自定义证书。 + +步骤概述: + +1. 使用新证书和私钥创建或更新 `tls-rancher-ingress` Kubernetes 密文资源。 +2. 使用根 CA 证书创建或更新 `tls-ca` Kubernetes 密文资源(仅在使用私有 CA 时需要)。 +3. 使用 Helm CLI 更新 Rancher 安装。 +4. 重新配置 Rancher Agent 以信任新的 CA 证书。 +5. 选择 Fleet 集群的强制更新,来将 fleet-agent 连接到 Rancher。 + +各个步骤的详细说明如下。 + +## 1. 创建/更新证书密文资源 + +首先,将服务器证书和所有中间证书合并到名为 `tls.crt` 的文件,并在名为 `tls.key` 的文件中提供相应的证书密钥。 + +如果你想切换 Rancher 自签名证书或 Let's Encrypt 证书,请运行以下命令,在 Rancher 高可用集群中创建 `tls-rancher-ingress` 密文资源: + +``` +$ kubectl -n cattle-system create secret tls tls-rancher-ingress \ + --cert=tls.crt \ + --key=tls.key +``` + +你也可以运行以下命令,更新现有的证书密文: + +``` +$ 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 密文资源 + +如果新证书由私有 CA 签发的,你需要将相应的根 CA 证书复制到名为 `cacerts.pem` 的文件中,并创建或更新 `cattle-system` 命名空间中的 `tls-ca` 密文。如果证书由中间 CA 签名,则 `cacerts.pem` 必须按顺序同时包含中间 CA 证书和根 CA 证书。 + +创建初始密文: + +``` +$ kubectl -n cattle-system create secret generic tls-ca \ + --from-file=cacerts.pem +``` + +要更新现有的 `tls-ca` 密文: + +``` +$ kubectl -n cattle-system create secret generic tls-ca \ + --from-file=cacerts.pem \ + --dry-run --save-config -o yaml | kubectl apply -f - +``` + +## 3. 重新配置 Rancher 部署 + +:::note + +在继续之前,在 Rancher UI (用户 > API & 密钥 ) 中生成一个 API Token,并保存持有者 Token(你在步骤 4 中可能需要)。 + +::: + +只有在最初安装 Rancher 时使用了自签名证书 (`ingress.tls.source=rancher`)或 Let's Encrypt 证书(`ingress.tls.source=letsEncrypt`)时,你才需要执行此步骤。 + +这一步骤确保 Rancher Pod 和 Ingress 资源能够重新配置,来使用新的服务器和可选的 CA 证书。 + +要更新 Helm 部署,请使用初始安装时的选项(`--set`)。运行以下命令检查: + +``` +$ helm get values rancher -n cattle-system +``` + +获取当前部署的 Rancher Chart 的版本字符串: + +``` +$ helm ls -A +``` + +使用初始配置的值升级 Helm 应用实例,并指定 `ingress.tls.source=secret` 以及当前的 Chart 版本来防止应用升级。 + +如果证书是由私有 CA 签发的,你需要添加 `set privateCA=true` 参数。请确保你已经阅读了使用自定义证书进行初始安装的文档。 + +``` +helm upgrade rancher rancher-stable/rancher \ + --namespace cattle-system \ + --version \ + --set hostname=rancher.my.org \ + --set ingress.tls.source=secret \ + --set ... +``` + +升级完成后,访问 `https:///v3/settings/cacerts`,验证该值是否与先前写入 `tls-ca` 密文中的 CA 证书匹配。 + +## 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 容器中。代理会对下载证书的校验和及 `CATTLE_CA_CHECKSUM` 环境变量进行比较。如果私有 CA 证书在 Rancher Server 端更改了,环境变量 `CATTLE_CA_CHECKSUM` 必须相应进行更新。 + +### 可使用的方法 + +- 方法 1(最简单的方法): +在轮换证书后将所有集群连接到 Rancher。适用于更新 Rancher 部署(步骤 3)后立即执行的情况。 + +- 方法 2:适用于集群失去了与 Rancher 的连接,但是你已启动了[授权集群端点(ACE)](https://rancher.com/docs/rancher/v2.6/en/cluster-admin/cluster-access/ace/)的情况。 + +- 方法 3:方法 1 和方法 2 不可用的情况下可使用。 + +### 方法 1:Kubectl 命令 + +对于**集群管理**中的每个集群(除去 `local` Rancher 管理集群),使用 Rancher 管理集群(RKE 或 K3S)的 `Kubeconfig` 文件运行以下命令: + +``` +kubectl patch clusters.management.cattle.io -p '{"status":{"agentImage":"dummy"}}' --type merge +``` + +这个命令能使所有 Agent Kubernetes 资源使用新证书的校验和重新配置。 + + +### 方法 2:手动更新校验和 + +通过将 `CATTLE_CA_CHECKSUM` 环境变量更新为匹配新 CA 证书校验和的值,来手动为 Agent Kubernetes 资源打上补丁。通过以下操作生成新的校验和: + +``` +$ curl -k -s -fL /v3/settings/cacerts | jq -r .value > cacert.tmp +$ sha256sum cacert.tmp | awk '{print $1}' +``` + +为每个下游集群使用 Kubeconfig 更新两个 Agent 部署的环境变量: + +``` +$ kubectl edit -n cattle-system ds/cattle-node-agent +$ kubectl edit -n cattle-system deployment/cattle-cluster-agent +``` + +### 方法 3:重新创建 Rancher Agent + +你可以在每个下游集群的 controlplane 节点上运行一组命令,来重新创建 Rancher Agent。 + +首先,生成 Agent 定义(参见[此处](https://gist.github.com/superseb/076f20146e012f1d4e289f5bd1bd4971))。 + +然后,SSH 连接到下游集群的 controlplane 节点,创建 Kubeconfig 并应用定义(参见[此处]( +https://gist.github.com/superseb/b14ed3b5535f621ad3d2aa6a4cd6443b))。 + +## 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 存储 kubeconfig,该配置用于连接到 Fleet 系统命名空间的 fleet-agent 密文中的 Rancher 代理 kube-api。kubeconfig 包括一个包含 Rancher CA 的证书授权数据块。更改 Rancher CA 时,需要更新此块来使 fleet-agent 成功连接到 Rancher。 + +# 将私有 CA 证书更改为通用证书 + +:::note + +你可以执行与上文描述相反的操作,即将私有证书更改为通用或非私有证书。所涉及的步骤概述如下。 + +::: + +## 1. 创建/更新证书密文资源 + +首先,将服务器证书和所有中间证书合并到名为 `tls.crt` 的文件,并在名为 `tls.key` 的文件中提供相应的证书密钥。 + +如果你想切换 Rancher 自签名证书或 Let's Encrypt 证书,请运行以下命令,在 Rancher 高可用集群中创建 `tls-rancher-ingress` 密文资源: + +``` +$ kubectl -n cattle-system create secret tls tls-rancher-ingress \ + --cert=tls.crt \ + --key=tls.key +``` + +你也可以运行以下命令,更新现有的证书密文: + +``` +$ 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 证书密文资源 + +你需要删除 `cattle-system` 命名空间中的 `tls-ca secret`(不再需要它)。如果需要,你还可以选择保存 `tls-ca secret` 的副本。 + +要保存现有密文: + +``` +kubectl -n cattle-system get secret tls-ca -o yaml > tls-ca.yaml +``` + +要删除现有的 `tls-ca` 密文: + +``` +kubectl -n cattle-system delete secret tls-ca +``` + +## 3. 重新配置 Rancher 部署 + +:::note 重要提示: + +在继续之前,先[在 Rancher UI 中生成 API 令牌](../../../reference-guides/user-settings/api-keys.md#创建-api-密钥)(在 User > API & Keys 中)。 + +::: + +只有在最初安装 Rancher 时使用了自签名证书 (`ingress.tls.source=rancher`)或 Let's Encrypt 证书(`ingress.tls.source=letsEncrypt`)时,你才需要执行此步骤。 + +这一步骤确保 Rancher Pod 和 Ingress 资源能够重新配置,来使用新的服务器和可选的 CA 证书。 + +要更新 Helm 部署,请使用初始安装时的选项(`--set`)。运行以下命令检查: + +``` +$ helm get values rancher -n cattle-system +``` + +获取当前部署的 Rancher Chart 的版本字符串: + +``` +$ helm ls -A +``` + +使用初始配置的值升级 Helm 应用程序实例,并指定当前的 Chart 版本以防止应用程序升级。 + +请确保你已经阅读了使用自定义证书进行初始安装的文档。 + +``` +helm upgrade rancher rancher-stable/rancher \ + --namespace cattle-system \ + --version \ + --set hostname=rancher.my.org \ + --set ... +``` + +升级时,你可以执行以下其中一个操作: + +- 从 Helm 升级命令中删除 `--set ingress.tls.source=secret \`,如上所示。 + +- 删除 `privateCA` 参数或将其设置为 `false` (因为 CA 有效): + +``` +set privateCA=false +``` + +## 4. 为非私有/通用证书重新配置 Rancher Agent + +下游集群 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 存储 kubeconfig,该配置用于连接到 Fleet 系统命名空间的 fleet-agent 密文中的 Rancher 代理 kube-api。kubeconfig 包括一个包含 Rancher CA 的证书授权数据块。更改 Rancher CA 时,需要更新此块来使 fleet-agent 成功连接到 Rancher。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/resources/upgrade-cert-manager.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/resources/upgrade-cert-manager.md new file mode 100644 index 00000000000..874fed623ad --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/resources/upgrade-cert-manager.md @@ -0,0 +1,283 @@ +--- +title: 升级 Cert-Manager +weight: 4 +--- + +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:升级-1.5-及以下版本的-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 v0.12.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 v0.12.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/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 变更和数据迁移 + +--- +_v2.6.4 的新功能_ + +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/current/getting-started/installation-and-upgrade/upgrade-and-roll-back-kubernetes.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/upgrade-and-roll-back-kubernetes.md new file mode 100644 index 00000000000..6677c6cd667 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/upgrade-and-roll-back-kubernetes.md @@ -0,0 +1,126 @@ +--- +title: 升级和回滚 Kubernetes +weight: 70 +--- + +升级到最新版本的 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 启动的 RKE 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#注册-k3s-集群的其他功能)。 +- 在升级 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/advanced-user-guides/manage-clusters/nodes-and-node-pools.md#激进和安全的清空选项)。 +1. (可选)配置宽限期。宽限期是给每个 pod 进行清理的超时时间,能让 pod 有机会优雅地退出。Pod 可能需要完成任何未完成的请求、回滚事务或将状态保存到某些外部存储。如果该值为负数,将使用 pod 中指定的默认值。 +1. (可选)配置超时,这是在清空放弃之前应该继续等待的时间。 +1. 单击**保存**。 + +**结果**:集群更新为使用新的升级策略。 + +:::note + +从 Rancher v2.4.0 开始出现了一个[已知问题](https://github.com/rancher/rancher/issues/25478),即使 etcd 和 controlplane 正在被清空, Rancher UI 不会将它们的状态显示为已清空。 + +::: + +### 在升级期间维护应用的可用性 + +_从 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/current/getting-started/installation-and-upgrade/upgrade-kubernetes-without-upgrading-rancher.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/upgrade-kubernetes-without-upgrading-rancher.md new file mode 100644 index 00000000000..c29278e679f --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/upgrade-kubernetes-without-upgrading-rancher.md @@ -0,0 +1,89 @@ +--- +title: 在不升级 Rancher 的情况下升级 Kubernetes +weight: 30 +--- + +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/advanced-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 系统镜像并为镜像准备私有 Docker 镜像仓库。 + +1. 要把系统镜像下载到私有镜像仓库,请单击 Rancher UI 左下角的 Rancher Server 版本。 +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/current/getting-started/introduction/overview.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/introduction/overview.md new file mode 100644 index 00000000000..e05fd02b473 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/introduction/overview.md @@ -0,0 +1,66 @@ +--- +title: 概述 +weight: 1 +--- + +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 管理员负责查看并管理用户、集群、云服务的权限。 + +![平台](/img/platform.png) + +# Rancher API Server 的功能 + +Rancher API Server 是基于嵌入式 Kubernetes API Server 和 etcd 数据库建立的,它提供了以下功能: + +### 授权和基于角色的权限控制(RBAC) + +- **用户管理**:Rancher API Server 除了管理本地用户,还[管理用户用来访问外部服务所需的认证信息](../../pages-for-subheaders/about-authentication.md),如登录 Active Directory 和 GitHub 所需的账号密码。 +- **授权**:Rancher API Server 可以管理[访问控制策略](../../pages-for-subheaders/manage-role-based-access-control-rbac.md)和[安全策略](../../how-to-guides/advanced-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)的功能。 +- **流水线**:[流水线](../../how-to-guides/advanced-user-guides/manage-projects/ci-cd-pipelines.md)可以帮助开发者快速高效地上线新软件。Rancher 支持给每个项目单独设置流水线。 +- **Istio**:[Rancher 与 Istio 集成](../../pages-for-subheaders/istio.md),使得管理员或集群所有者可以将 Istio 交给开发者,然后开发者使用 Istio 执行安全策略,排查问题,或为蓝绿部署,金丝雀部署,和 A/B 测试进行流量管理。 + +### 配置云基础设施 + +- **同步节点信息**:Rancher API Server 可以同步所有集群中全部[节点](../../how-to-guides/advanced-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 创建集群后,集群管理员可以管理集群成员,开启 Pod 安全策略,管理节点池,以及进行[其他操作](../../pages-for-subheaders/cluster-configuration.md)。 + +下表总结了每一种类型的集群和对应的可编辑的选项和设置: + +import ClusterCapabilitiesTable from '../../shared-files/_cluster-capabilities-table.md'; + + diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/introduction/what-are-divio-docs.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/introduction/what-are-divio-docs.md new file mode 100644 index 00000000000..1cac0629c02 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/introduction/what-are-divio-docs.md @@ -0,0 +1,100 @@ +--- +title: Divio 文档介绍 +--- + +[Divio 文档系统](https://documentation.divio.com/)是一种软件文档范式,它以功能为基础,旨在为用户提供具体、简明而且目的明确的文档。一般来说,Divio 由四个类别组成,分别是教程、操作指南、参考指南和解释。 + +我们将文档划分为以下章节: + + +## 开始使用 + +**开始使用**章节能帮助你快速启动和运行 Rancher。 + +本章节旨在帮助用户部署 Rancher 和工作负载,并快速有效地安装或升级 Rancher。 + +请参阅[简介](../../pages-for-subheaders/introduction.md)、[快速入门指南](../../pages-for-subheaders/quick-start-guides.md)以及[安装和升级](../../pages-for-subheaders/installation-and-upgrade.md)部分了解更多信息。 + +## 操作指南 + +操作指南描述了用户完成某些任务的实际步骤。在 Rancher 中,我们将操作指南进一步细分为[新用户指南](#新用户指南)和[高级用户指南](#高级用户指南)。 + +### 新用户指南 + +新用户指南(也称为教程)描述了某些操作的实际步骤。这些文档是“学习导向”的,也就是说用户通过“操作”来学习。 + +新用户指南旨在引导初学者或 Rancher 的日常用户通过一系列步骤来学习如何进行某些操作。这些文档旨在帮助用户通过使用易于遵循、有意义且可重复的操作来了解如何完成任务。这些指南将帮助用户完成工作,并能立刻看到效果。 + +正常来说,普通 Rancher 用户的技术水平高于“初学者”,但是,我们的新用户指南为初学者以及经验丰富的 Rancher 用户提供相同的指导。我们结合使用了高级语言和技术语言来介绍各个主题,并指导用户完成 Rancher 用户需要了解的通用任务。 + +你可以在[此处](../../how-to-guides/new-user-guides/kubernetes-resources-setup/workloads-and-pods/deploy-workloads.md)找到新用户指南的一个示例。 + +### 高级用户指南 + +高级用户指南是“问题导向”的文档,用户可以从中学习如何解决问题。高级用于指南与新用户指南的主要区别在于,高级用户指南面向更有经验或更高级的用户,这些用户对文档有更多的技术需求,而且已经了解 Rancher 及其功能。他们知道自己需要做什么,只是需要额外的指导来完成更复杂的任务。 + +应该注意的是,新用户指南和高级用户指南都没有提供详细的解释或讨论(这些文档不包括在本部分)。操作指南侧重于引导用户通过可重复、有效的步骤来学习新技能、掌握某些操作或解决某些问题。 + +你可以在[此处](../../how-to-guides/advanced-user-guides/manage-clusters/create-kubernetes-persistent-storage/manage-persistent-storage/dynamically-provision-new-storage.md)找到高级用户指南的一个示例。 + +## 参考指南 + +参考指南是用户可以学习的产品或流程描述。参考指南是“信息导向”的,主要用于描述。 + +本章节的文档可能包含一些操作步骤,但是描述操作步骤不是本章节的主要目的。 + +使用参考指南的用户熟悉且了解如何使用 Rancher。当用户需要参考具体使用细节时,用户可以获取更详细的使用描述。 + +Rancher 参考指南示例: +1. [Rancher Manager 架构](../../pages-for-subheaders/rancher-manager-architecture.md) +2. [集群配置指南](../../pages-for-subheaders/cluster-configuration.md) + +## 说明 + +说明文档主要用于为某个任务或主题背后的“原因”提供理论知识。说明文档是“理解导向”的,用于拓宽用户的知识。在本节中,用户可以找到有关主题的上下文和背景、替代方案和意见等,还可能找到历史原因、相关限制以及流程的工作原理。 + +说明文档不会像操作指南那样指导用户进行操作,也不会像参考文档那样给出详细的描述。说明文档用于提供简单和复杂主题的实质和背景。 + +由于我们以前的大多数文档都不是"以讨论为导向"的,因此我们的新文档会增加这一部分内容。目前,我们以[Rancher 中的集成](../../pages-for-subheaders/integrations-in-rancher.md)来讨论我们的集成产品。 + +### Rancher 中的集成 + +Rancher 已经积累了多个产品和项目,而且已将它们集成到 Rancher UI 中。为了帮助用户了解这些集成,我们已将此小节添加到**说明**下。 + +集成示例:[Harvester](../../explanations/integrations-in-rancher/harvester.md) 和 [NeuVector](../../explanations/integrations-in-rancher/neuvector.md) + +## 其他文档类别 + +### 常见问题 + +[常见问题](../../faq.md)包含了用户常见的 Rancher v2.x 问题。这些问题可能是技术性的或非技术性的。 + +我们会不断补充和优化这一部分,你可以常来浏览更新的内容。 + +### 故障排除 + +[故障排除](../../troubleshooting.md)旨在帮助新老 Rancher 用户解决他们在使用 Rancher 时可能遇到的已知问题。 + +我们会不断补充和优化这一部分,你可以常来浏览更新的内容。 + +### 参与 Rancher 社区贡献 + +为了提高文档的质量,我们一直在更新、检查和改进 Rancher Manager 文档。同时,我们也呼吁社区用户参与贡献。 + +你可以查阅[参与 Rancher 社区贡献](../../contribute-to-rancher.md)章节,了解 Rancher 使用的仓库,以及学习如何构建仓库、提交 issue 或创建 PR。 + +我们会经常 review 用户的贡献,并将及时向贡献者提供反馈。 + +## 重叠类别 + +你可能会发现,各个文档类别(新用户指南、高级用户指南、参考资料)存在一些重叠。这是因为信息流是流动的,因此通常情况下,某些文档在逻辑上可能属于多个类别。虽然我们的文档有一些重叠,但如果我们记住每个类别的主要功能并努力区分它们,那么文档将更加清晰可用。 + +## 新结构目标 + +旧版 Rancher 文档侧重于单个功能和主题,而新的 Divio 范式则优先考虑功能和及其内在联系。 + +我们旧版的文档结构没有采用 Divio 范式(例如,并非每个文档都可以合理地放入用户指南或参考文献中)。某些文档可能包含多个文档功能的内容。 + +因此,我们一直在努力把现有的文档转移到基于文档功能的新结构。未来,我们将根据需要创建、重写和重塑我们的文档,使我们的文档更加符合 Divio 结构、目的及其设计概念。 + +最终,我们的文档将强调单个主题或功能,从而更加有效地帮助我们的用户。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/quick-start-guides/deploy-rancher-manager/aws-marketplace.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/quick-start-guides/deploy-rancher-manager/aws-marketplace.md new file mode 100644 index 00000000000..4e452a89f0b --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/quick-start-guides/deploy-rancher-manager/aws-marketplace.md @@ -0,0 +1,7 @@ +--- +title: Rancher AWS Marketplace 快速入门 +description: 使用 Amazon EKS 部署 Rancher Server。 +weight: 110 +--- + +你可以在 AWS 中使用 Amazon EKS 部署 Rancher Server。详情请参见我们的 [Amazon Marketplace 列表](https://aws.amazon.com/marketplace/pp/prodview-2yzbnvagmi4as)。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/quick-start-guides/deploy-rancher-manager/aws.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/quick-start-guides/deploy-rancher-manager/aws.md new file mode 100644 index 00000000000..7156ccd3803 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/quick-start-guides/deploy-rancher-manager/aws.md @@ -0,0 +1,95 @@ +--- +title: Rancher AWS 快速入门指南 +description: 阅读此分步 Rancher AWS 指南,以快速部署带有单节点下游 Kubernetes 集群的 Rancher Server。 +weight: 100 +--- +你可以参考以下步骤,在 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 账号的密码 + +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/current/getting-started/quick-start-guides/deploy-rancher-manager/azure.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/quick-start-guides/deploy-rancher-manager/azure.md new file mode 100644 index 00000000000..e8c031f34d2 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/quick-start-guides/deploy-rancher-manager/azure.md @@ -0,0 +1,82 @@ +--- +title: Rancher Azure 快速入门指南 +description: 阅读此分步 Rancher Azure 指南,以快速部署带有单节点下游 Kubernetes 集群的 Rancher Server。 +weight: 115 +--- + +你可以参考以下步骤,在 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 账号的密码 + +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/current/getting-started/quick-start-guides/deploy-rancher-manager/digitalocean.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/quick-start-guides/deploy-rancher-manager/digitalocean.md new file mode 100644 index 00000000000..91c4cf47dc5 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/quick-start-guides/deploy-rancher-manager/digitalocean.md @@ -0,0 +1,74 @@ +--- +title: Rancher DigitalOcean 快速入门指南 +description: 阅读此分步 Rancher DigitalOcean 指南,以快速部署带有单节点下游 Kubernetes 集群的 Rancher Server。 +weight: 120 +--- +你可以参考以下步骤,在 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 账号的密码 + +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/current/getting-started/quick-start-guides/deploy-rancher-manager/equinix-metal.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/quick-start-guides/deploy-rancher-manager/equinix-metal.md new file mode 100644 index 00000000000..7b6a4e4408c --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/quick-start-guides/deploy-rancher-manager/equinix-metal.md @@ -0,0 +1,118 @@ +--- +title: Rancher Equinix Metal 快速入门 +weight: 250 +--- + +## 本章节引导你: + +- 配置 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 控制台,API 或 CLI 来配置 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. 在**集群**页面,点击**创建**。 +2. 选择**自定义**。 + +3. 输入**集群名称**。 + +4. 跳过**成员角色**和**集群选项**。此部分我们稍后会详细介绍。 + +5. 点击**下一步**。 + +6. 在**节点角色**中,选择 _全部_ 角色,即 **etcd**,**Control** 和 **Worker**。 + +7. **可选**:Rancher 会自动检测用于 Rancher 通信和集群通信的 IP 地址。你可以使用**节点地址**处的`公有地址`和`内网地址`进行覆盖。 + +8. 跳过**标签**部分的内容。这部分内容暂时不重要。 + +9. 将屏幕上显示的命令复制到剪贴板。 + +10. 使用你惯用的 shell(例如 PuTTy 或远程终端)登录到你的 Linux 主机。粘贴剪贴板的命令并运行。 + +11. 在 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/current/getting-started/quick-start-guides/deploy-rancher-manager/gcp.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/quick-start-guides/deploy-rancher-manager/gcp.md new file mode 100644 index 00000000000..aa3b27fcd0a --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/quick-start-guides/deploy-rancher-manager/gcp.md @@ -0,0 +1,77 @@ +--- +title: Rancher GCP 快速入门指南 +description: 阅读此分步 Rancher GCP 指南,以快速部署带有单节点下游 Kubernetes 集群的 Rancher Server。 +weight: 130 +--- +你可以参考以下步骤,在 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 账号的密码 + +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/current/getting-started/quick-start-guides/deploy-rancher-manager/helm-cli.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/quick-start-guides/deploy-rancher-manager/helm-cli.md new file mode 100644 index 00000000000..35ec253ced5 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/quick-start-guides/deploy-rancher-manager/helm-cli.md @@ -0,0 +1,145 @@ +--- +title: Helm CLI 快速入门 +weight: 300 +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +本文提供了快速安装 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 + +在 Linux 主机上运行以下命令来安装 K3s 集群: + +``` +curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION="***" sh -s - server --cluster-init +``` + +Rancher 需要安装在支持的 Kubernetes 版本上。如需指定 K3s 版本,在运行 K3s 安装脚本时,使用 `INSTALL_K3S_VERSION` 环境变量。请参阅[支持维护条款](https://rancher.com/support-maintenance-terms/)。 + +`--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 +``` + + + + +默认情况下不能识别“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/): + +``` +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.7.1/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.7.1 + +# Windows Powershell +helm install cert-manager jetstack/cert-manager ` + --namespace cert-manager ` + --create-namespace ` + --version v1.7.1 +``` + +安装 Rancher 的最终命令如下。该命令需要一个将流量转发到 Linux 主机的域名。为了简化本教程,你可以使用假域名。`.sslip.io` 是一个假域名的例子。 + +要安装特定的 Rancher 版本,请使用 `--version` 标志(例如,`--version 2.6.6`)。否则,默认安装最新的 Rancher。请参阅[选择 Rancher 版本](../../installation-and-upgrade/resources/choose-a-rancher-version.md)。 + +``` +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/current/getting-started/quick-start-guides/deploy-rancher-manager/hetzner-cloud.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/quick-start-guides/deploy-rancher-manager/hetzner-cloud.md new file mode 100644 index 00000000000..18f138fd1e5 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/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。 +weight: 140 +--- +你可以参考以下步骤,在 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 账号的密码 + +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/current/getting-started/quick-start-guides/deploy-rancher-manager/outscale-qs.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/quick-start-guides/deploy-rancher-manager/outscale-qs.md new file mode 100644 index 00000000000..178d1ab9d43 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/quick-start-guides/deploy-rancher-manager/outscale-qs.md @@ -0,0 +1,76 @@ +--- +title: Rancher Outscale 快速入门指南 +description: 阅读此分步 Rancher Outscale 指南,以快速部署带有单节点下游 Kubernetes 集群的 Rancher Server。 +weight: 140 +--- +你可以参考以下步骤,在 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 账号的密码 + +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/current/getting-started/quick-start-guides/deploy-rancher-manager/vagrant.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/quick-start-guides/deploy-rancher-manager/vagrant.md new file mode 100644 index 00000000000..8919bf0c350 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/quick-start-guides/deploy-rancher-manager/vagrant.md @@ -0,0 +1,51 @@ +--- +title: Vagrant 快速入门 +weight: 200 +--- +你可以参考以下步骤快速部署 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/current/getting-started/quick-start-guides/deploy-workloads/nodeports.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/quick-start-guides/deploy-workloads/nodeports.md new file mode 100644 index 00000000000..efa6f04fac8 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/quick-start-guides/deploy-workloads/nodeports.md @@ -0,0 +1,139 @@ +--- +title: 部署带有 NodePort 的工作负载 +weight: 200 +--- + +### 先决条件 + +你已有一个正在运行的集群,且该集群中有至少一个节点。 + +### 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**。 + + ![NodePort 下拉菜单(在每个所选节点处)](/img/nodeport-dropdown.png) + +1. 在**发布容器端口**字段中,输入端口`80`。 + + ![发布容器端口,端口 80 已输入](/img/container-port-field.png) + +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
+ +
+
+ + +
+ + +
+ + + +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/current/getting-started/quick-start-guides/deploy-workloads/workload-ingress.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/quick-start-guides/deploy-workloads/workload-ingress.md new file mode 100644 index 00000000000..b29f0e5bb34 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/quick-start-guides/deploy-workloads/workload-ingress.md @@ -0,0 +1,73 @@ +--- +title: 部署带有 Ingress 的工作负载 +weight: 100 +--- + +### 先决条件 + +你已有一个正在运行的集群,且该集群中有至少一个节点。 + +### 1. 部署工作负载 + +你可以开始创建你的第一个 Kubernetes [工作负载](https://kubernetes.io/docs/concepts/workloads/)。工作负载是一个对象,其中包含 pod 以及部署应用所需的其他文件和信息。 + +在本文的工作负载中,你将部署一个 Rancher Hello-World 应用。 + +1. 点击 **☰ > 集群管理**。 +1. 选择你创建的集群,并点击 **Explore**。 +1. 点击**工作负载**。 +1. 单击**创建**。 +1. 点击 **Deployment**。 +1. 为工作负载设置**名称**。 +1. 在 **Docker 镜像**字段中,输入 `rancher/hello-world`。注意区分大小写。 +1. 点击**添加端口**并在**私有容器端口**字段中输入`80`。通过添加端口,你可以访问集群内外的应用。详情请参见 [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/current/how-to-guides.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides.md new file mode 100644 index 00000000000..1c620fae77e --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides.md @@ -0,0 +1,5 @@ +--- +title: 操作指南 +--- + +**操作指南**描述了用户完成某些任务的实际步骤。在 Rancher 中,我们将操作指南进一步细分为[新用户指南](./pages-for-subheaders/new-user-guides.md)和[高级用户指南](./pages-for-subheaders/advanced-user-guides.md)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/configure-active-directory.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/configure-active-directory.md new file mode 100644 index 00000000000..16435de0b55 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/configure-active-directory.md @@ -0,0 +1,220 @@ +--- +title: 配置 Active Directory (AD) +weight: 1112 +--- + +如果你的组织使用 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/about-authentication.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`](http://manpages.ubuntu.com/manpages/artful/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`)的筛选器,返回所述用户的属性: + +![](/img/ldapsearch-user.png) + +因为在这种情况下,用户的 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" +``` + +此命令将告知我们用于组对象的属性: + +![](/img/ldapsearch-group.png) + +同样,这能让我们确定要在组 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/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/configure-azure-ad.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/configure-azure-ad.md new file mode 100644 index 00000000000..f13752d7a7e --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/configure-azure-ad.md @@ -0,0 +1,316 @@ +--- +title: 配置 Azure AD +weight: 1115 +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + + + + +## Microsoft Graph API + +Microsoft Graph API 现在是设置 Azure AD 的流程。下文将帮助[新用户](#新用户设置)使用新实例来配置 Azure AD,并帮助现有 Azure 应用所有者[迁移到新流程](#从-azure-ad-graph-api-迁移到-microsoft-graph-api)。 + +### 新用户设置 + +如果你在 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 + +在开始之前,我们建议你创建一个空文本文件。你可以将 Azure 相关的值复制到该文件,然后再粘贴到 Rancher 中。 + +::: + + +#### 1. 在 Azure 注册 Rancher + +在 Rancher 中启用 Azure AD 之前,你必须先向 Azure 注册 Rancher。 + +1. 以管理用户身份登录 [Microsoft Azure](https://portal.azure.com/)。后续配置步骤中需要管理访问权限。 + +1. 使用搜索功能打开 **App registrations** 服务。 + + ![Open App Registrations](/img/search-app-registrations.png) + +1. 单击 **New registrations** 并完成 **Create** 表单。 + + ![New App Registration](/img/new-app-registration.png) + + 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 项。 + + ![Open Rancher Registration](/img/open-rancher-app-reg.png) + +1. 在左侧的导航窗格中,单击 **Certificates and Secrets**。 + +1. 单击 **New client secret**。 + ![创建新的客户端密文](/img/new-client-secret.png) +1. 输入 **Description**(例如 `Rancher`)。 +1. 从 **Expires** 下的选项中选择密钥的持续时间。此下拉菜单设置的是密钥的到期日期。日期越短则越安全,但是在到期后你需要创建新密钥。 +1. 单击 **Add**(无需输入值,保存后会自动填充)。 + + +1. 将键值复制保存到[空文本文件](#tip)。 + + 稍后你将在 Rancher UI 中输入此密钥作为你的 **Application Secret**。 + + 你将无法在 Azure UI 中再次访问该键值。 + +#### 3. 设置 Rancher 所需的权限 + +接下来,在 Azure 中为 Rancher 设置 API 权限。 + +:::caution + +请确保你设置了 Application 和 NOT Delegated 的权限类型。否则,你可能无法登录 Azure AD。禁用/重新启用 Azure AD 无法解决此问题,你需要等待一小时或手动删除缓存值。 + +::: + +1. 从左侧的导航窗格中,选择 **API permissions**。 + + ![Open Required Permissions](/img/select-req-permissions.png) + +1. 单击 **Add a permission**。 + +1. 在 **Microsoft Graph** 中,选择以下 **Application Permissions**: + - `Group.Read.All` + - `User.Read.All` + + ![选择 API 权限](/img/api-permissions.png) + +1. 返回左侧导航栏中的 **API permissions**。在那里,单击 **Grant admin consent**。然后单击 **Yes**。 + + :::note + + 你必须以 Azure 管理员身份登录才能保存你的权限设置。 + + ::: + +#### 4. 复制 Azure 应用数据 + +这是在 Azure 中执行的的最后一步。你需要复制用于配置 Rancher 以进行 Azure AD 身份验证的数据,并将其粘贴到一个空文本文件中。 + +1. 获取你的 Rancher **租户 ID**。 + + 1. 使用搜索打开 **App registrations**。 + + ![Open App Registrations](/img/search-app-registrations.png) + + 1. 找到你为 Rancher 创建的项。 + + 1. 复制 **Directory ID** 并粘贴到你的[文本文件](#tip)。 + + ![Tenant ID](/img/tenant-id.png) + + - 你将把这个值作为 **Tenant ID** 粘贴到 Rancher。 + +1. 获取你的 Rancher **Application (Client) ID**。 + + 2.1. 使用搜索打开 **App registrations**(如果还没有的话)。 + + 2.2. 在 **Overview**中,找到你为 Rancher 创建的条目。 + + 2.3. 复制 **Application (Client) ID** 并将其粘贴到你的[文本文件](#tip)。 + + ![Application ID](/img/application-client-id.png) + +1. 你的端点选项通常是 [Standard](#global) 和 [China](#china)。使用这些选项,你只需要输入 **Tenant ID**、**Application ID** 和 **Application Secret**(Rancher 将负责其余的工作)。 + +![标准端点选项](/img/tenant-application-id-secret.png) + +**对于自定义端点**: + +**警告**:Rancher 不支持也不完全测试自定义端点。 + +你还需要手动输入 Graph、Token 和 Auth Endpoints。 + +- 从 App registrations 中,点击 Endpoints: + +![点击端点](/img/endpoints.png) + +- 将以下端点复制并粘贴到你的[文本文件](#tip)中(这些值将是你的 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 中,输入托管在 Azure 中的 AD 实例的信息以完成配置。 + +输入你复制到[文本文件](#tip)的值。 + +1. 登录到 Rancher。 +1. 在左上角,单击 **☰ > 用户 & 认证**。 +1. 在左侧导航栏,单击**认证**。 +1. 单击 **AzureAD**。 +1. 使用你在[复制 Azure 应用数据](#4-复制-azure-应用数据)时复制的信息,填写**配置 Azure AD 账号**的表单。 + + 下表介绍了你在 Azure 门户中复制的值与 Rancher 中字段的映射: + + | Rancher 字段 | Azure 值 | + | ------------------ | ------------------------------------- | + | 租户 ID | Directory ID | + | Application ID | Application ID | + | 应用密文 | Key Value | + | 端点 | https://login.microsoftonline.com/ | + + +**对于自定义端点**: + +下表介绍了你在 Azure 门户中复制的自定义配置值与 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://graph.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) 已于 2022 年 6 月弃用并将于 2022 年底停用,因此用户应更新其 Azure AD 应用程序以在 Rancher 中使用新的 [Microsoft Graph API](https://docs.microsoft.com/en-us/graph/use-the-api)。 + +#### 在 Rancher UI 中更新端点 + +> **重要提示**:管理员应该在他们提交下面第 4 步中的端点迁移之前创建一个[备份](../../../../new-user-guides/backup-restore-and-disaster-recovery/back-up-rancher.md)。 + +1. 按照[此处](#3-设置-rancher-所需的权限)所述更新 Azure AD 应用注册的权限 + (**重要**)。 + +1. 登录到 Rancher。 + +1. 在 Rancher UI 主页中,记下屏幕顶部的横幅,该横幅建议用户更新 Azure AD 身份验证。单击提供的链接以执行此操作。 + + ![Rancher UI 横幅](/img/rancher-ui-azure-update.png) + +1. 要完成新的 Microsoft Graph API 迁移,请单击 **Update Endpoint**。 + + **注意**:在开始更新之前,请确保你的 Azure 应用程序具有[新的权限集](#3-设置-rancher-所需的权限)。 + + ![更新端点](/img/rancher-button-to-update.png) + +1. 在收到弹出警告消息时,单击 **Update**: + + ![Azure 更新弹出窗口](/img/azure-update-popup.png) + +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` 命名空间中。 + +1. **注意**:如果管理员使用现有 Azure AD 设置升级到 Rancher v2.6.7 并选择了禁用身份验证提供程序,他们将无法恢复以前的设置,也无法设置使用旧流程重新设置 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) 已于 2022 年 6 月弃用,并将于 2022 年底停用。我们将更新我们的文档,以便在停用时向社区提供建议。Rancher 现在使用 [Microsoft Graph API](https://docs.microsoft.com/en-us/graph/use-the-api) 来将 Azure AD 设置为外部身份验证提供程序。 +> +> +> - 对于想要迁移的新用户或现有用户,请参阅 Rancher v2.6.7 选项卡。 +> +> +> - 对于在 Azure AD Graph API 停用后不希望升级到 v2.6.7 的现有用户,他们需要: +> - 使用内置的 Rancher 身份验证,或者 +> - 使用另一个第三方身份验证系统并在 Rancher 中进行设置。请参阅[身份验证文档](../../../../../pages-for-subheaders/about-authentication.md),了解如何配置其他开放式身份验证提供程序。 + + + \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/configure-freeipa.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/configure-freeipa.md new file mode 100644 index 00000000000..40c1a826ee0 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/configure-freeipa.md @@ -0,0 +1,61 @@ +--- +title: 配置 FreeIPA +weight: 1114 +--- + +如果你的组织使用 FreeIPA 进行用户身份验证,你可以通过配置 Rancher 来允许你的用户使用 FreeIPA 凭证登录。 + +:::note 先决条件: + +- 你必须配置了 [FreeIPA 服务器](https://www.freeipa.org/)。 +- 在 FreeIPA 中创建一个具有 `read-only` 访问权限的 ServiceAccount 。当用户使用 API​​ 密钥发出请求时,Rancher 使用此账号来验证组成员身份。 +- 参见[外部身份验证配置和主体用户](../../../../../pages-for-subheaders/about-authentication.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/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/configure-github.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/configure-github.md new file mode 100644 index 00000000000..55cbd2b55ec --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/configure-github.md @@ -0,0 +1,57 @@ +--- +title: 配置 GitHub +weight: 1116 +--- + +在使用 GitHub 的环境中,你可以通过配置 Rancher 允许用户使用 GitHub 凭证登录。 + +:::note 先决条件: + +参见[外部身份验证配置和主体用户](../../../../../pages-for-subheaders/about-authentication.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/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/configure-google-oauth.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/configure-google-oauth.md new file mode 100644 index 00000000000..b3181ed8ce0 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/configure-google-oauth.md @@ -0,0 +1,112 @@ +--- +title: 配置 Google OAuth +weight: 10 +--- + +如果你的组织使用 G Suite 进行用户身份验证,你可以通过配置 Rancher 来允许你的用户使用 G Suite 凭证登录。 + +只有 G Suite 域的管理员才能访问 Admin SDK。因此,只有 G Suite 管理员可以配置 Rancher 的 Google OAuth。 + +在 Rancher 中,只有具有 **Manage Authentication** [全局角色](../../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 页面应如下图所示: +![Enable Admin APIs](/img/Google-Enable-APIs-Screen.png) + +# 在 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**。 + ![OAuth Consent Screen](/img/Google-OAuth-consent-screen-tab.png) +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)页面。 + ![Credentials](/img/Google-Credentials-tab.png) +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**。 + ![Service account creation Step 1](/img/Google-svc-acc-step1.png) +1. 不要在 **Service account permissions** 页面设置任何角色,然后单击 **Continue**。 + ![Service account creation Step 2](/img/Google-svc-acc-step2.png) +1. 点击 **Create Key** 并选择 JSON 选项。下载并保存 JSON 文件,以便你可以将其作为 ServiceAccount 凭证提供给 Rancher。 + ![Service account creation Step 3](/img/Google-svc-acc-step3-key-creation.png) + +**结果**:你的 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** 混淆。 + + ![Service account Unique ID](/img/Google-Select-UniqueID-column.png) +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](../../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/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/configure-keycloak-oidc.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/configure-keycloak-oidc.md new file mode 100644 index 00000000000..1c88364de6b --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/configure-keycloak-oidc.md @@ -0,0 +1,145 @@ +--- +title: 配置 Keycloak (OIDC) +description: 创建 Keycloak OpenID Connect (OIDC) 客户端并配置 Rancher 以使用 Keycloak。你的用户将能够使用他们的 Keycloak 登录名登录 Rancher。 +weight: 1200 +--- +如果你的组织使用 [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 客户端的领域的名称。 | +| Rancher URL | Rancher Server 的 URL。 | +| 发行者 | 你的 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 客户端配置。 + +### 生成的`发行者`和 `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/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/configure-keycloak-saml.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/configure-keycloak-saml.md new file mode 100644 index 00000000000..8714771a163 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/configure-keycloak-saml.md @@ -0,0 +1,194 @@ +--- +title: 配置 Keycloak (SAML) +description: 创建 Keycloak SAML 客户端并配置 Rancher 以使用 Keycloak。你的用户将能够使用他们的 Keycloak 登录名登录 Rancher。 +weight: 1200 +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +如果你的组织使用 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 元数据。 + + ![](/img/keycloak/keycloak-saml-client-configuration.png) + +- 在新的 SAML 客户端中,创建 Mappers 来公开用户字段。 + - 添加所有 "Builtin Protocol Mappers" + ![](/img/keycloak/keycloak-saml-client-builtin-mappers.png) + - 创建一个 "Group list" mapper,来将成员属性映射到用户的组: + ![](/img/keycloak/keycloak-saml-client-group-mapper.png) + +## 获取 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/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/configure-okta-saml.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/configure-okta-saml.md new file mode 100644 index 00000000000..ed3a598b923 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/configure-okta-saml.md @@ -0,0 +1,69 @@ +--- +title: 配置 Okta (SAML) +weight: 1210 +--- + +如果你的组织使用 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 + +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 身份提供商注意事项 + +- SAML 协议不支持搜索或查找用户或组。因此,将用户或组添加到 Rancher 时不会对其进行验证。 +- 添加用户时,必须正确输入确切的用户 ID(即 `UID` 字段)。键入用户 ID 时,将不会搜索可能匹配的其他用户 ID。 +- 添加组时,必须从文本框旁边的下拉列表中选择组。Rancher 假定来自文本框的任何输入都是用户。 +- 用户组下拉列表仅显示你所属的用户组。如果你不是某个组的成员,你将无法添加该组。 + +::: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/configure-pingidentity.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/configure-pingidentity.md new file mode 100644 index 00000000000..b33a92c22da --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/configure-pingidentity.md @@ -0,0 +1,63 @@ +--- +title: 配置 PingIdentity (SAML) +weight: 1200 +--- + +如果你的组织使用 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/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/create-local-users.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/create-local-users.md new file mode 100644 index 00000000000..7c0af974228 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/create-local-users.md @@ -0,0 +1,16 @@ +--- +title: 本地身份验证 +weight: 1111 +--- + +在配置外部验证提供程序之前,你将默认使用本地身份验证。本地身份验证指的是 Rancher 使用存储在本地的用户名和密码对用户进行验证,验证通过的用户可以登录到 Rancher。默认情况下,用于首次登录 Rancher 的 `admin` 用户就是一个本地用户。 + +## 添加本地用户 + +无论是否使用外部身份验证服务,你都应创建一些本地身份认证的用户,以便在外部验证服务遇到问题时继续使用 Rancher。 + +1. 在左上角,单击 **☰ > 用户 & 认证**。 +1. 在左侧导航栏,单击**用户**。 +1. 单击**创建**。 +1. 完成**添加用户**的表单。 +1. 单击**创建**。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/manage-users-and-groups.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/manage-users-and-groups.md new file mode 100644 index 00000000000..25c75e3509a --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/manage-users-and-groups.md @@ -0,0 +1,78 @@ +--- +title: 用户和组 +weight: 1 +--- + +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/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/configure-microsoft-ad-federation-service-saml/configure-ms-adfs-for-rancher.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/configure-microsoft-ad-federation-service-saml/configure-ms-adfs-for-rancher.md new file mode 100644 index 00000000000..814a73c736d --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/configure-microsoft-ad-federation-service-saml/configure-ms-adfs-for-rancher.md @@ -0,0 +1,83 @@ +--- +title: 1. 在 Microsoft AD FS 中配置 Rancher +weight: 1205 +--- + +在配置 Rancher 以支持 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**。 + + ![](/img/adfs/adfs-overview.png) + +1. 选择 **Enter data about the relying party manually** 作为获取信赖方数据的选项。 + + ![](/img/adfs/adfs-add-rpt-2.png) + +1. 为 **Relying Party Trust** 设置**显示名称**,例如 `Rancher`。 + + ![](/img/adfs/adfs-add-rpt-3.png) + +1. 选择 **AD FS profile** 作为信赖方信任的配置文件。 + + ![](/img/adfs/adfs-add-rpt-4.png) + +1. 留空 **optional token encryption certificate**,因为 Rancher AD FS 不会使用它。 + + ![](/img/adfs/adfs-add-rpt-5.png) + +1. 选择 **Enable support for the SAML 2.0 WebSSO protocol** 并在 Service URL 处输入 `https:///v1-saml/adfs/saml/acs`。 + + ![](/img/adfs/adfs-add-rpt-6.png) + +1. 将 `https:///v1-saml/adfs/saml/metadata` 添加为 **Relying party trust identifier**。 + + ![](/img/adfs/adfs-add-rpt-7.png) + +1. 本教程不涉及多重身份验证。如果你想配置多重身份验证,请参见 [Microsoft 文档](https://docs.microsoft.com/en-us/windows-server/identity/ad-fs/operations/configure-additional-authentication-methods-for-ad-fs)。 + + ![](/img/adfs/adfs-add-rpt-8.png) + +1. 在 **Choose Issuance Authorization RUles** 中,你可以根据用例选择任何一个可用选项。但是考虑到本指南的目的,请选择 **Permit all users to access this relying party**。 + + ![](/img/adfs/adfs-add-rpt-9.png) + +1. 检查所有设置后,选择 **Next** 来添加信赖方信任。 + + ![](/img/adfs/adfs-add-rpt-10.png) + + +1. 选择 **Open the Edit Claim Rules...**。然后单击 **Close**。 + + ![](/img/adfs/adfs-add-rpt-11.png) + +1. 在 **Issuance Transform Rules** 选项卡中,单击 **Add Rule...**。 + + ![](/img/adfs/adfs-edit-cr.png) + +1. 在 **Claim rule template** 中选择 **Send LDAP Attributes as Claims**。 + + ![](/img/adfs/adfs-add-tcr-1.png) + +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 | 名称 | +
+ ![](/img/adfs/adfs-add-tcr-2.png) + +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/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/configure-microsoft-ad-federation-service-saml/configure-rancher-for-ms-adfs.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/configure-microsoft-ad-federation-service-saml/configure-rancher-for-ms-adfs.md new file mode 100644 index 00000000000..1c4199ad282 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/configure-microsoft-ad-federation-service-saml/configure-rancher-for-ms-adfs.md @@ -0,0 +1,55 @@ +--- +title: 2. 在 Rancher 中配置 Microsoft AD FS +weight: 1205 +--- + +完成[在 Microsoft AD FS 中配置 Rancher](configure-ms-adfs-for-rancher.md) 后,将你的 AD FS 信息输入 Rancher,来允许 Rancher 通过 AD FS 进行身份验证。 + +:::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/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/configure-shibboleth-saml/about-group-permissions.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/configure-shibboleth-saml/about-group-permissions.md new file mode 100644 index 00000000000..071642340a6 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/configure-shibboleth-saml/about-group-permissions.md @@ -0,0 +1,32 @@ +--- +title: Shibboleth 和 OpenLDAP 的组权限 +weight: 1 +--- + +本文为打算在 Rancher 中设置 Shibboleth 身份验证的用户提供背景信息和上下文。 + +由于 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 会使用组数据,以便用户可以访问他所在的组有权访问的所有资源。 + +![Adding OpenLDAP Group Permissions to Rancher Resources](/img/shibboleth-with-openldap-groups.svg) + diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-provisioning-drivers/manage-cluster-drivers.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-provisioning-drivers/manage-cluster-drivers.md new file mode 100644 index 00000000000..9893fdd81fe --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-provisioning-drivers/manage-cluster-drivers.md @@ -0,0 +1,43 @@ +--- +title: 集群驱动 +weight: 1 +--- + +集群驱动用于在[托管 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/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-provisioning-drivers/manage-node-drivers.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-provisioning-drivers/manage-node-drivers.md new file mode 100644 index 00000000000..00e3d0e7838 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-provisioning-drivers/manage-node-drivers.md @@ -0,0 +1,42 @@ +--- +title: 主机驱动 +weight: 2 +--- + +主机驱动用于配置主机,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/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/access-or-share-templates.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/access-or-share-templates.md new file mode 100644 index 00000000000..82f9d261649 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/access-or-share-templates.md @@ -0,0 +1,65 @@ +--- +title: 访问和共享 +weight: 31 +--- + +如果你是 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/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/apply-templates.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/apply-templates.md new file mode 100644 index 00000000000..e4ab2c4639e --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/apply-templates.md @@ -0,0 +1,60 @@ +--- +title: 应用模板 +weight: 50 +--- + +你可以使用你自己创建的 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/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/creator-permissions.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/creator-permissions.md new file mode 100644 index 00000000000..141b8971a2e --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/creator-permissions.md @@ -0,0 +1,58 @@ +--- +title: 模板创建者权限 +weight: 10 +--- + +管理员有创建 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/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/enforce-templates.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/enforce-templates.md new file mode 100644 index 00000000000..f55edd0b50e --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/enforce-templates.md @@ -0,0 +1,44 @@ +--- +title: 强制使用模板 +weight: 32 +--- + +本节介绍模板管理员如何在 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/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/example-use-cases.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/example-use-cases.md new file mode 100644 index 00000000000..99cdf079014 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/example-use-cases.md @@ -0,0 +1,71 @@ +--- +title: 示例场景 +weight: 5 +--- + +以下示例场景描述了组织如何使用模板来标准化集群创建。 + +- **强制执行模板**:如果希望所有 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/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/infrastructure.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/infrastructure.md new file mode 100644 index 00000000000..6db639911bf --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/infrastructure.md @@ -0,0 +1,70 @@ +--- +title: RKE 模板和基础设施 +weight: 90 +--- + +在 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/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/manage-rke1-templates.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/manage-rke1-templates.md new file mode 100644 index 00000000000..7055527c31c --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/manage-rke1-templates.md @@ -0,0 +1,162 @@ +--- +title: 创建和修改 RKE 模板 +weight: 32 +--- + +本节介绍如何管理 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 模板,并且将集群绑定到该模板。然后,只有[更新了模板](manage-rke1-templates.md#更新模板)并且集群升级到**使用更新版本的模板**时,集群才能改变。 + +要将现有集群转换为使用 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/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/override-template-settings.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/override-template-settings.md new file mode 100644 index 00000000000..f5c90981e80 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/override-template-settings.md @@ -0,0 +1,15 @@ +--- +title: 覆盖模板设置 +weight: 33 +--- + +用户创建 RKE 模板时,模板中的每个设置在 Rancher UI 中都有一个开关,指示用户是否可以覆盖该设置。此开关将这些设置标记为**允许用户覆盖**。打开开关表示用户可以修改对应的参数,关闭开关表示用户无权修改对应的参数。 + +使用模板创建集群后,除非模板所有者将设置标记为**允许用户覆盖**,否则最终用户无法更新模板中定义的任何设置。但是,如果模板[更新到新修订版](manage-rke1-templates.md),且该修订版更改了设置或允许最终用户更改设置,则集群可以升级到模板的新修订版,并且新修订版中的更改将应用于集群。 + +如果 RKE 模板上的任何参数设置为**允许用户覆盖**,最终用户必须在集群创建期间设置这些字段,然后他们可以随时编辑这些设置。 + +RKE 模板的**允许用户覆盖**选项的适用场景如下: + +- 管理员认为某些参数需要保持灵活性,以便随时更新。 +- 最终用户将需要输入他们自己的访问密钥或密文密钥,例如,云凭证或备份快照的凭证。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/create-pod-security-policies.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/create-pod-security-policies.md new file mode 100644 index 00000000000..6a767abc6f0 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/create-pod-security-policies.md @@ -0,0 +1,69 @@ +--- +title: Pod 安全策略 +weight: 60 +--- + +_Pod 安全策略(PSP)_ 是用来控制安全敏感相关 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 部署到集群或项目中,它没有任何限制。 + +## 创建 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/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/custom-branding.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/custom-branding.md new file mode 100644 index 00000000000..bdad8b7643a --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/custom-branding.md @@ -0,0 +1,215 @@ +--- +title: 定制品牌 +weight: 90 +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +Rancher 2.6 开始支持自定义 Rancher 的品牌和导航链接。 + +## 更改品牌设置 + +:::note 先决条件: + +你至少需要拥有集群成员权限。 + +::: + +要配置品牌设置: + +1. 单击**☰ > 全局设置**。 +2. 单击**公司品牌**。 + +## 品牌配置 + +### 自有品牌公司名称 + +此选项将大多数出现的 “Rancher” 替换为你提供的值。名称中需要包含 Rancher 的文件,例如 “rancher-compose.yml”,不会被更改。 + +### 支持链接 + +使用 URL 地址发送新的`提交问题`报告,而不是让用户发送到 GitHub Issue 页面。可选择显示 Rancher 社区支持链接。 + +### Logo + +上传深色和浅色的 Logo 来替换顶层导航标题中的 Rancher logo。 + +### 主颜色 + +使用自定义颜色替换整个 UI 中使用的主颜色。 + +### 固定横幅 + + + + +在页眉、页脚或两者中显示自定义固定横幅。 + + + + +在页眉、页脚或两者中显示自定义固定横幅。 + +从 Rancher v2.6.4 开始,固定横幅的配置已从**公司品牌**选项卡移动到**横幅**选项卡。 + +要配置横幅: + +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` + +单击时展开的一组链接的名称。 + +可选项。如果未提供,则显示为独立链接。 + +组与独立链接分开显示,如下所示: + +![Screenshot of group and standalone link](/img/grouped-vs-standalone-links.png) + +### `iconSrc` + +Base64 格式的 Logo 图标源。 + +以下是 Base64 格式的 Grafana Logo 示例: + +``` +data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAgAElEQVR4Aey9d5xkZZn3zb/P+3mffZ9nDcDAzHTuqs49PZEhCBhBJc10nO7pHKbD9PR07p5AWlEEZM2ioph3dXGNqLgCxhVBRIYRmNy5cjqnTlWdqu/7ue5zTk+DiNIsCn4suOacrjrxvq/fle/7PofX+ycDZNT/pIAUaUUmaRBKp8FMQ1L9qL6S4+VYUikIeuBrn+LppiuJNG/BvHYd7HbhbXLBZ/dB8AkwFokCHsAH6Kb8IxTHJIyBHwgDMTBT6h7yWAmb1L3sxyEjfxkYxDDQMa0nWV0vyE2slwZ5JtUO8v5JUhgk0EkRw5TnUg9sgJm03lsezkyTIU0C2VrNJU2WsdtTPVQyAmYU4mGIhDESaULAcSG5RjwJEQ8YsxgEOZoOcSxjvXsyKM8nL24QJ4UmF5TnlL7IWLure/G/3lnn/PVu9SrdaQVApO3/CCAZAYjNSLIVBrD/VMwSnsf4/B38ofWthFu3krhhPZmaLJZuyEY7vJPIV++AwEnImJwJ66qTFcMLSswkGWKkiKqtMIICwB890zL/2lwoHGLYnCIMtMqP3Md5N7mMDRDTBkhKAURAqNBs3TOdspjWERgrmkYuJbQMEPUeKdAEIBrIuSIKEiZ+B0ShADz7W/Tjv8TMLOIjybxcJwNJOUgAkjHQSFoAkedMWn2g7rXKV/9rnfZ3DRCRjgoN0ik2A0nDLgMkbYD3aU7dPcRT7ZfhadmEVldA/IZ1RN6TRahxO8f37CTyxU/B4pySvOlYHNM0sZhQRKgwTRrRWALOZc0lWksoY30n0lPkuMBCPYCcKn/Ic632Iy/ivNvy+4k2EOAamDbJ/rIKFYEhx74AWPIWcpRhv8dyu5mQTEEkmUYTjSsaMBWDiA9mjsF/foWTH76Z33zqEL6jD5IgRkTeR64valfOQQSL6My0Ap/c32qvlNJgq339v8Z5fzcAkcayBKrFkNIBCiDOD/Lj8jG2iZWOwvGHefxQNY+3beHk7grCDS7067JhRwn6dZX4d72L3zVei/6Vz0HYB/EQJINKawRTQXVP+UfYQEjdRphITBlTNIrFqBopIsqcsZnaQYww0iv5yA1XkuJ+eRJREStJvrMFhnO8A5S09ewCDoMkCQUw67KxOMQMCBkpkok4JIIQnYGf3k/s7mlO7N3Fw7VX8J2Ot3Pi/rvBXMLMJKxbx+UR5L4CEJ0IKYUbeV0xAUXDZVSrvZIGeHXPff0DRDGE9PRZPhGec8jhBWcr30uXCWEG4Xf/wW+H38ajXVUcaS7GX+dGvyYX6jeQvL6MZO1lzFx7Mc81XkPyM3eC/xlIz5LJzBIz/bbUtUyKZaksUtPUIS06wzK/LGluM6jwrVg9wkCvECDOe51lE2kL5w2drdU+Ths5bSBbMacsVMtGtKDFug5+5Q00Iw2JFOhhmD0C3/goS6M1HKvfiqfxMo7t3MLv2i7F97nDoJ+BpG45IXLysgYRgIhvJPeRu4QVibZ7LX/+rgDiNLTT58IADjM4rPI8HyXpgYc+yXODF3G0ZyPPtZSxUFeM/9p8MrUVJK4rIX5NMfEdm1jauZ1j7Vfj/exNcPoRSB2HxIICiHI+Hb4U00mYSWkP4RAhHTKiUexggfCEPJDiUOepX/5W3tN5R9m3PpZZJ6bdWbJ+kWPkto51JyaVxbBnpYtcT35XwFDXt8Ee8cJ//wj9X6c40fF2TtZU4qspJV5bidawCU/HxWgfHoTwccuhl4srE0saRnwQwwaIZQKa+BH6B0CcfnvVttIBK8jmFId5zjKEmA+WhJTIkeoYYxY+t5/FtmJ8zeUEWzdypqmM07VFhGpK0W9wYVyXh15dQLxnG/NdF/NE00V4PzgAv/0OLB5RbyWKQD2CML5wV1KMbIlmCSgkapQEkcLCNPJ72mJAsdXl+Vb7cRh+mcnlQvKl0IomUfs2mOT28rwCaiErgiW+hXWOaBSnzRSw4/Mw/wR87zN4xht55vqNzNxQQXj3VoyWzRjX5ZPcWUigrozozU0QeMbSNAnIyA0EcaQRE1N8EPWn0hoSDxSSRnntfl73GkTMAsvXsDnCYZAXMERc2dei2i0HVnWMdpro4etYuv58orUujLatLLZsZKapkqXaYqINRZi7XWQ63ASacwh2lhPtvZwjdVs4M94ETz4M8ajFjI5TLlsJLavwsu0GCA84JpX4uEAAVHBYGHa1H3lVuZaQxXgvAIh86QDFDqu+ECDSIstS3AGWnCdmUnwRjv4Y/XMHON51OSerSwjv2kCqdRta81ZiDZWwqwjq8onWFKIfrIPQs5CIKl/ekJvZDyagFJJbWKFuiQFLePwfJtZq+//PnieNLc64lUuwTYoXMITwZowMgbSu3EIjE8NMiKMdhmd/zlzrRjJ12UQb3IQaKojUbiRUW8VSQynzjQV4mtfjbz6fSNN5hBvXsrjbzXzTZjz1V/Bs0/Xw0A9g7qRy3E3DRzARUJpKni0ZSljpEUkcCEBsQR3BYIEIC2mxw+WBV/dx3v950TP5UshpBxskqURG+cvCjtImwqyyDYZ9pDPiMKfR4hHQY5aJdPIIPPg1jrS/nZndW/E0lRJodBHY5SbYUEq4biOx2goi16+D1iLCO/PwDL0HfvdD5X9JFNwXP+vjyL2UMJDnUs8kRpzkjv4BkNX1/l9wlmiOhHL4RIbaDrA0vs0UwifSMVEkuSWJsyTxRACMIKSi8Nj3WWyphLr16PWFaPVlGDs3ou2swldXpgCy0LoWT+t5RJreqEASaMpRDGLs2E6w+u2c7mkgcM/t8IdHID2PSZAQUaJmSrkAypgXXrClaTIj5kZcRXXiKlH4ygAibXA2Yme3wUqAJDMWWDJgGEmiWgzDFL1hCRcjHkWP+kgaPkgHQUyqIz8l+fHDzLa/i0DdVrTaUmL1LsINBTZIignXVRCpK8W3cx3Jdjehnfl4970bHnsA0rpi/QWxLqUf7SiZ2pd/BBPio0kQQyVO/4LO/hsd8ro2sYQxRPYJSJSZJYwhHSBkWoJUABJRqTLRM0m08KKlPYwgiR99kZOdlRi71pOuKSS90wJIrLqK2M4yZTaEGy0N4ml9M96W89Hqs0lVu0nt2Ii+YztPv8XF8ZZ3EPrkAfj9dyF50gaJhscwEP5U0twGrZlKkEhKwDNkZ7gV27yC7ndUxYtfwkymMZMp5L7KF0pJNj2OmYiR0MMkRWsIoyY8MPsYia/fyZmxGzjdsInAjjKM6nIS1aUKJOH6UgK7LAo2FBPc5WKh9kJiYoJWF7I08G5SP7sfMrryLuZsYCjZJYlFp39EWKhIn4TBVy8gXvyN/2e/fd0DREoY4sqvsEo8lHQSCSV8Z5c8RDJJxAeRUKvmm4FEGDQ/S1+6k2NdG4g1ZWPWFJLZWUZi5wbiOypJXF9GfIcbrT6HYNNaPC0X4G2+AF0BxEVqZ7k6NvRuN96dGzjR+VZOva+LyMNfgOizYrwQJkIkY1qmhcMcSZGccTJmCF0XJ/UVAESuuRytOssY8rWjSGVf12MYsbDKyYh0z4SXyIQWIB60hIU2D7/6FjN37uVo56XMNpQSqXdj1LpIVBdj1JSi1WwgUrtBaQ4xscTc8u7O40z9hYTa3UR2uvD2vpPIA/dBJooXmLOfQwkIx7SS13X6RwIY/wDI2Y77n94TDWKVMCQtP0Q6QRpfJJRsJXyfgWhaoCFaJk5SACKM4ZnlxIemOd2+mWhTnvJB4nUlmDsqMK8vVwDRdxYr0yLSkEekIYfwrhyCjXkqmajVFlvMc0M++k43vh2lnKzfxqmpRrRvfRwWHlPVW7G0D40YyaSBGRVJLV66xSWmZPIV96yyZRQSnIy9JRDkK7m6NIES1CIYMgkykv0W3yvug+giaB7LnDrxK1LfvYeT040cqdvEUm0JdFRhtpbhr84mXF9MuL4crWYjevVG9JoKYhIKbypgsTmH0w3rCLcWkbjBTbD9SrxfuxvSfnyYLDmvpQIXKzSpoFceVJlX/9AgTjP9j2/FsYyRVKQcdWlr4QrHIzQhYUIsbSq7Py2Z8/CC0h4cO8rRw3uZb9mKvstFZJdoixISO8tJ3lCuTKxItUjSYiVNtTqXAotyVBtd6ju91gWNLpI7skheV4BevYHFhks4PnA9S/feQup3D4B+0o7WxIjrYUxdEogWs4j584o+DkCk3kku9YJIlTjikZROUsIGKfEvvJDyg+EB3wkSj3yD2dt7OTnwdk7UbySwq4pE0wYiNYUEavOJNJfiF5OqoVw55HpNOUICEKVBmgo4U7+OsBR2Xu8itvsyFu65GVIegsRUpkN1hiRNRVvY7+3UellZ9FfYBq+oAf/8ya9rE0sAItlZAclLAUTLpIkmJfQoUZoASNLrsV/x9Gg3vqaLSNcWkagtQq8rUY6nxPT9tWXKUQ/WVygJKlJUnFIHMFKSEqvPg+4K0rU5pG7IgdpSkjdUMn/NBmbarmLu1n7MR/4NPE8qkMTQCKSlhtcSnlIoqyTpn++nFz9CACKaUsiWyqI9RD5ICkLyDhF0YmYYQ1+CmJhVi7BwlNPf+zK/PtBGtPsSwlefy+w7z1P+RazrYhYbN3K6upTFunIFDvE35H0jDQVKMKg2qCtV2mWxJksFOHivi2TdxczdNQqJWaKZABKtIxO2KhZsh1we09JuVtWxFaJ/8dd7LXz7ugaINLb4FpZ/YYd5RZ07XJK0SoESaZOY5icj9dcSvZLy7Ie/y+mBBsINW0nXlJKsKVEAEfva11CCTyI0dWUogNRV2FEbkZ6lSoKKjR6pd5FoLMLcVUSqzkXyhgL09+ShS/a9fjvB7qs5PlJP8vufhugzKjEmxp4wsDyiVIorS8PGibP/oowhP4oIdrbOvi2V5VfHtLJyDhLhk5yPbmmN2Ax4j5L61bc58pGDPDTcyFNd78SoLoTq9dBUjL67grn6ck5Ul3GmpgJPQxXB+nLCDW4VwXLMSzG7YrVWW/h2ZqHX5cF1hcTrt+G5bS/EThNP+YjKmwowklEwJWJllZo4Cl4EnHqdF33h18aXr2uAqCa0TQtpaKvCVuobjGVTS3zAuCHJvCCYAZICEM2DcecowV0X2aZDKbo4ohLOFC2xTGJarKA66xjruGIideUqbyI5AUvTyPluxBwzatzqev66TXj73g2fvRWOPQpxj2KaU1qIZ2NhO5ttMbcw+LJ5btsjmYyE44QEHBKIcLZytDU2Q5KOkmqRrELELsBPZOKQDkPKC8YMnPkl+r/fydHhnfy+YRvzjdtJtl+GUVNMosaFVudW7y2ACDRUqPdR4Kh3tKZoEREK8t5WG4mppTfkE63OVu8c7ryMk/vq4fhvVeInYJorhJVIAyvULhUN8p6veXQAr2+ACCrEvLATcAlV8xNUA4WUHo+DRDWTCRnLEADTgxxDeAbz5naSNWXLwBCmf7kkibJw7VYCddvwN2zE21iKv9GlnHkV7arJg8ZKaLmUeP8NxO+cgF9+T4VUpZJ1MR1TCbuzDvXZ6FPaCYvKOzpaQrbCWYoEKOJbpfASZyEVYTERJGRKUFukdRik1mzpaXjk6yzePcLxve9ltmkbkboK0tUlZKrd6LVnGd5h/L90K8IgUZdPpCbb8km6L2W2fycc+ZXKhQTkOaV/RGWIv5XRVd9IxbAChy3cXhu64sWf4u8OIHGkFF23OiYOetQkrQoHxbySMYE6zD5FdLzOju8XK5NJpOHLJqVdJPy5Udnq3sZiPLsL8O7OIdyYrULEyVo3qcbNeOsv4Wjj2zl2yyCZn/4nhE6qkXppCSRImZZpkRPkUmkLqWdaaTeJ8xJNk4mYZMIp0mHNMhkTS6rM3Kpt8oG5CN4j8Mwj+L54JzOHezjW/HbmqrcSq5YQtovUNdkY165Hr7W1ggpGSEDiLycBiFGbpwAigsHTtZ2Z/hvg1z9WWjKsRk39AyAvDr2/xrciXYWBVmiQuCqjtgFiQDRkmSLL5obk1Z98mKW+d2PsLEHCtS8bGDaYRONIIk2rLVcOqwzTXWjJY6ElB//ubKVJQjuyiVaLlN7CfMOlHG27iuMHOkh842Nw9BcQ84IeAc2maBhiMuYiCJEgEm3j2afh6FNw5En4/eOkn3iUzOO/hsd+Bk88BI//CJ78L3juF3Div+G3P8T4z3vwfewQj7VdzTONV6roWrLxIlXGn7khH65bR2ZHNhKJezmgWHmsACReY2kQ365Cljq3MrPnGvjJf6j8SlTU4PM0iDUGRHyjf2iQvyZARHur6Ig4wFGVEFQdk4BYWPS8HCCOokhXP+Eff4XZjiuIVxe9IoCIeZLaKTa85bB7mwqYb81jti1HgUQ0iUR+gtflEb2uGKPhIoJNlzHbdDmefTtI3L4HfnUf/Pwe+OHd8B+3wudGMT7cQ/C23XhursV7Yw3ew9V4DlzP4tS1LIy/h7nRq5nd/w7m9l1FaLgeT88OllquI9xRjdm/G/qbibVdz2LNFczVXsJ8/RYWaivw1rgxGlywuwh25UN1tkoGrmT6l7MvANGr84hU5+JpzGexfSMz3e+Cb34GdC9xGaIrALESMsrekuG/UtHwD4D8DQAiDS9DPsVZd0I6CTFLRJJJNEUAEjnJwlc+yJmWi/4HAOLG3OkiVS0h3wKVPJtvKWCmLQ/Zirnlr8kjurOA5A1ukteXkthZgV5bRbhhM77GSuYb3cwJsHa7WGh2sdTsxtPqwt/qVhRocRNsLiDYlE+gMQ9/Qw6++vV469bhq87FaN5GtHoLwasriF1VBddeDDVXQt1boe5StOrNxHZVqfox784cwrXryezOh0YpmblQDTF+OaBYeawARNuZvwyQhfYK5trfCl+4EyLzmKrU3/ZDRE5lZEShjLBcAZC/Bp+8gnu8/n0Q24GV9heAWMM4ZRyG3TGSaLYdRFI+mP8tpz48ohKEEmmSTrZCti9/K5EfAUequkAlEcUOX2h2M9viZr65GE9TMUvX55KQ7HRtKZnrCkm8NwdzRyHpWpcybxJdm9G6thDr3EqkfSPR1irCzZWEdlcQ3F2Kt86Ft64An02B2gKVxJNEnqIGF776QjUSMlBfonI2oZoygjfIwK9CNfhL8jvplgqSzUWEG7Lw1a5hqfZNeOrWqPCtFcaVUO7LI2m72I48wjtzWGrMYb6tlPnWizE/cRiC4mNJlMQ2g6WfVFhXQs82QETtv8Y/r2+ASOPakRALICKh7LCW9YX6XUq9JcRI0gfHH+H0+9rxNm9RodhXChAJkUrNkoAssEtAUcrC7nI8jRX4d1UQra9QtUzmDS7YUQA78mBnNunq9aTq85h/73pmr8ln/rpCFm9w4a0uIVgrSbhyIg1lBGqKCFbLAC6poC2y/SUr6y8l+r7GXPxt+QQ6ixR5W4tZairEU5uPrzqPeEOxer5kvYtUc5Eqq5mvXcOJujczs+tCAo0FLxsYDpCk7aLXWwBZbMpisa2IxeatpP51BHzPWZM7SD8ICRgUIOz+Wf77tY2Q1z9A7Ia2+kEST45TbneMjHKNZ0gbGsTm4dff4Ll9V+HdVUFkR54aKBWuc7EakkFWMaGaIsK1JWpUnb+uEl99FYHaKjWuRKJGcSlf2VGiRt4ZNdnEa9cRq19DtH6dun+0RiqHy4jWlqhtrKYEi4rUtbWaIixyEa92Ea8pVNtoXT6epizmWtcx15JlUy4Lu3PxNeYTqi8kVluIVmNRTLROg5yTy1xLLvPNuYhzHWhwrYqkzVKitXbmEel2M9ucQ6BlI6cHr4VnfmbNpyUdY/uIFhRWRFVe29hQT/d3ARDBiAMQ9VYKNHZ9kgKIOIoJ0Bbgh59kpu9ygo1lRHfmvyKAWKCywBGqKyNUW6lAEarZpPyC2M5NaIoq0apLFLOG6yVnsA7f7jX4G9cpYMZqyrBIgCH7Jep4BYrqEhscAhKXTWcB4m/MwrN7Hb6mdch+qEEKDHMRMGi1+QpMAhABijyvgMG3y4WnsVCRf5XgkOvI9TKNlerawW4XpxsvVLVbZ/a8Ax7/nnLUpWOk9spRIhZabCH2D4C8+i3gaGoLILYaV2aX3QkSaZTaCylBic3BFw7i6d5MrEkYNl+Vi0id0epIRtcVWyPspCSjbgOxmo3Eajaj79yKXr3ZcpKlTFyNpXCrEvHFlmzm29YiWzlfEncWSb2X7MvWrv1a3p7NaIs5p0LT9S60+jwStdnKbEPqwa4VyoNrC1QBYXqHW5mSco5VmWuFtSUCJyFu+V7GdayG5Fx2b1ZmnL87n5O7zlNaa777Cvjp1yC2ZJm4diBL+mi5ImA5+/nq88grucPrXoM42kPgIPtn292ydSURJ9l09aPvGJHbWwm3lxFvLlYRHLHjpZJ3NRRqLCLYWKK0kfgL4m9odVUqShWv2YReu4loXZUayhtoKsHb7GapJZ+FtlwW2rNYaslV58t50Xo53yJ1rYYSIg0lRO1tZFcRFp191uguqX/KJ1mXT6Y6H3bkg+Q4ri+EGwphhxuzxi7ErC9S1crisCdqyzCry1TwQMbdhxrdqyI5l8aNGLtK8HbmcqrxXPRdBYR6r4AHP2dVDcuQAztXKH1k9Y/s2QLslXDvX+Hcvz+ALKsSVd+gZsuURLoCyPHH8Ey8B6PFhdkiYz0KiO0qItq4Ogo3FRFqKlYUbSwmtqsUvaGUeH05upSIN5QTbiwluLsYX0sRvhYXntYCfK15ioLNecQaXarcXkruHbK+KyDWWIDeKMesoKZcYjbJOJbw7gKCzS517aVWF/PtFkmoWL6X90vWF6mK5UxNMUIpSXDWW88qzx3aXbQqiu0qJlVTqTSIpyub2eY3k2krIrnvbfDtj1rjTaQWzh4DvwwQmfFFjc957YPkdQ0QR3sIJqSplQax2l6VlMiUm6rOT6KKaQj88gGWBq+E1nwyLUVEanPQmtzEmopXRZHdxUR2uxXJdYTijdY21uQm3Owm0FqIt80if2uh+jvcXIjWlE+8KR+tSfbPUmx3IbHd+RYJgGyKNOcRacl5PjXnWfdoKWapvZjZzmJOdbs52eNmpsvNggyFbZH3c5PY5casd5NqKCbRUEx8V4kyM+Udws2rIzFT9etLlgGy0HYedBeT2Xcl+hduBn1WFVeenWLIcRb/AZC/gvKzAOGAYxkgdhRRaq5UqbeNIhFaz/3nF/ANXKoAQoubUHWWYh6HyVezFYYWZtd259lkMXGoNQd/Ww6ejhyWOmWbR6A1TzF+QrLYdYVkJMrU5CYkz/I8soAk4LIoX4Vy/W15rKRQSz7xxmJl4lgMbwFWQCFg9LQXstRhkewLUOU3Aa7zrrK/WlJ+3LVFGA1leLuzWGw/HzpdJHsu4rRUCcwfeXGAqBGVMsJTek0lSP4q/LKam7yGNYg03AtImH0l2X9KM4udq5xASzjZVq8M2LF/MBIcue9u/AOXQ0chtOYS3HkuWnMBEdEmq6Boi4toSwFaS766jlxL9iOt+QTb8vF15CKmh5C3M5tgezZ6cy5mYz7UCxWo84JtBTyfXATank++dhe+9gLObgsIt7owmmQ8SolNRSTFZNttPVegvQBvRwGLXfksdMlWzrfuFWktUM8uzy/7kRbXi9AL26WESMsKai7FU+0i1FaqAOJrPRfackk2l3F85Fr43Q9UTZb0i5hZ0keqS6WPVg7DVUEV6UyJBzsduAI49kzyZ7veCuf/NQD2NweIemm7ASwbyW5FaShFYh8JOWMhbFTY2DH0FKFYnEBaJmawf9OTEI1DPIVKEkpnhDw8dfdBwmPXIqFW/7X/C63h/6J3FBDrKH4F5LbPLUVrq0Br20CsfQORjgrCnaUEu9wEevII9uQQ6c5C78wi1ZYDLXkgJlPTeQR3WxRqXkOweR3B3VmEmnMJiXllP1u0qwShSFcZEdnvLkXvKiXVWUK6vRizrYhUq4u4Ddjobjk/l+DuHIIt2YRa8wi35RNtK0BvdxHvcBPvLCTTX0Zqj7UfFaEhxyvKJbS7AL2t1KZy9LYK9NYNyxTs3MCZvnJO9RcR6F6P2boGGtbArlx8HZt5Yu+74blHIHpazSujy8yWUuErGJCpkJYk9C6DWVIQS9jDcmWAlcxbJgdYCRQVJl4xQbhUTJiq5k7mPZaLvXqfvz1AnBj5WfFgN4wARIAhWmAFQBylImLJljwpE8JpmXTZBoiIKl2mNMkQlepYmazg+GMcOdSJv/cdBGtz0Rr/mVjLG9A684h0Fq+Kwp3FBLtKCXQJEEoJd5YT6Sgn1lFqkwBPAOQm1ulC63Ap5jTaC0i0uZBttD2HyDIJE+cqRhZmDreKlrA0RailUDndgd2FquZLEnzeXXnonUXqurF2l2J+0QYWMCxm1zrc6nfZxtoLcY6LthUSEQ3TkoO3JQtfS5YCUrglj1hrAUabm1R7MYlWtyKjrRi9vRit3Xq3SEcp/p5iTvWXcKbfRbgzF7NlPTQK5aK1lnFqz0Wc/FAXxq+/BimZ4ySKaWhktKQFDBlyvDLEJdEUGXkY91ujEJVQtPIoAgM51NIvUq4SVmR98/cMEOHpleCQ/WU9LA6FTUqb2ClZOcYGhxxtJFLEjJTS2nYLKmUkQzp1meTTnIOf/RvHB65Fb96OUZ2P2VeAv20Nka4CIp3uVZGAwtu9AU9PBd49bvx7cgj3XECs+3z0rgswOrIsBmupING8WRUW6i1b0No2Kk0T7thAcM8lBHovw997Ef6erfh6qvB1leHvKsLfUUi8v1xRYk8ZiT0VJLorMbo2kOisIt6xAb13I9G+DUR6qwjvqSDUU0mop5xgdwXB7jKWWouQ6Ja3vQRfRzGBrnL1e3jPBoL9Vcz3livy9pap4/WOEhKtxdaUq40F0JxHujWHVJul/cI96/H3rmexfy3evvWEOwrR2oqItZURtSncXkKoo4iFnjKe6d3MiffVE/7OR+HMb0Am7ktrpE2ZsClD1ATNnsPMshIMezoima9LhuxafS7yUMAhW+vj8IYwwtH2mK0AACAASURBVKv3+ZtrkBf6FC8KDtU0KxpiBaDiCQMhmR9agUa2KUvaxJUenwf9d6S+cjNL3ZdD6zaodcPQRubb1qsSiWhXEashMXVC3WUEe0oI7ikk2JtFqG8N0T3nE+9eQ7IzC7O1ALO5HHP3ZhK7t6G1bCfcth1/5za8ndsI9V9OsO8tCij+nm0Eujfh79qAv70Uf0cx3uZ8fM35BHbnK5NHImDK92kW/8ClGFGAtJIsX8XyN8I9xaykUHcRDgX2lLDQVcRiVyn+7lJlthldZUpzpFvdpFsKSLflYrZnk+jMQutZR6j3Qnz9F7K0d41633SzG5rE9NpIoHMjiz0bWNhTgWdPsSU0ess51V7BM3vfhudTY/D7H0JK1qAKq8k2ZhI6c8kUkUzGsrClRF40iZhYQmI9KCjZUUpHOFqqxP7y7xkg8m4OwysOFyDI2zsSwop2yOwXzmErtzK6Wf5W/5j2HAEx0FOaWhIMjsLv72Pp5huItGyAzougqRRz31Zm2wsJdYttvzqA6J2FinnS7VkkOnPRugqXr6V1WXZ9ol2kbw6pVrH93Yjd7unaxkzPW5jv2U5kTxnx7gLiXUWWuSQmTGs5sdZKoi2WTyO+jfgClrlUgN6Vi96VTbxrHVrHhWida5ZJNNdKCrW8iXDrm4m0nUus43x1XLz7QoyetaR6sqC3CPaUwZ5i6Cki2eNSzxPtzifcnUeoJ5/Qntw/okhPrvJj2LUBdm0m0bJBaadZ8UkGyjk9UM7inlLlR9FZgtnmxtNejveDTfDYVyEzq2Zc8WCySEZNESTTM1n9qEqwQeYSUHPAyJgFMaDtyQGFPeRPoRVy89WAyd9egyyDwgGGAwirLFqcMGuCaqfe6vlbOdoBiClDVMW3k/GrMsWPcZzQo5/lzGc6ebarglBjIXRuhLYK4n2bWOouI9xTSqy7eFUU73JBe7aiTHuBkrzJ9kqMjg3EOyuJdxUrHyfWlaUcdHHU/T1uPD3lLPRsxttdgdaejdl+gTJhku35JDrcGJ2l6nytu4pY9xYi3VsI7dlCsG8zgf6N+Pduwje4Ed9QFWe6rNzH6Z4SzuwpZqa3jJneEoRRZ/tKWdi7gYW9FcwPVDLXX6a+l9/P7CllsdtNqrecdFcRiY5Com15hNoLCHQVEuotItxfQrC3yNrfU0S0pwi9u0iBOdlZRLqtlExzJWZLFVpHJYEeuUclswMVLPaVEepxk27NgqYLQbY9JSwObufY+xsJPHQvxI+rhT/DagWqJFEzoeYPVh0qnSrLRygUSKeqjrU6X76WiMzfP0DssJ74Fyu0howXsIBhgUN8CecIZyu2qFAsmSSeThNPmWoOWjVBmRGGM0/AL77KsX9t46n9F3O6w0203QWdpdBdTqijhEhvJdGeYtXx0vkvl2KKWYpJdhSTaSuGllKbykm3laN3lePtKWa+z83sgIv5/jy8vVmEe9aS6DxfASO9ex1mSzbptnzMrnxSfS4Sg0XEhyuIjFUxt7eS0/u3cmb87cwcvJ75W1tZ+mA/3rtGmf/INOZ370V/4F7iP7gP44efJ/ngl0j9+IuY//UV0j/5Mvz062qrP/B5fP/xUc588Q6euecmnvzIAf5wRz8nJt/J3P4tnOyt4GRnKTMdxfh6KtH3biWz/2IFVKOjklS79U7yXplWi8SJj3bnEugtZKm3ksU9W/D2bCXSWYnZng9ta6BnHVrdPyEROnPsYkKjb+NY18WEpnfCN2+HM/9F2jyhpmoVq0F8SS1h8b70tQjHsyCRCejsUYoCDvHa/741iAMQx5yytgIQmQjO+k/A8XyAOOCQBtRUOtCad1eNGpRZA71HSXzn4xw9UM+xfVfyXFsZsaHNJPZWqmiS0Vem6qBifWWEbcn4csEhx4v2CfVsINwtGqOcVHupKrVQ5RYSnu0uxttTynxfKbP9xcz3F+DvzVJOvNnxz5jt5xHtKFQOdaC3iuC+LQRGLsY/fQWLN76D2Vuvgf84AN+9HX5yLzz2HXjuUVg6DiEZHSnj1kPWeHZdVqKVCNCfIRn7LueF/OA/BY/+O/z4bmJfmWLu7g5OHtzByeGrmN/7Nvx9VxDu3I7esZVU20YyrZXQWm4JgdZiUh0u5YcsDmSz2F+EV4IEXRXEO0rItOVC6zqMhjcqX0zrkQBBKaHujST7Loaei1jq3U7gK1Okn/0OJGfUNEWJpEnAgGDaWqBKcGCFciWaac/Q6Mx9JoygzIdXw7iyrvk3NrEEIHYo9wU+h0gOAUYsqas1ti2QpNXU/VpcxzBkjiWZORD8yTAZAUZiFk79HP2rt3D64E4W979DRYciPZuI9FQR2VNBuLeEUL+bUH8h4b5CIr1uIr3Fq6JwbxmhgYsI7NtOaGgL4X0VBAeK8PVk42lfy1LzGrQ9Vpg30laI1llEvLcUY28xWl8eS31uToxdzLGb3sviv7ahf3EafvBJ+M234blfw+yzEPFDLAq6zPUlQ4nFiXVyRLIvs+OtklKylqBMYC1zZy2A/1l4+mFS3/8c/k8eYPHWDuZGriW4753oA5eS7tsCPRXQ6YaOPOjMJT5USnS/1F/lYu5dT7L3QrSutfhac5nfXajMQ61rE2ZHBbQXQ1shtBdidhYjkbRj+7ZjfGUcnvsRhE+QNmJqfi9ZWkfm+1KznCnr24CUzOIijrvARozrV//zGgGIo0EsA8oBh4BCZpaV5Q3ipoFuRLEmfLYYJGnGmUv41YqzSgL9/rtEPjPK7ORVeIYuITl2GWLHG50Wad0bCPWV4B9w49+bq8gCyWoBUkJo72Z8e7fgFZ9gpJLAeAWBURf+gWx8XRdi9rthsBIGt2Ds3YZv8BIWxt6B933VLH1sD8YPP0ryv78Gxx4C/x9AZlrXRDNEIBg5G/wXv1XW+FieVtQywxWLCAOthjIQ0ZJoyYwValeTLAgYF8H3DMz9Gn79NTJfO8zcjdfybO9G5nsr0PZvwhypwtxXQbK3HGOPi8SeCzH6ziW+91wi+9bhHShmsbeKQM+laB1vISPRw5YKCyAdORh7soj05ZIa2Yxn5C2EPjEIR36gZoGUyR7mE7AohpcpARd5P5lXQISpRjIZQktbK7682lOXvgYAskIa2supiea0oCLbNEY6QVQLocl0OCr0JwkliWzEVJ4jkzoGj99P7GNDLAxchlcy2AMlxPaVou8pJdlVCe0bSXdUofWWEtjrYnF/LovD2QT3uoj2Fa2aRFJG9pSgDVcR2l+JZ28xnoECtJEiOLABvS9XZdElJzAz9nY8HxtSfgKnnrKWbwuKiSTTg9raQGL/GV2tgmUtj+CYmxZWBCDin0oCWvalrVb7EQmsEttSki5zc6mtRAXl6iLDpdjwGOiPw6lvk3j4Q8x+dg9P3nw1j49cwrHeKlLid7WXkt5bTniomDP7cjk5uJ6FoXxi+ysxujeT7LiEZNtbSXRcjtazmUi/i+DQm4kOvgm616vk5cz+K1n8zCippx8EM6T632OkCMQzhGPidwhARAoY6EkfYdOrVl5XczKvtgH+gvP+tgBRkQp7PT+pwzkbrX0+QJKamhldqVgjjBlcsObXTcv6GsfxPPYFTt3ejm/gbZh9WzD7iwkN5OIbyEbrc5HsLoH2ckWJnlIFioXhXIReKUCMgVJCnYUsteYQ6HRhDFVhjm9BG97AQn8R0ZveQuTO64l/aQR+/jmYewIkiGAzpRIEUhKehFjcJBo3iCY04qZGAs2eBURmApGAhQWI/8mtU8Yhgb9oKkM4lSSc0YgisSUfCRaAU8AxQDTcb0g8803+8O338+Rd7cr8MnsvJdS3nfl+GW5bxtxgEYGhIuJD5eji8HdvJdJzGYHeS/AObMSzz4V3+M1E972BVOMboK8cfeRijo69g2c/PUbm2YfU9EwChlQiSTQSJ67ZdXWyTHVGpuQOqxls/r5LTQQgCiRnnS0l1VZoEGEGNQuGWndcJK3M0O6B6DzEjhH41Sc59slWZgcuJdWzFfZUoHVmsbh3HeEDLqKDOaR686FD7GY3qT3FRAfceIfcLO13E9orf6+OIgOl+PaUEeqtwOgpJdNdCj3lsHczxtTb8PzLTvj5p+H4g5A4LXljtU6JP5ViMawzGwgRNDQFCN1MIsuzyfuKNWGaGSsq5xTwKfPCWbZM5hqWBXGseiWnGVe3XVn45wRJ4qRFi2WiJNJBYkkfkZRHMWWcKBphvJlFwv6nmP/mR/D+6xBnRq9lrutSol2byfRvxezfRKyvAt9gBYv7y5gbKWVuxM3ScD6+/XmE9uUR788j05YNXW6SQ5vxT17Oczdew4l79pF54n5IzEBKSoV04ppOMmXlwtIk1eJ7ii9e5TDW316DOAARBWIXLQqTiGRVklJpFjHD7BIEWedCZicJncH87bd47Jb3MDu+lVTfRugsJ9GWh6f9As4MrcN/MJ/ovrWk+9ZCVxZ05ZDszVcACQ6KJikj8goBstTlVgDR+qvQ+jajD10Od7TC9z8Kz8oquIvq2WViackfz6QzLKUFKhLUzBCKB4kmIyQyoiXOJkOV7y02j+NbSORGrbEh64s4AJGrnHVWpSkdLfyXbOXiGbWIj5irTjLOWqJN1i6MabJMnMwSLzPoy8TYsGgmmU0nmFeGWIq0/wQceRi+fQ/6HYOE915NqGWLKtgUcza4rxDvcBaLYxewNHoBvuF1BPflERkoUwCS+jTJvxgD5SQnt7M0spWjo5exdO8gPHW/NfF2Okg6k0A3TeIpazHSjCwrZ8gqodY7v1r//u0B4jDACwCiwCHS1JnNXCIYRggML/hP4v31jzh272HmhreSEQ3R6YIOF+E9LuYHCzgxms2Z4QuI71sD/edC77nQvwZtMJfwYAnC0JIs1KSj9hatirS9LpjcgD5UxPzQJvx3NsGDn4b5p8CIKZQLvrUURAzQhcdVT6ZVLZKmiZ0vDJ5W852bmRSptEhHK/n5ohpBhIhNZ5ljZSO+jH2ZyC0WISMr28rAfclkv4gfGE0k8IdlASA7ky2HxSGyFLAEl0j5yAI8+RDpL91B+OYmYvsvJj3ottp+4J/IDP4TqcE3EB9cp9o6vHeTigDOdJYQGChH31tKRLL2XbkEhysJvO89nP54Jzz9HYgdVwBWII2nSciO4DlqC5BXCx0yu7u8qwVCJyehQgbqO8dRtjpVDnT8BZHo9okrStXVdV7498t+eOlgub5M/iYmlTT+HERmQJ8Bz+8JPvh5fvPhcZ44cAPcciUMCkByoN+NNlLG3LCL40NZzA+vUwDJDJyLUHLvGqL7cgnvKyLeV0Wytwqjv4j4gMvqtMESooNFimKDLrS9BcQHLBIQRQdLCA+WEdpnkX9ISr3LiN1VAz+5C+Z+CvE5VWQnTq/Id6nkliWRRQEobSDOpvRwRhxhXUlwicwlUjpGUkNPxRFzSyI5MuRLcmEOOf3hbJf7ZYXHptruL/1bhI+Ej6XUPGaQihsqfK4nU8iiQ/KEihclepZIk1RIF7SnIJqBeFqZPoYCV8oSCoFZePS7ZD49RnjyCuJ788kMnAf9b1JgSQ2st9p7oJLA3q3M79uOZ/92fH3l+NrWo7WdR2ZvLsbERmYPvgX/v43CyR9BJqiESzSWsCbhcBpFAdriWcWTTjvL1uFRtSti56yGtnj+zzPnOdIIEuZLRHzWRMpGkIweJRQHX8Jad0KTq0lvSLw9IYVkMjm0tVCNDGlVK4DZW8GQREaU8ycxBzt8n5Sl+WxGERvbuaSEcWUFc7VMmJQTqHU8vJCYA/0EBJ6EmZ/CE1+HH3yI1OeG8XygnpMT7+TkwEai+0tIDuaTHCwkPlRIdL+L0IiL4GghoZF8tOFc4vuzFen7c4kOW8doQyUqY53oySLZl4e+v5zo+EZi4xuIjZYQGxJgZMFQLum9uUT6i1jqK2F+oJyF4U0EDmxn7rZrmPv6nYR++6AFYDH/TA0jFkXTk6TsUv5lIbTcYbYQULkfQ6U6rVUUrVYQplT9smIrESvhCetazvmy1LSMo7BzI85WKjdtyiSd1W1F4NjHiaZQJHMi2ReWrf2gspF7Oc8hW/lbfSQULLNgJERD6giYxPSSY6TfVWjNG4Hjz8ETD+O9o5fZ4Svw7CmFsUoV2ZP2jPesx9hfgXffpfgmrsI79lY8feWkutfAwAUwlEVsbw6nRyvQ75+CpafsnE8aM2pYkb+krpZ6ULP5y4vI/QUrK7MG0lRKP69MPC+/qv1Sf3pzjrycNL6KMZuy4IosmSXrOFg2pyzMIq6gxdEyCCmo1vjLxCIktJgFBFuxpFMmYhsSF3tCA01UtzSmbkkXZxZzZ/bymAf96E+JHvkRoce/jf8XX2PpwXtY+vYdeP79MIEvj3Lqrnrmb78e7/veReCmywkf2kZ0spLoWCmx0SKL4YXpV0H6UCHJvhxM0RLDZUTHNxCcqCI4WkpoqIDI3vUw7ibRn6Wknj6xhfmRbfxh/3ZCH2uFR7+szD1JWjqfRCJBLBZD0zQljZ3vX3wrvWnZ/zJ+XiJVKxnTAYnDoMK4Vu/rloMumeWUQSadIiMqSqSVSB9RVbL5c1slzUTQ2bafLXUdPpNnEZKntLFjD2Kzw+xqQRxL0zjaRiaxFPmZ8SVhdhGO/Abzm59k7uYmTvZvwz9YRmaiBEbzVHLRN1BFYPhyAiOXEhnaBMMlMFkEY9kk+y9Q/ey9/Rq0733YWutEVqtKGKTj0ioy1WzMjmbZAHEALw8u+zZABB4yq7z4U897nxfvmOVvzxEAyMupj7Lzg6QTIaJxHa9usBCPs2RohBMBjKQPM+0V11I9WIogaWbI8BzwDKSPgnEEor+DwOPgeRROPgJP/wh+9Z8gSwR/+cNkPn4Lidsnid/aS+TA9cSm30ls+h1Ep68gOnUZkaltxKY2E5ssJzRWQHgsh/D4WiJj5xMZfxORsf9DZOz/IzL6RqIj2asChwBK2+9SmeDEUBnJkSLi48X4xzewOFbJ4nAxS4NuVQ+VGK2AkQLM0VICt1xF9L4x+O13rYnolJMr89IliMfjpFIpMlK6ncmofadpX3wrjCzhSyHLbBXmdCT4SuZUHa0Uhy3BJR8kmfCMwMoKdr7YViw6iY4JU8jvcm2HrCSb46BLyMAyQZbVuxxonWidZONOvhKRICR5KusJFCdawJRdeXjh4XgKluYxHrqfUx8Z4pnxK5kbLCYxlAWj64n2riXen0+mJ59kr5vwyDYiBy4iPOrC07de8cLMyEV4b3sP/PgOCB612wuloSWJLIsiSTDheRpkBQqsuj4Bk5AVKZRXUzLkxTtm+dtzfAYE4qBpcUjIEgGiQXyoiZ5lXTtZjEXq95NnVHUskT9A6Aj4nwLvf5M59XUyz34W44kPE3zkfSx8e5JTX+jj+CdaOHlXPSduuZaZm65h6dA1BKbeTXT83ehjV5EYfhfsv4K0lB60rrOofS10rCXTfSFmz/kkxLEeW09mYh2pqTUkp8/DOPBm9ANvInbwjcQOnE90NIfYiGt1NOzGGKtSlBgrQRsrwj9RwcJ4BXOj5cwNl+Ef30RkfBOJySrSH7gavvMvajkzlctIWhJbgBGJRBRAlltWBJiYpC/1UWgQ6b1CggtzvZBWMqpjPigT12JKh4dfbCsOdixpoKVSyq8xMk4pqMXcsqSoQUwZuSJd5Vbq/nIxYXKH5L5iItt8L5aHkPxsiWo7BJ0W/8qW5vJ4coK0kyyc+uzPCX39Vv5w8F0cE59utABz34UwKIGUtUqTL+zfyqmxS5gbrWRufwmBqYsIT28jNl1B5K6rMR7+FETFz4OIWPzqGawckWJ4555yXxsBFkAERJJ0PeuHOL+/VBedE08lEScrbUSs9fOiJyzJ/8y34NHPwoN3wPdvg/tvIfXlQ0TvGWPpQwPMvL+ThVvqWRi9FN/wJvwjm/GNbVQMFZjYiH9qE/6pjYQObyZwuArfwUoWD5QyN1nEmYkCTo/msTCUA6NlsK8Y9hXBYBH0F5Lqz1cx8uhArpLy0RE3oVE3ofEiAlPF+KdL8B8sJ3SgVEmaVwKQ1HgF8fEqgpOb8E5swDfhxjPhZmZqA3OTGwlOVOKd3Er0I+3w8/vAd8Raa1ySe7bzqurCEgkr4ma3tmiUaFTc9D/zkU50ACGdqrhcfAMxfSSDbPsJDvfLMSIsbV9PggGJjJVDEfloaRFHq5hKeyjZmZHsQep5f8tKHWFSyh6I2KFcuc3zJPELASIxhhf4RkozpXTSMlow4YOMU0Wlq+XvTPFX0mIO+sHzFNGHP8cfPt7PsQNXkh7Khv1vhulcMjeWEzq4lYWJS5mfuBzPgSuUsIrfUoV5sBD/SCGhuxvgN99S682L5SPPIs8szaIwYfu/0qwWCXjEz3PIEir2j3+mc+Ac9VKiNdIRCBwn9N9f59i9+znz/muIve8KEoc2Yx7YTHzqEiITbyE49jb8I1cSGroMfe8WGK6CoVIYKoEhqTsqJL0vj8S+XLShLEJDa/HvX4t/bC2+qfV4D67Hd2M2gZtzid5UQGK8EEaKyIyWYI6VKDMmNVZOcqxSRTK00SoiYxsJj2wiNLoF/8hWvCNb8I5sVcCMjJagjbpXTfGxMiLj5XgnqlicLMc/6cY37cJ7eAPew1uZP7Ad874BePJ7EJoDQypKlz0Ba3KOdFqZVIq3bPPKMbNeqgfOduJyb2LNdCdOthTnOSTOtQUMcYSFKcR6ERNHysPjCYmAxe0QsZSKOBGbF9864WQtIwCxAjGOLyq3UcyzUhLb9xZQOiFm59klEKFAmohjGCFMQxYp8trl60FSpoDFHs8hyU0zCAkv0T/8kvl/uw3/eBXpobXo0wXoN1eg37gR7/gmTo9eyszEJSyNFhCbyiE5uZ7wcA7+qYuJfX4M89nHl4fjOs8ijynkyBILOKI1rECI1WK2KeYIJTn5JT7npPynSIdnIBmA8Ck8D3+e37x/J8+OFmMeLoDRN8LIG0mOZhMdLyI0uYHQpER7yjAmpPAvm8DeLCKDOWj78zFGXSQnXKQni8hMuUmM5dqUTWIsG2M0i8ToOoyRtcRG1xM56CZ4qJjAwRKC08X4J4vwjxcTGCkjMFKhIkcS3ZDx0+GBzeiD2zGGLiO1/0qSIxersG5srJDVUGSsSDnkgZES/KMFeMfy8EwXEjjsJnmzm+htF6F9dRKe+xnEJaMLft3qbmlXMyVh2hSmaSpSOZuXaOwX/mR1rGPDixx27CdhfWdfutkyfWTPAYcDEHVN5b+IDyN5ColWSeTKIJOMk9AiJPUoqXjMmjBBQrLyezqpQC3Xs3wJxyKRu8i9rXs6v8tWgUcBR7SaDV47IJYwIW5CTGaXkSy8MsAkT7IEyNqQHtLxBTJSjStMLNp39jm0f59Ev+sqZqc3sTRRijblUn6nRK/OjJah7V9LYug8jLE8olOleCY3MHvr1cS+eYe1arDSThaopT3l6eV9HLJmQHkBQBzwy/bPAURlZePyItKwUcK/e4AnPtzOsclyuNUF+/8X7P9/SIydS2wyj/DBUsKHK4gfLiFxuJTgeAH+cReBCTehCTeRiSKi4y70CTfx8UIFltR4AamxfMyRPFJDOST3ZZMaXI+2fz3esRwWpnJZmipQzOmbLiI4XUJ0qhxtagPahPgIm0iObiY1shVz+CIYvkRRemSbKgpcDTjknPC4G+9IMZ4RFwHJ8I5egH86i9BNbqLv38T83deC/7dqzUDhKbF5fRlL4lpdIZ2dUqaVOOcrASKgEd/kpT/SQ1bnOSsvWdEWcTytDLbjBJ/VWfYKthkJKftAPw3h58D3NMz9Fk78itQfHiH++x8TfeKHJJ9+CPOZn6rv1e/+oxA7AfHTYMxb0UUpo3cYXkwhO6sugBVj7awTLuFKu6hSwsiqzN72n+xKY9FEEviRtXZ1Ff4JQnqRdPy0BZC0rFNoB4bk9aNPwX99kOMf2MGxye0EDlWg31RM+MZStEMu0vvXwPCFpCbdyg9ZHC9jZnIz0Q/VkfrG+6wlLdSzW0EOAbGAYzmqpt7BgYsEQ+zkohz4lwBE5a1slS0Pju7H+8h9PHf7e5mfKCA2/Ab0oX8iPHIBwSkXnuly5ibK8E+Xod20geBUGcGpCkWhyQqEIpNliqITJQjFbNLHixGSaJFFbvSJfPTJvGWKT+SzTOOFygQTMywxJtrITVJotFiR/C1AjE0Wroqik26lrbxKjWeRPHgh8Yl/JvIvJfDgYdCetMpaZGJ4ex1ykaSW0HEkvLTyS38EPLpujWER08v5SA4jri2RSPqUByDgEEhJ5wqjiQcTjmtkpP5MCjNTpyH0Gzj2Tfjlx0g/cCOBTzQS/WgN4bt34L/rOjwfeA/zt13F7C3v4Mwtb+fY9GWcOHwFc7e+E9+d16J9tJbUZ3bDfR3w5X2qnJ2nH4KFp60aNwmjSoLWtH3S9JI1mMk4qRK1GVl70IgSNNJEpTRAluU1ksrmk5GAQUAMLClVl9IaaTe1aKdjZknEzp6pRDGoVEZEn4Hf34/vi8OceP+78N6yidShtaT2/2+Sg2/CHF5HeiKPuPieN27Ff+M2jOkNykcJf+cTVhY/EcaMSvGqNf3TYjyCpoSM5YNYsEla95YucwDidMaf2J4jLyDk5DvEZDCO/YLFL45wfHoL4YlczIn1JCfy0cZF/ZUpM0tCsGJmCRhCU2VEJmxgONtlkJQRnRCywLJyG5sQoLjPgmA8n4RNFkjyiE+cBY/Yos+jyTxik/kvCQ5R2S9F/uFcQuM5hCbWEphah3nXBnigD05/H+ILymwRwSFttBwOtxX4yymWE5CIMy+RLdEulo8i/kJSMVw4GkI3pHpXACg9KEwXAP8JMid+jv6rL+K7/zBzn2rm1O3v5PTN21g4UI55axXcVAaHy0kdLCI5VUR8sgB9rIDYmGSkXepv0ebaeN7y97GRPPxjpfhueQ/zd7TgvWeU2P13wi++Bsd/CsGnWewSOQAAIABJREFUrahl4jikjoM5Axlh+6gan+PLZPALMGI6BMOkQgaiMB1eEpDMZ2TuEqvd5L2U1lUmoJPIdELWsrLvKTVoau7rh/j9wUtYGvg/MPZPcFMuifG1aENr0MfzCB3cRHi6HCZySB7exKm7u+Hx74MmGnEJUrIMuEwimCaUljCEFbZQ7SlWkoDT0RxnZdWfgAeoRKG8lLyIkPrI6Lxf3Mfs+68ndnAzTBXDaCEM5sCgC0bKYX8pZl8+KQmPThYRn7C22qSzLVLfy29/mkrQJsrRJiptKle5j9hkKdHpEsIHilRFbuigi9DBAgKH8vEfzrUpm8ChXGLTBS8JgJcChzBScjKb6NhavBPZ+O66nPSDN8HSTyB5gozhU1BQhpI0pmpQm3ntBJ/V2k7D/fFWolkCCgGIbJ19OVKYRq4dk7XSRTWpS8cgeAaO/hfmw/eyeO8w3o8147ntXSxOb2RJqgRGckiM55GeyleCy5i0BIs+nqtsdW0sh/hoLrLlcCncWAIHizEPujGnXDjHByeLmb3xLZw4fCUz0xfhnd6Cfsul8OHr4EsD8K33wZmfQeiYmi5GTC0pwg8SJYIMWJIKWystYbstjnqVOfsIJayRJSJYxMhRIJE2VOZZ1Brbk05jZsScFDEUJn3mlyx8dRrPwU1oI2tI35hN4uA64pNr0cfFhy0iNV4E09nKxD86fSVz98mIxAdAgVnK8wXESfyGGHp2vylgiI8mZDvqf9xdf/TNOVa1pl37lcpYGVnJpi88hv6Nmwh94N1KnaWH1sPgBTAsodkC2F+golWm+Bc2JScKEDImz5IwoZA2ZZEw9DJNFdmAqLSy41PlyvcIT5cSXgGQ8IECwgfzCR3KJXQo26b1hA9m/1mA6NNu/hQZ0wVwcxHBiRw8H3gLPHirFeJOLZJJBkiZcdWxwruKeUX6qQiRdKZjqyvD9I8a1vlC8iOiORz/RLYCFkVSniP952BOxpk/8wsSD3wC/z19LP3L1fimNiFCJzNZCFP5MJUH03lwoAAOFpAczyE+kWMx/VQeyelCktP5pA64SB0oIDFVsPy3hErTh4rIHHYr0Ji3lBG4uRLfjeVEDxRgjGeTHlkLYtIe2IL/pqsI3TuM/zsfRzvykLUwJ34y+EixoMaLCOOr9hHGl3yORN5kdsSkTsaQ3IP1+/OOU+UqkuiU8K+pJsEU40hpaIl0Lf0GfvAvRD70LuZG1pO8OZ/MbRXKWtCGs2HKBYfEesjDe/PFPHvL1YTvPwCen4J5EtIe9ERImaeqH6R9paHl+eTeapIQK8Ln9NOf2p6jXkYShAkdMx5VJM46yVk48QCeL/Vx5raLmBk+j8jUGzBvXoN2+Hy8h9YSuTGflHTYuE0TeTCRp+xFczJP/SYdJIwoYTztQAGxgxZFDhUgFDvgPksHC9EOCBWgH8jDmM4jMZ1DaipLkTm1HqH01FpF5lSWurZ1jnPu87f6QRcvRfFDbvzvu4zQNw/D4qNKikXSCbwJqYsS7rWljlOEqVryLwfICxteTCtHm6hybcl1BL2YR39J8PufZunTQyze9l6CUxswhBluzIcDa2HiPBg9F/avIbN/HYmRXKUlBBzxqWzVVsmDeaQOFZK+sZDMTUVkbnKp743pHLWV4+JTuep4fVLOuwB97P8lMfW/SRw4n8RNBRg3V2Hcsp34TZeh3XQ5wUOXMX/wck697z0sfWEvyUfvBd8vgTNqftyQDNu1eU/5LhLmjS9ZVdcyMExK9O2aNAGSEgiqUSypEIj6kJiXaFJxaSxTSIYzHIHffZngnVeRvHUzocMb8U4XEz6YS+qmfNKHRBMWwPu3MH9oI8++/53Ef/JBMJ6EzDwyGjMptWdyTUGpyDYFEvlHqgYkAGFVD7ywj1b+fQ4pAYc4ZGEy8TAyDkBFtERCmrPEfvkZTt1Ty7ED2YRuPI/UbRcQuvHNzNy4Dv9tJYqRxYESElA4JMBJKHo+QFaCRMAifys6mId2MG8ZGNKpFjhyMCdzSCvKgoksGLdIvhPwvRRA/n/e3gO6ruu689b62swksS1ZYhFI9F4JgBSpFpdxquM4TuI4zngmseOZzKRMkkkmK7YlkUTvAEH0QoIA2FQs23KXYjuO4xa5SLIkq8vsRH29l9+3/vvcB0KyLUfkzGCtg/vKfe/du/f+73b22UcA+GlD2biLLXcQvffvXNOAxJLNtCrQlEYT482tMq2z4T14BJZ2FISMq5tp+hMfK+4QMF7xlwzAc18i8+URLs7+Oc93/ibnD9yB/0CTaX8+tgP+7kb4nze4499tJfP3BaQ+VkHi7hpi+2sJfqyUwN2FBO8uIbS/mMiBcqItZUQPVhBrLScukLRVEGuptOc65t6PHyyEljeTPfgm4i03E2wpZf1gLWsHGlm/R9a8nszBRuJ3KdOnJQT1vNT5qyyf+Esy/zIHF75pzTKcKlHZiwJ8zXOsQUxLE/TcZZfMs/KsiYDiwJIhkgkSS0eJe3OiTq8nHG3TF+HRY8RnPsgLd+3j/D2NRLtqibeVEd9fDa31cLDMUvLP3r2Lp0beR+KJU5A556JGscbhwf2gQKLrsdIUxSeql35t/l1nlWWZhMuZJxLmOMjUKS4x5q/8kMgX+swFibdUQlsJyXuKWLm7hrXWZvwHawgdrLQROVCJRnT/lRG7pwo3aoypYuyVUUXi7ioS98ikv2rodRubz68jcXcdybvcMCG5p+Y1LUT8YA0/bSy338nlEx+DJ78IMZXSLBGO+S17pOktBZqiw4YLYb6ry17JZ47napdeIfU//kRxh4oXFY/oT2BZWVkh9NSXiB95L/RWE7pnB/67dhBuKSPRXUeso45AazXLd5Wwur+SYGsdkY5dxDp2EWmrJXSgytzOtf1lFospPlNMpqPvYBm+gxV2zL2v5/6WcgKtVQTbKgm11xDqrGWltYLltjKbvF1rKcR/sIDAgZ2EDuwkcqCQ5b/dRuxAFfTshZ7biO/fbe5w4uBt+A69h8Sj04TOPALhZ7117EpbuwIAzY3YxKJueqOCO7cAK2OrK6XJ1YQhHlGdX2xjnkeTj6aok0skHr2XlZkPstZ1p5tMPFhF9GA1mdZy+Nib4WAeq+31fL/jLTx2/G8Jq/5PYLVCtE0+3gZABA7FKWGviu3HeZZ75Tp/yN1QOu1KTsRCmbt1FeXqiUozH/88q0f+C6udd5Bsryd9sIrwXXVu7uNgDb7WSnwtVfhaagwwAk3wYJUxUYCJSfhfIfB1JO5qMGF/NUB07mZQRQWAe2Sp6ojsbyB6T8OmY50BUlozdLDcgdPOd6DRb4dbq4m0ViNwJw6WE28pJ9xaZ77rM92/R+Kxh12aUKXqcR/B0DqBVNqyesvqGu/R44olcbZapDFxlzR4SsjccM+i67H9STCSKbLWmCFmWRbOP84LDx/l8dEPsL5/O9x1HRz4t2Rb30yybQfR9lLCHbUEOxpZ72hmtXMPa+1NJgTrrVWst5ThaynCBLqjkvWOatbaq/C1ubHeVk5uBDqr0PB3VNr7662VaKy1CBiVnG2t5XxHLcudVQS7y4h17iTevo1YyxYi+7eSaCsmcHc+vr8vspQ8B13GjL8vx/+3pTx5cB/Pz3+I0LcnYPnrNuchDS3ayL5KX28EyoYT5ZVkc1RZmySuiT4VXmqZg601d+ltNbSOJNLus5EL8J1jrE7+By7cs4fQQSmJeoKysAe2kr3rBuhvYqnnTr7R8hYufL7TpY7Da+4idCGObRvunmZpsqb+XmXVc3zzjtcJDLoZVw9qmXd3aznG68sTARKPf5zHR97PSx23EOtugP0lcFcByZYqp9F0we27CHgj2F5PpK3GzHuypYy0xsEKktLoLbtsDiXS2kS8tda5AXIFNkYN8dYfH5pA0vkbx7Yqou3FRDoKCXYWE2qvInGwieSBZvt8qKOCpdZSIr01JNuLyLTuINmxgzP3lPPs4T8h/O0vuDb7tt5bvrKIdWXWWs82GGwEExLcMACozGI15NJQXgmIKKg158FU0vbCSMdyRVspiKzC9+7n8tQfcv5gFYGOmwn2bCXYcxOhru1EOgWOYosFRKf0gVrSB+pJHqwl0eJoGekoJtSZT7B7B76efNa7K1jvqmG9qwrfxqgg0PmTxuZzquwzq91VrHZX4OsuJdhVSLRjB4n2PJLteaTbdpBsyzeQyE1ztN9FtKXZSkKiLU1mXaQYz/XcwYXjf0zyiaOQesqcVFkE0UmeZUpC5imSZEa9zlQR7pSznaS5l2zcQCWrLbmU6Pm1nkWPkkvw1KcIHvvPLB/cQ/hgLQw1EW8vhJ5yaKm1xESwpZhLfXtIffEeiDwJkRDZtRgRrb7wem35jLFayeb3MiSvQsWmp7ZgShdyBSBrriGARfwuKWGB1vJTXPiHQzw19E4utdVDWxns30HmYKkJtsy+QCGA+Dp2EeioNYGNtpcZgdMtpQgoidYqoq31hFqbCbU1GbiiEvSrGe1lRDrzCXXtINBVTLCjinjLKwHi76/h/P6bCR7YQranEH9bHi9338rlz47DyiWX1dhEkNf1UAwPu10qxcdg0jWyE4OV4wqq4Zssh+q3tCXyN+9nfeqP8Xc2Q+cW6L/BgLHeU4yvu5hgZymR9jKibRUOJC1VZq1NsYh2baXEPYUQ6nRKQdbB11lLoKPGhmggxaDvsdFRahZJVkm8yA29F+oo2wBSsLOMiM7tKCTRnm/AEDiSbYXud9sqTOFJCfram1lv32v8o10ZpUJz5852N/PS7Hu4/PB+ki9/BmIvuSJFT6/YOvtE1lZPJtTAIhs0bFyxzq4qV+DQkECvqdOKiCsARV6C7x8jevQPWWm5Bd+BagLt5QQPFpFRVq+1Cva/mfWPXk94+l3wvWMQugShhLUz1QLnFa30FGpl1mJa3++h9qcwfsOC2Ps2kSJz57Wdt2rVlNXykF6Di9/g/MJf8lLb7SQ6a6GlwPLUsg7S/rIYwXYxS2C5ApB4WymJVoHDnScLIOsRad1FtK3m6sBh1qPMNJ40b7CjglC7rEu95celcQW61FA9F+/eynrrVoLdJbzcUs3K/B/Dy/9sltHSfj+FOP+ql0XfpDCgYj0tNHMzuaYBVfekVObqM2T+aZqzh3+f8wf3EO+phwFljPJItlQ469DqrlfCHegsM42+3l1qR1+XE2RZSCmieIvucZdZy2irrPEuu29peN23rLpAJeXFwWJQMH5AI3/T2GHvyVLLXdH3ihfio7JZOX4Zz9pUSLiZv/WeEqwnoc8drLCM5lJrOc8dqOCp7lu5cOrPiH57DvzPeVbatTbS3jnmlJAgquSQVUCahnbk1ky7uWAu/ltVWbspa7li6mTztLlbvpk/4kd3NxHpamTlYzutRCjTWQWtO4jdvZPVrn28NPZBOPeoldEIDz6to1e1SQ4gWuJqrsBP5/R1uhxZHPsTsy01JofNXWhErT9jEYfg+EUyXz/GhfEPsNzZRORgMdnWEmgpIdVWRqK9nGhHtfnPCgDDHdVEOyqJdZSTaK90o63aiBpra8BGey2x9uqrGx3l5jPHOguIttdZABdrq7PvT7bWWnYj2V1JrLcUf28BL7SW8MLgu+BbRyH2sosHbG4jR4DXd8zRWRv4JBPSd45msWQIdX20tjzrPyTw5RFeGHgnZ/dXE+2uhqF6/N3VXPhoIamWBrIHGu1owtZRTaizEn93OWu9Zaz1lrPWU4m/q5ZgZwOh9mairbegIDlxcB+Jlt0kWptJtjSSbGkg1VJHVu6H5joOVMKBcpsz4ECJc4v3F4GNAns9c7Bh4zs2f0/C6FhHzPhT6/FVvNX1uRHsrMXfXkegrY5Ie4XxOXCwiMsHyjjXfRsvj70P/5cOk9I2bEnFGBmLm0MpBeqebHoAkQCbrFrHlpAp+JxLJKoaLa29rEpTnod/WWB56kOsdr2V1YNVrHeWEuoqIbq/kExbPdGefTyx/y2saf1I+Ix9uRZ+ZjX772UlfxY49LPXuWpHl4qzqzKnW0hxacxQJkI8mySrzmJqjLz8FMmHB3l54Je4IC0lgBwsgBb5+CUeSCoJd3pDgOmsNALHBBIDiKuWzT2+FoAkOneS6Cgi1tpMrHU3UWNoJQJIpqXatEl2oJKLPSU83Xcrvi8M2T2QuAgpr0jz9eFi42wx1NyBTMra0rhIUAyIeKnOF7n8xT7OzPwel9oriXfsINtdQLgtn4utNSx37SHc3kiitYGcQG4+CuzR9gbCNhoJdjTj79iNr/MWfB37CLbfYvctcCRa3RBIHFAcWDIH67DRUmvAEXjcqCZ7sI7sgWYyB1T7tM+GyjcSLfre3UTbmu367Pc7aj2elhPtLCPaWUKoqxxfbyPB3iYHkLt3krpru1ksxSyXWhv5Yfcvc+nBj8JLD7vFd7h17FpLY4pZRPQeO4B4JfGeJZa7agAhSSq86rqvyN3yPQ/fu48LYx/kcvcdrPcXEuzdYUWvvv3NZHpvY7XvLTx39I9IvPAZNx8jFNr+h2tuojYHyg2O/viD61wkL6Z6pkRXrce6IOKEslpxBiGVsvojbrHQi1/iwvE/4+Xe20mq4rc1H1oLoa2YdHspSdPsFUS6qgh31diIdNYQ66wh3lFFsqOCdJsb+ny8Q69fxeisINlZaL+Xat1NsnUPkc46Yp1VpNrqoKXGViKGW4t5oaeWix//b7CkAsSwt1xWMx6yllf3J3qHbLbdBfZJdSuRo61KhMuPE/nnKX44/C6WDu0h1qfrvJHowZsIthbh67mF4ODb8HfvJty5y1K48fZ6Um31ZFtUHqIcvzumW3eRbNM5TQS6drPevZvVnj2s9zQR76izCcF0Ww2p9hq772R7nWUb9X3x9l02Yu1NvHok25rg4G44sAe07ufgXlIttxJvvZVI+62EO/YS7thDuLOJcFed8TPWVU68q5h4Vz6R7mJLgvh76o23sbsLSH30ZtifDy3FxPYXs9JWw/Pdt/PywodJPn7CGuhp8ZTcHO2zmrMcOtqfqollRWwSz4FDHR8jiaRrqCehlnyqgjd+iew3Frk4+X6ebdnGxfYtpjwCrXeQ6GgmPngrz/btZfWLH4Nz33OVy+qpFl8hop3Jchm23G//hON1Lpz0lkjqKjWsVMXlq0PeSjMtLU5Z0VAYwi8T+5djnJn9AKHOJmgthjYBpJBsezGpjmLineVEuioIddcQ6qqzISJLeAUgAcmBqcJe0+uvd8QNIKWk2itwQtREpLPeQCIhsaCtQynREi7M/hbZpxe9+EqqX9ZDSdxrAYgaFsQ2Mi7GOJWOX36O5FcmuDj2XlZ7dxEfLCbRl0eo4yYC7fnE+htI9N9GsGsfa917We/eY3TUHEe6VcBW4FvhuUflcLAcWitMGYmGEkh9r7+nhnRHPrRth/Y8aN9JuqNwE/2dggp0y6XbZUOg0ljrabLfNDAeEBh3kVWCo203sfY9BoxQp65rt513BSClxLsKSXXuJNmVz/KBbfjaipECTHU0uMLJllrMpTuQB4MV+A7czPP7izk/9154TIHzC+ojxLpfcyE5C5GTfEmpBND8IZsLUTtWvysYNqsTVY1XDlnhs6S+Ps6PRu/kTEcJgf47ifW9zVnezkp8PWVcPHwnwS90w+XHbFWj1qRoN6t/JUAkIF6K0wq6nN3R78tPVMQvXzDnM2ZDPrde/fJ3OHf/3Sz33EmqvYp0e7mBQwBJdxSTVEamq9wAEuiuQ0wSUGRVBJBsuwOTgPR6gbH5fFkk+31p0LY608ahrl2mWdNtVXCokXDvHmKf/xisP+Z8YNMUihY1HbgRgf0E/fHaL4lGIrI/rZy+Z3mjQVJfe4DlsT9iuaWRbG859OWRHMonNlxOeKCBgK6vvYlE5257LOENdeWArRKRGgeSlgpXaqJyk7ZSUh2lxEXX7lJCPToWQsdWaL8B2m+0x9mOPBNeaXk7r7uCQE+VgUmA2jzCXVVk25QidQAUvaRYBFRZDSm/QJfGrldYkGRnManOfJJdO8kOlRnoV/aXEm5vJttzJ3TeCm210FHkZeu2kurbwaWeal6eei/+r4zD0nPWTUV0Ew0tHthoLqHn8mpUzRG1OrbcBIR6GKtNlarP7XNKKCWeg0eHeHn4VzjX2kS4u5FYdx3J7nIYKuXiR29ibeJd8Ox9toZGa22UZRQ4za17DTZfl7swd3ruY1dWk+kiNPRlTpSEbK+kIPoMkfkP4ZPpb62GgXrSncpW7STdXUqsq5RQdxUCiLSejuHuCmNytiMfjVhHGeHO8qsaSgCkuhqtvit2oIB0Z4XNxay1NhLurCfZowRAJckj74FnPmlBuXzai+pkbskI3ZX5k69Bop/+lughJ031SM56aFL1q5wb/nNSg78BPU3QkU+m62bCfSWs99ey3ttMuKuZTFsDaNXigTxC7TuMVom+GpJ9TcS7mwm2NrC+v8YeJ7oaSHdVkeosJNN+M5n2G8h0/Dy0/zy03QBtN5Jpu4lMxzZSHZrr2WlaPiZXqLuEaGcR4bYdBFu2ET6wlcjBrTYRmGrdBl159p2a95C7muqrRNcR7Kpktb3ceGZ866rZcLGk/OQl6PxYdz7hnmIDeKBzL+H2O4m13UpaZSDyKto10/3/km7/OeL9hVzuv4VzY79H5stjth+I5E9S5/jgLIr60qXkQtkut5I397oBwnNyVAakoaJEsqrdet7iy5WhO4n3lZEarLbro7MADlWS6Skhcuo/WlcU/d6lgN+aWPxsgEg+7Cx9TDiVCLl8tK039laKCekK6LM57Cn1pqzCPw4RmX4vSwoauxtJ99aQ6Sol011MqrfMABHoqWG9VyCpI9RdgRgn10Aj1lFyVeAwUHVUk+7Za5mWRPsO0t3FRLt3E+y5lWDfLgK9Daz17IaH/hYuPm7VnBJoFUSL2BllM67hT59e9poMWhXrxSfJPjRIeOB3Sbfshu46aC8i0V1CoK+a9b4GfL3NRDsbnYZtKyPdmUei52biPQWEZRm6a1jvrGe5vZHLrY3Ehn+RcP8tbib8wA4C+28k1no9dL8RBncQ6akk0NNowbK/bzf+3lvw9d1CoG8vgf49BHsaCPfUkuiuId1dTqazyEBLWx60bSF04I1Eu24i2b+D1EAB0d4CAp078XUU4tOkZLfc5Arjo1zmWKcUXLl5AbJmod5iAr0CUj0BuWQdil/2uoqL9lLo2k6m5Q2k2n+BdO92/B2lXGrfRWL29+Gro1bek0jEyCTlp7j2RLYNQyJFRk0Kvepbiagstv501NmSVFecouW/wIUfwmf/gtWeUtZbtsOhCtBE4oGtZFpuIDhxJ0vfOkI4eMHm8TW/8rMBol8zJSqAyCf3AiRVYOY60lg1pkCTm573Yhah/OI34B86OT/8W5xr20usrxH6q8n2FMFgGdGeMoK9lfj6am3ocbSnhHRXgQ1ZGRH+qob83r59pHoarYgy3p1Hoq+ZyNAd+AaaOdfTxNLEb9rkkm1Kk4b1jNv5QgBJZLwNQD3Cv96DeLLkbZlH/DzZR4aJDP0WdN9maxfoqUPaP6R4oW+XgTba00CyS8CpIdtZSaq/iPhgAdGBIhM2X5c3M97TZMK+2r3bQO6XsA80ERxsIDBYjb+vlIt9jVw++iHOHP0fNs4e+2vOzf01F4/9FctH/4K1o39CYOYPCYz9Dv6+X8anyb2DSgTUgaohhhoI9exgvXc7Po2ePAI9eYR68wn3FRDtKzZeiYcacVn/rkobic5qIt3VxtP1vnoCvfVEuutJdNaT6qgl1VlNQuf2VeDvyDfQxfpLCHcVsX73zcRbS4iOvxOe/gSsv+S2V1PK3eaO0taFUzsebHg43ky7BFp013DuWYqQukSav5uBHz3I+vHfZFUKoDMP5NJ/JI9Y+82sDNTy4vT7SDz9oMm5Xw2wfwbTr7MzDEa6misWxC5MwNmwMLn3BZKUazOpb9e65pcfZuXev+OZjrey0tVEqq+ajPzjoRLiPUWEe8vw9TliCiCRnjJS3QU24t1lRLsrr2pEumuJ9ewhOdBMrCePcOcW4v01RIf3cXloN88PvoXApz8CF9R0IYlaNkW9mEoaKPKvXzfzE8mo2zf3QAHlS//A2ux/InigzhV03pVHtqeGUE+TaXRpdwEl0V1FuqvSwKGj6p/8A+VEhmoID1YT7K8k0FdBeLCO8OEm/MO3sHJoHxcHbuPs0Nu5OPluAif/mNRn/ob0l/tg+XFYfdEbL8CqxnOw8jQsfx9e/BI8fi98aZDU6f9JaPwD+Pp/g/WOt7PWuY+zHRWc7ytldagS36EKAkNlhAdLLLGQGiol0V3gjRLEK4HE8auacHc9a32NrPU3EOytJdpdQaqrhHRnCQkpvZ5KQkNNLHXXsNRZRWigllRfubl0tLyJTF8Nl+Y/TPrpT0HqsqvgCF22tqZG282pYC3BSIdMLC3es5WCScLErIe1lbLY9N2L8MMp0vO/xtpHt0KPJlQriQ/UstZfy/nOBlKf/4htnaFCSc86/ET+6kUvBtFD11XDlZyYSXHoNYBonkSi4LLSKhE25Jnd0z5350k9usjzY3/AGWVAuivIdBdAXz7JXmmiUoL9VajsQ8dIXzmJ3kKSPYXEesuJyqpczeipMdMeHdxFsDuP9Y43E+0vwD9UxdnhvTw/+3vw9AMQPKPmUWSEDrOGyj5lbYbW7uOnkudnveFlW8IvEvxcK0tDbzd3KttyI3Tnk+gpJ9DfjG/AuTvR3l0ke6vMH870FhHvreJSSx3LvXsJDu4lNCRNXMx69834+rfhGypgbayWlZk7WT/1BwQ/9zGS356H5/4Zln8EIc0uez6HbmTzkIq1Xsra3FPNHc65FPczD8PXjhH+ZA/rp/6Wx9ru4OXBO1mbejuh6bcQOiw3rdw0vcAhPmZ6dprCS/YUb/BL9W3BvgazjP7+BuOfeJru2Umydyex3mLjdXBkn9VGXehsZqWnkWg4+/l8AAAgAElEQVR/FdnefOi5AQYK+VF7E2v3/xU892mIvuB6Msd91g4sF/ua/pYFSav61lkPFxXHrdG3XLJkWP2lBR25Pefg0UGCw2/D39ZoMd/64K2s9zeR6CojPfsr8MRJW1hl2bLXYPN1OQTphzcPez2XSVCmwIYKykT5K2ZOKTerk1n6Lv7PHOTy8C+ZH20A6dlOujfP5gCkGX0DNfgHqgj1a3a7mERvsZngWF8VVzOiskrdtUSG6vF1F+Lr2kp0cAvLvTfzo7HbWfrsRyHwDKgSQK37NVQ5l3VrloNZr1r0NQj0mm8py6LdWZ/7JC9O/h5Lw7eSHa0g1v4GGMoj1ZdPuL/WQKKYINTXbPeZ7Csk1b/d/P611hJLYEQE8v4qVjuLudRZyNJABcvje0k++B/gKx+BZ4+D//uuMZs1lfO692hNkDwMrU60NqNXeCO8RCPy5dWxRn661v6sQfSitwfhN4h8vp31U/+VsyPv5kzf21jpv5XwQJNZg2iLXJSd0J1Htnsn6Z4C45sUnK412F9DpLeOWE+V8TLRt5NY/3aiA3kEB4rxidejt7M2eDuXuvey1NnEuiaQ5V733ES2P8+U6bnOvayc+jN4+XOg5hCJgDU9F0A0TOIsw5rT+HpFHo1iFK2CxeKVVDrrMlsCidrePjrKub63s9631yo/ZMEZqiMy2Ezsof8Boe+49SuvwWRvHkT9ZF13buvMbh/QBag8YNXrqKElkl4DM9PC7hJXVEem89We9NkHSN37QWKDzdBbAN0qENxOoreA4EC5EUxEE1hkVQSSWF/FVYFDgBJAZJUiI40OeAMFxIffyMXuX+D8kXfAD+bNLEuRpiVU2nBFBYQJVUzJiniW8DUI9JpvqT5t7Z9JfPYj/HDoHVwYv43wdA3BwZvIDLwJDm0l3V9gbl9gYB/rg/vwDzUQGSoiPaQg+9+Q7f6/oP/nYXArkd4iVnsaWBv5VaKn/pLUI0Nw6VFYeR4CWqUXcQrSEw8THGUU1fFEbYDMRVYFhGuCLQ6aK6ljNkMsk7BCwbSWxKpTSuwiBB+3lXvh+z/CxdH3szr4a0SGfpFkT70VKtK5Ezq3G0hkSTThGeovxT9QaYou21WMMkWyHAKGf2gn64cKWD0kt62KwKFmwkP7iA7eRrB3N6tdtaz0VLA2WEZwsNDiVK0/We65lewX7rGl3lK4ygpq2wjZhNwwS2LzI86TMWWtxtsJFc+rQthlu9RoxXVb+RHhz/xPwlNvs0VW9NWTGHkLl/puJTX7a/C9Qbdy9jWY/GMA2VjgYggV0QWQNWclcl3APTdFDFjSmgkz7apYfQ6+0odv8teJDtaS7M0j03ezaVIBISyNMqhjGbF+N+KyJgOVXM0xMlhNeLiO2FgjoUNVxEeKyYy9mbNdN/Hi8T+CpW9btaYW7jjbHCezvmSbZ+bW4hvRN/Vr3WxF7b1cHOatRReznGCKMVqWPI9v+le5MHQna6O3EhirIDqyg0D3z8Ooywzp/oKDjQQGmwgYQIpJHfoFGLoO+q9zQBnaYe9dGn03a/ffBd/9NFx+CdS+VJtYumpw85py+UYrJldvrOQFSC07PuGaiGpBqbSvRElDQMlp5Ki2184kSce1BuYyRF6Ey9+Fby5wee5veLHrnSy330aqvxm6S6Bnh41M3w5iA4UWo4QGHf/oLoLuQpL9+YSH8vENF7J6uIjVw2X4hlx5vWJEhu8ge2gfkcEmUxKrY3VGKwZ2wGCxxSO+sV8n/vVJp2yzKfwh3cUVi3gFIKKAZ02sY13MmtWFBRPNk0QduKx+68JDxD7xYWJDt8LoHQRGf8lcPsYa4BMfgOQLr/BMc/x3nlWK69zPu5jDXUAOTnpNFyEYeBOJVz7t+YLq46Qafq+Vik5dfp7ww/2cHXsHofE6ksMFMFwMh+rJ9lcbIeP9+SQGK0gMVJE4VEnsUOVVHquJDCgoryYyWkh2ugRmKjnbu5tL37qXpLZgyAm4lTXrfpRk8NYh6Fb1unZa8jSVYd1r2qbHJlXm2kZtn75lEq77i0qlg0+yNPMrpMbrjPkM7CEzWGpZqdBgCb7BcvyHqu0Y6S+0ib1wa4mluePDNxDr+39gVtm+Yla6dnFp6vdJf/soqD9yKkTCr7okL7ZQutMrstNLEnaR2/iXm3U2fgm+Wrh65aO5r9h8NF4bcVyhpTbPsS0rLr1A5GunWZn7c1b63krmUJNNtikFnBgoIDZURHyohPShMjhcTXKwjsRgnfEgNFJKcLTERvhwqfE0018HfQ3QI6+ikdSAOzc4Uk5wtIjo0M0k+7ZDbyGx/jpWFn8bnj1mnktOHjPaPiOrqUFHDyW7tMAvpcV8Of6+KkRw9xeG2LPw0oNcuv8veHbg7Vwc3kd4uBr63kx48hYuP3GvWZ71RIalQNqslegkmU/FVgSQq/9TQB+3jSmTLqsl+QtFyTz1CEsP/gXnx24lMFxKWqa0Twvsy8n2FZAa2ElS5d6DHkCGy22WWTPNr2sckqtWTWSwnPj4DtKTO2Gshosjv8nFpx4l4CmZjXy1uR6qLXOiZcLn5dklVnpVR7lfAr1ZCiX2JI3am5tLXLJmz0JT2LJ3genbYLQYBhpNAOgrJSH/e6iapUN1rIzsYn2onFh/Hpkel3ZUGjw+mkf40E0wVE5q8DbiJz4M35kDdT5Mhm22WNfvmOUlAxTzKC70wKzrdYJwdTzUd+s7AllYkfepG9YXqhXt9+8n+sm/4/LAW0iN7iNzuIZY906ivfkWZ6WGS1lu3070UB3hQw2EDlcTGiknNFJCeKSE2HAJqcFyS/nTWwc9DeiYGagmcajczgmNFhAbzSc5tMMSOqn+Utan9xH+yt/C0jddBa8tB9e+NRc9d9/F4bpMgcSuVyDRCxvE0Au6mSiZ6Hnr65V85jTPzP8hL/TfYpk6+m9k7VAVz365i0T2slUeBsIZ2yrFyuGzKbJJ37UCRH58VN2RHCNFcU3uBF+C70xzfvY9LA3X45f57Soi2VNKpr/EtGxSbtZguRHrdYFiM4g8gMgnjo/l20gdqiJ0/EPEL71o/aZMw9iEjoRIvvmrAKL3tDegJyy6BblfapBpANF0rZUFrZJkBbc7t9ImPlLfmMU3uQ9Gi2BAmrIe+svRvfkP1bA8Usf6WL2lT02w+opgaBccbiA6VoJvpIz1Q7eROPmf4bE5iD1j20/okgJagOix2dSkFfFpnY4uxpvI3SwTV4MRTQLr67z14i6DKfdFTRdegDMPE/9cK6Hp9xHpaoYele5UkBwsZKW/gKWhYqLDlabUoodL0ZDl0BBPk0OVBohsfy301ZoHkRrMnV9CdKSAzHgR6ZECkoMlluZeGmnkR3O/SeCbYxBTwzq/xZGZ5IoJbA4I4pOWnOeebxw9OrhmDHGS2hE5ex7ijxH6p27OzvwmlwcaifQVsDJUxeOL7ye7/AVXaRyJWB4jJYUopyiTuVaAgPabCKXFMKFWKk8r6Fbh4jeJfKGFy7O/wuWhSlY6dxLuKSQ9VGNDLlZ8qIzkcAXxw1c5hquI9FZZajQxXkBoZIelSnnkHtsJS6tdnYvi9Y81i/cqgJjr5dYnyJNyNNdzJ4TZHECiasK8ip+EbdiiJg+XH/gYvom9ZEeKwbRlFQxUkRysxne4hpXRWoLTjYQOK41dQLa3FA7vIjVcz9qhCi6O30Lw/j+F7y+4HrWpVeu4KBHVzyp2MJAat+ROKJvo/G9dp4RkQ2leLUD0dfZF+iX9oiaLFXsG3A6za98j85VDBMd/l8TQbWQPNRDpL7YYI3K03uK+9HA+qeFikgLGSBkx8XO4iuShGlLG7yrSQxoVHr/L7DzFjAIH46UWQ64N1bI03MgLg7dx4fR/gR/e56p/CZNKh60DpQXmuHUlWrPuGCYllxvuJUcb9R9Tlx7F0IqzHib7T21cnvkNLvXWszLSzGMje0l8tx2C33W7pwVd11VVIgmA1+hiOQaqeEyz7M5HVDcJBZbL8NKX8D30V1yafSsX+vIJDOSTGd5FZqjBxSCHSkkOlxE/fJXDA4jqnGITBQRGCvGP3Q6PTdtKPtMwopRUssBiluHVAHGvb86USPu4lpVeYki3lnAdyjUxZfe59G1emv0g/pE9pA8JIIUwUAoDNSQ1nzFax/p4DdHZBmLjtbZoS6U3HK61DNDZwTrOzv82PPMA+J51lkPdTuKwnAGVUQokuq5XWJBNbta1AiQHsmgsQcKv5MXKxv7rcl8StlOvD0JPw2NHuXzs/ZzpaSR4uIHUzC0kJ6tJH94OwzeRHd5pdDCFN1xDXMmT4ToDilOApcQPbx5lBqjE4E7S45WsjdZxabiB9dE9LA81szKhXmV/CuvfMIumWbqgJnvNgiYIxZIEtPmoaTSl7jUEkisAEX2Up0yoF0D8AiSfg0ufI/bFuzk3/m5e7N/NC4criXzyt+Hl+yB0zpltTR0pJLOJQmPA1f0zAstMW38usVN7QwRA2wpr5ZbM2+MnWP/EBzk/Usn6cB6ZkV2khxotQBcxEyPl1zAqbeIpKndtogDfZDnB+d+Cs582S2baN+eOGu2037cAolvPaU73MAcQ90xkFUu89I+2G7ZOWZeJmZZdgR/cy5nx38F/uJnkIQXaO2CokKyC1uFGgnKtJqoJTVSRnKwl0VdtFQbpkRqWBqo4N/F2/A/fDckX0W5VyZTbi1zrps8m4Ly3gaqzICLw/3oLovtTuiIUD5MIr0My6LZ1SyZtbkEC5hcvZU1SzxF+bJYfHf+PnBt5C6HRvTBZC4e3wMj1cPhmGC4iPVxpFjIx3EB0pJ7oaDWRsTIi40VEx4qIjxWRGCkznqcOlxMfLCIxVsHSeB3nDzcQHN1Damw38ZFaLkrZPTEBseeNF/6E5ntjqOmDwBHJlUIYODyQbEpQiHaK2BJqdapFbNotLfgkvPhpgp89wA8G38HFsRpWj94GT6gJ9osbKT9tuKZK9mu2IMKBJqiypu/E3iiJeNQaNlou2vc80X/q5vyRJtbH8yzjkz7UQHywhuRIHYmRSuKj5Vc19FnNzCoTFh3PJ3Cknuin/gR834JUzK7LLIdTJUbkDYAYup2PoocCiAmjnlga2+u6pzcCApTmGi7YnkwkzhD+UgerU79O4NAuEkPFZIa3wKE80oPSms0EJxrwT1WxcqiA5Fg1GZVZDNSRGG/g0kgTq/d9EF76lKVmtVgzqOF13VjKuhovPdflGJsNIF6ud1PnFfe+g/Xr/S9L6U+qC7oSxk77EtdKJm9vMz1MaxdbpTUElDMknrufyx//c/xj/x6mmmBkC4y+EQ5vM4BkDlUj/uYAEh6rJDhRQnCygOBkvgPJaAmpw5WkDlfbMThcweXxKi6N1jgXeawRFKMNlrL2iT+Giw/bfiYCSMTbFTkmoklvmdVQsC4o5LIyjpfGOq0jyRFJezqGzkLoOXj+YZYf+ihnJ27n/NSd8MQshF6EkLrVO6Wv/Mw1AySkCgDjjITIbylUlZL7c/6BOpp/7xTnjt/B6tQ2UhPSMLVunmS0kfg1AiQ2ICJXG0D8c3uIPHIXxJ81Kyba/WsAousXMe0+vM+oTseCVs1S+5VilHU8R1pBY+QF1j/xF0SPvIPAUJ2lPpPDbyZ1eItpz9jIbkKTuwhMV3OpZ5tpS1kWWc7k9G4uz7yV4MMHIKGgXLu0OsuuBgXy/kU6m7fIXVCuosEL0MVvfUYjx/vXCw6dL1Bo+zaXtXOFBrZE3wiSJOpXax53LYpMNB2npt688HFin/pzVoabLDGSHruJzIjc5zIyh2o3AaSW4EQ5vqkifNP5BKbyCU8UEM8BZLiWzESzxWMrY2WsjpVZZTCHqmC6kMxoAWfHb4UfztoqwFA8ixbwqVWpFzo6gOi6cgDxKj1yPF2JqHWQRyvpAK1n0vp47Wf/wuf5wcRv89z078Czn4DIefArRPBCh/8VABEBjY8miRIqEdxlRmVZzJu5+AOWHnwna7PbiI8VkB1zmiI62kRsrIbYePlVjcRoFYw2GUAyR8pZOnorPLvgUoK2/NW7OF2gN/t/xYJ4cYn3+gZAdK4pU1ebZmWllni/DFllRCKw8n3WTn+A6HgzsdFdJEcryIxvsZEYrSEy1oR/0lkQuRdyKZK9FWRHmgjP7GP9vt+HMw9BTFsKXJkMywm96OcEXxci5lsazfnZnqXLzYM42l8NPLzPbNDFeRf6Xl2Hl7qzZuY5QKrmyWbr0y+Q/eExzp1+PxfEg+N1ZKdrLHhnpJHMcAMRrSuZqCM0WY5/upj12QJ8MwWEpgqJjZeSHqkwDyIyupvg+C5CU8XEJgqRC8pwBRzeCqNbCY5Xc2bud2H9Sbt/TYMabHVRqo4wLSiKeRbEAOLmgXQfup/cJKnOMsKqIkTLrtWX4IXPwsuftyXSBC+5LKzR2GUyr9mC6EeNSTltbZNsTgvq4izRvvQjVj71btaObUXZJgEkeGgXIk70WgAyVgEjDUZUAWR54S2e2xIgq15KuYvTtW0IgtwFuSqvBIi0qLkZ3mdkPdTcOKNcu24ivQTZFcgmrEo2ePp3iY9XkhitMx86PbGF5MQWYmMVhMZ34RNAJmtsXiAzVkFmsJzsaCOBI3cQ+NyfweVvubZDpvlEqNyfLjYXdG4Gh3MfROsc40XfawGIZEyf1y1vFiRl8DSZakLnJThU7xTXHmuWRVsmtfYtVr8zzMr9v41vdg/B8SZSU3tgtJn0oVo313GoiNBkqQeQQtZnigkKCALIaDnJkRpCY7cYQCQX6fE8A05mRHzdbgBJjxWyMv1Wkt9dtNWAiiC1qYEtqLK9F0Q3j2YbINHzV96XQKI72pBV3ZdcrrWXwH8G1IVRnek9vidto4fAtbpYLh0qAhuVxUOvRFkmWV6rcXN9hfXPvIfgwjbSE8UwXk9guN6IGpuoJj5RcVUjOV5pAMmM1pIWQE7/GsmLX7OLyajn0WaAiB4mCDmAvLKuTEG5neEdBBYtEEvZPuhx0iq3kfOTUYDwfSKn30VqopDkWC26jtTkzSSnthKbLCM0VYt/ahcBjaEimKgETZiONeA79g4y39TWYS9dabG0YSFUfKdgfNOw9xw4JNC6vBxANhhu4vD6/+m7xCMNPXb/5SpruCSFZNC0bjpDMqJ9Gl3NV1Z7eYQeI/Hdfl4+8uucGb2T5Pw7SE40kzpUQXa0DH/fNqJTJQRmSvDNluGbrSA0XWE0yoyVkRqrJDTRbO5oZmIHjG/DvS6LXEh2fAeM7SQy2cT5U/8NVtRVft21LY2onsxZCtHFgcRztSxod5edo9VmK2LnC0O54SlPR1vJtFqnrhPj8rUBxE2oOR92g3Oe3Akg8qWNm/41Ap97D+GF7WQnq2G8Gd9IHb6pOqKTlVcFDoFKgpk9XG8WKX2kEt8nf5ek7wemDV1libeQRoTwgKvSGGvRLSJ66lcHWQsTEB1EZ7OEWmvu2h9pP1jLM4m6y08Qu/dXyU7m2TXEx6tJTu4gPrWN6HQhgekKA0hoopFAfxHYPZeQGq9hfUFroxdd5xO7rlyGKpel2lw57SYFxUn9bE7bO0Y6cXbCYRLyuv9JeLwCDvt+A6atu5CFdb+nCnJHpjjp+JrbxXajFiFkmw1d/Mzf8dzku1mefgexid3IYjJWSPzQNuKTRYSnyvBPV9sITVUSmxAAikiNlxGdqCc6UUt2PB/GbyY1XkR8ooz4RIkpICYKyEzV8OKht8D3pyFzxs2Qp5MkE25qM4dho8iGS6pXHY2kSGQhddQ92/2IcJ5M5N7XOe48RVtrpFi6doDEbPGit6xOv+RZkZxmMuD4zhL6zDuJzefB2G4Yu4P18SrWj1QSmS4nPnV1IzVRZQBhvJaUtNMX/iOpxHmb6jKOW5m3R5GfBBBHQyPYhkshCnrpdVcjKosjpyxiwaxpnaUnSdz3yzC5xZIOiYkaElNFxGfyCB/JI3CkGP9Mk9X6hAcqYKoSJnaSmq5m7eR74dIjZj0sRjNGea7Uj1kOd4GbgaHHV0AhhF39Xw4gpsjEOE3yqu5J5bCebtEuUcpxpQmTZp1Map2stxGnlWQkLpF+/iFevPeveGb47QSndsOUXKRtMJVvHkNsqsomTAPTTYSn64hPVpKdKLKhpE1istImCxFoJouIyw3zZILpMpit57JKWj75XyDwLbd5qZKLXqcTiZ0DcS5m87J9KhfxQOKx1cTxCv3c5/SegJGznTG0DEJrT66x1EQWRGJj+5YKGDmYZlxgJLNmV7T6FIGH3k78iCaVfhFGf5n16Qp8CyWEZ0qvASCVZIbrYKLBABL/yp+g7rjatsCIEPfUn2dBHCFkQVSyobUhTric0Hno1sEDSMx2kEgQsSSn61huMeHK0yTueztMv5nURDnxyRoSk6XEZnYSnNuCf26nA8jEPhKH60ECMLGV7JEqC+7xPWrmXfS5wlhdjOcimJZxVkOv/jhzJQhe4G6IvTqQODdSFlKiIffOS9/oorziA4UdcjWdIxYkk9GcTRS1EHVLYiWlZ1n/+gTPTP8WgZk9MFsGozfC7E4k9FIgKgwMTu4jPNVIfLKK7EQBTOTZMauYZLzKKZupAmIzBUSmK4lN1pCcqoIj9eZl+KZ/EZ5ZsK6Y4q+WO0sRS+w8Vjq6mKLRO1dcRd2SznG8lkA4emfScVKag9K0ne5JsZadp+RJ+NosiH4i7NUt2VoRXamG139VP2SLlC79M74H9hGd2goDvwoj78Z/pBL/qXzCs8XXBBAFhEzuMoBkvv6X5hKpKMQAoopbj9l64bUB4gmJBxB9TABxu0gkCXo70Cq2Y/kZDyBvIjVZagCRFRRjg3M34p/bbgAJTtxOdnw3jJfD2BthoYr1+z4EgadsT8L17BXmOsY5Qde163lOs+X0ziuEwFuC6kovrg4gBrLkZbfc1eusLtdYbtcGeFXMqeBVrVWTMdsXPpnN2PqSUEaWRWCKwvkv4//8X+Of20tmpgCmboLJmwwgqnaOjN+K6BGe3G0AscLSyS0wsQ3GC0iMNxKbaDQaxmbzDCCRqTqbcE3N1MNMoZXs8MW/h7Xv2e9e2HStopX9SXFYSY7WyXi1axZPuSSMc8oEeDFaMx1K3/vNauo2teWH9iYRraUYrimLJeK4qlepm9QVjnp5Z110JrgK5z6P73QzkfGtMPjvYfRdBI9UET5ZRHS2hMR0xVUNaRdNFqand6G6oPQ3/952JpIFMYFTJZ4eSOF6LpbsnWnMTVksCaRbn+y5il54ogU4mqXQ5JQ2rzQmCCArT+N78L2EjpQRmakmOlNNcrqE5MwO4nM3EDl6M6HpZqITt8FMswlJcuwGEieauPTgn0LwaaKRDD51c93kG4spulwNPdbviY25c/SaZdqkgZQ8sGXQYrbe0U16msG0gycvGy/pwjedY0pUM2JaA67da3WPrqGF6KfH9jXWKTIO4bDtcaLYTtfn9nF3v2yZvfgZeHKeS/O/juIM5gvIjr4BpnaQnKogOtVEdHIviYm9JCbrSczuID0rEG2HiWKSE7uITzYRnykheiTfaBs8Us3KWBXRiWqYyLe6r8SJ34LlLxKN+FHxT27OSBRw9/cqgJgVcTQSONxw0xHO/njrnTIpuw31IVGJl+PDNRYrOoaI6B7hRXRx1cOKbVGWUlnGAmtzjXCsGCb3kZ64g9hMA7HZSpKzVab9FUO83pE8UmHfEZlrwH/irfDUIeuWKIFywuTRzNMIrqAy559urmLdJFtecJoTTgmC7iORWkcVpbZ4LPUCgX8Z4fuTv8ZLU00Ej1TAfBEcuxlmbyQ5sZ3YaAPp0SY4vMOC+fhiHWcW38aTn/rvEH8SUhHXpdSzwB7ZbNmAkVPVCd61KMMmbaYNZ3Rebuge3TZwcicEGC91vQkLDmy50hmvXkkf3PgSCZRgqHPcy3qmx/Zn37mJxxuAE82SxBKCk1Zpxmzb7PVHOjl/5JdJzVeTmLmR+PxNxOa3E58rJj1db/FndnIvoYVCQovbSR0phekqmKqxuZTkbA2RuQr8i4WsHy/EN1tCbKqSzFgJmdlaLszW4//a39iW1NpuIncbjre6MV19LprwvAJzEV1Bbe7WdZZS+y5oFoCuKI/NeuaaLIgxRBpG6BPh9E+/5S2V1LwnqQvwgzn8RwWQQjIzDTabnJzSsYbUNQAkfrSC8NFSfAsNrJ78JXhyzNYY54TCBEgaT4v/jLEyDXK7LE11BUSbCtxyBLxCeImJAljtuXfR7X+XfpHVJz/J149+mOen9xI6Wgzz2+HYFpjZ7vzqsToYb4DRfDJT+QQWannp1Nt47KE/Bf8/u7XQlkN1gqlr1hANbWwIonxht5+eSz++2qpIGwog7p7sS/RFHr/d/UiQ9D06Ry6Tlh97aJCMXPWfmO0t9xXvEwkyT36OCyc/RPBYI/GFbYSO30R48SaSx7aTnVFscgeM324AWDu5ndhcmQHDgvHpCpIz9YTnalg7kc/ayTz8R4tIzAggFaRmarg4V8rKlz4A4ccM2LonKQ9XO6fr+UlDVBCdHaB067KQOopUr/V3bQCRiJmZ1yo9XaT3i0Z/IVZFbpccQObqYD6P9Gwt8dldJGaqScyWkzxSdtUjfrTMABKY9wDy1Ajax0TXIZJoCByvBZDNbol47ATKASr3Hc790szrZZArkT5D4uzX+N6J/86FiWYS09vJLNxIdnEr6aNlpGeqbGUjM7Wg1YbTVQSPbmflvjqee+B9ZF7+uPWINV7mfkSCugFUWQyXTFBCQWlpCYGbzPQUkWcldK9OezpQXLlx933ufrQOxgmSA5IHEr2pm77qP31BiHD4svsa9d4JvET4iy2sCiAndxJazCO8kGcAYaYURm83gAQWClk/uZXYXCnpmQr0ngDkAFJr1mP9xA6CR4vJHK0iO15OarqSpWNFnP3UO0mc+bR5C8o+ilqiwZWkb26idTNxHUAcPa7oh591+9cOEAt0AsvFCHwAACAASURBVF4a0HNQDSDy9TU7uWTNE/xz1bC4hdTRSuJHaokdKSF2tIjUXBmpo+VXNRJz5Q4gC3WsnnobPHXYNSfecE2c16FGFFcsiLp7iICe9hCFPOHMvZYja+5oK9ekb5JrrtgtcxF8T/PiQ/fgn2qG6ZuIL9xA9MR2YvMVpI7Vw9EaOFoP07eQmakjOPMGIvflc+H0W4g92g8KjqXCcppckm4AcRZDOzA5cAgoEgBPlj1gGBA8cus67R5ymkFKVOd54NHnlbJWulpAM8DbZJpnZtypV/FfQpnAH1hxIFWAHPHBE/dy+fg+Qid3ElwsIbJQQlru50wJjN1mbnZkoYDAyW3E54tMqXCkBFVDJI7WETlWR+B4CYHjRUSPlsJRxSBlpKdKWDtWxEsnbmftu4fdQigVx+aUYY5GdvOeW5h77FVK5EiU+8z/ZoCIE8p7aFLFZ8Q3ThpAVFK2Cl4M4jtWCYs3GCBiR6uIzu0kOpdH4liJA4mA8jpHYq7MCBicr2P91C/C04OWI7/iu3vh0StcLKUynWCIWBuC5Qle7rM5cNhRfXWk7lMh0kG5WW59gf8bo6Rnb4GZm2wSdP3kTgKnikicqAbFXEf2wuxe0keqic38HKkTb8Z/ooLgwx+G4DNYxzNxSmT0LkYa0c055DSj6zbzyuvU5KJLY+r6DPy6fu8ynel00uLcCvUOUBCudkculnHrXTwUXQU0ch+JRuOEoxGi6q6iOjW1Vlp5nNVP/QbLxwsILFYSPVZO5uhOmCmCsVtgcg/RhZ2ET2whPr+T9FGBxAEl7gEkuFBOcLEMeQkGkKkyMlPFBOcKeWmunkuP/A3EvmcWLCfsuv0NgdeDVw97yVkS0cVInruRn3K8RgsizrrOJwnW3Eo7/arlkj2AJNetSZdvvhxOXI+EOjJXRfjYzYTnt5GcLyZ9rPyqRvJYuQeQWnynboOne627R07IjWCeT29CJMmR9XAGJCeTzq/yAGJafJMF0mSe+i0ZktIxsjGf279Cu+I+/0k4/jY4VkDweAHLp3fiv/dm4qdK4KiAcxvZI3tIzZaRnXsTyfl/R+z4Vvwf/yV45iFYWbkCDuOsxF0mxeXvjcE5wc8hVs+lqY3usjLuE3aJuuHceXbzkhH53SmbrwqT0tq8jbkrJSDsZ3+KcPxrXg4EEpYWjWT8ZLNhL610kdS3/orLp+vwHa8nNl8FitNmS2GiCaZ3kVjIJ3piK8mFPNLz+aTnC0nOl5I4Vkd0vp7IQhXRhQrzOCw+mSknO11kivXisUouffJ9cP5+U845gOjWc5jYeJB7IXf0LInTjD9bQfwvAEiALGvE8RkjctpL5lwzkWgfusfvZW2+0gASP1ZOeK6K0PzNhBa2kFhwhBFxXvc4Vk7sSCnh+Wr8p/bC0x1uUcyGL38l4HXC4Pnem+JZ08yirATqp4FEk2WpjCtcTGsWUdYkAr7vwIPvg5O7CJ0sY+X0DgL3XU/slGKtW0hO3E5qtpH4bDGczCMy8/+ROnG9CU30kTY4q/0qvASHSaMuwAuk9VDXJR2UG7lrtDe0TZlK9zyA6PP6jM7JBV5Zl/uXACkolc3JDfUEU4pep1/1nzqze1NNccFO/bb0Q9EAnJth+aFfZvXELgeQI+UwXQGTdTBTRXp+J4njW0kubietGGUhn8R8KbH5GgNIdL6GxLEqMrOVruTkaDnM5BM7utOs0tp9byf5WDdwecPF+tcCxBFKZ2uIaD/97xoBoh/QlHzAupuIEcZMS/OK8VrXHDKA+I5Vw/EbiM9VWpYiOJ9HaH7btQFEBD1SQuRYNcFTzfB0K6TPmxrZUBgeWFyFqjfP8WqAmEBtAoho5lkefY/ejicypHNd9bJpsmqynDxD8rN/Dff/EqHT1ayf2kbw3jcSO7mV+Gw9sfFbSM40EZ0qgvsLWZ/8v0mduhHfXBmB0x+A5z/t9loxRomWHjhela7dDN7cfclF0CdeARAxW7PhueGVWogvSn1LdnNDDpyjyWsLyE8XHUejXN9oS0OnI07m1Jwv+lVWHv5Dlk7tIrpQDrM1lso1kBwpJDOfR1JJjQUHElmU2EIpUVmO+ToDSvJYFdmjFdYBhvlSOLKTxNGdxE+UEzrZSOSrfw7ZM0YH0ws/yYJ4vNywKAYIj9b/+wGiX48Ty4RYT/qNWQbnhJo56JKV+QmR+fYCsZO7SR65gfBMuQVhMd3kwg4SC8XmZsnVev2j1Fyz1Ik6/MdryHzzv9uiJk3+iiAJW5TuzK6yOJbl8LSxCb64bzNfV5ILRj9PCnPCuPlohNbn9GJqDZa/QuJz/5W1kzUkPr6D0OIbCc/dQPZkDSzuIT27l+RcvblWodNvImiZnRpiR29nae79pH74WQhdtM4dmpHOxCOkUgnDhG4jlFaoriDbyZ6oamlgZay9+Sa954ot5ZopFrgyg6wO9loguBJO4Yu7NKeyYQnNxMuGaH/FTMZGNpu1phGvCYrNb+bcVytHcXM1Ya3I04XFniHx/S7OLNYRO14Es41WxY2s6dFtJI9uIXnsJtKLWwwoscWdRI4XE1msMJAkjtWQnquCuTKYK7KJR+YLyS6UkjleRvJEGZfu/RVY/66xIpFME405axzTfSZc4bW9uZmBUj5KUGyY5ddWENdoQUzCiGcS1oI+Z0HEn1AsSkp9YONr8Ogs8ePNJKevJzpTQXxxF4lTNQTnCzyAyM0SQF7vsZjssQoyJ2os+E1/408grd1rnQCr2lMEEjDcDPoVCyJBs4kiESznkohWr9I4r6Cthwu9Zn8qsfA/D49PEPjEW/EvbiN5agepE3nEFgvJnqgnfWS3ASR0Mg/fvVtZO1VOaLEGZitIHLmdcw/8BclnP2kd/qzDeWydYGgdXzyCL6vlrqou04y+A4mu29DjTa/ruQO/nCclTLyOJBbHZAhFde+OJFpfZDeogFrd1JVlzAgkVw8Q0ctau3qxTiBqUmA9gONPHuPsqSZiJ/JhugkmG+FoPtn5LaSOaW7kJjILW8yKRI/nEzpeTOh4KZHFcmQ9MnPlFt9xbAcs7iS7WAiLVbBYAcdvZv30bbD0Vbu7dCpBQp0WBPtEBtWpWkX3qxmoC/4/CRAZCi29EFnECAFTfRuCwSDx8GXX3PnRw8QXmkhMXE9itpTMyWbS9zYRPFpCbKHYAjbFIjKzr+coUDFfSWaxitDJEmJf/U9uua2shGbPdbTyAjkUShp4KterYVRcYieKkhqmXTwUGKmvIOLVdDaQ6PxYABUfJr/631iaqyB5qhTuKyZ8bCeZE5WmBcXs4IlSVk+Vs3KqjpAYfGQrHMnn/HQTa5/9Y/jBGCz/o9sLnCTBDJyNWR5QuUDWSVviN6kYSF0y5CuZPCgF7FkOA0cOIK57pLXv9DS9aVNtkJk8A2vfIqG9XdIqQLxKgIg80jkxZ3k00+JPu6JOKZ3Ui1/k4ifuIHpyB8zsghlNFheY1UgJJPNbPIBsJ7pYSPBEsQ1ZEiVgsnPFsLATjm8nfSKP1PFi0ov1MC93fQvhU03wo4ecxUyGScmdV0ugZBrNwUrvbeZbjqWeuvCsiGmNK2+96tE1WxBrTOilUS2TIqaF427f8PQyxB6Df2kltdBAavx6kmq1eV8z3L+X4NEy4oslJBcLrmqkFmR6nUaJnCok8MhvQ+AJd/+qp/EQq5lm5W9+HCAyyR5IcsccRV9FKD3NvbX5aCDMLMOzR1i7/zfwK7g8WWL3FZ8vILOQj64zdLyW9ZMNrJ1qIHq8DI69CY69gfjCDpYWGrh477sIf+0gXPoyiG4qlMzmaqOyrKvlaTpMUn2e1FZJpR1S3RvaMGdBZEW0j4abuNVOssJTStZUiQVtDbD+T0S+P8xL2l8ktXL1ABHwFJtph9e0RSH4iFoiQG4gS4+z8vl3EjldADPVcHQXmYUiEioxOb7NgMLCNjKLO4ieKDElFzpVQPREAZn5Emc9FreRPbGFxGmXHUwu7IGFBlh8s3khsafnIbPutHJc27ElkTVRvJhbcGhu6Sb+/R8FiMmV/H1ZEYFDWw2oc7hptYtw+eMkv/6nZBY12XM96aN58EADPHALIU0aCiDH869qpBYLYEGFcaXETu1k9TO/CivfdvcvcJg/Yo1trC731QDR5JmbgZX4vwoor3j+E9DiEdw8CpWB+n5A6ls9nJ+/Df9CGdn76okc2UbmxPWkjm8lutBAaGGvAcVcjoU3wOK/IXP852w+QDHM2ifehf/Lf0/iBydh5QnH9HQuThCYZadlOhRnBLxq1Zya1A2LAa73sJ7p7KglGFQ2HHYZvsSj8OQQlz71+zzzwIcgffaaAGLOfjwqBFpdmCJRVQObcQudIfyP/4nwac2GF8HxalKL5cidSp/aTnrxBgwgSvkeLyNwqoTA6R1ET95MZqEA5nfAyTeTPn0Dkfu3E7q3jMTx22H+Fli8kezJKgL/Mux6XqmJtxoWqrIjE7e19IpBJQI5UdBjBxbRUu6F3vnfaUGkJfT9qkpVoy0pMRWvZdVHVcszn2XlsTYCj7wbTpbB9PVkj94I95fDx/cQPVZN4ngpqRMFVzXSx51Pmj1WQvz0Di4++Fay5796RUHYvcv9CFi7HgtkJTWeiyWAKA5xhHMpUWdRRLhXj80AcoDR7UtDxzQ5Jq1+8R9Z+9yHCdx3KzxYR3zuTWRP/QLpk1vMgibmbyG1WEXqxE7Sp64nffrnSJ1+I4lTNxK7txj/6V1cPvGLXLrv9wl/tRWefdAqf4mqe7sAoXuR6GkyUW6jHO1NfN6It5TCzcHFuRpypUg9C+cWWP38B7h8qonAI38AqeevHiD6cbl8aW14rmVVMes8qcXJcnYkC4lv/iXhU+Wkj26HUyU2iRo9XkH6vjxTHizkWWwRO1FJ8HQ5wfvyiNy7jezxnbCoz7yJ5H1vIPjAVgL3VxLVvNP87bBwo8nU0lfarMsMGVUmqLGGytxjqLFXPOEqEF7NSSlKDVeaYkLykzXgtXY1MZ8jnbGsogxHPCIOnQdeIBl8maUXP8sTX/gAlx/aC6eLYe4GMnM/D/fmw8ebiS/UGkASJwq4mmEAOV4Nx4qI33szZ+69lcTL/+BkW0DYAIhm+VUOc6UOX6DQXI3iEEdAN8MqojnC6VUv5bWhbXKkdmARQMICiAJmE9RlePE42X/4ANmPF8Dpf+uAcCKPrCzdXA3MVZJdLCB83434HthC7BPVhE5W2ERj/HQhiVOFRBaKiJ9qJv3J98BjnfDsKbj4bQircYRL2arzoqINSxbqXnVpnjHR01xaN6wgOp0iE3yJ1I8+ZZWwZxabid5fAI99ANJPXj1AFIOpEljzHxpErOOI1uPo+lTgmf3ufoKnakgeeyM8kE/8RD2h4/VkH1CM9iYEEHkAkRNVBE6XE7h/O5F7t5A9ngeL2+D0z5P4+C/g/8QWfA9UEznxKzD/Vpi/CY6Xcf5zH3HN4DLnXZeS/5+99wCvK7vuey+HBexEryQI9jKcrhLLlhRFUYrlOLFjRYmduDyX51jOs2PHzy+2FSdOHMe27Eh2JCeO7TiSZoYVBAESIFhBdICoLGCvYEXH7fee8sv33/scEBwNZ4ag9OaT7MtvcV/ce8655+y9/qvttdfWPimKEmn9TkZCxGrSQC4GvrICFyFI3hUgQc/qgUKNoFZkR/3x3p/5zp6nxFgJEa2nMWkG3g3w+0kPH+Rq62/Q9+bL3Nu7GjQgXyvA+4vl8GYF7H2FzNd2PBNAHGkQOcL/ew3ZXWUMv/4iXN4T2OjGQw8yYZXwJ6n7iOctQEJwSAmGAJEm0bO9Ez0CiNZsG7lu1JBWil2G/t9hatcLUFNBamcpmTdWY8D81XXwlxvwv7aO6d2rGd9bSaz6BSbf2GzylvzqCqguwH9zqZWuezbh7PsY3pGfgP4/hLuHIXnZaESbfBgkmYWKZbbVYMZPs3j3IN5L+vrr3G/+Ja7v/hRX/mIb6Vr11S+aiolzdtJNBFAMoHX00hvTJuImD2pC/aF0mL4vMfn6R0h+dSXUFJHauY2YUnH2VuK/XmCjU1/dgNUgG4jvKie1s8Q45Xy9BH9XLpm9uUxXlzG1dwupNz6K/7W/AV8thTe2cefAL8Jkn82yVgV4E8lThzikJLUDs0qjKWGouZ/3Cg6dG1FKulmPrQ7VQ4V8IR4wyzoVU5ddp/yfADPqGMMWWjgfOMNG2GoBzg0YP0i29xe5Vf0Sk3VFZGqWwe4iUDRj52rYuQHvzZdxRbu24O5eP2ealk9TvRn2V5KQ3d/4y5A6C9nbSqNDm6rIbZVE1eOFzyAnUo8a4j1sTY+GBz2xtUfpfHlbijKNKe6uPsjEYLIbzvxH4oe/l7Fdm4ntrSSzbzXe3rW4O9eTfXMLqV3Pk9i9nWT1RpLVlST3lhDfk0ty7zKy1ctwDuTi1JYQ21/JWPU27u77EMO1f5/Rpp8ideY/wJ3/CeMHIN4N0SsQGzPBEeOiyOSTuZHthZt/SLL9hxmv/zATh17l9u5XuPS1DxNv1sKtertPn32cp/9fnRbyCbIcVJrVztZLYpsgwnAz0T0/QqZ6De6BxWRqVxPbWYH7xhp4vQp2rjf84O7ahLN7A+7uKkPsqsLQ7tW4e1bj7Kkis2cD7s7n8XZugzcrcXa+yoM9Pws3DgfFHMaIE2XKi5NUiXYDYPGt5sBsJFOC0pimM/f+zo8dUYRnBiB62BAkRgJoMY11euxcQdghYg2hNGvX6MjgNQDRhu7tOKd/k9G672GqutyCozoHdufDLgFkA7z5PO7OF3F37kAdM1eAqENjr6/F27ce9pfh7NxItu5HYKIR3CtkmWQKz6h7yRITZVOniYLGasp37qQnfasu0nUFQJXFlDa1/TAJY21w7U94eOQHGa3/AGP7q5jcW0Jq7xq8vZtgz0uw+wXYtwl33xqye8rJ7Com9WYuyTdXkti5koTs75oy4nvLGNtZxv3X13D/jY2M73uFaP3HSDV+H+7Rn8A98StkW36fdMefEe38KhMtX2Hi5K8TO/rPyTZ+GK++Cu9gCfGaNdza9SpXq/8JsbN/CpnLgTnypCd8D58bgOjBh4F7xoQROyjEapK0bvUxtednSO5fS6ZuIdmDhcR2FeMKHPJLJSx3rZ8TJXe9xujuH4aLX7fzX0wHAtEnrXQgSSyFMs2CMIX5Y0E0U3wdKAMB5R1ej4d5jRgN5gTCuQFdaDaZC4ZXDxlCnSHtcRku/1eGD34vt9/YTqx6E44xr4pgT67VIm9uw3vzRZxdz+Ps3mKkhrNnPXOi3RvI7N5GRtJmf4H5reje74NbO8G5Y6I+kvCKqsxokFByCCDmed+hd97tq/BainKmPDzVtVXXCDlmYdZNkre+yoPun+PSgRe5truA2IEiOFQJ+7QKcT18bQN8bRN8XZNfWyxpnuSrG+z3e7fDni2wax3+m3Luy3Dk4O4rxzlQydiu1Yzs38BI/YuMHHmVh0df4cHhrYzUljCxbxmxNyL4e5ea4yd27uBuzQ8ycfr38cds1XSL6Hd70Hf4Xs9rQs1Wg0hzPAKIA7d6mNr706Rq1pOpW0TmUCHx3SV4byg/7dkAkt69g5E9fwuv9z9C9Kzpc5Ut0+/LjEopcBIKRFum26xR8iXcQ0Vg+PnJzxeZYX7zRpe2mmHGHwnBYa4RRnoeuSjupBbxqlTMLbzLf8ndY/+Y4dpXmTrwMun9L+Lu3o6/ewPsLYU95fi7tuLu3kF2z1Yy+zbi7t0wd9oj0+pVUm+sxd+/HKe6kLGd3w1n/hhSDw2zChgCiRk0PUPIwCbi8+SOeU/f6Fq6sCjj4afTpNJZEloKaraukFq5Rfx+Dfd7/jW3Gz/JWN1WsjUVsEtOZoExFYxW3bUZdj0PO1+ANxTnfwG+qkVmz5tiD3x9E7y5DnZXwp4y2FcK1SVk9xeTqCliqjaPsbqlTNTnEDu8AKdxHhyeD/ueg+oiMw5Te/8uifbfgtFmM4v+XqI479oPBiD6TzPzY2/RIA7c7mZq708agGTrlpA5VPw4QHYpJL5hTpTZu5XJ/a8wffJHYVg75Gr9kd3xV0ZVLJMwOLAYkJYL54qCWgUCybsCRAfp+YxtoAtYBycEiMn7MULRLuSxSxxtRXdjxEdVCmIYRvfzoOknuLhnB6N1W3GPvIpb+xLerpfwd76Av3uz6QR37zoy1etIVW80lN0ngKybGwkgNR+0E0v7c0jvX8bIzhdItfwaTN6dCecKJNZJD8KiQce8S9+8K2/Y5w9imhKdXoqEN8GoO8KIM82Yp0rAQmIC4lfg+k7iLf83o9UvMbVzMfHdEZyGlWQO5ZOpKzLmlHyV7M4qk2vkfG0L3td3wNdfwn/dkv5Of3ULib/cQPx/rYc9r8Gul3B2bia+s5LpXcXE9xXg7s+D/dLcq6H6Faj/AWj7DbhVD9mHZng10uqKZ3qpE01HWic91CAS3CbfY7iV6L4fJ1OzCad2BdlDZSR2l+FrScCbmwxPeHvWMRcSH8Xrt/Cw9ruh5/dg+oKZb1AQS+WKNNFqx143Ewh/41dbnjf3+C5MEDGDrPNNjdhAe+hPhbi1LmKmGohmozWfoOWfds2RERfJcXjQSKbvl7hT/z3c2rve2NvZui0QAuTN1/B3voK7ZyvZ6jWkasqJ799gHNTMMwFkI96+l40GcaoXk6pZzET1ZkYbfgLuXLRYN4l0EixKD1e0JeAKo0H0xzO8dLrsN8kVk+ikvpEdPMUUUSbNAiXbl7avJuBBA5z5fxk/9ho39y5j5GABD2vzeLg/l4f78pjYV0S8uoJMzQao3YovU2zvVti7w5AmIOWoOm9ux1M0aOfL8OYOM7ckXyZRXczk3gLGdxUz+vpaxt/4AG79j0L/H8Gdk6AFX1m7F59qQH3zACJPzFaqFytagCThbhPR6h8xAHHrVpE9VE5sT5kJVjwrQLL71pKuX8+DvVtIHFZ29Fdh/ApMJMzWcvIPZT2ofJMBiHwSw7wWIIGcfEcGiFgnRikLIhtINxGeIIIoiaDQWMasGNTKQaVsWDVmBv1hO5z+PA8PfZwHNZuYrN1IbH8Vmeq1ULcdf8/zsOtV/F0fxNnzItmaNaRqy4gfWE+iZiPZ/etxqqvmSBvJ7txKdvc6MvuWkqhZSrxhHXdqvheuttjZKj2AAYPmQSatsDMC4R375T1+6eE7SbxsAleFkM3MvECiPlL8TJVGAuFlR8ok8ZHpxbn9RUZO/xhjJ/8eE43fxcO6l7i/bxOj1WuJ1a3Bb6yE42tIV6/A2bfMkLdvJX51oBkOlMEBTaSthF1L8WqeI1kfYeJohAfHl3P/2HpuH/448bZfhbO74e51u1+3wKx5PUWkg4Vj7/Fh3/Yw48eZb3Rhm4elrBYjiBTRu9dAouYzFiC1BTj1FcT3lpvADLs2wt71+Puq5kTim/SBDUzv20h0/wtwSnuu1MDEPTN3qTuysA3sYIFDKiUYFv35LgqEiPHwTY2lIIw7S2uE6tKGxkIG088Gxyrdu//3SDR8L8NvbuDhntWk6jbi12+GgxvgwEb8vZsMSLzdL+PsfYF0TRWJ2jXEa6sMZfdX4eyvtAB52rZ6vdUee6pI7c0nXrOC9LE13K7+EFzYA9H4jEulaTWl/tkZ1PfQM2/LDo9/aFfraalQnKnsJAnHrs03PyqzypTCCUJd6rZQQWu2lxtAD9z8czj728Ta/hX3Gz7D7eq/yZ3qVxk9sI3pQ+tIHV5Dur6EVF0+yZpckjX5ZA8U49aVwcE1UF2Jt7+CWG0po42rGWnZzlj/p5i69C9JXP0CRLshqRBwIE7VamCVGiSz/BlfhsH0nzFd5BrbyxspqjX892tIHPh+sgc249YWBQApMwAxvocBSGUAkKdrFb1M7Nlorh3bnUviwA4499swNWhuQjETC5AgvPgNAJGn8s5WRMSIEhMKCyWt1UIWHCrXrIJpGVw/Y2qymlTd7Ah+8gZMH+b+wU+QqN1MsuZF0vt34NSsw62pxN+/FqrXQfVGQ17NetyazWRqXiB14HmSB6tIHlqDW7sW74Co6m1bt2atud7bt2vN6j1qN+HUrCVzsIL08RLuHtjCaOMvwd0ztockQJgmyR0eRm+RNqkINrbwLPyh/g75TuVJVWjBqi3lJgWaI5BYxsWzCtrwpz42zGX2c7wNYwNw6yjZ83/B9On/xFjL5xg98c+41/ApHjR8jJGGv8FYwwcZa3iNcVH9Bxk/9D1EG/4xsaM/Q6Ll10gP/BHO1Wq7tcLUdUjIaQ2KgolHdE+iQIOa33+WDtClpJ3N9SQ0fbPxpX7CAuQBXPwTotWfNP4R9atNQCG2rwRqt8C+DbB/PdSshZqqp2/3byaz60VczYMdWkaqeinj1R+Bi182m+RIu92Pxon6Lqr270xmbPqBKS3rEc3Kong3gISdFhhkOkErD2xVjRgJN246wfrwStWYAO8q7tgBJgd/gYn6DWTqCnD2b8WpfhF3/6YAHAJIJdSsgQMVeLUVZGvXk6l5idSBl0geXEvqUBlu7ZoAGCFQHm8Ftnei7G519nrky6TqqsicLOZhXQXjDZ+BK/tgUqvbNGJavz3CpDOM1k+LO73A/Jorj6jrHgHEbjFtfkyTqmLIwC80bWDs6yfDuROda8ZH32mFT3oSErfsjrfRdpg+Qvbqn+Fc+zL+tS/CtS/Atd+Ha79r6eofwd39JgeMBwMwph2SMvam9NshKAJA6Oc0vtKidjZZUcm5v3SuwZveCCkz/l7wXM4wXPg9YjUfNRVdLEAKie8vhroNVoDOAEMgeUravxktmzA+Wl0O1D5H4kAVbudPwugpM5OvqKI2/jGRaPGBOt8YQFlSbuI9AEQjpo40QFJ+ihxxrfO9h8MYWSWhqbNlQ0tAph7AZD0T5/8frh1+nujhlbgHF+PuX4e7bwf+vu341QJJJf6BEqgrwj9YhFe3Gq92A86BHWRrt5M9WIlzsNx+iNxyWgAAIABJREFUXleJ9wRyDqzmSeTWrMZTuLNmrVG1ybqNOKdKGT9cyOjBD+F1fR7GtB2b/CsFGSZJ8ZCoP4JWnRkp9wwcolOtpp2xWiy36QsxvbhnFpMaHAS40TgJINNmpl+bwqiCvNXWnjbpEYWJgEpTl6bJToEzYZfpOqopO4HvTpF1EmZDmWzaMRntM4drvPSjgeYSKFRjK8U0CcZNa1cizg0keszw8ULNFMpbA5jsFTjz6yRrP0hS0bRDFcRri+xc0EFN7lbBgSr82so5ETVKen0Z9m2DmuVwKIfsoVwmG14mPvAbJsUGd1ZIVzyuLcudJI6XfU8r8iNGus0ARPlKIzgMGzLLddQLAocy47Sr6EQP8b7Pc+Poa9xtzCd1eAkcXAZyGvfLnHoeb/8WozG8ukL8Q3kBQKrwajcFtM4C4z0ARBrmSSStRE2ZAWNszwYSBy1Aoo25jNRUMnXkH8GNg5AYMdJEjnMKpSOMkxBoxDx6vmd46XQTCg9MDRPnEEOK9JkJENif0s/ZteTKIrabKkSJMUXMGIBy6xUWNqFJreEIuU9t+F4caC9kri0MKJCmIVKuqOZfdJ7Bls4xzyetoXI/KvIQI8UkCSMs5DPpgnN76dLKhlYxa7PMOdAguj1T8Do5iN/zOdIHXzKpNn5dGfHaAkPGfzqwZk7ACAHFgXVwQDlvyu3Kx9+/FL9+KWM1hYwc/bv4V/8bZIZnKQBFZWM4fswsNdbYvNsrYkSg6SOpW0VfBJAHRnuYkpZCnVFNHkzfhPN/wp2Df4fhA4VkmwvIHsrHqyvGq8vHqy3Fq9mIe2Ajbl0x7sFc/Pp8/EPlJmTJgW1QVwEHpWLLg/dr8A8+mdzaCp5EBiC1miRcS6x6PbH6KtInS4keWcF47UpGa1+CPjltKlOpNAPVhRKDxNEaZpM79W499I7fiwMlOZTNaplY2lYRIpn+0i6PAhzKeQu9dHW4zpVWGwm09YiJss3YR8pk0DWFlpCkyeV5aofXjLaHU4DACxxRa9EZ5jSo1Y3rBFWdUXBC46qJvOngnuzl3wOPPLEHZK4pwqm0DpNmMwMQDy8zZdKO0m0/TKZ+G87+CqgtJXEw35B3sAxqy22gQcGGuVDdWji0CQ5uxtldQWpXHv6hXBIHcxmv28B002fhYYOZ95GNZarSe6rTr37ROAWq9YlPqF1u1aPGvLILi6yJpTmDQLJIa5g9z4fh0k4mjv4YD/dvJ3E4F5oEDqnIdVZLHMpDD+4cKsOpV0ivALe+HP+gkL4NDmyGulI4mA91AUgOVrwjQIxpJvPsbUiShAPrze/L6Y83VBI/WkyscQWx+kVM1FUwffKfw/B+8GQ6iv0yaJcpMYZjp7vfoXve7St1tFIVVSvLmlSKlivmod+ypL4ctyWQjFEVLJZWv2vQXG31NULWH8fxdJ1gIZRSVVRqXNmgIam0p8iohwwyxaQTQs2T9rWKzsNxHLOXeNrXdpcqxyRgKEQvsMjcnLm5Z9KgFiBBxUbFdmcAksVT5GzsKNMnvx+ncaPxQ2Vyi3mTh1aZ3DAOCiASmHMFSAXUr4H6dXj7NpLctcYIaw4Xkj5YxKiiWmd/C8aVOTBNwneY9jX6Fhi++PpdJETESixZw7bOklSmBtYkmylOrm18YsMwXM10288b2z7VsA4aC6FOam0HXs2Lxodw6nNxGueTPTKfbEMe2UOrceu24tdug9qNIMRLatQWQ22eBcrBclxFs55AzsHVPIkETmoEuk1kG9cSP1LK1KE84oeX4xxdQOpIIQ/qP0ri7Bcg8cDIApkk0pMaXLNB57t00DtDRKiQJpBmUB+K9F5kxH3wffDeJNAFzKnTgnXT0jTqcwk0Mbg2qElnYmTMfoCPrqfUEOEqBJ/RFvoj9CNVFE9FGHx5M3ESZvmrZmVmfFOrNnQ74a3q/Dm+LEDSpPwk2cCn0z2ZxVyJh/j3DzF65JM4R6qMteDVFBpwpBpW4R4shEMSls8AEAMwCdtSOLQDr+5F3AProaES6guJ7i8n3vSPyF79Y9zUJZR4orCvFLIBhgSQ1Q5P7IGIzaGRhLOTPDpZp5n13Or41Bjc3k+i++eZOPZxEkd34BxbS7ZhJXHlPx3YbgDi1FXh1OeRPTLPkgBysAq3bpsh/+BajMSQ31BbasBlNIkBSEUAkG9sLTjKA5A83kqrULsODm3AO1ZF8shqJmuKiB/Kh5OL8JpWcL9uPZMdPwsT/Qb1inzLsJEv4D1m2AfqVoB5K5lONGp2piPDQ+wH4jJBT9pEqyHU6u9gSwIdPDv5U1wUAEQ8rbQIs2RZZpmksOeazUMdXwaU9vASqWio/tnx0TjJjDNRGXn8Kd9qGhNREUDSZgY5hK05XvehC+iPbwJALJ95qJBENp0x2knmi5ZQuLHbcGcfIw0fgSMSjJX4e0vJ1JWQqi8kVZ9PtrHImN/+IQuSp20NPx1YhX+gAI6+CMc/aMx7o5GOFuDUrWKiYQuJgZ/FGzthxkQjpa4y5rUZUv1n1wBJAIVkgaP9QdwL4N03kkn9LItapL1nTOdPNOIP/hzRxh1m0so7+SLJk5t5cHIZd48uJN24Gk8MWl+J11CGd7jAkt7rs0PrLdUL1astqUPqywKqwGuowKtfPYe2DBoKoKEEt76KbP0WMod2kG1YT/bYQjInIsRPFDJxXFt3/RkkboIW9gdCdzKrFGhxipg5ULe2v6ykNe8FHKlSda3pUYMfKylDDa3P9b06LaTg+BBJT2hnO/LhIRZ04Y2Eg/Z4oqh+X8eb/3SoOXn2OXYBmO5CNHP8o0NmfWh/8an/12+q+0yKm2z7MaLcI+3fhvR1HrT/LtOHP2yiV1RvsNGmA9vM+ERPFDB9MpdsY4kZd/GG+OBpWuor4FCZvf6hqhleM583LsM9ugSvpYzx4x/GH/oSxIcgOYyTiptKPNFE0G3BpkrihTAlySwBIU3ELJF1Y6YCRMyz4FDI0Umrds8AXPk8tH836YNL4NBiOLKZ5PGtPGjK5cGp5WSOluI3rJk7HV6NP1dqLIYjK/AbC/AaNuIdegHn0Es4DRtxji0ne2IBiWPLiB/fQbrj5+DmPltWx1UMHKKeCg1I6UokBAAJOT/g70c5ajJ1JH5tp4aHGSZ9as76DjlBYAtki8cUSYZJowW3Kit0nJHWf0288RU4pIRJpZVshwPbcQ5vYPJUIZPNeZZ/5jj+NJRDQymmrV+L3yBSmk4x/tHleMeW4p0sJN30Aqn2H4crfwqxQcjGSacgqjVVZjwVvbVmaTj/p4CKQBIxYy7fL6mCW5YFHH8YEtUw/pskWz9K9nAZ1ETMRIx1qDYYcyZ1fA1O4zOAQw9jOqcc//AcSB0RAqR+qwWIwCGt1liKc6SYeH0BiRObud/wYaZO/yKkZGrFSCWSJnPK5mfJeQ0UxGMiV3+IA2ymqhWXdnLNdux3CKPP9TFkqpj6COqTSZL+/UCI3CF2/Q8Ybf00ySNbLUBq1oGobi1OYznRk8VMNRWSlYCdy9gfLofDxXA4DznlHLIpTv7hUrwjefhH8gwPZA9vxm1+jQdHNnO/9R+Zbau1dimbcEwdcw28xlK+t5YxK/iufwqLi8x6EBN5kWUQ6uJUL/7Ir+Fe/hST9ZW4tQVQuxRqta5Ys+Mb4dB6aNxgESsmD5n9ads5do7pVAOQPPzGQryGDTgNmw1gDUAa1uEcXke8roTEkUruH67iYcvfgzt/AdnL4GgpsawMJRfK1LKZy+E8hkWMNIY0jAASgkQdJdH51y8xlqpqJh2bnJlOaxJTxfmGGOn/UUabt5I5oiiTQvqiUuM8e0cKiZ8oJnailOyROQjGkGdkQTSugsY8oz28hnV4jeV44gsB5fBa3MPbcI5v537jSm4c3Ub6whdtpRhV59dgy4IOMtY1stYHF1gUrPKIRLlPQkvtLYxAD/mwlvTQDzPduo2E0tYP7oD656FuG+zfDvuVyr4eDlaCNMiRCvy5tjr3SNmcicYyOFKCf6QE92gJ7pE1uI3r8Ru24TdsIXmwlOThIlKtFUy2v8h474/C2C6zTUJoVdn5ChsMmq1AbM0s63Q+8s6kUWRu6ci/2kDRVECcaSY91X1Ut2gtfBRGD/Kg5UNMnVqFe7QIDhdBQyE05MORlfjHckkfLzOJpe4zjL/GnSOFcCQXjq3AP1qIf3ijGXsatsDh9XBsDenGQmInyhk9uZV77Z+G+18CX0JSmylZB01NCBALEssPkYdcYJrbJlpialqNNeFc+vdEOz7CZGMp2cMb4ejLcOQDcPAFqN0OhzbbUJom/BpD5g4Z/Wnb8Py5tBVwuMoA1D2+EufECpxjZThH1hvJIYBogU5aczany0h2r+P28RdJX/lVu5FmQuvtbUc8Aomteh7+bftPjrK80TCEIa2iCNU3IV/821gRaeJ1iklGmcTsMSQOmxyAi/+esRNVJE8shKO50JgPjSuNv2gY+ViuHaejFbhH5zLu4TkCSBEcXYl/IgfxgNu4EbfhRfz6HdCwEY7bbA+/ZS2pjm3cPL6O6NA/hWSdWQVrXIxZ4XaBwwQFA20SGeE8ca7hch9nopn4lV9lsvtjTDVVkjieS+p4Hl5TKeljVcTq15I6vBZOrYNTRbhHlsOxYjhaCkfL59jq3DnSkUo4vBWOrMM7uRS3aRHuiSLco2vxjmyynzeU4B/Nh5Z8Uq0FPDhRznjH98L1P4eoainZ2sICgt3yTHudaDsHK1FCoEhaKnxpTS2p578GiGbRJ5hmTCaqOEuK9eGfE2/7hNEQcpQ5mmfp+HI4sRKOFbwNz8xx/MV75nqr8E6swj1RgHusEq9RAvwFOLwJGpfhH1sEp8rJNK/l4ckiRjtewb/xKyYbnawmZAMtEqxAFEBCikS5RUZrE9whssP/i8nuTzF2tJh4YwE0lxA/lkPs5BLGGldy9+AqJo8V4Xeuga5csicW4R2f9cAhWN5rO1dghOeFAGncYDuoaRFOkzRJEd7R1SBqLIKThWQOLyJ+dAmp1jU8PPYSMc2NxNpmOkeTXjaLQLPOsRl1GwJFALKhP4FExQCCGXGZpn9FX7LTJ0iaYnFW7I7BvX/DpMyeYyU2BG8kfAHeiZW4J1fhHRMYVsORUjgSCte5AqQIjq2C46vwjhfhHi+1dGw13pEN0LgWrYOnKRfv6ApSR1eRbClnpKmKye6PwvgfgDKOBRAZA8EiwVCLCCSRTDZqioulbuxntOVzJJtfhpMlODUqCFBEtG4BY4efY+T4Ukab8phoKSTenofTtRg6l+E15eKfKMY/XvK2LSdKzfXettV3z0LHK+HIFji6BY5X4jcV4LUuNERTnr22BuJoARxfin8yl8zJKmInX2Sy6XsYPqnatNfMwiY/JSfclkBS/ELLUdVRIoHEmlryOYI5Eb0VfYcDJJlM4rrGw5gRA0plUbE59Uk438h0FG7W4PR+F7GGCN6BFXB0HWgW/dhqOzanivCPr4Nj66zFIRAdfxYeKIETeXCyAP9EFd7JKmPteKfyMON/UsK7HATKk0vh1EqyJzcRP7WFyY4S7rV/GGInbE2xVAIv7ZqJWo23lOG0r1ysWILszS7GOn6V0caPkT2sybw8qF8LTdugZQ20l5LtLCPRUUa8o5hE6yrSzYtwTi0OAFJowXHiG1uBjZOS4m/X6rOA3glIOubtvj8hLbEBjm6CYxvwmkpw2ubjtEfwmxcbyYGcRCPFVhnV7h3bSPbEVuLN6xhp+Qjc/e8Q7wHtXJuJ4SY8m2wYzLiGGkSmlmETASLAyaPZtxne+Y57k1UF+VkvgSOVSpHJZMxkm9GsWpE60YV76TdJd1bhHo9Ag6JLSknaEoxNqVmK4J3YYAEipj1WBCeeYfwNXxSYa4QA0XIHp2UlfstCaM6xADy22gLpRAH+8U2kT1UR75rHWOdquP3FIMviAXhR9LwSjgKIwB9h/C7x7v/O2PHvMrOOnFA4Ls+mghypgJPr4dQGaN0E7evw2yugvQRayuCUkFlkpIPfNJdW54RUErx/760BzbEqK6mOS3qU4LTm4LRF8Noi0LwQjss5FEgqbMqDgHSykmzLSqbaS7nb8Qmc2/8Zkn2QiJuisr7WUwWJd9bcUgasXU6qyKARnValfMdrkFnYMFojnU4jraLWJHuqH5K38O/9IdG+v028qQhOSVrLzKqAxu2g9KSmSpymciPlpe2NVDcAeYbxF0CkgY6X4mvsT5WSPbXaZJmLB/zWCDTJTy4H45NughOr8ZpXku6MMNWZS7Tvx+HO18HrM9u5+dkJ4umMqYov6yHC6HmiLb/JyPHV0LMYWjT5kgtHFkDjAlAlioPFpOvLSB8pIXN8hbH3OVYGRyugqdR2hjpkTlQMp+ZI+u3ja+DYWjhRgd9cjNu6Cqd9MW5HBNrmQdMSOFYIjZq3kaapNOrXb1tAqnMxd04UMNb1d+HG/4DoDSs2BBAzy6p1G9q9V6T3wfJSM2nyV8PECgGi7dlkakmDhCaWieIlJ01KefLSZxlrryB6LA9OFUCr+KECjm6DYy/gN63DbS6DpjI4KbOq2FLTHMdePKPxP1Fh6VQxbnMxmZZSMq35OO0L8NvnQctiOKmMi+ct6bdbF+F2Rkh0LmOi9WOkz/0bmHzd1ghQqkx6ykasDUCifcT6/h13W9cy0TmPZPNyaFkCp8VgEWhZhH8qzyDUbcrHPbUQ9+RCM/egORBOlUFLwZOpOR/eieYEqgCM6tzjZdb8kt3ZnIfTIhVbGHRQBP/UAjiuUKMiGpIgCj4shrbncDqeI9a8gPGmtaS7fgzu7oLkHe1nYBas+07UOO42/UCTR3Yy0ZhYf0V8kLCwtVqB5LGXKqmPt8Dl32SyZzvjrYtJyKIwTFgIHRqbdXBiI37TGiPANEacWgUnCi3jPuv4Gx9WwKvAbS4l07aCdMcy0vKTW/OgdbH9vaObQdSkiOYi/LbnSLevINYmf+Rv41xWTed9wEV8Z8xsnaDxjpC+Cnd3M33lJ5m88Alig99Dov9lol1FjJzIIdO5AbdtB27LDvzW9fgdi6H9OWjRepBiKykkLZ5E7wQefddcNHc6Jd9GpOvkGpC6LavJtpbjti/Ha8+xdujJXDhaaemkgCSALIT2+dC6ALelkHTLh/H6fgZG3gDnnNlsJjl536TFS3M8CveGVpU+lX0upHznvkKN8VZH3Txx5oZZJ+/2fpqp9nyi7QtJN5eQPVlmwdBRbiKhSHM0yyzPh9YlVgCfyoemkrmPvfjmlPwXgbAcmlbjtZSQ6VxKunM5mbYysq1l0Cq+yIWT5ZbEJ61LoXUlbls+XncZE80bmOz6Xrj/e+B2KlZt19QYJ13FAlLjuNNncSaPQ3QPzv0vMXH+3zLe86+Y6vgcsbafJtn8z0m3fJxM1woy3REyHRGy0jDtK6BVKvUJpE55Ij0jQKSZZO/KzhRYTpXjtpTbzmkrwW0rwD+10n5/cjmcXAUGIOqkJQFp0EqMepY0yV74LEx+GZIDZKeUOvFoD0aBRGkpZnvrmXV8Asp37is0q6RBwpc+m5qaInG/iWj3D+C0VxqJnWpbbswbmTlO8xoj0WlbDm3q65XQovcSSvOtQNOYPZOAVPBGjC8AFuC15ZLpyCfZWUC6XQCRv1EZgFPAXGjvwQjmcgMoTq8g1Z7PWPsHmTr3L2F8f1CIW7V9IaI1I1pPnFbRQVMoSTVWr4FzEbyLMNIM9w7BzTfg8m+RufgPiJ17kYnezYx3bCTd+jJOy6s4LS/itm7DbduI37YaX458Rz62g4TYgNRJLeqs3MD0eitIZLIV4bWtxGtbjteabx7EPuhqa8pJKrQKeJIOS+CUACJptBq3tYxsW4mRHnrvyR4WSKQ1TikmLpNPYNY9rIQuResK8ZoWku5YQqy3itjQ98OD/2krhodhLNXaDXK3lOCoORNVC58Jos947gJMSKEdFrLWW9vw+0fM99YjvvFvHTv7+sERb7F+vvG8Wcfp2JCMFgwnPYPU/mBdhCZHwyW11gOTxozhJm8yMdzC5MUv8PDoFtzWZdBZQKYtj3RrLm5HCdmWSpInCvDalwSaejm0CiALLZnx19iHJLBIy4iK8FpFBUbKu225hvnFC9ac17EKEgXgMD7PcmM1CCDpjiIyhgfK8Zqr7LHmd2X5iBdK4FQVXrP4NA+vp5ypzud50PV9pG79PtBrsibcdErp7rM6y3SyOkFBrqQtja9dUc1S0HG0nx3eADgdkGmD1Ammu3+HVOevkez4HIn2Hyba/kmibS8Saysn0bYMvzcHTs+DLmkbRZbmwcn5cCwHjkj654LUrbRBSwlKCXAUVj49n2xPhGRbDpm2cpyWl8k0bSPVtIx0i663AnpLwNiZYvhi/NZSQ15bMV6bfe+3hWZgqOH0d/CZAhIKNhzXdZZC53y8vgWk+0pJnP4E453K/r0KsYytjKCZI8OeWr6kPKQkqewkjjONp6WyBjBxfD+K40Uxc0yGmR9lAAdsOhMrDhfoaKJy9lA89kf4hTHnwvFREFKMHVxKuAmPe1Ib4nF2kCGtPdqDfdqVm5SeJp0cIZoeYcofNxOBYyZbz8wMmN3DmK4hdeHfMNr0UTJtimzm4bcJDCEVojHw2wrx21fhy8poywtoFbSJgvFoXmV8RxMRba7Ab60w45/pLCTVvYrk6aUkexaTOr2ITPdSnI5VZmy9lg34LeusCdW2xJjTbscSAxIDKAnW1gBIBnShQC2E5lJoroDmdbintnGvbjX3jlYy2vMhRs78E+LDvwsZ1TEYeRuAPKFzTeKjQp8qjZX2SKdc/MQUZJWuMQSJdhivgTtfxr/6a2Qv/ATZc/+QB03PM9a0jqlTFSSay0g3y4kuNSFlMTRdq/E6y030IXGqmERTKanWPLI9C/AGFpLpWoXftQE6PoDb+hLptkJSbYtwupbC6VVmYASCuRD6fWO/llrV27nQBid6l+L2rCfd9Sm48QV4cBQS9yFjCiqZ6Q8rQlwyaKGQdiHRbubSKAk8L2FLkqrqvUkPDpg3QIedtbf1qbRG3G4oGWiRsP9DZp7dmu/0gUAi1faWRV76Ssc8FkV4y0rJ8HohSJJBKSEJQbN92SiOPxqUBkrywFHdSNcsozXrPKL7cK/8IomeD5HUOLYXBmNQ8NStAY20T+uKwDKwgi3bUUyqq4Dk6RUGHMmeBaR6FpDpXozTucIAT/NzApPAkO1YOousJnHb5WMoB68YTpdCt3itFDpk2ZSYuT3a1kLXazjN20l2ljPds5oH3duZOP9ZmPg6+L08vj/II/H2De9kXphCG9peN+uS0QaJaS3JUpEBbUg/aXdl1TpqLdNNaOuvq7ao2d1quPUVvKufJzX0fxEd/D7G+j7CWM8Oome2MN27jrG29Yw2lTHZstSEX+nLh4FKaFday0Y4vRm6NuO0bTKZuYnOJWROL8KXGddeNDdqk6ottoMjqdaeCx1F0FmB172WdO9Wov0fxLn+4zD9v8A7axfOyMIxeTvSIirZM2FaUw5ADKjvQ69erfg5OEcdqzRqFQ5QqoYFR3hAwMxvZeKQmdXqOuHfBhCBRjG5YdIooU04u9Uxb0M6X1pR92h8qmEy3CLBXVOlS1eQTDC/qe2nJ0+QvfILTHa/xlR7LunORfid6rP8OZLOlXmWAxJOXTn4nctxO3NxO/Mtda00n9G5HDpWgpjemNgy11YabZPqqCDVWUqqU8DKM0I1073MaJx01xIe0VLrQ3etItOVZzQe/VXQVwI9EdLdEaY7lzLR/Tzu5Z+H+J+/O0AEjJBCgGgPakfFBVzHbHWVcFLGoTECVuMQMofpYY2N6uA8hPQgJI5A9HX86S/jTf4W0Zs/TvTqP2bq/A8x2fdJpk9vJdFdQbZD4FhrHT1FyLoK8bvKcNu3km7fQrxbEmaZ6UTaCwOAzKHVtY26z8NeZzV0VOJ1VZDpLWaqbwWT59YRv/YDMPoFSPWCmEUZJ1qVSNqYIZOoBI9vhIhhKPVByKN6L0YTQwZvw69kYs0s6Q21TQgQtSEYZrch0+ozk1EcACNYjz5jIpu5YJliYUJIYDrPmNCPcmm0Pj/JQ6a4yzSjpsCBWQKh8Uw8hFvVpPp/gWjnh4h2FpLuysE5LYZeOUdw5Btw6Xy/axm+wBEAxABOQk8CrK3IRkhbQodeJpL8xxzr/LeXmCCB07Eap6MCp7MEp6sQpyufbHcusZYc4go/ty0h2b6UlELAinLJMjGgWwYdEdxmmfMR3IEI8Z4iJrv+Jt7Fn353gMzUGnjrxlOqwOFbASTrW6TiZSFpd1UzZZ/FgEemmeeEeymo5pO83jH8dDskD8LUXnjwP+Dar+Ke/Qzprg+Sbi0j0zwfpyVCtjWC07aEbMdqMt2bSfZUkTxdjttVbBxEOiX5C3jqVuAyWiiUgrpeMV5XAU7PCtKDOUwN5jAyWMjEhe8iO/xvYbIBEhNGEIj39cyBR2Aqk5jl66GgCJk5ZPqA58OPH/Mhws42TC/zaRbjP/Ze380qHxSCT79hflzw0x3J5HvkG1ng6MZ0QmCO6TIKZHqPjtaZGipzmPacvPtnuAN/n2RrCamWZZaxThfA6aDPu/JgDmT6uLsUp6sct7PcmNq0r4Y2BWPWQnOQOd6kQMoaE8o1Gl9zKc2Knsq3CfwZ+Zptpfbc1rXQKv8kIJlSum57CX5HIZ78mI4VZsrCO6G5sgiJpgjxtgjZMxGifUsZ73wJZ+gH3h0g0haimbELNEooCbWb6Zg/kwQeBD89s/zd1uNQ7SbPTN0nHEhqP/UEJGKgTUgd1XkyVUDugXcJEi0w8jrc/E9w9V8YU8fpXkCyPUKiPUK6vYRM90bSfevJ9K3F7Q6BIXA8JWlQu1daEsA6iq0W6cjF61xKtlt+0HxSg88xPfgco70FjPZ+F6kLKox9GOIjNgYc+g1GSfhknCzxRIppVZcPlnTObi13iptnuQvSBobpW/u1AAAgAElEQVTBw0iSmFwSX+wqCqW/PhdApHmCc2bODZjecLaAIAqON5GpxwMBOl3Va6TgtUZf1T5mLC79XvYc2cu/Ded/EPrXQvcC6BDlQFe+te3nAIwQTJ7ModMFZE4X48gX7VDe3xpoXWNzAAWQpg3QpOUVa6BZ5rAm/wSMFdAus2uJpfaV0C5zW2NYZq/TVgkdG6FjA7Svx2+rxGkuI3WqhGRTEfGTinZuxu3cQra3nNRgKfGBKsb7XyN16Sdg/D+/O0A0UaS4dzijOns2VR0cDqM6Vqu8tVN2nAfEuE2Cm6S4Tdps7jhhlLhklzHZxAeu3Wdc+1QYZ1bF0hRvFnomJmCyBy7+PAy9QmZgAfFuAaSMbNdG3L5S/L58/O58mCudXgH986FP6l3Om6RMkYm6eJ0RXEXe+nLw+paT6VtJ7HQhk53rifV+DIZ+Dq5+Be6dhrG7kBizRd/MRpEJprwkDzOquWs1jPJ6JArUZ9Zx12KtoPxpaD4ZgIQH6Q91jCgAkzk3+D441jr5ykLW/Iwt56/fMBQIs3AjJNO+xWrzFVTw0wYoRvkId6lpstNv4D78Wcb7N+D0F0LfGji9Gjplii4BZXP3LA8ETC50Pz35PcvIDkQMub0r8but9raCShpB0UUBpgI6ZGYvg57n8PsieL05NkLasxB65sPpoO3VeNoxpW8x9OVCfwl+/zr8/m3Q9xp+/3dB/8dxej8DF34Xd+jLcPO/woMvkb31X0nf/EtTYhfn3nsHSAgSI/Vm/acCcyILHMFFal2p45pPuYNnViuqHcFjHOkWVQT0Xc9YWcbq0vyC4QchJli4p+IYIknqG79AamgLsf4ckt0FuKfL8HuKoEca4OkHJjxHA8Tgc/j98w3QvM5S/I4AIB3zcZXL02s1TLYzD6e7FG9gLe7AJjI9zxNt+YTdj+LqmzB2DNyztqIHWnSl1XYm99HssiugCCTCgl0LHdQoDRjdcrTtWBvynV3uZ5Yror4K+svCR9saq2qkStbY2YoQVo8BIzxvFkCM/2PGSoWwo5CagOlrZO/tYfziP+Nezxrigwtx+iK2n00EqBDkd3QrfC9aMecx8HtW4PblkO1fhNe7BL9nCfSE11WrlKcV+KdzcXsKSfWWEOtbw1R/FRP9m5ns20ayZysp0entJHu2E+/ZQaz3RaZ7X2Gq50Okzv0d0kM/gHv5x+DmL8Dd34SRL8DEV2ByP4xfIHvnEkQvgn/Njp+CTupETRTO4vU5vBUyZMTOIv09Q2FUJTQVQps4XLoqyRdIOyP9BLBAaEolhYffbyZ55WeZPqsiYItwJSVkTyoPTCZWz6q5Ue9y/L7F+P05RlPQuxxkW0ubGCqC7lXQLSCWQPdq6KrE75FEkgRbSeJUFdnOT8LQ5+D+VyDeaje1N7UxrPYI/TOjZV3XhMiduEs2ljUVFNPOFBlPJULF6KpwKVJwVaVoRCqXak2gpI8xV5Ne0JpAlN0YT6asjpMuMUVrfG2HbPfsMAWmFa71M2Qczd/ESKfDQndX7bzWw68Qv/gjTPR+gMmuzcS7V5s5oWz/KpyBHDzzzHm2j06vhNPqrzn2vcasu5xsy3YTmfT7lsPZCJyP4A3KUY4w2RkhdSFC8sJSYhe3Ebv4aaYv/Sumr/4Hpm7+B6K3fpvYtf9C4voXyd7+U3iwEyZk+nZCesguqXVGzF4hpjq+CnVoBaFK+GjORwWFJbFMirYV7D7jQSEP64c9I0AEs3BCUVPy+kFbKcIgcLbpICfG2MQCi25GIAm26TXhTlUWETPYpEBpFqPydfhkGu/OHuKX/qlxmJNKpOyQk7jeDpak/BzJ712FGRxjaklNSzqWQKfs10roEkgEkIKABMjlMBCx1CtToxS371WcMz+Ie+XX4OHXINkO/k18Rs0KxaSXJOlmTd1ps/4o0BxZL0nW1NC1GyGEhctsETNVXFHFS81oPwqKGbAEGkmgC0ldpe8eeR2BSacKHdkkmeQkWWkJV7pNY3AP6IP4Trw7nyd1/h+QHqjC61sJfUUwUIHTU066v4jk2RxSZxeSHViO17fKAuNZwBEAhK4PQOfL+D0FeAPzcM5FSJ2PED0zj9GBFSRvvED85qeJ3/4lUvf/B9mxo/iJPvDOABfsgjd3GNwR+1wh0wcaYCaiqh0lAtktv8vUT9beQmHcyFS/j5tKxyr7E/Zx5Bsmld46yfSOf+suQi9Erf7WyIcOp1UP8jmkKozvEah4fWTUh0BkTpF5oOrrsrJkuz8we1joigZX02M4t/6EyfNVTPVG8HsXwflSAwwx+JxI4JA2kLlm7NWF0KsJSGmRSujURFJpICVzQJqrV8eEtNisrNQMb6p7Gan+IjLnN+Fc+wT+7Z/CHf7PkD4JqSugOSP5zDJJg6Wd5tlCFaruMCnlvgmfy9FPOtrfS7P2tuC2ClUn3/Jv0plmyomZIngJ3xZTNf2tPhUJWWHgylTxiEL6ISRuQ6KD2J3PE7v+A8TOvkqmrwp61tgMhe4VZl5C/ldqYBWxMwXEzq4ieXYx2QEJBYEkz7TSpHMhc43+EhhcA4MbcPrKiPYuY2KwgOjlV0ne+imI1sPEdZiSbyrhK6tDGla1q4JAhfrQc021+2wmTiodJZGeJpqaCjYLst0gDn0raQysHBf/2cqKj8xVlR41vRj25tO2spPtTHCYKhEqDdMGdm94E2pnkwFJeEJQh0gAiZJkmltEGTaAMbeoJxs5TfL6DzN1tojU4AI4vwA0WP3LoF8O91O2koS9hdBTDL35oL/NZ7n2MzMLq+/0uX7nORiYB/0LoHeFOTbVtYBk7zwy/RGcs/Pwzi3COZtHZnAj8b6Pw93fgIf/G6ZaIH0zcOS1eUvW1OD1ZDNJBejBxcxhZwVDoWohUspWfEibqD69FnBpjYpMMn1jB9lEGnWNUEmbCIFCh5q3eQDuZUi2wsguYtf+iPGhX+Th4HczMbiGeO9yXK0HklaQ+dS1yKTe+P0ryAzkkzhTSvxsMalzS3DOLLL9HfbXXNv+JXjdETi3DC5WkT2zgdHTVYye+QjZe78M6Xq7kWKgIhXpVoFvdVnMc4m5jonAKZ9Q2M9mfLPSMZNNkHaiyHQN657ZfrLWibpodldbGaUIn0o8CYA2amgrKz4DQGzKxONMbwAgtRXSrJvRoiO7tkKFEe6ZTTWN3hNIBKYA4eoPYVll/RNmB4yslYKxEbMpZOrazzBxMY/xM2LK56B/SQCOubSLoE+OpsKYMtnKLEgGnoPBSHBtgUHREIFQQFF0ZAX+wDK8C4twLi4ge24h7uCSQJLmQW8xfs8asn1byJ79CM7lz+Ld/XUY/7pNy3HugqJ2GqnZYi3U7eFnihQnbAVDL+0bU0m5X9o2IasJSwFJnR5eR+CwHWjb2ChM9cCD1+H2b5C69hmmL36IyaF1TA+VkDxbQuZMAU7vIrPKLq3VmFps1rsAzhZBr8zHMpz+YgMUZyAXd2AZDEg4LXjUP6Zv1D9PQQOLyZ6O4A5GyAxFSFwoIXrxk2Tu/DokjoP/wFTz1opeJ4UpF6qa0Yp6ahMgU+ZUyHgrxxsmnFENto8MCtRZYehbroFsrVC6BBZN+L2ZdFXp0W8FQGZpCv1+KOGsWpR61IYuD5BDZMwsHSB//y1jLR4xm904U2aDeFIqqHoPRvYyeePT3DuziszZlTCwdI60BAYWghzEnnLoqYRe2d5LrcMop3FwCd5gLt5AkSEGVsLgUhhcjndmCdmhRTiXFsOlfLhQCufLYKDISGLNEDunl5DoXs5EVyljp19kcvAfkrr6y3D/yza12u8B9xw4lyGj4toPQflRiRTE3EfgERNkpU60h7N8Ny17jEImjukXTS5pdZ9209I+h8mzkFQm9p/DzX9n0vhj/a8x1VNMtH8B6XMRGFK4VH2QB2dXwJnnyPZFSPdE8Pol2eXbCSRltu0rAFH/SnMsZ2z/mD5RvzwtDS6BcxHivRHGTkeIDr0AD38dsifBVdjcagWlnaeUca6ijYGbq02BTJhTfaF+MTRr7/JQwDwGFplockQUPAoA8tj3gVkq4ATHRd5G/s9i7/DsJ7UhGnU3eh8au0Jq8LL6y3L/W9+H0k+XD7SIjb9oNyYb01fJRy+TxpeZoH23tVdf7AqJe/uYvvxLJBXbVkfPhfqXW80gp3Qgx4R8zaCfmR8AYyXeQB7uQBHuQImlwQLcMyvxzi7EPbuQZJ9MkGI4VwEXVsOFcjhTjNujXKXlMFiC119CuqeIeHehSWNI9pfinFtL8uJ2Jm/8LcZv/xDT93+S9Oj/B9NfhMROSJ+ATD8412xCaHYEU9hPrcwlkXcrAFcbJPeTnfxjEg9+hanhzzJ57buZurKVyaFyEufzyJ5bhX9mFQzkQ48icuUm58wsk+4shDOFcGkV/pUcspeso5wxgQgFLpbbYEWnzivARPsG50PQTwwoaDEHOpODfz5CvC+HidOvkLn4CzDRaKteah2OapYZ5ah6AFpeoK0lFPtXHyjJUoEGmUWWFMOTESVBrKkEV6onVABv5T39Lf4LNUjY6jOT8mN5O9Aguo2QW5+21U1Ir4tC2M4Cy+z8ovAm1M7GXPi5btpcR4FRXctmz5pGE4jZuO21dJLM5D0y9w8x1vd9JAfXkRkswT2z3A7aGZlHOVYTDIpJl+KdEc0C0oDMseXQK6koiRh5pDXOKtS43IJDgAgoa9o88zvuufkGIJwXcFS1cRVRrSfpzCGl+ZUzBTBURqYnD29A70vgSjFcWW4kt8yK6b4Ik5dzGL2Sz/iVtUxce4mpqx8nevUHiV/5KWKXfxnvzn/Bu/0l3Nt/gnvrT8ne/jMyt//MhDWzw3/M9LXfYPL6zzNx7UcYu/JJRi5t4eHFlYwMqdxAhNGBCNGBiIkOcUFh1FwYkLbcAF3roXuNiQhmOpeQ6FtI9sIS3GuL8a9H4FLE9ouWLGi+qUuRw1zokwZdaISE6degj42Qmq3N1e/qx8GVVgsP6rdX2n7vk+ZaTrwvzwQI0hc/B7e/DmMXIWHNJpM5bgAi01xb1N0K9pdX1oXdnFOTnOH+KWFrLRWBJvSPQ/4OzKgQLGL1t5LhQZkzOkfFq81LR+k1l1bnhNz+1l8L7CZdOryp2a0On/23uQd7YzN3Hn4fPokBXPgAw8Qe/jfunP8h7g++SOJSMdmhYGCv5sKFIvzBfOM0Z8+tIHt+Kd65pXBGJlng0A/KtJBJtQDOzTetf24R/tml+GeXPUbezN9Lsccstt+fWYEvmvl+1nmPfW7Ps781D//8PJyh+WSHFpAdWkxmaBmZ83lkzhaTOVNBZnAdqcGNpAY3kxrcSmpgu6HkYNhuJXlmM/Gz60meW0PyfCmpoVVkhhaTvTCf7IUIzoUI3lDESGr7fIvs8+q5B6VRVoHpg2Wmb7xzi3HOL8I7vwDf9IeOXwyDmlQNyPTXYnO8NJP61j+72PbhwCIQnVEfLsYZWk7qfB6pc6U4Z8vgrLSVwsjSTCXcaf0oYxd/Bab2WG2onXy1D6MsoWCLd+tiaApAQQlpEjnRllcfTarKyVbQSK2lGR6a4WvDYI/+C3krbB99M4OcZ5wHeeyK78Mfk2TSzTy8818YufpZoldfJHrWJpxxYQWcL8Y7U0j2bKFhnNTQMpzzGkgNYuC3nBWTv090TqCcZ+xw2eJzITGxf07MPFeyjDyXPpDAyJ7LI3s23wgII2gGF4EijGd1P4vInFtC4twK4mfzyZ4rsZpUWqx/vqm1Nn7mXzI9/HVIdmH3qlG6keVPhaslLi1ANBckTaKoXbBNYCBfv5WM920OEEmSGzjJg2Qe/g7pW59lerCS6e75NtJyvgD3bBHOuRLSQ/lkLyzHHVpow8NnckB0LgfOv1+ke3nOzB7PrdW5CnfrOnOlZ3j2czJp7YSiWbszKA2x/LE+VUg4O5hDdnAhvo6/WAgX8412muqvxB/5HfyYIlZK9VAoOmXTxGUkBJFNa5/IDxE47D6Nssol+L/Vr29zgMjXUSRMdmsjjH2BzOVPm5VhSUWmhlbinCsykit7vojs0ErcC2IoSevn4OxCOCfGegYmeaZz9du6HzH6XCiYC5ozOJ7x2c/Jj5A2CEAyWIF7Lh/3/DLcoRz8oQX4Z+bBWaslvbPPkT6zgtT5CjJXXiB54zPgVQPnbA6UP24mVJ1k1gaRAh9aGiPc0MZuSRGA4/8HhHybA0TLSpQHFofMXRvWfPgfyVz4W8QHC3AuLsW5UIBzvtSQO7QKLs7DOqvz4Px8OL8ILryPJI32rHRhIcyZnuHZBUwBQNGsc4vh/AqcoWIyFwpxLy6Ciza3yrSXrB80PbiUiaEPkb3972HyEDAUVBEZA2cSJxkjGU+YZd2O6xt/QuB45HAHfu3b+g3ffH3ybQ0Q9VEyyBq3AbQHkKiD4Z8mfqGM9JX5ZC6uMoMmkLhDeXbQNHBy5gUQMef7CpBFAUDm2M4ZGCGongEgQ4H/pPki9eeF+TgXVpG5mGcBoiiY+vpqBK5F8C+tJHbhg8Su/zKMd9mJUi3ZVl6eF8XNREmnEqb2bzqbQbvnWsfbAsR6JIFtFcaDvsVa5NseIJkw3V7uiJYxpgfgweeJXqkgcT1C5tJynKFC3POleOdnA2TeI8n9zEwWMtvTtrOYc2ixBerTtu/bvetZA2AYcFgweJciuJfmmwwDo60FjqsREzb2br8Gd34fJs7a1BpZyCYY5Zg9610nY0ubellcX4ZVOF0QtoH20DlyQtT+NUCerDbVN4pwKK0lE7VFOUwh5YdfYPL6ahK3IqQvLzKawztXDAKIBtVoEJk2YsqnZepv9vHSHIvnRkbzfbPv52muJ60R9Kf69DGah3dpHt61CPGLS5m8uJXM8Ocg3mUHLVwVocltOeOhoDM8H4ZsBQyFtNTOWkH51wB5MihmfxMCRGsjTDxQc5XOBKS/xtjtSkavRshcXYB3cSWcL7STZBpEqf4LS/AvrMC/mIN/acH7RIvs719cgj8n0r0vep/uXX22CG4sw72cg2f8uQVwcQlcXoh/KULsfITJC0VMX/t7ZLQvYKzT1uCSz+hlTI0CZTYrSjV7rtgu5HoLOKQuNOAijXdIsxniW/D+29zEUjzcIe27NpVewsZVbtJeRu+s5+H1COnr8+CSIlrSHsvh0jy4PM/Yw97lVfiXF5sB1aC+L3Rpsb2HS0ufukU5YJdz3p/7vrwQ70oO8cs5pK6thGv5cKUALmqCdjnOhRyiQ2vI3v8XpB9+hezEOUgZO9gWkvAn8bLKywusgEDGWQyEk8WB5ngrOEKQqP0Wv77NAaKYuGZYlbvl4GeVyKe850OM3N3G6M0QIDKllsIFMVMErszDubyK7JU8vCuL8a/Mf59oocl9EqMJqE/bKm/Kv6JrPAvN/dmz1+YzdT1CbHgp7s0KuFJhtfKFUvwrH8e9qYrpbZAew/fs/IWiUWaxljuFrw2LvgEgdgnFjGllEfNIY4RFML7FwAgv/20NEClnVTPMKn6ueirelF0qljnF6L0PMHYrggaRSznW11CI93IE/6qK2q8kbQAiJps7kzzrud5VK4kFjqemq88CDJ37bM+tvo3fWcz0neVMX80jeqGY5MX1cOP7YOSLEDsNWWUdWjNK/qIAYUBiFnBoCfAjDTLznQ1JfqPfEVhZOk6LpRT+tcgJ2fmb336bA8TD99K4qupoikQoy1MiqZ+Je59i4lYOzjXZxEpHj1jtEURU0tdXkL6+yiTmce053he6ugD/2iLcOZLO5apowbPRHJ9ffZu6XcbEjXxGrkcYv1lK+s6/gIk3ID5uI1WBby1RpjWAqqWmajZmnLQc4zGAyDmXnSxnUl58wP86XuCYmVlXzq6WI2vlvQb8W/f69gaIOtBRRpvWWA/bNdYSKpnrTN39DNO3i3CursLY6gLIFRuPd29ESN1YQuLmCsOc7ws4rj2Hb2gB7vUFFiRzaN8vcKjP3KsrSF5ea9Lqo3eex5n6p5B5E3zt92gDUI7WcHguGT9lSNEqJSEaVaLIVYAVtdb8CjPDNQEcHKcvtRRmJjdLK/VjM6b1tw4ez1zV5Ft5a+/h2gKIBI4q0JlU6LvBwDwgevcnid3egHe1CC4vseBQTP5GBO9WhMRwDonbS3FvLAQ58u8LzYfr8/FuiBbOoV0I156Rruse5vj8V3Nxr+yAG/8ERv4Akk1mrYakuoYl5vlmWWzKyZr14mZfu0BDSFPITJL8F+m91gLNFMkzi5ZmAWSWtlFJpYTZy16ZvZKI37rXt78Gyfi2IIJZTKNUaYFmgqm7v8T07VfIXiuxTBTM5gog7q0IyeH5hrybFjT6/BGJYcQ4Ak9Ilpm5MW/WcW85R98F5z1i+Hl4TzxH54fnBNc357/H999wXd3bbGafHwBoCVxdakkmp55p9rla+xHchwVreB2dn2OvoWMM5cD1HNRv2WtFMPxD8FD+Rp9d3aiSs6aMaYqEaoR4abP2/tEiJIFAzrnW1atVnlWoPULzSu1jDsfbahBpkb82sd5ROEj2hLULg8VVEiiph7jRL5Gd+H4SwyW4dyJwOwK3xAg5cHMZ7vB8nLsR0Hez6XYE//ZC/FvLcG8tnyH97d/KgdvPwXDE0h0da8m9GcG58RzpazmkruaQuLqI+JUFZG8vIDs8D2c4gnMngjdsSeeZ+7n5HNycPze6FcG/E8G9Z1u9N/cWXts8rwCRC0ZQlMD1fNBz6BkeO34+7u0cnGHRQtzh5+zz3iiAaysMOPxrEdwruTg38snciTA9vB7YbXaHxZ0GN2N3AJgpMiGtELzMG9lMoc7Qd/Z7e0w4saHv9X7Wef+nvXMNte266vg65+xzzj7Pe+7Nuff03pt3G1objG1ME7W9IpVQCTVSqpZUKkZMiSik2pp+CKgfzAcpVBFbNdoiFB/UQCBSIaCxRaGlEUKj1UaTe85+v9+P9V4/+c+51r773ua2+ZDmZF+yYbDW2WudNedce/zHGHOOMcfQDenqlT21pSNMVpP5e7P/eQ2Pi61BjLpo2fyFenN6twKI1yAYfgGv+wCj8gFBykAGJIe7cLhHUlw2zDVj9pTpzffFVcssxQ3C4gaRoXUiAUf/V7IMaRhMIBOVVgxDhUeb+IfbeEebuEdr+KVlw0xBeQ4gApWYV9pLx1ekZSjM0woUrqDisgG/gB6lNGN68/xlOBRAduHidRYcR1skxRU79jmA6DuBIyht4JUFEgsYLp6Bl09YgBw6hC/t4R+ewa+t06v+KPCNWVraLD3t/PE15NVjedSCA0RBbG0SJfkUQLIZn9cmGn+JsP8rDCoHeLWUoSVZ5wEiUBxtw+EpC5qjbZLChmEgaZ2M6SSZDSikPTIm1bmeV1mGSg7Ka1DKQ3ELSlvEpTxROWe0lJ5zuXRfsYx7tGo1wByDZ22a9tUHUUm0bLSeQJqRwBsW9ggLu/Z6phHNuASOdduOjuqrKAW3GY/uS7/XM/W8oLx+OUAO94y3XCBOjhyiQwmNMwT1c4waHzTlyuYBceX5sXD1a9jowgNEkaAJw0srI9IickxNvkwyfJhh5Rx+PZXyxSU4OgFHJ43Ej8s5OHwLXLzJHgsnoZg31y4zu8pLICqtXKJiDor6O2OyHJRWobgOZdEqSWWZuOIQV+fMOPWhoBCNbShsEpdXCGvWTAqrVx6XiCpLhFUdVwirK5cdo3KeqLBvSIBUW7N+q39qR6Q2pS10vWr7Y8ZeEqgtaOLSGmF5E7+Sx6+uEVbWDMiTw004WjX3xUUHX1TZJ27eRdB+xGQ3VMK7q9FryKvH8qhrACADU/4sVLmRTIOoypVqjkw/ybBy/rsBUjhBXF5CTBEfnic+vIm4cNL8PQNCYQcO9y1wdCxsg5hODJWZJjqXmXSZqSTQrBmQJBULkkQAEXOKStI8q1DYgKNdKJwkKl5HXLiOqHiSuHiCqLRDLO90OY8YWeBQfzXXENiiWnrUuUBS2jb3azy2jysWFCnzZyDIwGPGXs4ZcGZjEcAMQKpr+FVpPgFkjeRIgmDJ9F3j8CoOXv0MtD8Cg88DxauCQ6BZ9M+CA0TqYmQAIoetqvVaM0t5tP4VvN9nVLmZoGElp2XOXSjuoh87ruaIi6dJCgck5S0SmUoymaQBCqfg6ACOzkJhH4oblrkFDgMQSdVV4osOiZaOj7R8rIntBklph6SyTVzbJK6vkEiDZSSwGI0iIOVtO4XTcHTatqN2i3tQ3IGS2pQ2kgknU+6SFphpA2mfWo64sk5S3ki119y92f9Iu5W27DjLW8QpeM1zypqPbRFVdghqqwS1HFFV4F414zL3qJ26w7Tu4LbOQ+dRGP9zmsl/0WFw9f4vPEC0dq4sF0EYm4TEBiDBANxvgv8ZhtVb8RsOSU2MLem9C5LQ6Q8e1WQGrVqGETBKYsydOQYVYFKmFrPpXPMMAefoPMHhJkEhT1DcJSjvE1UPiOpvIWyeIWrv4TVX8VoOQdtS3HKImw5JMwWNeZ6kdEoFmWnSMK90FHA1n0iPpRxx3TECQMxrxqL5lsYqyjSXQCYAHp0nKZwnKe4bQOkdWNBdDSA5Qk329ZyWQ9R0GDUdJu3boPtn4B7aBGxX56+Fv7LgALGhCcqDpGTP0iIGICai97/A/3OGldssQIzUFhMKAFsWIA2HSFRPtUl5awYgM58QIPR/lzGbJvGnSApniUoHTKs7TGu7TGvXM629E7f2Ptz6B/DqP4vfuJ9h6f0My+9lXHkX49oPMandilu/Aa9+lrB+ykr8kky3V0tWc2VzHb+2wbSxjltfNeOUttSYYgkFM/fSsvSOAXRydKMBiLRmXNkgrl7SNJdpkPqy1SBVh1CTeD2n5eA3Hfoth3H73baisetjizIuPA6uOoCFB4h2nYmU7yJK4nQeotpuSjL2JOPq7YQtB2RmVVahvA2VzRlAdM1I9NoqSXUTypv2PgFDjNFO/7eYJzw8QVg4RVw5CXrZgg4AAAtoSURBVO1NktEq3bbDoJ/HG78L/Acg/AxET0P0gu1DUAXvJZh+E8ZfgcET0H2cpPVJks4DJK0fgc710DpH3NwnrO/h17bwqmu41WW8umx+B6/x3TSt5Um6dzOu30W3dJpBZQWv48DQgZEDfS3drpKUdqFyGqpnoLZPXN4lKGziyjko8NeXobpDUjtB1FgjauZIGjk7fr23ngNdh2HNodtycMf3wvg/bKzVnMviqly2wBcWHCByKcndZGM7zTZNpThX2Luv3K1fYVK7IwWImECTZwEkTyIp23TMtVAmT32JpLYC1ZRpxDiipv7OQ/mAuHQ9fuU00/oWk7ZDv+vQ7p+mN76bIHwQ+CPgqxBXLfMoM2ZGZiuEijMewvQ5m5zZ+xuYPgbex8F9CNwHYfIxkvFHiEcfJhrdz7DxfobNCwxb72XY+rHLqf4zMHiUuPfbBIMP4vVvZ9o9ybTtGLNO4Pc1udcSdG0DGinVNohKm4SFHMjUayxBfZu4sUvcXCdurUBTpPELaBlAlui0tnHHD8BEmeJTjb3AAPh+XV98gJgANoFEOkSe3DSpq+KzkmcZ1d5NIKmqH7y6DtUtqK0bE0TAkLQUGUbINI00R00T9h2oHED5RpLqzfiNc0xaJ+h3lul2HarNk/T6v8Zw9DmI/xH4lg2YNHn6bbIVw0RZaQOFsmq/ihIuKwI5Ua5ZBVkeXkEXbTkwlQTzXgTvf9KjzkWqN/J/4L4I4+fBfxaSv4LwEdz+Bbr1M3SqDoOqw7TmmFU8CQOjDVtL0MpBbQ2qcyCob84BRPdYs8ocew5xZ4lBbYtu++1Mp58CL417e1ODfD+MHd/1zDeo1V3l3FNu1kRhpAohVV3j+BvG/Ai7S9CUFM1DbRsa6ySadIrqW0SSrGIgMYWOAkhVK0L7UD5PVLkBt3aGcWufQfeAweAWBoMfptv7RfzpU/iT75AombRSYipUNTH1XAh8peyPbck1PyJRhgl5+udJ4eAaQLZMHdnVOFVDMqtyuq65laK/rzjOIgdUU8/klnoK3MeYdO6jU7uJTjXHpOnga5wyFWe0DNIS+jsDQiNP3Ngmaq0TtZcu3avrPYewk6PfOE2v89P43mchTOv4Lf5K7vdk4IXWIBlAxDeKH1X5MlOlT3HRRv0/z6R+D1FvGdrr1sSo70Azbxggbmsyu2fImFIZQBrSNntQvc7Y5V4jz6jt0Ovs0u/dyWT0q0STJ0imXzf17xJhMiviog2NgUK8lSAwxo083GiKH3oEQWTvU6oi5eFWOq8AVB5bKf7NMbT15ZXuX3Xm9RyVZ1ZMplFEc0cpJBNBYMKYhKgaRP8O7ufwex9l1Lwdt3OCsOsQSYvOAJKedx3Ivm+tkbS2iNt54s6y/V7XDUBWCDp5hs23Mug+SBT+A9A3+zNM+9+TxRb74jUEEC33XgmQbzNt/ARxfwU6eWhuQmPbAqTjkHQEkG2o71oTbAYQzTs2jV0uDeO39ph0rmc6uIA3fgS8v4egOB93Zwq8yKpTni5PlY5izYtk9qkYp6JOxzY1v8K2Vc5R6wjTtE55Visv3RCUKhS7IGeUi4LzsgC9YC7LoA0X97VXQgGwZhVPCRFeAO8JGD5E3LsLBmegl7NMn40xM7kEGoGklSNpbbwyQDrrBJ0NRq07mPQfI4m+ZnZwqp/XuALJsrsvJsqNBpltotEOs4HdU6BfTltEoheZNt9HPJREzENrywKktW5XZnoOSVvmRg5km18pYVs5osZJovZ7oKeUNV8A7zkIW2memjTwVB2RRSdGjxLCWKtq6o9KgGXFgurEtEzcWKLiLaaSZEzsTYi9MYk/MWSrsGpvvW/J7ItIH64G5klGZTRmjGtSH6kP1nyTSvoOeE9C52EY/DgMdu2YBRBjQq5BffWSpmivQnuDpLNB0l0xq1ZaudJ7STqb+J0dxq27mfY/C8l/ktAzuzmUSf1a/iy+BplJ3WzDjSoHmdJUEB/Rb96HPxRzbEB7DVoyr1ZIeg7RwCHpWk0ibWKo6xB3HWNSuK0bGFcvEDQ/AcOnIaxdmj+oqJFKHqkSkeFKa+jZdTUFUSqZRB8vruFTMRSmZecS7Z8XghPXFoFRIRjZW7Fr615okm9SqgagIhmKo8lIdpUSganZOGIYdEyZumy/t9EiMi81B4vK0Pw76PwOcfcCQec0QTN1LMr7LoAIBKIUIFq+pnNJgFjBsYHbyzPs3sN08NeQaGGhk9by07iv3c9CA0RAMOE+EmLSGjqa8lppYQma+NGniZO7jEc7C/kwXmzXIZSvYOLA2B4j18FzHSbuHsPBXXRbvwxodep/LcOKKWecqMYyu0bnGYlZdG73O1hO1n0Z6SGXwDQ7NzPwbD/qFUcB/pXIlAHQ8oTmX5bsttW0CfVV5L4Mk7/EG/wS7vBtuON1omkOvHW8wSphb90KjqY07J4xtYKuJubWl8JwnUnPYTB8D/CMWYyIgxrE3VQ4vAmQN+wbmAEkE+RGoqcOQwZMkj8k4l6C3qaVlNmk1F3DFUCCJZg6uAP5Ndbo925hNLmPIPhd4lCZxwvWrMmePzO89YVE9fFJUJk3mulYcNgkBjo3XbQYtQARSLxvEbt/QeB+FHf6TsajLYajJcbjNYLhBnRWQaZnW9p225il8UDaJQ+DTaaDJUbjnySOv27BqoDQWJrw+Mb/ejDlYmuQbJIoZsgY+DKAjHD5Y+B+kuGe9TDL6dVeIh6fYNhdI/KW8CcO49Eqo94dTFufhsHTELycMoCYQMtOWWNiCGkDgUNHXTiejwWIACESWNJIm6yrpm/qZ5r1JX4egi8RTn7DLFO3uuuM/FWCqQMCgzzm/TUQYCZ5GG9D6xR0zuIODphMfoFQBUfN+5apl6YsOZ7hvy6tLjRAZHWIKYz5MbNabLoY41tgyjT+PAk/TzLcTwGi5cwNgv4NdJtnGfZPMRnfSOz/FISPgvcv4CoaODVPDP8LfQKD3OFyjeuo744PHJY7sjiCOXCkczKZWppIJ5RT56Wck/JdfBvcv8V1H2Ls3s3QO4fnrs8BxCEZrRBNNmC8B63T0LqFYHAn/vS3CIKL1m+TCST9CNfw55oAiPmNMvEp71qWewmPSfBF4vhjBL2zYPwh20T1A/zunXRq9zDs30sw+TgEXwSesxNQ1S9XbXIpjxkOBAyFr6RfqtHjxkfaB5mZOrUaRWDRUvDYACSmSmKqwk7AV7HxLgT/DclTwOOMph/And5KMsgZEzToOfgDB3+cIx5uQ/skNG8j6X+I2PtT/KBpMi3JspL/xzT8JkDemG9ATJFVHJrZF2ZZNPVOyzoPv0wS/Tpe+3oSrWI194kb74DRzzHuChh/AsE/QfCSRYRQEcuZEZo0v+a5BggyVQQO1dhOwaHvdX5cH7UtzWnUqLqiRGpKhdMzWUOSNHtIGA8J/AmhOzXLyoQaR9XsJ/emjxO5H4bRLdBfwu87TAcOk5FDMNIqV564+TYYPAzBk3hB2zgtzWt+EyDH9cu/unYlMTVFNdktLFpsPIYWgQzTyAR5BpJH8btvNev5tG+G3gWIPwHTL0DUtNaTvG3hBCLtb1fohkgJ6dKJuJ4vEijm6dV19Qdzl/ohJpWWM1pEDskyCSUSswwbGLdJpKGFIUE0IIx7JhvlDPj+C2ZbANMPwehGgvEy3sRhqlU+1yHpO8Stm2D0KYifwY2qxtgMtYqctvuDGdwb46kLbmLNAyQtMGEcaRlA9JL/Dfg9wt7boasVmnfA+D7gD4BnLf9rSiFGk3POVDxSphTFVknKyqxKJ+kCXSaxj1t7aGjqg6ZGM0kuR+nLJLyUAiSe1d2QqIgZEtEhSnzj+Y+MM1UhKl8F/zfBvYPE3cL3HfzQIQwdkoEins/B+DHga0ySkpmeyRUj18yxatDXAUP/Dzulf7mPSc8LAAAAAElFTkSuQmCC +``` + +### `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 的链接,如以下截图所示: + +![Grafana 链接截图](/img/example-grafana-link.png) + +### `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 的链接,如以下截图所示: + +![Grafana 链接截图](/img/example-service-link.png) + diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/global-default-private-registry.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/global-default-private-registry.md new file mode 100644 index 00000000000..48d6d59e6ff --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/global-default-private-registry.md @@ -0,0 +1,38 @@ +--- +title: 配置全局默认私有镜像仓库 +weight: 40 +--- + +你可以使用私有容器镜像仓库,在组织内共享你的自定义系统镜像。借助私有镜像仓库,你可以让集群使用私有的、一致的、且来源可信的、集中的系统镜像。 + +在 Rancher 中设置私有镜像仓库的主要方法有两种:通过全局视图中的**设置**选项卡设置全局默认镜像仓库,以及在集群级别设置的高级选项中设置私有镜像仓库。全局默认镜像仓库可以用于离线设置,不需要凭证的镜像仓库。而集群级私有镜像仓库用于所有需要凭证的私有镜像仓库。 + +本文介绍了全局默认私有镜像仓库的配置,重点介绍安装 Rancher 后如何从 Rancher UI 配置镜像仓库。 + +有关在安装 Rancher 期间使用命令行选项设置私有镜像仓库的说明,请参见[离线安装指南](../../../pages-for-subheaders/air-gapped-helm-cli-install.md)。 + +如果你的私有镜像仓库需要凭证,则它不能用作默认镜像仓库。没有全局的方法来为每个 Rancher 所配置的集群设置具有授权认证的私有镜像仓库。因此,如果你希望 Rancher 配置的集群使用凭证从私有镜像仓库中拉取镜像,则每次创建新集群时都必须[通过高级集群选项传递镜像仓库凭证](#部署集群时设置需要凭证的私有镜像仓库)。 + +## 将不需要凭证的私有镜像仓库设置为默认镜像仓库 + +1. 登录 Rancher 并配置默认管理员密码。 +1. 单击 **☰ > 全局设置**。 +1. 转到名为 `system-default-registry` 的设置,然后选择 **⋮ > 编辑设置**。 +1. 将值更改为你的镜像仓库(例如 `registry.yourdomain.com:port`)。不要在镜像仓库前加上 `http://` 或 `https://`。 + +**结果**:Rancher 将使用你的私有镜像仓库拉取系统镜像。 + +## 部署集群时设置需要凭证的私有镜像仓库 + +创建集群时,你可以按照以下步骤配置私有镜像仓库: + +1. 点击 **☰ > 集群管理**。 +1. 在**集群**页面上,单击**创建**。 +1. 选择集群类型。 +1. 在**集群配置**中,转到**镜像仓库**选项卡,然后单击**为 Rancher 从私有镜像仓库中拉取镜像**。 +1. 输入镜像仓库主机名和凭证。 +1. 单击**创建**。 + +**结果**:新集群将能够从私有镜像仓库中拉取镜像。 + +集群创建后无法配置私有镜像仓库。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/manage-cluster-templates.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/manage-cluster-templates.md new file mode 100644 index 00000000000..b960aee336d --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/manage-cluster-templates.md @@ -0,0 +1,131 @@ +--- +title: 集群模板 +weight: 100 +--- + +集群模板包含 Kubernetes 配置和节点池配​​置,允许单个模板包含 Rancher 在云提供商中配置新节点并在这些节点上安装 Kubernetes 所需的所有信息。 + +## 概述 + +集群模板以 Helm Chart 的形式提供。要使用集群模板,你需要克隆和复刻模板,根据你的用例更改模板,然后在 Rancher 管理集群上安装 Helm Chart。如果 Helm Chart 安装在 Rancher 管理集群上,会创建一个新的集群资源,Rancher 使用它来配置新集群。 + +使用模板配置集群后,对模板的任何更改都不会影响集群。使用集群模板创建集群后,集群的配置和基础设施可能会发生变化,因为集群模板没有任何执行限制。 + +### Kubernetes 发行版 + +集群模板可以使用任何 Kubernetes 发行版。现在,我们提供一个带有 RKE2 Kubernetes 集群的示例。将来我们可能会提供更多使用其他 Kubernetes 发行版的示例。 + +### 版本控制 + +Rancher 不管理集群模板的版本控制。版本控制在包含模板的 Helm Chart 的仓库中处理。 + +## RKE2 集群模板 + +RKE2 集群模板的示例仓库在[这里](https://github.com/rancher/cluster-template-examples)。从 Rancher 2.6.0 开始,我们提供了一个 RKE2 集群模板,未来可能会添加更多模板。 + +## 向 Rancher 添加集群模板 + +在本节中,你将学习如何将集群模板添加到`本地`集群的 Chart 仓库列表中。这样,当用户安装新的 Kubernetes 集群时,Rancher 将提供集群模板的选项。 + +:::note 先决条件: + +- 你需要有在`本地` Kubernetes 集群上安装 Helm Chart 的权限。 +- 为了使 Chart 以创建新集群的形式出现,Chart 必须具有注释 `catalog.cattle.io/type: cluster-template`。 + +::: + +1. 转到集群模板示例仓库。你可以在[此 GitHub 仓库](https://github.com/rancher/cluster-template-examples)中找到 Rancher 的示例。从 Rancher 2.6.0 开始,我们提供了一个 RKE2 集群模板,未来可能会添加更多模板。 +1. 复刻仓库。 +1. 可选:通过编辑 `values.yaml` 文件来编辑集群选项。有关编辑文件的帮助,请参阅集群模板的 Helm Chart 自述文件。 +1. 将 Chart 仓库添加到 Rancher。点击 **☰ > 集群管理**。 +1. 转到`本地`集群并单击 **Explore**。 +1. 在左侧导航栏中,单击**应用 & 应用市场 > Chart 仓库。** +1. 点击**创建**。 +1. 输入集群模板仓库的名称。 +1. 点击**包含 Helm Chart 定义的 Git 仓库**。 +1. 在 **Git 仓库 URL**字段,输入仓库的 URL,例如,`https://github.com/rancher/cluster-template-examples.git`。 +1. 在**Git 分支**字段,输入要用作模板源的分支。Rancher 的示例仓库使用了 `main` 分支。 +1. 点击**创建**。 + +**结果**:集群模板可从 Rancher 的`本地`集群中的**应用 & 应用市场**获得。现在,你可以使用模板来部署集群。 + +:::note 受限管理员访问: + +如果你是受限管理员并且无权访问 `local` 集群,你仍然可以添加新的 RKE2 模板并管理集群仓库。要导航到 Chart 仓库,请在左侧导航栏单击 **☰ > 集群管理 > 高级选项 > 仓库**。你将绕过上述步骤 1 - 6,然后继续按照步骤 7 - 12 创建集群模板。 + +::: + +## 使用集群模板创建集群 + +:::note 先决条件: + +- 你需要获得配置新 Kubernetes 集群的权限。 +- 你将需要云凭证来使用模板配置基础设施。 +- 为了以创建新集群的形式显示,集群模板的 Helm Chart 必须具有 `catalog.cattle.io/type: cluster-template` 注释。 + +::: + +1. 点击 **☰ > 集群管理**。 +1. 在**集群**页面,点击**创建**。 +1. 单击集群模板的名称。 +1. 完成 Helm Chart 的安装。 + +**结果**:在 Rancher 配置新集群后,你可以像管理其他 Rancher 启动的 Kubernetes 集群一样管理该新集群。如果集群模板有可供用户选择的选项,你可以通过 UI 配置这些选项。 + +## 更新使用集群模板创建的集群 + +如果集群所用的模板有了新版本,你可以使用**应用 & 应用市场 > 已安装的应用**页面中的模板更新集群。 + +## 使用 Fleet 从模板部署集群 + +:::note 先决条件: + +- 你需要获得配置新 Kubernetes 集群的权限。 +- 你将需要云凭证来使用模板配置基础设施。 +- 为了以创建新集群的形式显示,集群模板的 Helm Chart 必须具有 `catalog.cattle.io/type:cluster-template` 注释。 +- 为了将模板用作持续交付/GitOps 的一部分,集群模板需要部署在`本地`集群的 `fleet-local` 命名空间中。 +- 所有值都必须在模板的 `values.yaml` 中设置。 +- Fleet 仓库必须遵循此处的[准则](http://fleet.rancher.io/gitrepo-structure/)。对于 RKE2 集群模板,则必须把 `fleet.yaml` 文件添加到仓库。 + +::: + +1. 点击 **☰ > 集群管理**。 +1. 在**集群**页面,点击**创建**。 +1. 点击**使用模板创建集群**。 + +**结果**:Rancher 配置好新集群后,集群由 Fleet 管理。 + +## 卸载集群模板 + +1. 点击 **☰ > 集群管理**。 +1. 前往`本地`集群并单击**应用 & 应用市场 > Chart 仓库**。 +1. 转到集群模板的 Chart 仓库,然后单击 **⋮ > 删除。** +1. 确认删除。 + +**结果**:集群模板已卸载。此操作不会影响使用集群模板创建的现有集群。 + +能够访问`本地`集群的管理员还可以前往**应用 & 应用市场 > 已安装的应用**页面,通过集群模板来移除已部署的集群。 + +## 配置选项 + +集群模板非常灵活,可用于配置以下所有选项: + +- 节点配置 +- 节点池 +- 预先指定的云凭证 +- 启用/配置授权的集群端点,以在不使用 Rancher 作为代理的情况下获得对集群的 kubectl 访问权限 +- 安装 Rancher V2 monitoring +- Kubernetes 版本 +- 分配集群成员 +- 配置基础设施,例如 AWS VPC/子网或 vSphere 数据中心 +- 云提供商选项 +- Pod 安全选项 +- 网络提供商 +- Ingress Controller +- 网络安全配置 +- 网络插件 +- 私有镜像仓库 URL 和凭证 +- 附加组件 +- Kubernetes 选项,包括 kube-api、kube-controller、kubelet 和服务等 Kubernetes 组件的配置 + +有关如何配置模板的详细信息,请参阅集群模板的 Helm Chart README 文件。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-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/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/cluster-and-project-roles.md new file mode 100644 index 00000000000..4ccca8da4f2 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/cluster-and-project-roles.md @@ -0,0 +1,240 @@ +--- +title: 集群和项目角色 +weight: 1127 +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +集群和项目角色定义集群或项目内的用户授权。 + +要管理这些角色: + +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. 单击**保存**。 + +**结果**:默认角色已根据你的更改配置。分配给集群/项目创建者的角色会在**集群创建者的默认角色/项目创建者的默认角色**列中勾选。 + +如果要删除默认角色,请编辑权限,并在默认角色选项中选择**否**。 + +### 撤销集群成员资格 + +如果你撤销一个普通用户的集群成员资格,而且该用户已显式分配集群的集群 _和_ 项目的成员资格,该普通用户将[失去集群角色](#clus-roles)但[保留项目角色](#proj-roles)。换句话说,即使你已经撤销了用户访问集群和其中的节点的权限,但该普通用户仍然可以: + +- 访问他们拥有成员资格的项目。 +- 行使分配给他们的任何[单个项目角色](#项目角色参考)。 + +如果你想完全撤销用户在集群中的访问权限,请同时撤销他们的集群和项目成员资格。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/custom-roles.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/custom-roles.md new file mode 100644 index 00000000000..67274ea8aff --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/custom-roles.md @@ -0,0 +1,121 @@ +--- +title: 自定义角色 +weight: 1128 +--- + +在 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/about-authentication.md#外部验证与本地验证)。 +* 外部身份验证提供程序支持[用户组](../about-authentication/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/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/global-permissions.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/global-permissions.md new file mode 100644 index 00000000000..5f91044c257 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/global-permissions.md @@ -0,0 +1,251 @@ +--- +title: 全局权限 +weight: 1126 +--- + +_权限_ 是你在为用户选择自定义权限时可以分配的个人访问权限。 + +全局权限定义用户在任何特定集群之外的授权。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` 角色相比应具有的权限和操作: + +| 类别 | 操作 | 全局管理员 | 普通用户 | 受限管理员 | 受限管理员的注意事项 | +| -------- | ------ | ------------ | ------------- | ---------------- | ------------------------------- | +| 本地集群功能 | 管理本地集群(列出、编辑、导入主机) | 是 | 否 | 否 | | +| | 创建项目/命名空间 | 是 | 否 | 否 | | +| | 添加集群/项目成员 | 是 | 否 | 否 | | +| | 在本地集群中部署 MulticlusterApp | 是 | 否 | 否 | | +| | 全局 DNS | 是 | 否 | 否 | | +| | 访问 CRD 和 CR 的管理集群 | 是 | 否 | 是 | | +| | 另存为 RKE 模板 | 是 | 否 | 否 | | +| 安全 | | | | | | +| 启用身份验证 | 配置身份验证 | 是 | 否 | 是 | | +| 角色 | 创建/分配 GlobalRoles | 是 | 否(可列出) | 是 | 认证 Webhook 允许为已经存在的权限创建 globalrole | +| | 创建/分配 ClusterRoles | 是 | 否(可列出) | 是 | 不在本地集群中 | +| | 创建/分配 ProjectRoles | 是 | 否(可列出) | 是 | 不在本地集群中 | +| 用户 | 添加用户/编辑/删除/停用用户 | 是 | 否 | 是 | | +| 组 | 将全局角色分配给组 | 是 | 否 | 是 | 在 Webhook 允许的范围内 | +| | 刷新组 | 是 | 否 | 是 | | +| PSP | 管理 PSP 模板 | 是 | 否(可列出) | 是 | 与 PSP 的全局管理员权限相同 | +| 工具 | | | | | | +| | 管理 RKE 模板 | 是 | 否 | 是 | | +| | 管理全局应用商店 | 是 | 否 | 是 | 无法编辑/删除内置系统应用商店。可以管理 Helm 库 | +| | 集群驱动 | 是 | 否 | 是 | | +| | 主机驱动 | 是 | 否 | 是 | | +| | GlobalDNS 提供商 | 是 | 是(自己) | 是 | | +| | GlobalDNS 条目 | 是 | 是(自己) | 是 | | +| 设置 | | | | | | +| | 管理设置 | 是 | 否(可列出) | 否(可列出) | | +| 应用 | | | | | | +| | 启动 Multicluster 应用 | 是 | 是 | 是 | 不在本地集群中 | +| 用户 | | | | | | +| | 管理 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/about-authentication.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/about-authentication.md#外部验证与本地验证)。 +* 外部身份验证提供程序支持[用户组](../about-authentication/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/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/locked-roles.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/locked-roles.md new file mode 100644 index 00000000000..2e86f4afab7 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/locked-roles.md @@ -0,0 +1,39 @@ +--- +title: 锁定角色 +weight: 1129 +--- + +你可以将角色设置为`锁定`状态。锁定角色可防止把这些角色分配给用户。 + +处于锁定状态的角色具有如下特性: + +- 无法再分配给当下还没有被分配到该角色的用户。 +- 将用户添加到集群或项目时,不会在**成员角色**下拉列表中列出。 +- 不会影响在锁定该角色之前,已经分配了该角色的用户。即使后来锁定了该角色,这些用户仍然保留该角色提供的访问权限。 + + **示例**:假设你的组织制定了一个内部策略,禁止把创建项目的权限分配给集群用户。这时候你需要执行这个策略。 + + 因此,在将新用户添加到集群之前,你需要锁定以下角色:`集群所有者`,`集群成员`和`创建项目`。然后,创建一个新的自定义角色,该角色的权限与`集群成员`相同,但没有创建项目的权限。然后,在将用户添加到集群时使用这个新的自定义角色。 + +以下用户可以锁定角色: + +- 任何分配了`管理员`全局权限的用户。 +- 任何分配了带有`管理角色`权限的`自定义用户`。 + + +## 锁定/解锁角色 + +如果要防止将角色分配给用户,可以将其设置为`锁定`状态。 + +你可以在两种情况下锁定角色: + +- [添加自定义角色](custom-roles.md)时。 +- 编辑现有角色时(见下文)。 + +集群角色和项目/命名空间角色可以锁定,而全局角色不能锁定。 + +1. 在左上角,单击 **☰ > 用户 & 认证**。 +1. 在左侧导航栏中,单击**角色**。 +1. 转到**集群**选项卡或**项目或命名空间**选项卡。 +1. 找到要锁定(或解锁)的角色,选择 **⋮ > 编辑配置**。 +1. 从**锁定**选项中,选择**是** 或**否**。然后点击**保存**。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/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/current/how-to-guides/advanced-user-guides/cis-scan-guides/configure-alerts-for-periodic-scan-on-a-schedule.md new file mode 100644 index 00000000000..47e91f643dd --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/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` 应用上启用告警。详情请参见[为 rancher-cis-benchmark 启用告警](#为-rancher-cis-benchmark-启用告警)。 +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/current/how-to-guides/advanced-user-guides/cis-scan-guides/create-a-custom-benchmark-version-to-run.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/cis-scan-guides/create-a-custom-benchmark-version-to-run.md new file mode 100644 index 00000000000..8af84c0f45f --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/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 版本,从而运行集群扫描。 + +有关详细信息,请参阅[此页面](../../../explanations/integrations-in-rancher/cis-scans/custom-benchmark.md)。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/cis-scan-guides/enable-alerting-for-rancher-cis-benchmark.md b/i18n/zh/docusaurus-plugin-content-docs/current/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/current/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/current/how-to-guides/advanced-user-guides/cis-scan-guides/install-rancher-cis-benchmark.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/cis-scan-guides/install-rancher-cis-benchmark.md new file mode 100644 index 00000000000..996cc907e21 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/cis-scan-guides/install-rancher-cis-benchmark.md @@ -0,0 +1,11 @@ +--- +title: 安装 Rancher CIS Benchmark +--- + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 在**集群**页面上,转到要安装 CIS Benchmark 的集群,然后单击 **Explore**。 +1. 在左侧导航栏中,单击**应用 & 应用市场 > Charts**。 +1. 单击 **CIS Benchmark**。 +1. 单击**安装**。 + +**结果**:CIS 扫描应用已经部署在 Kubernetes 集群上。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/cis-scan-guides/run-a-scan-periodically-on-a-schedule.md b/i18n/zh/docusaurus-plugin-content-docs/current/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/current/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/current/how-to-guides/advanced-user-guides/cis-scan-guides/run-a-scan.md b/i18n/zh/docusaurus-plugin-content-docs/current/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/current/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/current/how-to-guides/advanced-user-guides/cis-scan-guides/skip-tests.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/cis-scan-guides/skip-tests.md new file mode 100644 index 00000000000..86f21632e92 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/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 扫描配置文件。 + +使用此配置文件[运行扫描](#运行扫描)时,会跳过定义的跳过测试。跳过的测试将在生成的报告中标记为 `Skip`。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/cis-scan-guides/uninstall-rancher-cis-benchmark.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/cis-scan-guides/uninstall-rancher-cis-benchmark.md new file mode 100644 index 00000000000..4205d654324 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/cis-scan-guides/uninstall-rancher-cis-benchmark.md @@ -0,0 +1,9 @@ +--- +title: 卸载 Rancher CIS Benchmark +--- + +1. 在**集群**仪表板中,单击左侧导航的**应用 & 应用市场 > 已安装的应用**。 +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/current/how-to-guides/advanced-user-guides/cis-scan-guides/view-reports.md b/i18n/zh/docusaurus-plugin-content-docs/current/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/current/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/current/how-to-guides/advanced-user-guides/istio-setup-guide/enable-istio-in-cluster.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/istio-setup-guide/enable-istio-in-cluster.md new file mode 100644 index 00000000000..a6ac9c2265b --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/istio-setup-guide/enable-istio-in-cluster.md @@ -0,0 +1,30 @@ +--- +title: 1. 在集群中启用 Istio +weight: 1 +--- + +:::note 先决条件: + +- 只有分配了 `cluster-admin` [Kubernetes 默认角色](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#user-facing-roles)的用户可以在 Kubernetes 集群中配置和安装 Istio。 +- 如果你有 pod 安全策略,则需要安装启用了 CNI 的 Istio。有关详细信息,请参阅[本节](../../../explanations/integrations-in-rancher/istio/configuration-options/pod-security-policies.md)。 +- 要在 RKE2 集群上安装 Istio,则需要执行额外的步骤。有关详细信息,请参阅[本节](../../../explanations/integrations-in-rancher/istio/configuration-options/install-istio-on-rke2-cluster.md)。 +- 要在启用了项目网络隔离的集群中安装 Istio,则需要执行额外的步骤。有关详细信息,请参阅[本节](../../../explanations/integrations-in-rancher/istio/configuration-options/project-network-isolation.md)。 + +::: + +1. 点击 **☰ > 集群管理**。 +1. 转到要启用 Istio 的位置,然后单击 **Explore**。 +1. 单击**应用 & 应用市场**。 +1. 单击 **Chart**。 +1. 单击 **Istio**。 +1. 如果你还没有安装 Monitoring 应用,系统会提示你安装 rancher-monitoring。你也可以选择在 Rancher-monitoring 安装上设置选择器或抓取配置选项。 +1. 可选:为 Istio 组件配置成员访问和[资源限制](../../../explanations/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/current/how-to-guides/advanced-user-guides/istio-setup-guide/enable-istio-in-namespace.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/istio-setup-guide/enable-istio-in-namespace.md new file mode 100644 index 00000000000..a7bc098b4a6 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/istio-setup-guide/enable-istio-in-namespace.md @@ -0,0 +1,54 @@ +--- +title: 2. 在命名空间中启用 Istio +weight: 2 +--- + +你需要在需要由 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/current/how-to-guides/advanced-user-guides/istio-setup-guide/generate-and-view-traffic.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/istio-setup-guide/generate-and-view-traffic.md new file mode 100644 index 00000000000..48b03120ead --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/istio-setup-guide/generate-and-view-traffic.md @@ -0,0 +1,27 @@ +--- +title: 6. 生成和查看流量 +weight: 7 +--- + +本文介绍如何查看 Istio 管理的流量。 + +# Kiali 流量图 + +Istio 概览页面提供了 Kiali 仪表板的链接。在 Kiali 仪表板中,你可以查看每个命名空间的图。Kiali 图提供了一种强大的方式来可视化 Istio 服务网格的拓扑。它显示了服务之间相互通信的情况。 + +:::note 先决条件: + +要显示流量图,请确保你在集群中安装了 Prometheus。Rancher-istio 安装了默认配置的 Kiali 来与 rancher-monitoring Chart 一起工作。你可以使用 rancher-monitoring 或安装自己的监控解决方案。你也可以通过设置[选择器 & 抓取配置](../../../explanations/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/current/how-to-guides/advanced-user-guides/istio-setup-guide/set-up-istio-gateway.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/istio-setup-guide/set-up-istio-gateway.md new file mode 100644 index 00000000000..1a5c7bab86e --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/istio-setup-guide/set-up-istio-gateway.md @@ -0,0 +1,148 @@ +--- +title: 4. 设置 Istio Gateway +weight: 5 +--- + +每个集群的网关可以有自己的端口或负载均衡器,这与服务网格无关。默认情况下,每个 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 的集群可以有两个 ingress,分别是默认的 Nginx ingress 和默认的 Istio controller](/img/istio-ingress.svg) + +# 启用 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/current/how-to-guides/advanced-user-guides/istio-setup-guide/set-up-traffic-management.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/istio-setup-guide/set-up-traffic-management.md new file mode 100644 index 00000000000..caf9d883478 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/istio-setup-guide/set-up-traffic-management.md @@ -0,0 +1,77 @@ +--- +title: 5. 设置 Istio 的流量管理组件 +weight: 6 +--- + +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/current/how-to-guides/advanced-user-guides/istio-setup-guide/use-istio-sidecar.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/istio-setup-guide/use-istio-sidecar.md new file mode 100644 index 00000000000..01d79d5573c --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/istio-setup-guide/use-istio-sidecar.md @@ -0,0 +1,361 @@ +--- +title: 3. 使用 Istio Sidecar 添加部署和服务 +weight: 4 +--- + +:::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/current/how-to-guides/advanced-user-guides/manage-clusters/access-clusters/add-users-to-clusters.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/access-clusters/add-users-to-clusters.md new file mode 100644 index 00000000000..c6eab630921 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/access-clusters/add-users-to-clusters.md @@ -0,0 +1,67 @@ +--- +title: 将用户添加到集群 +weight: 2020 +--- + +如果你想为用户提供对集群内 _所有_ 项目、节点和资源的访问权限,请为用户分配集群成员资格。 + +:::tip + +如果你想为用户提供对集群内 _特定_ 项目的访问权限,请参见[添加项目成员](../../manage-projects/add-users-to-projects.md)。 + +::: + +你可以在两种情况下添加集群成员: + +- 将成员添加到新集群 + + 你可以在创建集群时将成员添加到集群(推荐)。 + +- [向现有集群添加成员](#编辑集群成员) + + 配置集群后,你始终可以向集群添加成员。 + +## 编辑集群成员 + +集群管理员可以编辑集群的成员,控制哪些 Rancher 用户可以访问集群以及他们可以使用哪些功能。 + +1. 点击 **☰ > 集群管理**。 +1. 转到要添加成员的集群,然后单击 **⋮ > 编辑配置**。 +1. 在**成员角色**选项卡中,单击**添加成员**。 +1. 搜索要添加到集群的用户或组。 + + 如果配置了外部身份验证: + + - 在你键入时,Rancher 会从你的[外部身份验证](../../../../pages-for-subheaders/about-authentication.md)源返回用户。 + + :::note 使用 AD 但找不到你的用户? + + 你的搜索属性配置可能存在问题。请参阅[配置 Active Directory 身份验证:步骤 5](../../authentication-permissions-and-global-configuration/about-authentication/authentication-config/configure-active-directory.md)。 + + ::: + + - 你可以在下拉菜单中添加组,而不是单个用户。下拉列表仅列出你(登录用户)所属的组。 + + :::note + + 如果你以本地用户身份登录,外部用户不会显示在你的搜索结果中。有关详细信息,请参阅[外部身份验证配置和主体用户](../../../../pages-for-subheaders/about-authentication.md#外部身份验证配置和用户主体)。 + + ::: + +1. 分配用户或组的**集群**角色。 + + [什么是集群角色?](../../authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/cluster-and-project-roles.md) + + :::tip + + 对于自定义角色,你可以修改可分配的单个角色列表。 + + - 要将角色添加到列表中,请[添加自定义角色](../../authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/custom-roles.md)。 + - 要从列表中删除角色,请[锁定/解锁角色](../../authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/locked-roles.md)。 + + ::: + +**结果**:已将选中的用户添加到集群中。 + +- 要撤销集群成员资格,请选择用户并单击**删除**。此操作会删除成员资格,而不会删除用户。 +- 要修改集群中的用户角色,请将其从集群中删除,然后使用修改后的角色重新添加用户。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/access-clusters/authorized-cluster-endpoint.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/access-clusters/authorized-cluster-endpoint.md new file mode 100644 index 00000000000..655fce5af03 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/access-clusters/authorized-cluster-endpoint.md @@ -0,0 +1,43 @@ +--- +title: 授权集群端点的工作原理 +weight: 2015 +--- + +本文介绍 kubectl CLI、kubeconfig 文件和授权集群端点如何协同工作,使你可以直接访问下游 Kubernetes 集群,而无需通过 Rancher Server 进行身份验证。本文旨在为[设置 kubectl 以直接访问集群的说明](use-kubectl-and-kubeconfig.md#直接使用下游集群进行身份验证)提供背景信息和上下文。 + +### kubeconfig 文件说明 + +_kubeconfig 文件_ 是与 kubectl 命令行工具(或其他客户端)结合使用时用于配置 Kubernetes 访问的文件。 + +此 kubeconfig 文件及其内容特定于你正在查看的集群。你可以从 Rancher 的**集群**视图中下载该文件。在 Rancher 中可以访问的每个集群都需要一个单独的 kubeconfig 文件。 + +下载 kubeconfig 文件后,你将能够使用 kubeconfig 文件及其 Kubernetes [上下文](https://kubernetes.io/docs/reference/kubectl/cheatsheet/#kubectl-context-and-configuration)访问下游集群。 + +如果管理员[关闭了 kubeconfig 令牌生成](../../../../reference-guides/about-the-api/api-tokens.md#在生成的-kubeconfigs-中禁用令牌),则 kubeconfig 文件要求 [Rancher CLI](./authorized-cluster-endpoint.md) 存在于你的 PATH 中。 + +### RKE 集群的两种身份验证方法 + +如果集群不是 [RKE 集群](../../../../pages-for-subheaders/launch-kubernetes-with-rancher.md),kubeconfig 文件只允许你以一种方式访问​​集群,即通过 Rancher Server 进行身份验证,然后 Rancher 允许你在集群上运行 kubectl 命令。 + +对于 RKE 集群,kubeconfig 文件允许你通过两种方式进行身份验证: + +- **通过 Rancher Server 身份验证代理**:Rancher 的身份验证代理会验证你的身份,然后将你连接到要访问的下游集群。 +- **直接使用下游集群的 API Server**:RKE 集群默认启用授权集群端点。此端点允许你使用 kubectl CLI 和 kubeconfig 文件访问下游 Kubernetes 集群,且 RKE 集群默认启用该端点。在这种情况下,下游集群的 Kubernetes API server 通过调用 Rancher 设置的 webhook(`kube-api-auth` 微服务)对你进行身份验证。 + +第二种方法(即直接连接到集群的 Kubernetes API server)非常重要,因为如果你无法连接到 Rancher,这种方法可以让你访问下游集群。 + +要使用授权集群端点,你需要配置 kubectl,从而使用 Rancher 在创建 RKE 集群时生成的 kubeconfig 文件中的额外 kubectl 上下文。该文件可以从 Rancher UI 的**集群**视图中下载,配置 kubectl 的说明在[此页面](use-kubectl-and-kubeconfig.md#直接使用下游集群进行身份验证)。 + +[架构介绍](../../../../pages-for-subheaders/rancher-manager-architecture.md#与下游集群通信)也详细解释了这些与下游 Kubernetes 集群通信的方法,并介绍了 Rancher 的工作原理以及 Rancher 如何与下游集群通信的详细信息。 + +### 关于 kube-api-auth 身份验证 Webhook + +`kube-api-auth` 微服务是为[授权集群端点](../../../../pages-for-subheaders/rancher-manager-architecture.md#4-授权集群端点)提供用户认证功能而部署的,该功能仅适用于[RKE 集群](../../../../pages-for-subheaders/launch-kubernetes-with-rancher.md)。当你使用 `kubectl` 访问下游集群时,集群的 Kubernetes API server 会使用 `kube-api-auth` 服务作为 webhook 对你进行身份验证。 + +在集群配置期间会部署 `/etc/kubernetes/kube-api-authn-webhook.yaml` 文件,并使用 `--authentication-token-webhook-config-file=/etc/kubernetes/kube-api-authn-webhook.yaml` 配置 `kube-apiserver`。这会将 `kube-apiserver` 配置为通过查询 `http://127.0.0.1:6440/v1/authenticate` 来确定持有者 token 的身份验证。 + +`kube-api-auth` 的调度规则如下: + +| 组件 | nodeAffinity nodeSelectorTerms | nodeSelector | 容忍度 | +| -------------------- | ------------------------------------------ | ------------ | ------------------------------------------------------------------------------ | +| kube-api-auth | `beta.kubernetes.io/os:NotIn:windows`
`node-role.kubernetes.io/controlplane:In:"true"` | none | `operator:Exists` | diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/access-clusters/use-kubectl-and-kubeconfig.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/access-clusters/use-kubectl-and-kubeconfig.md new file mode 100644 index 00000000000..5bed6de12ab --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/access-clusters/use-kubectl-and-kubeconfig.md @@ -0,0 +1,105 @@ +--- +title: "使用 Kubectl 和 kubeconfig 访问集群" +description: "了解如何通过 kubectl Shell 使用 kubectl,或通过 kubectl CLI 和 kubeconfig 文件,来访问和管理 Kubernetes 集群。kubeconfig 文件用于配置对 Kubernetes 的访问。当你使用 Rancher 创建集群时,Rancher 会自动为你的集群创建 kubeconfig。" +weight: 2010 +--- + +本文介绍如何通过 Rancher UI 或工作站来使用 kubectl 操作下游 Kubernetes 集群。 + +有关使用 kubectl 的更多信息,请参阅 [Kubernetes 文档:kubectl 概述](https://kubernetes.io/docs/reference/kubectl/overview/)。 + + + +### 在 Rancher UI 中使用 kubectl shell 访问集群 + +你可以通过登录 Rancher 并在 UI 中打开 kubectl shell 来访问和管理你的集群。你无需进一步配置。 + +1. 点击 **☰ > 集群管理**。 +1. 转到要使用 kubectl 访问的集群,然后单击 **Explore**。 +1. 在顶部导航菜单中,单击 **Kubectl Shell** 按钮。使用打开的窗口与你的 Kubernetes 集群进行交互。 + +### 在工作站使用 kubectl 访问集群 + +本节介绍如何下载集群的 kubeconfig 文件、从工作站启动 kubectl 以及访问下游集群。 + +这种访问集群的替代方法允许你在不使用 Rancher UI 的情况下通过 Rancher 进行身份验证并管理集群。 + +:::note 先决条件: + +以下说明假设你已经创建了一个 Kubernetes 集群,并且已将 kubectl 安装在工作站上。有关安装 kubectl 的帮助,请参阅官方 [Kubernetes 文档](https://kubernetes.io/docs/tasks/tools/install-kubectl/)。 + +::: + +1. 登录到 Rancher。点击 **☰ > 集群管理**。 +1. 转到要使用 kubectl 访问的集群,然后单击 **Explore**。 +1. 在顶部导航栏中,单击**下载 KubeConfig** 按钮。 +1. 将 YAML 文件保存在本地计算机上。将文件移动到 `~/.kube/config`。注意:kubectl 用于 kubeconfig 文件的默认位置是 `~/.kube/config`。但是你也可以运行类似以下的命令,使用 `--kubeconfig` 标志指定任何其他目录: +``` +kubectl --kubeconfig /custom/path/kube.config get pods +``` +1. 从工作站启动 kubectl。使用它与 Kubernetes 集群进行交互。 + + +### 使用 kubectl 创建的资源的注意事项 + +Rancher 会发现并显示由 `kubectl` 创建的资源。但是在发现资源的时候,这些资源可能没有包括所有必须的注释。如果资源已经使用 Rancher UI/API 进行操作(例如,扩展工作负载),但是由于缺少注释,资源的重新创建可能会触发。只有在首次对发现的资源进行操作时,这种情况才会发生。 + +## 直接使用下游集群进行身份验证 + +本节旨在帮助你设置访问 [RKE 集群的替代方法](../../../../pages-for-subheaders/launch-kubernetes-with-rancher.md)。 + +此方法仅适用于启用了[授权集群端点](../../../../pages-for-subheaders/rancher-manager-architecture.md#4-授权集群端点)的 RKE 集群。在 Rancher 创建 RKE 集群时,Rancher 会生成一个 kubeconfig 文件,其中包含用于访问集群的额外 kubectl 上下文。该上下文允许你使用 kubectl 通过下游集群进行身份验证,而无需通过 Rancher 进行身份验证。有关授权集群端点如何工作的详细说明,请参阅[此页面](authorized-cluster-endpoint.md)。 + +我们的最佳实践是使用此方法来访问 RKE 集群。这样,万一你无法连接到 Rancher,你仍然可以访问该集群。 + +:::note 先决条件: + +以下步骤假设你已经创建了一个 Kubernetes 集群,并按照步骤[从工作站使用 kubectl 连接到集群](#在工作站使用-kubectl-访问集群)。 + +::: + +要在下载的 kubeconfig 文件中查找上下文的名称,请运行: + +``` +kubectl config get-contexts --kubeconfig /custom/path/kube.config +CURRENT NAME CLUSTER AUTHINFO NAMESPACE +* my-cluster my-cluster user-46tmn + my-cluster-controlplane-1 my-cluster-controlplane-1 user-46tmn +``` + +在此示例中,当你将 `kubectl` 与第一个上下文 `my-cluster` 一起使用时,你将通过 Rancher Server 进行身份验证。 + +使用第二个上下文 `my-cluster-controlplane-1`,你将使用授权集群端点进行身份验证,直接与下游 RKE 集群通信。 + +我们建议使用具有授权集群端点的负载均衡器。有关详细信息,请参阅[推荐的架构](../../../../reference-guides/rancher-manager-architecture/architecture-recommendations.md#授权集群端点架构)。 + +现在你已经有了直接使用集群进行身份验证所需的上下文名称,你可以在运行 kubectl 命令时将上下文名称作为选项传入。根据你的集群是否定义了 FQDN,这些命令会有所不同。以下几节提供了示例。 + +当 `kubectl` 正常工作时,它确认你可以绕过 Rancher 的身份验证代理访问集群。 + +### 直接连接到定义了 FQDN 的集群 + +如果集群定义了 FQDN,将会创建一个引用 FQDN 的上下文。上下文将命名为 `-fqdn`。当你想在没有 Rancher 的情况下使用 `kubectl` 访问这个集群时,你需要使用这个上下文。 + +假设 kubeconfig 文件位于 `~/.kube/config`: + +``` +kubectl --context -fqdn get nodes +``` +直接引用 kubeconfig 文件的位置: +``` +kubectl --kubeconfig /custom/path/kube.config --context -fqdn get pods +``` + +### 直接连接到未定义 FQDN 的集群 + +如果集群没有定义 FQDN,则会创建额外的上下文来引用 controlplane 中每个节点的 IP 地址。每个上下文将被命名为 `-`。当你想在没有 Rancher 的情况下使用 `kubectl` 访问这个集群时,你需要使用这个上下文。 + +假设 kubeconfig 文件位于 `~/.kube/config`: +``` +kubectl --context - get nodes +``` +直接引用 kubeconfig 文件的位置: +``` +kubectl --kubeconfig /custom/path/kube.config --context - get pods +``` diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/add-a-pod-security-policy.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/add-a-pod-security-policy.md new file mode 100644 index 00000000000..25db290f11c --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/add-a-pod-security-policy.md @@ -0,0 +1,40 @@ +--- +title: 添加 Pod 安全策略 +weight: 80 +--- + +:::note 先决条件: + +以下选项仅适用于[使用 RKE 启动的集群](../../../pages-for-subheaders/launch-kubernetes-with-rancher.md)。 + +::: + +当你的集群上运行了具有安全敏感配置的 pod 时,请为其分配 [pod 安全策略](../authentication-permissions-and-global-configuration/create-pod-security-policies.md),这是一组用于监控 pod 中的状态和设置的规则。如果 pod 不符合你的策略中指定的规则,则该策略会阻止它运行。 + +你可以在配置集群时分配 pod 安全策略。如果你以后需要放松或限制 pod 的安全性,你可以在编辑集群时更新策略: + +1. 点击 **☰ > 集群管理**。 +1. 转到要应用 pod 安全策略的集群,然后单击 **⋮ > 编辑配置**。 +1. 在 **Pod 安全策略支持**中,选择**启用**。 + + :::note + + 此选项仅适用于[由 RKE 配置的集群](../../../pages-for-subheaders/launch-kubernetes-with-rancher.md)。 + + ::: + +4. 从**默认 Pod 安全策略**下拉列表中,选择要应用于集群的策略。 + + Rancher 支持了`受限`和`不受限`的[策略](../authentication-permissions-and-global-configuration/create-pod-security-policies.md#默认-psp),你也可以[创建自定义策略](../authentication-permissions-and-global-configuration/create-pod-security-policies.md#默认-psp)。 + +5. 单击**保存**。 + +**结果**:pod 安全策略应用于集群和集群内的任何项目。 + +:::note + +在分配 pod 安全策略之前已经运行的工作负载是不受限制的。即使它们不符合你的 pod 安全策略,在分配策略之前运行的工作负载也会继续运行。 + +要检查正在运行的工作负载是否通过了你的 pod 安全策略,请克隆或升级它。 + +::: \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/assign-pod-security-policies.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/assign-pod-security-policies.md new file mode 100644 index 00000000000..cd09a7c06a2 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/assign-pod-security-policies.md @@ -0,0 +1,26 @@ +--- +title: 分配 Pod 安全策略 +weight: 2260 +--- + +_Pod 安全策略_(PSP)是控制 Pod 安全的规范(如是否可以使用 root 权限等)的对象。 + +## 添加默认 Pod 安全策略 + +使用 RKE 创建新集群时,你可以将其配置为立即应用 PSP。创建集群时,使用**集群选项**来启用 PSP。分配给集群的 PSP 将是集群内项目的默认 PSP。 + +:::note 先决条件: + +在 Rancher 中创建 Pod 安全策略。在将默认 PSP 分配给新集群之前,你必须有一个可分配的 PSP。有关说明,请参阅[创建 Pod 安全策略](../authentication-permissions-and-global-configuration/create-pod-security-policies.md)。 + +::: + +:::note + +出于安全考虑,我们建议你在创建集群时分配 PSP。 + +::: + +要启用默认 Pod 安全策略,请将 **Pod 安全策略支持** 选项设置为**启用**,然后从**默认 Pod 安全策略**下拉框中进行选择。 + +集群完成配置后,你选择的 PSP 将应用于集群内的所有项目。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/clean-cluster-nodes.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/clean-cluster-nodes.md new file mode 100644 index 00000000000..2ca4cdb51a9 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/clean-cluster-nodes.md @@ -0,0 +1,366 @@ +--- +title: 从节点中移除 Kubernetes 组件 +description: 了解从 Rancher 启动的 Kubernetes 集群中删除节点时的集群清理过程。了解删除了的内容,以及如何手动进行操作 +weight: 2055 +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +本文介绍如何断开 Rancher 创建的 Kubernetes 集群中的一个节点,并删除该节点中的所有 Kubernetes 组件。此过程允许你将节点用于其他用途。 + +在通过 Rancher 在基础设施提供商的新节点上安装 Kubernetes 时,会创建资源(容器/虚拟网络接口)和配置项(证书/配置文件)。 + +从 Rancher 启动的 Kubernetes 集群中移除节点时(前提是它们处于 `Active` 状态),这些资源会被自动清理,唯一需要的操作是重启节点。如果节点变得不可访问并且无法自动清理进程时,请先执行我们提供的步骤,然后该节点才能重新添加到集群。 + +## 移除了什么? + +清理使用 Rancher 配置的节点时,会根据要删除的集群节点类型移除以下组件: + +| 移除的组件 | [由基础设施提供商托管的节点][1] | [自定义节点][2] | [托管集群][3] | [注册节点][4] | +|--------------------------------------------------------------------------------|----------------------------------------------|-------------------|---------------------|-----------------------| +| Rancher deployment 命名空间(默认:`cattle-system`) | ✓ | ✓ | ✓ | ✓ | +| 由 Rancher 标记的 `serviceAccount`、`clusterRoles` 和 `clusterRoleBindings` | ✓ | ✓ | ✓ | ✓ | +| 标签、注释和终结器 | ✓ | ✓ | ✓ | ✓ | +| Rancher Deployment | ✓ | ✓ | ✓ | | +| 主机、集群、项目和用户的自定义资源定义 (CRD) | ✓ | ✓ | ✓ | | +| 在 `management.cattle.io` API Group 下创建的所有资源 | ✓ | ✓ | ✓ | | +| Rancher v2.x 创建的所有 CRD | ✓ | ✓ | ✓ | | + +[1]: ../../../pages-for-subheaders/use-new-nodes-in-an-infra-provider.md +[2]: ../../../pages-for-subheaders/use-existing-nodes.md +[3]: ../../../pages-for-subheaders/set-up-clusters-from-hosted-kubernetes-providers.md +[4]: ../../../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/register-existing-clusters.md + +## 通过 Rancher UI 删除集群中的节点 + +如果节点处于 `Active` 状态,删除集群中的节点会触发清理节点的进程。完成自动清理后请重启节点,以确保所有非持久性数据已正确删除。 + +**重启节点**: + +``` +# 使用重启 +$ sudo reboot + +# 使用关机 +$ sudo shutdown -r now +``` + +## 手动移除集群中的 Rancher 组件 + +当节点不可达并已从集群中移除时,由于该节点不可达,则无法触发自动清理过程。请按照以下步骤手动删除 Rancher 组件。 + +:::danger + +下面列出的命令将删除节点中的数据。在执行命令之前,由于数据将会丢失,请确保你已经备份了要保留的文件。 + +::: + +### 移除注册集群中的 Rancher 组件 + +移除注册集群中的 Rancher 的过程略有不同。你可以选择在 Rancher UI 中简单地删除集群,也可以运行脚本从节点中删除 Rancher 组件。两个选项的删除效果是一样的。 + +将注册集群分离 Rancher 后,集群的工作负载将不受影响,你可以使用与集群注册到 Rancher 之前相同的方法来访问集群。 + + + + +:::danger + +此过程将删除你的集群数据。在执行命令之前,由于数据将会丢失,请确保你已经备份了要保留的文件。 + +::: + +使用 Rancher UI(或 API)删除注册集群后,会发生以下事件: + +1. Rancher 创建一个 `serviceAccount`,用于删除集群中的 Rancher 组件。此账号分配了 [clusterRole](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#role-and-clusterrole) 和 [clusterRoleBinding](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#rolebinding-and-clusterrolebinding) 权限,这些权限是删除 Rancher 组件所必需的。 + +1. Rancher 会使用 `serviceAccount` 调度并运行一个 [job](https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/),以将 Rancher 组件从集群中清除。该 job 还将 `serviceAccount` 及其角色作为依赖引用,因此该 job 在完成之前会删除它们。 + +1. 已从集群中移除 Rancher。然而,集群仍然存在,运行着原生版本的 Kubernetes。 + +**结果**:已删除[移除了什么](#移除了什么)章节中为注册集群列出的所有组件。 + + + + +你可以运行脚本,而不是使用 Rancher UI 来清理已注册的集群节点。 + +:::note 先决条件: + +安装 [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/)。 + +::: + +1. 打开浏览器并导航到 [GitHub](https://github.com/rancher/rancher/blob/master/cleanup/user-cluster.sh),然后下载 `user-cluster.sh`。 + +1. 在 `user-cluster.sh` 所在的目录下运行以下命令,使脚本可执行: + + ``` + chmod +x user-cluster.sh + ``` + +1. **仅限离线环境**:打开 `user-cluster.sh` 并将 `yaml_url` 替换为 `user-cluster.yml` 中的 URL。 + + 如果你没有使用离线环境,请跳过此步骤。 + +1. 在同一目录中,运行脚本并提供 `rancher/rancher-agent` 镜像版本,该版本应与用于管理集群的 Rancher 版本相同(``): + + :::tip + + 你可以添加 `-dry-run` 标志来预览脚本的结果,但不进行更改。 + ``` + ./user-cluster.sh rancher/rancher-agent: + ``` + + ::: + +**结果**:脚本已运行。已删除[移除了什么](#移除了什么)章节中为注册集群列出的所有组件。 + + + + +## 清理节点 + + + + +### Windows 节点 + +要清理 Windows 节点,你可以运行位于 `c:\\etc\\rancher` 中的清理脚本。该脚本删除 Kubernetes 生成的资源并执行二进制文件,还会删除防火墙规则和网络设置。 + +要运行脚本,你可以在 PowerShell 中运行以下命令: + +``` +pushd c:\etc\rancher +.\cleanup.ps1 +popd +``` + +**结果**:节点被重置,并可以重新添加到 Kubernetes 集群中。 + +### Docker 容器、镜像和卷 + +根据你分配给节点的角色,Kubernetes 组件存在于容器、属于覆盖网络的容器、DNS、ingress controller 和 Rancher agent(以及你创建的已调度到此节点的 pod)。 + +**清理所有 Docker 容器、镜像和卷**: + +``` +docker rm -f $(docker ps -qa) +docker rmi -f $(docker images -q) +docker volume rm $(docker volume ls -q) +``` + +### 挂载 + +Kubernetes 组件和密文会在系统上留下需要卸载的挂载。 + +| 挂载 | +|----------------------------------------------------| +| `/var/lib/kubelet/pods/XXX`(各种挂载) | +| `/var/lib/kubelet` | +| `/var/lib/rancher` | + +**卸载所有挂载**: + +``` +for mount in $(mount | grep tmpfs | grep '/var/lib/kubelet' | awk '{ print $3 }') /var/lib/kubelet /var/lib/rancher; do umount $mount; done +``` + + + + +你需要在通过 Rancher 配置的 RKE2 集群节点上删除两个组件: + +* rancher-system-agent:连接 Rancher 并安装和管理 RKE2 +* RKE2 本身 + +### 删除 rancher-system-agent + +要删除 rancher-system-agent,请运行 [system-agent-uninstall.sh](https://github.com/rancher/system-agent/blob/main/system-agent-uninstall.sh) 脚本: + +``` +curl https://raw.githubusercontent.com/rancher/system-agent/main/system-agent-uninstall.sh | sudo sh +``` + +### 删除 RKE2 + +要删除 RKE2,请运行节点上已存在的 `rke2-uninstall` 脚本: + +``` +sudo rke2-uninstall.sh +``` + + + + +你需要在通过 Rancher 配置的 K3s 集群节点上删除两个组件: + +* rancher-system-agent:连接 Rancher 并安装和管理 K3s +* K3s 本身 + +### 删除 rancher-system-agent + +要删除 rancher-system-agent,请运行 [system-agent-uninstall.sh](https://github.com/rancher/system-agent/blob/main/system-agent-uninstall.sh) 脚本: + +``` +curl https://raw.githubusercontent.com/rancher/system-agent/main/system-agent-uninstall.sh | sudo sh +``` + +### 删除 K3s + +要删除 K3s,请运行节点上已存在的 `k3s-uninstall` 脚本: + +``` +sudo k3s-uninstall.sh +``` + + + + +### 目录和文件 + +以下目录在将节点添加到集群时使用,应将该目录删除。你可以使用 `rm -rf /directory_name` 来删除目录。 + +:::note + +节点分配的角色决定了出现在节点上的目录。 + +::: + +| 目录 | +|------------------------------| +| `/etc/ceph` | +| `/etc/cni` | +| `/etc/kubernetes` | +| `/etc/rancher` | +| `/opt/cni` | +| `/opt/rke` | +| `/run/secrets/kubernetes.io` | +| `/run/calico` | +| `/run/flannel` | +| `/var/lib/calico` | +| `/var/lib/etcd` | +| `/var/lib/cni` | +| `/var/lib/kubelet` | +| `/var/lib/rancher` | +| `/var/log/containers` | +| `/var/log/kube-audit` | +| `/var/log/pods` | +| `/var/run/calico` | + +**清理目录**: + +``` +rm -rf /etc/ceph \ + /etc/cni \ + /etc/kubernetes \ + /etc/rancher \ + /opt/cni \ + /opt/rke \ + /run/secrets/kubernetes.io \ + /run/calico \ + /run/flannel \ + /var/lib/calico \ + /var/lib/etcd \ + /var/lib/cni \ + /var/lib/kubelet \ + /var/lib/rancher\ + /var/log/containers \ + /var/log/kube-audit \ + /var/log/pods \ + /var/run/calico +``` + +### 网络接口和 iptables + +其余两个更改/配置的组件是(虚拟)网络接口和 iptables 规则。两者都对节点不持久,这意味着它们将在节点重新启动后被清除。要删除这些组件,建议重新启动它们。 + +**重启节点**: + +``` +# 使用重启 +$ sudo reboot + +# 使用关机 +$ sudo shutdown -r now +``` + +如果你想了解更多关于(虚拟)网络接口或 iptables 规则的信息,请参阅下面的具体内容。 + +### 网络接口 + +:::note + +节点所在的集群所配置的网络提供商决定了节点上将出现的接口。 + +::: + +| 接口 | +|--------------------------------------------| +| `flannel.1` | +| `cni0` | +| `tunl0` | +| `caliXXXXXXXXXXX` (random interface names) | +| `vethXXXXXXXX` (random interface names) | + +**列出所有接口**: + +``` +# 使用 ip +ip address show + +# 使用 ifconfig +ifconfig -a +``` + +**删除接口**: + +``` +ip link delete interface_name +``` + +### Iptables + +:::note + +节点所在的集群所配置的网络提供商决定了节点上将出现的链。 + +::: + +iptables 规则用于将流量从容器路由到容器。创建的规则不是持久性的,因此重新启动节点会将 iptables 恢复到原始状态。 + +| 链 | +|--------------------------------------------------| +| `cali-failsafe-in` | +| `cali-failsafe-out` | +| `cali-fip-dnat` | +| `cali-fip-snat` | +| `cali-from-hep-forward` | +| `cali-from-host-endpoint` | +| `cali-from-wl-dispatch` | +| `cali-fw-caliXXXXXXXXXXX` (random chain names) | +| `cali-nat-outgoing` | +| `cali-pri-kns.NAMESPACE` (chain per namespace) | +| `cali-pro-kns.NAMESPACE` (chain per namespace) | +| `cali-to-hep-forward` | +| `cali-to-host-endpoint` | +| `cali-to-wl-dispatch` | +| `cali-tw-caliXXXXXXXXXXX` (random chain names) | +| `cali-wl-to-host` | +| `KUBE-EXTERNAL-SERVICES` | +| `KUBE-FIREWALL` | +| `KUBE-MARK-DROP` | +| `KUBE-MARK-MASQ` | +| `KUBE-NODEPORTS` | +| `KUBE-SEP-XXXXXXXXXXXXXXXX` (random chain names) | +| `KUBE-SERVICES` | +| `KUBE-SVC-XXXXXXXXXXXXXXXX` (random chain names) | + +**列出所有 iptables 规则**: + +``` +iptables -L -t nat +iptables -L -t mangle +iptables -L +``` diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/clone-cluster-configuration.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/clone-cluster-configuration.md new file mode 100644 index 00000000000..1ed44b4e7ab --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/clone-cluster-configuration.md @@ -0,0 +1,111 @@ +--- +title: 克隆集群 +weight: 2035 +--- + +如果你在 Rancher 中有一个集群并想将这个集群用作创建集群的模板,你可以使用 Rancher CLI 克隆集群的配置,编辑配置,然后使用这些配置来快速启动克隆的集群。 + +不支持复制已注册的集群。 + +| 集群类型 | 是否可克隆 | +|----------------------------------|---------------| +| [由基础设施提供商托管的节点](../../../pages-for-subheaders/use-new-nodes-in-an-infra-provider.md) | ✓ | +| [托管的 Kubernetes 提供商](../../../pages-for-subheaders/set-up-clusters-from-hosted-kubernetes-providers.md) | ✓ | +| [自定义集群](../../../pages-for-subheaders/use-existing-nodes.md) | ✓ | +| [已注册集群](../../new-user-guides/kubernetes-clusters-in-rancher-setup/register-existing-clusters.md) | | + +:::caution + +在复制集群的过程中,你将编辑一个包含所有集群设置的配置文件。但是,由于集群复制 **_not_** 大规模更改配置,因此我们建议仅编辑本文中明确列出的值。编辑其他值可能会使配置文件失效,从而导致集群部署失败。 + +::: + +## 先决条件 + +下载并安装 [Rancher CLI](../../../pages-for-subheaders/cli-with-rancher.md)。如有必要,请[创建 API 持有者令牌](../../../reference-guides/user-settings/api-keys.md)。 + + +## 1. 导出集群配置 + +首先,使用 Rancher CLI 导出要克隆的集群的配置。 + +1. 打开终端并转到 Rancher CLI 二进制文件所在的位置 `rancher`。 + +1. 运行以下命令以列出 Rancher 管理的集群: + + + ./rancher cluster ls + + +1. 找到要克隆的集群,并将其资源 `ID` 或 `NAME` 复制到剪贴板。从此处开始,我们将资源 `ID` 或 `NAME` 称为 ``,它在接下来用作占位符。 + +1. 运行以下命令以导出集群的配置: + + + ./rancher clusters export + + + **步骤结果**:已将克隆集群的 YAML 打印到终端。 + +1. 将 YAML 粘贴到新文件中。将文件另存为 `cluster-template.yml`(或任何其他名称,确保扩展名是 `.yml` 即可)。 + +## 2. 修改集群配置 + +使用文本编辑器为克隆集群修改 `cluster-template.yml` 中的集群配置。 + +:::note + +集群配置参数必须嵌套在 `cluster.yml` 中的 `rancher_kubernetes_engine_config` 下。有关详细信息,请参阅 [Rancher 2.3.0+ 配置文件结构](../../../reference-guides/cluster-configuration/rancher-server-configuration/rke1-cluster-configuration.md#rancher-中的配置文件结构)。 + +::: + +1. 在文本编辑器中打开 `cluster-template.yml`(或你重命名了的配置文件)。 + + :::caution + + 仅需编辑下面明确指出的集群配置项。此文件中列出的很多值均用于配置克隆的集群,因此编辑它们的值可能会中断配置过程。 + + ::: + + +1. 如下例所示,在 `` 占位符处将原始集群的名称替换为唯一名称 (``)。如果克隆的集群名称重复,则集群将无法成功配置。 + + ```yml + Version: v3 + clusters: + : # 输入唯一的名称 + dockerRootDir: /var/lib/docker + enableNetworkPolicy: false + rancherKubernetesEngineConfig: + addonJobTimeout: 30 + authentication: + strategy: x509 + authorization: {} + bastionHost: {} + cloudProvider: {} + ignoreDockerVersion: true + ``` + +1. 对于每个 `nodePools`,将原始节点池名称替换为 `` 占位符处的唯一名称。如果克隆集群具有重复的节点池名称,则集群将无法成功配置。 + + ```yml + nodePools: + : + clusterId: do + controlPlane: true + etcd: true + hostnamePrefix: mark-do + nodeTemplateId: do + quantity: 1 + worker: true + ``` + +1. 完成后,保存并关闭配置。 + +## 3. 启动克隆的集群 + +将 `cluster-template.yml` 移动到 Rancher CLI 二进制文件所在的目录中。然后运行这个命令: + + ./rancher up --file cluster-template.yml + +**结果**:开始配置你克隆的集群。输入 `./rancher cluster ls` 进行确认。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/create-kubernetes-persistent-storage/manage-persistent-storage/about-glusterfs-volumes.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/create-kubernetes-persistent-storage/manage-persistent-storage/about-glusterfs-volumes.md new file mode 100644 index 00000000000..a58009bc194 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/create-kubernetes-persistent-storage/manage-persistent-storage/about-glusterfs-volumes.md @@ -0,0 +1,38 @@ +--- +title: GlusterFS 卷 +weight: 5000 +--- + +:::note + +本文仅适用于 [RKE 集群](../../../../../pages-for-subheaders/launch-kubernetes-with-rancher.md)。 + +::: + +在将数据存储在 GlusterFS 卷上的集群中,你可能会遇到重启 `kubelet` 后 pod 无法挂载卷的问题。`kubelet` 的日志将显示 `transport endpoint is not connected`。为了避免这种情况,你可以在集群中将 `systemd-run` 二进制文件挂载到 `kubelet` 容器中。在更改集群配置之前有两个要求: + +- 该节点需要安装了 `systemd-run` 二进制文件(可以通过在每个集群节点上运行 `which systemd-run` 命令来检查)。 +- `systemd-run` 二进制文件需要与 hyperkube 镜像所基于的 Debian OS 兼容(可以通过在每个集群节点上运行以下命令来检查,请将镜像标签替换为你想要的 Kubernetes 版本): + +``` +docker run -v /usr/bin/systemd-run:/usr/bin/systemd-run --entrypoint /usr/bin/systemd-run rancher/hyperkube:v1.16.2-rancher1 --version +``` + +:::caution + +在更新 Kubernetes YAML 以挂载 `systemd-run` 二进制文件之前,请确保在集群节点上安装了 `systemd` 包。如果在绑定挂载创建到你的 Kubernetes YAML _之前_ 未安装此包,Docker 将自动在每个节点上创建目录和文件,并且不允许包安装成功。 + +::: + +``` +services: + kubelet: + extra_binds: + - "/usr/bin/systemd-run:/usr/bin/systemd-run" +``` + +集群完成配置后,你可以通过查找以下日志来检查 `kubelet` 容器日志记录,从而查看该功能是否已激活: + +``` +Detected OS with systemd +``` diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/create-kubernetes-persistent-storage/manage-persistent-storage/about-persistent-storage.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/create-kubernetes-persistent-storage/manage-persistent-storage/about-persistent-storage.md new file mode 100644 index 00000000000..e787ef53daf --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/create-kubernetes-persistent-storage/manage-persistent-storage/about-persistent-storage.md @@ -0,0 +1,73 @@ +--- +title: 持久存储的工作原理 +weight: 1 +--- + +持久卷 (PV) 是 Kubernetes 集群中的一块存储,而持久卷声明 (PVC) 是对存储的请求。 + +在 Kubernetes 中使用持久存储有两种方法: + +- 使用现有的持久卷 +- 动态配置新的持久卷 + +要使用现有 PV,你的应用需要使用已绑定到 PV 的 PVC,并且 PV 应包含 PVC 所需的最少资源。 + +对于动态存储配置,你的应用需要使用绑定到存储类的 PVC。存储类包含配置新持久卷的授权。 + +![设置新的和现有的持久存储](/img/rancher-storage.svg) + +有关更多信息,请参阅[关于存储的官方 Kubernetes 文档](https://kubernetes.io/docs/concepts/storage/volumes/)。 + + +## 关于持久卷声明 + +持久卷声明 (PVC) 是从集群请求存储资源的对象,类似于你的 deployment 用于兑换存储访问的凭证。PVC 以卷的形式挂载到工作负载中,以便工作负载可以声明其指定的持久存储份额。 + +要访问持久存储,Pod 必须有挂载为卷的 PVC。此 PVC 让你的 deployment 应用将其数据存储在外部位置,这样,如果 pod 发生故障,就可以用新的 pod 替换它并继续访问其外部存储的数据。 + +每个 Rancher 项目都包含你创建的 PVC 列表,可从**资源 > 工作负载 > 卷**中查看。你可以在将来创建 deployment 时复用这些 PVC。 + +### 新的和现有的持久存储都需要 PVC + +无论工作负载打算使用现有存储,还是需要根据需求动态配置新存储,pod 都需要 PVC 才能使用持久存储。 + +如果你为工作负载设置现有存储,则工作负载会挂载引用一个 PV 的 PVC,该 PV 对应现有的存储基础设施。 + +如果工作负载需要请求新的存储,则工作负载会挂载引用一个存储类的 PVC,该存储类能创建新 PV 及其底层存储基础设施。 + +Rancher 允许你在项目中创建任意数量的 PVC。 + +你可以在创建 deployment 时将 PVC 挂载到 deployment 中,也可以在创建 deployment 后在 deployment 运行的时候将 PVC 挂载到 deployment 中。 + +## 使用 PVC 和 PV 设置现有存储 + +你的 pod 可以将数据存储在[卷](https://kubernetes.io/docs/concepts/storage/volumes/)中,但如果 pod 发生故障,该数据就会丢失。为了解决这个问题,Kubernetes 提供了持久卷 (PV)。PV 是 Kubernetes 资源,这些资源对应于你的 pod 可以访问的外部存储磁盘或文件系统。如果一个 pod 崩溃,它的替代 pod 可以访问持久存储中的数据,而不会丢失任何数据。 + +PV 可以是你本地或托管的云上(Amazon EBS 或 Azure Disk)物理磁盘或文件系统。 + +在 Rancher 中创建持久卷不会创建存储卷。它只创建映射到现有卷的 Kubernetes 资源。因此,在你可以将持久卷创建为 Kubernetes 资源之前,你必须先配置存储。 + +:::note 重要提示: + +PV 是在集群级别创建的,这意味着在多租户集群中,有权访问不同命名空间的团队可以访问同一个 PV。 + +::: + +### 将 PV 绑定到 PVC + +当 pod 设置为使用持久存储时,pod 会挂载持久卷声明 (PVC),PVC 的挂载方式与其他 Kubernetes 卷相同。在创建每个 PVC 时,Kubernetes master 将 PVC 视为对存储的请求,并将其绑定到与 PVC 的最低资源要求相匹配的 PV。并非每个 PVC 都保证绑定到 PV。详情请参阅 Kubernetes [文档](https://kubernetes.io/docs/concepts/storage/persistent-volumes/)。 + +> 如果没有匹配的卷,则声明将一直保持为未绑定状态。当匹配的卷可用时,声明将会被绑定。例如,配置有许多 50Gi PV 的集群不会匹配请求 100Gi 的 PVC。PVC 可以在 100Gi PV 添加到集群时进行绑定。 + +换句话说,你可以创建无限量的 PVC,但只有在 Kubernetes master 可以找到满足 PVC 所需的磁盘空间量的 PV 时,PVC 才会绑定到 PV。 + +要动态配置新存储,挂载在 pod 中的 PVC 对应的必须是存储类而不是持久卷。 + +## 使用 PVC 和存储类配置新存储 + +存储类允许你动态创建 PV,而无需先在基础设施提供商中创建持久存储。 + +例如,如果工作负载绑定到 PVC 并且 PVC 引用 Amazon EBS 存储类,则存储类可以动态创建 EBS 卷和相应的 PV。 + +然后 Kubernetes master 会将新创建的 PV 绑定到你的工作负载的 PVC,从而允许你的工作负载使用持久存储。 + diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/create-kubernetes-persistent-storage/manage-persistent-storage/dynamically-provision-new-storage.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/create-kubernetes-persistent-storage/manage-persistent-storage/dynamically-provision-new-storage.md new file mode 100644 index 00000000000..6da813ed923 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/create-kubernetes-persistent-storage/manage-persistent-storage/dynamically-provision-new-storage.md @@ -0,0 +1,88 @@ +--- +title: 在 Rancher 中动态配置新存储 +weight: 2 +--- + +本文介绍如何为 Rancher 中的工作负载配置新的持久存储。 + +本节假设你了解 Kubernetes 的存储类和持久卷声明的概念。如需更多信息,请参阅[存储的工作原理](about-persistent-storage.md)。 + +新存储通常由 Amazon EBS 等云提供商提供。但是,新存储不一定要在云中。 + +如果你有一个块存储池并且不想使用云提供商,你可以使用 Longhorn 为 Kubernetes 集群提供持久存储。详情请参见[本页面](../../../../../explanations/integrations-in-rancher/longhorn.md)。 + +要为你的工作负载配置新存储,请执行以下步骤: + +1. [添加一个存储类并将其配置为使用你的存储](#添加一个存储类并将其配置为使用你的存储) +2. [为使用 StatefulSet 部署的 Pod 使用存储类](#为使用-statefulset-部署的-pod-使用存储类) + +### 先决条件 + +- 设置持久存储需要`管理卷`的[角色](../../../authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/cluster-and-project-roles.md#项目角色参考)。 +- 如果你要为云集群配置存储,则存储和集群主机必须使用相同的云提供商。 +- 必须启用云提供商。有关启用云提供商的详细信息,请参阅[此页面](../../../../../pages-for-subheaders/set-up-cloud-providers.md)。 +- 确保你的存储卷插件可以启用。 + +默认情况下启用以下存储卷插件: + +| 名称 | 插件 | +--------|---------- +| 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` | + +如果你的存储卷插件没有在上述列表中,你需要[使用功能开关来启用不受支持的存储驱动](../../../../../getting-started/installation-and-upgrade/advanced-options/enable-experimental-features/unsupported-storage-drivers.md)。 + +### 1. 添加一个存储类并将其配置为使用你的存储 + +这些步骤描述了如何在集群级别设置存储类: + +1. 点击 **☰ > 集群管理**。 +1. 转到要动态配置持久存储卷的集群,然后单击 **Explore**。 +1. 单击**存储 > 存储类**。 +1. 单击**创建**。 +1. 输入存储类的名称。 +1. 从 **Provisioner** 下拉列表中,选择要用于动态配置存储卷的服务。例如,如果你有一个 Amazon EC2 集群并且想要使用云存储,请使用 `Amazon EBS Disk`。 +1. 在**参数**选项卡中,填写服务用于动态配置存储卷所需的信息。每个卷插件都需要不同的信息来动态配置存储卷。有关如何获取此信息的帮助,请参阅服务文档。 +1. 单击**创建**。 + +**结果**:存储类可供 PVC 使用。 + +有关存储类参数的完整信息,请参阅官方 [Kubernetes 文档](https://kubernetes.io/docs/concepts/storage/storage-classes/#parameters)。 + +### 2. 为使用 StatefulSet 部署的 Pod 使用存储类 + +StatefulSet 管理 Pod 的部署和扩展,同时为每个 Pod 维护一个粘性标识。在这个 StatefulSet 中,我们将配置一个 VolumeClaimTemplate。StatefulSet 管理的每个 Pod 都将部署一个基于此 VolumeClaimTemplate 的 PersistentVolumeClaim。PersistentVolumeClaim 将引用我们创建的 StorageClass。因此,在部署 StatefulSet 管理的每个 Pod 时,都会使用 PersistentVolumeClaim 中定义的 StorageClass 来绑定到动态配置的存储。 + +1. 点击 **☰ > 集群管理**。 +1. 转到要将 StorageClass 用于工作负载的集群,然后单击 **Explore**。 +1. 在左侧导航栏中,单击**工作负载**。 +1. 单击**创建**。 +1. 单击 **StatefulSet**。 +1. 在**卷声明模板**选项卡上,单击**添加声明模板**。 +1. 输入持久卷的名称。 +1. 在*存储类*\*字段中,选择将为此 StatefulSet 管理的 pod 动态配置存储的 StorageClass。 +1. 在**挂载点**字段中,输入工作负载将用于访问卷的路径。 +1. 点击**启动**。 + +**结果**:StatefulSet 管理的每个 Pod 部署完成后,都会向 Kubernetes master 请求指定的磁盘空间。如果在部署工作负载时具有指定资源的 PV 是可用的,则 Kubernetes master 会将 PV 绑定到具有兼容 PVC 的 Pod。 + +要将 PVC 附加到现有工作负载, + +1. 点击 **☰ > 集群管理**。 +1. 转到要将 StorageClass 用于工作负载的集群,然后单击 **Explore**。 +1. 在左侧导航栏中,单击**工作负载**。 +1. 单击 **⋮ > 编辑配置**,转到使用由 StorageClass 配置的存储的工作负载。 +1. 在**卷声明模板**中,单击**添加声明模板**。 +1. 输入持久卷名称。 +1. 在*存储类*\*字段中,选择将为此 StatefulSet 管理的 pod 动态配置存储的 StorageClass。 +1. 在**挂载点**字段中,输入工作负载将用于访问卷的路径。 +1. 单击**保存**。 + +**结果**:工作负载将向 Kubernetes master 请求指定的磁盘空间。如果在部署工作负载时具有指定资源的 PV 是可用的,则 Kubernetes master 会将 PV 绑定到 PVC。否则,Rancher 将配置新的持久存储。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/create-kubernetes-persistent-storage/manage-persistent-storage/install-iscsi-volumes.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/create-kubernetes-persistent-storage/manage-persistent-storage/install-iscsi-volumes.md new file mode 100644 index 00000000000..43037bf876f --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/create-kubernetes-persistent-storage/manage-persistent-storage/install-iscsi-volumes.md @@ -0,0 +1,34 @@ +--- +title: iSCSI 卷 +weight: 6000 +--- + +在将数据存储在 iSCSI 卷上的 [Rancher 启动的 Kubernetes 集群](../../../../../pages-for-subheaders/launch-kubernetes-with-rancher.md)中,你可能会遇到 kubelet 无法自动连接 iSCSI 卷的问题。成此问题的原因很可能是 iSCSI 启动器工具不兼容。你可以在每个集群节点上安装 iSCSI 启动器工具来解决此问题。 + +将数据存储到 iSCSI 卷的由 Rancher 启动的 Kubernetes 集群使用 [iSCSI 启动器工具](http://www.open-iscsi.com/),该工具嵌入在 kubelet 的 `rancher/hyperkube` Docker 镜像中。该工具从每个 kubelet(即 _initiator_)发现并发起与 iSCSI 卷(即 _target_)的会话。但是,在某些情况下,initiator 和 target 上安装的 iSCSI 启动器工具的版本可能不匹配,从而导致连接失败。 + +如果你遇到此问题,你可以在集群中的每个节点上安装启动器工具来解决该问题。你可以通过登录到集群节点并输入以下其中一个命令来安装 iSCSI 启动器工具: + +| 平台 | 包名 | 安装命令 | +| ------------- | ----------------------- | -------------------------------------- | +| Ubuntu/Debian | `open-iscsi` | `sudo apt install open-iscsi` | +| RHEL | `iscsi-initiator-utils` | `yum install iscsi-initiator-utils -y` | + + +在节点上安装启动器工具后,编辑集群的 YAML,编辑 kubelet 配置以挂载 iSCSI 二进制文件和配置,如下面的示例所示。 + +:::note 注意事项 + +- 在更新 Kubernetes YAML 以挂载 iSCSI 二进制文件和配置之前,请确保已将 `open-iscsi`(deb)或 `iscsi-initiator-utils`(yum)安装到你的集群节点。如果在绑定挂载创建到你的 Kubernetes YAML _之前_ 未安装此包,Docker 将自动在每个节点上创建目录和文件,并且不允许包安装成功。 + +- 下面的示例 YAML 不适用于 K3s,仅适用于 RKE 集群。由于 K3s kubelet 不在容器中运行,因此不需要添加额外的绑定。但是,所有 iSCSI 工具仍必须安装在你的 K3s 节点上。 + +::: + +``` +services: + kubelet: + extra_binds: + - "/etc/iscsi:/etc/iscsi" + - "/sbin/iscsiadm:/sbin/iscsiadm" +``` diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/create-kubernetes-persistent-storage/manage-persistent-storage/set-up-existing-storage.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/create-kubernetes-persistent-storage/manage-persistent-storage/set-up-existing-storage.md new file mode 100644 index 00000000000..fb3083fc4e1 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/create-kubernetes-persistent-storage/manage-persistent-storage/set-up-existing-storage.md @@ -0,0 +1,86 @@ +--- +title: 设置现有存储 +weight: 1 +--- + +本文介绍如何在 Rancher 中为工作负载设置现有的持久存储。 + +:::note + +本节假设你了解 Kubernetes 的持久卷和持久卷声明的概念。如需更多信息,请参阅[存储的工作原理](about-persistent-storage.md)。 + +::: + +要设置存储,请执行以下步骤: + +1. [设置持久存储](#1-设置持久存储)。 +2. [添加一个引用持久存储的 PersistentVolume](#2-添加一个引用持久存储的-persistentvolume)。 +3. [为使用 StatefulSet 部署的 Pod 使用 PersistentVolume](#3-为使用-statefulset-部署的-pod-使用-persistentvolume)。 + +### 先决条件 + +- 要将持久卷创建为 Kubernetes 资源,你必须具有`管理卷`的[角色。](../../../authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/cluster-and-project-roles.md#项目角色参考) +- 如果你要为云集群配置存储,则存储和集群主机必须使用相同的云提供商。 + +### 1. 设置持久存储 + +在 Rancher 中创建持久卷不会创建存储卷。它只创建映射到现有卷的 Kubernetes 资源。因此,在你可以将持久卷创建为 Kubernetes 资源之前,你必须先配置存储。 + +设置持久存储设备的步骤会因你的基础设施而异。我们提供了使用 [vSphere](../provisioning-storage-examples/vsphere-storage.md)、[NFS](../provisioning-storage-examples/nfs-storage.md) 或 [Amazon EBS ](../provisioning-storage-examples/persistent-storage-in-amazon-ebs.md)设置存储的示例。 + +如果你有一个块存储池并且不想使用云提供商,你可以使用 Longhorn 为 Kubernetes 集群提供持久存储。详情请参见[本页面](../../../../../explanations/integrations-in-rancher/longhorn.md)。 + +### 2. 添加一个引用持久存储的 PersistentVolume + +这些步骤描述了如何在 Kubernetes 的集群级别设置 PersistentVolume。 + +1. 点击 **☰ > 集群管理**。 +1. 转到要添加持久卷的集群,然后单击 **Explore**。 +1. 在左侧导航栏中,单击**存储 > 持久卷**。 +1. 单击**创建**。 +1. 输入持久卷的**名称**。 +1. 为正在使用的磁盘类型或服务选择**卷插件**。将存储添加到由云提供商托管的集群时,请使用云提供商的云存储插件。例如,如果你有一个 Amazon EC2 集群并且想要使用云存储,则必须使用 `Amazon EBS 磁盘`卷插件。 +1. 输入卷的**容量**(单位:GB)。 +1. 填写**插件配置**表单。每个插件类型都需要磁盘类型供应商的信息。有关每个插件的表单和所需信息的帮助,请参阅插件的供应商文档。 +1. 可选:在**自定义**表单中,配置[访问模式](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes)。此选项设置可以访问卷的节点数量,以及节点的读/写权限。[Kubernetes 文档](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes)中的表格列出了插件支持的访问模式。 +1. 可选:在**自定义**表单中,配置[挂载选项](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#mount-options)。每个卷插件都允许你在安装过程中指定其他命令行选项。请查阅每个插件的供应商文档以获取可用的挂载选项。 +1. 单击**创建**。 + +**结果**:已创建你的新持久卷。 + + +### 3. 为使用 StatefulSet 部署的 Pod 使用存储类 + +StatefulSet 管理 Pod 的部署和扩展,同时为每个 Pod 维护一个粘性标识。在这个 StatefulSet 中,我们将配置一个 VolumeClaimTemplate。StatefulSet 管理的每个 Pod 都将部署一个基于此 VolumeClaimTemplate 的 PersistentVolumeClaim。PersistentVolumeClaim 将引用我们创建的 PersistentVolume。因此,在部署 StatefulSet 管理的每个 Pod 时,都会绑定一个 PersistentVolumeClaim 中定义的 PersistentVolume。 + +你可以在工作负载创建期间或之后为 StatefulSet 配置存储。 + +以下步骤描述了如何将现有存储分配给新的 StatefulSet: + +1. 点击 **☰ > 集群管理**。 +1. 转到要为 StatefulSet 配置存储的集群,然后单击 **Explore**。 +1. 在左侧导航栏中,单击**工作负载 > StatefulSets**。 +1. 单击**创建**。 +1. 选择要部署工作负载的命名空间。 +1. 输入 StatefulSet 的名称。 +1. 在**卷声明模板**选项卡上,单击**添加声明模板**。 +1. 单击**使用现有的持久卷**。 +1. 在**持久卷**字段中,选择你创建的持久卷。 +1. 在**挂载点**字段中,输入工作负载将用于访问卷的路径。 +1. 点击**启动**。 + +**结果**:当工作负载被部署时,它会向 Kubernetes master 请求指定的磁盘空间。如果在部署工作负载时具有指定资源的 PV 是可用的,则 Kubernetes master 会将 PV 绑定到 PVC。 + +以下步骤描述了如何将持久存储分配给现有工作负载: + +1. 点击 **☰ > 集群管理**。 +1. 转到要为 StatefulSet 配置存储的集群,然后单击 **Explore**。 +1. 在左侧导航栏中,单击**工作负载 > StatefulSets**。 +1. 转到要添加持久存储的工作负载。单击 **⋮ > 编辑**。 +1. 在**卷声明模板**选项卡上,单击**添加声明模板**。 +1. 单击**使用现有的持久卷**。 +1. 在**持久卷**字段中,选择你创建的持久卷。 +1. 在**挂载点**字段中,输入工作负载将用于访问卷的路径。 +1. 点击**启动**。 + +**结果**:工作负载将向 Kubernetes master 请求指定的磁盘空间。如果在部署工作负载时具有指定资源的 PV 是可用的,则 Kubernetes master 会将 PV 绑定到 PVC。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/create-kubernetes-persistent-storage/manage-persistent-storage/use-external-ceph-driver.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/create-kubernetes-persistent-storage/manage-persistent-storage/use-external-ceph-driver.md new file mode 100644 index 00000000000..d7b1b0bae3a --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/create-kubernetes-persistent-storage/manage-persistent-storage/use-external-ceph-driver.md @@ -0,0 +1,421 @@ +--- +title: 使用外部 Ceph 驱动 +weight: 10 +--- + +本文介绍如何在 RKE2 集群中使用外部 Ceph 驱动。如果你使用的是 RKE,则需要执行其他步骤。详情请参阅[本节](#在-rke-中使用-ceph-驱动)。 + + +## 要求 + +确保 ceph-common 和 xfsprogs 软件包安装在 SLE worker 节点上。 + +## 在 RKE 中使用 Ceph 驱动 + +以下资源与 RKE 集群完全兼容,但需要为 RKE 执行额外的 kubelet 配置。 + +在 RKE 集群上,kubelet 组件在 Docker 容器中运行,默认情况下无法像 rbd 和 libceph 一样访问主机的内核模块。 + +为了解决这个限制,你可以在 worker 节点上运行 `modprobe rbd`,或者配置 kubelet 容器以将主机中的 `/lib/modules` 目录自动挂载到容器中。 + +对于 kubelet 配置,在 RKE 集群配置之前,将以下内容放入 `cluster.yml` 文件中。你稍后还可以在 Rancher UI 中通过单击**编辑集群 > 以 YAML 文件编辑**并重新启动 worker 节点来修改 `cluster.yml`。 + +```yaml +services: + kubelet: + extra_binds: + - '/lib/modules:/lib/modules:ro' +``` + +有关 `extra_binds` 指令的更多信息,请参阅[本节](https://rancher.com/docs/rke/latest/en/config-options/services/services-extras/#extra-binds)。 + +## 在 RKE2 集群上安装 ceph-csi 驱动 + +:::note + +只有动态 RBD 配置需要执行这些步骤。 + +::: + +有关 `ceph-csi-rbd` chart 的更多信息,请参阅[此页面](https://github.com/ceph/ceph-csi/blob/devel/charts/ceph-csi-rbd/README.md)。 + +要获取有关 SES 集群的详细信息,请运行: + +``` +ceph mon dump +``` + +查看输出: + +``` +dumped monmap epoch 3 +epoch 3 +fsid 79179d9d-98d8-4976-ab2e-58635caa7235 +last_changed 2021-02-11T10:56:42.110184+0000 +created 2021-02-11T10:56:22.913321+0000 +min_mon_release 15 (octopus) +0: [v2:10.85.8.118:3300/0,v1:10.85.8.118:6789/0] mon.a +1: [v2:10.85.8.123:3300/0,v1:10.85.8.123:6789/0] mon.b +2: [v2:10.85.8.124:3300/0,v1:10.85.8.124:6789/0] mon.c +``` + +稍后你将需要 fsid 和 mon 地址值。 + +## 使用 Helm 安装 ceph-csi 驱动 + +运行以下命令: + +``` +helm repo add ceph-csi https://ceph.github.io/csi-charts +helm repo update +helm search repo ceph-csi -l +helm inspect values ceph-csi/ceph-csi-rbd > ceph-csi-rbd-values.yaml +``` + +修改 `ceph-csi-rbd-values.yaml` 文件并只保留所需的更改: + +```yaml +# ceph-csi-rbd-values.yaml +csiConfig: + - clusterID: "79179d9d-98d8-4976-ab2e-58635caa7235" + monitors: + - "10.85.8.118:6789" + - "10.85.8.123:6789" + - "10.85.8.124:6789" +provisioner: + name: provisioner + replicaCount: 2 +``` + +确保可以从 RKE2 集群访问 ceph 监视器(例如通过 ping)。 + +``` +kubectl create namespace ceph-csi-rbd +helm install --namespace ceph-csi-rbd ceph-csi-rbd ceph-csi/ceph-csi-rbd --values ceph-csi-rbd-values.yaml +kubectl rollout status deployment ceph-csi-rbd-provisioner -n ceph-csi-rbd +helm status ceph-csi-rbd -n ceph-csi-rbd +``` + +如果你想直接通过 Helm 修改配置,则可以使用 `ceph-csi-rbd-values.yaml` 文件并调用: + +``` +helm upgrade \ + --namespace ceph-csi-rbd ceph-csi-rbd ceph-csi/ceph-csi-rbd --values ceph-csi-rbd-values.yaml +``` + +## 创建 RBD Ceph 资源 + +``` +# 创建一个 ceph 池: +ceph osd pool create myPool 64 64 + +# 创建一个块设备池: +rbd pool init myPool + +# 创建一个块设备镜像: +rbd create -s 2G myPool/image + +# 创建一个块设备用户并记录密钥: +ceph auth get-or-create-key client.myPoolUser mon "allow r" osd "allow class-read object_prefix rbd_children, allow rwx pool=myPool" | tr -d '\n' | base64 +QVFDZ0R5VmdyRk9KREJBQTJ5b2s5R1E2NUdSWExRQndhVVBwWXc9PQ== + +# Base64 加密 ceph 用户 myPoolUser: +echo "myPoolUser" | tr -d '\n' | base64 +bXlQb29sVXNlcg== + +# 创建一个块设备管理员并记录密钥: +ceph auth get-or-create-key client.myPoolAdmin mds 'allow *' mgr 'allow *' mon 'allow *' osd 'allow * pool=myPool' | tr -d '\n' | base64 +QVFCK0hDVmdXSjQ1T0JBQXBrc0VtcVhlZFpjc0JwaStIcmU5M3c9PQ== + +# Base64 加密 ceph 用户 myPoolAdmin: +echo "myPoolAdmin" | tr -d '\n' | base64 +bXlQb29sQWRtaW4= +``` +## 配置 RBD Ceph 访问密钥 + +### 用户账号 + +对于静态 RBD 配置(ceph 池中的镜像必须存在),运行以下命令: + +``` +cat > ceph-user-secret.yaml << EOF +apiVersion: v1 +kind: Secret +metadata: + name: ceph-user + namespace: default +type: kubernetes.io/rbd +data: + userID: bXlQb29sVXNlcg== + userKey: QVFDZ0R5VmdyRk9KREJBQTJ5b2s5R1E2NUdSWExRQndhVVBwWXc9PQ== +EOF + +kubectl apply -f ceph-user-secret.yaml +``` + +### 管理员账号 + +对于动态 RBD 配置(用于在给定 ceph 池中自动创建镜像),请运行以下命令: + +``` +cat > ceph-admin-secret.yaml << EOF +apiVersion: v1 +kind: Secret +metadata: + name: ceph-admin + namespace: default +type: kubernetes.io/rbd +data: + userID: bXlQb29sQWRtaW4= + userKey: QVFCK0hDVmdXSjQ1T0JBQXBrc0VtcVhlZFpjc0JwaStIcmU5M3c9PQ== +EOF + +kubectl apply -f ceph-admin-secret.yaml +``` + +## 创建 RBD 测试资源 + +### 在 Pod 中使用 RBD + +```yaml +# pod +cat > ceph-rbd-pod-inline.yaml << EOF +apiVersion: v1 +kind: Pod +metadata: + name: ceph-rbd-pod-inline +spec: + containers: + - name: ceph-rbd-pod-inline + image: busybox + command: ["sleep", "infinity"] + volumeMounts: + - mountPath: /mnt/ceph_rbd + name: volume + volumes: + - name: volume + rbd: + monitors: + - 10.85.8.118:6789 + - 10.85.8.123:6789 + - 10.85.8.124:6789 + pool: myPool + image: image + user: myPoolUser + secretRef: + name: ceph-user + fsType: ext4 + readOnly: false +EOF + +kubectl apply -f ceph-rbd-pod-inline.yaml +kubectl get pod +kubectl exec pod/ceph-rbd-pod-inline -- df -k | grep rbd +``` + +### 在持久卷中使用 RBD + +```yaml +# pod-pvc-pv +cat > ceph-rbd-pod-pvc-pv-allinone.yaml << EOF +apiVersion: v1 +kind: PersistentVolume +metadata: + name: ceph-rbd-pv +spec: + capacity: + storage: 2Gi + accessModes: + - ReadWriteOnce + rbd: + monitors: + - 10.85.8.118:6789 + - 10.85.8.123:6789 + - 10.85.8.124:6789 + pool: myPool + image: image + user: myPoolUser + secretRef: + name: ceph-user + fsType: ext4 + readOnly: false +--- +kind: PersistentVolumeClaim +apiVersion: v1 +metadata: + name: ceph-rbd-pvc +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 2Gi +--- +apiVersion: v1 +kind: Pod +metadata: + name: ceph-rbd-pod-pvc-pv +spec: + containers: + - name: ceph-rbd-pod-pvc-pv + image: busybox + command: ["sleep", "infinity"] + volumeMounts: + - mountPath: /mnt/ceph_rbd + name: volume + volumes: + - name: volume + persistentVolumeClaim: + claimName: ceph-rbd-pvc +EOF + +kubectl apply -f ceph-rbd-pod-pvc-pv-allinone.yaml +kubectl get pv,pvc,pod +kubectl exec pod/ceph-rbd-pod-pvc-pv -- df -k | grep rbd +``` + +### 在存储类中使用 RBD + +此示例用于动态配置。需要 ceph-csi 驱动。 + +```yaml +# pod-pvc-sc +cat > ceph-rbd-pod-pvc-sc-allinone.yaml < /root/.bashrc << EOF +export PATH=$PATH:/var/lib/rancher/rke2/bin/ +export KUBECONFIG=/etc/rancher/rke2/rke2.yaml +EOF + +cat /var/lib/rancher/rke2/server/node-token +token: K10ca0c38d4ff90d8b80319ab34092e315a8b732622e6adf97bc9eb0536REDACTED::server:ec0308000b8a6b595da000efREDACTED +``` + +### RKE2 Agent/Worker 配置 + +``` +mkdir -p /etc/rancher/rke2/ + +cat > /etc/rancher/rke2/config.yaml << EOF +server: https://10.100.103.23:9345 +token: K10ca0c38d4ff90d8b80319ab34092e315a8b732622e6adf97bc9eb0536REDACTED::server:ec0308000b8a6b595da000efREDACTED +EOF + +curl -sfL https://get.rke2.io | INSTALL_RKE2_TYPE="agent" sh - +systemctl enable --now rke2-agent.service +``` + +要将集群导入 Rancher,请单击 **☰ > 集群管理**。然后在**集群**页面上,单击**导入已有集群**。然后在 server/master 上运行提供的 kubectl 命令。 + +## 测试版本 + +运行 RKE2 节点的操作系统:安装了 kernel-default-5.3.18-24.49 的 JeOS SLE15-SP2 + +``` +kubectl version +Client Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.4", GitCommit:"c96aede7b5205121079932896c4ad89bb93260af", GitTreeState:"clean", BuildDate:"2020-06-22T12:00:00Z", GoVersion:"go1.13.11", Compiler:"gc", Platform:"linux/amd64"} +Server Version: version.Info{Major:"1", Minor:"19", GitVersion:"v1.19.7+rke2r1", GitCommit:"1dd5338295409edcfff11505e7bb246f0d325d15", GitTreeState:"clean", BuildDate:"2021-01-20T01:50:52Z", GoVersion:"go1.15.5b5", Compiler:"gc", Platform:"linux/amd64"} + +helm version +version.BuildInfo{Version:"3.4.1", GitCommit:"c4e74854886b2efe3321e185578e6db9be0a6e29", GitTreeState:"clean", GoVersion:"go1.14.12"} +``` + +RKE2 集群上的 Kubernetes 版本:v1.19.7+rke2r1 + +## 故障排除 + +如果你使用的是基于 SES7 的 SUSE ceph-rook,你可以通过编辑 `rook-1.4.5/ceph/cluster.yaml` 并设置 `spec.network.hostNetwork=true` 来公开 hostNetwork 上的监视器。 + +如果要操作 ceph-rook 集群,则可以在 Kubernetes 集群上部署一个工具箱,其中 ceph-rook 通过 `kubectl apply -f rook-1.4.5/ceph/toolbox.yaml` 配置。然后所有与 ceph 相关的命令都可以在 toolbox pod 中执行,例如,运行 `kubectl exec -it -n rook-ceph rook-ceph-tools-686d8b8bfb-2nvqp -- bash`。 + +ceph 操作 - 基本命令: + +``` +ceph osd pool stats +ceph osd pool delete myPool myPool --yes-i-really-really-mean-it +rbd list -p myPool +> csi-vol-f5d3766c-7296-11eb-b32a-c2b045952d38 +> image +``` + +删除镜像:`rbd rm csi-vol-f5d3766c-7296-11eb-b32a-c2b045952d38 -p myPool` + +rook 工具箱中的 CephFS 命令: + +``` +ceph -s +ceph fs ls +ceph fs fail cephfs +ceph fs rm cephfs --yes-i-really-mean-it +ceph osd pool delete cephfs_data cephfs_data --yes-i-really-really-mean-it +ceph osd pool delete cephfs_metadata cephfs_metadata --yes-i-really-really-mean-it +``` + +要准备 cephfs 文件系统,你可以在 rook 集群上运行以下命令: + +``` +kubectl apply -f rook-1.4.5/ceph/filesystem.yaml +``` diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/create-kubernetes-persistent-storage/provisioning-storage-examples/nfs-storage.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/create-kubernetes-persistent-storage/provisioning-storage-examples/nfs-storage.md new file mode 100644 index 00000000000..1ae32a0bca2 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/create-kubernetes-persistent-storage/provisioning-storage-examples/nfs-storage.md @@ -0,0 +1,76 @@ +--- +title: NFS 存储 +weight: 3054 +--- + +在将 NFS 存储卷插件用于 Rancher deployment 之前,你需要配置 NFS 服务器。 + +:::note + +- 如果你已经拥有 NFS 共享,则无需配置新的 NFS 服务器即可在 Rancher 中使用 NFS 卷插件。这样的话,你可以跳过此过程的其余部分并直接[添加存储](../../../../../pages-for-subheaders/create-kubernetes-persistent-storage.md)。 + +- 此教程演示了如何使用 Ubuntu 设置 NFS 服务器。你也应该能够将这些说明用于其他 Linux 发行版(例如 Debian、RHEL、Arch Linux 等)。有关如何使用另一个 Linux 发行版创建 NFS 服务器的官方说明,请参阅发行版的文档。 + +::: + +:::note 推荐: + +要简化管理防火墙规则的过程,请使用 NFSv4。 + +::: + +1. 使用远程终端连接,登录到你打算用于 NFS 存储的 Ubuntu 服务器。 + +1. 输入以下命令: + + ``` + sudo apt-get install nfs-kernel-server + ``` + +1. 输入以下命令,设置存储目录以及用户访问权限。如果你想使用不同的存储目录,请修改该命令: + + ``` + mkdir -p /nfs && chown nobody:nogroup /nfs + ``` + - `-p /nfs` 参数在根目录下创建一个名为 `nfs` 的目录。 + - `chown nobody:nogroup /nfs` 参数允许对存储目录的所有访问。 + +1. 创建 NFS 导出表。此表设置 NFS 服务器上的目录路径,这些路径会暴露给将使用服务器进行存储的节点。 + + 1. 使用文本编辑器打开 `/etc/exports`。 + 1. 添加你在步骤 3 中创建的 `/nfs` 文件夹的路径以及集群节点的 IP 地址。为集群中的每个 IP 地址添加一个条目。在每个地址及其附带的参数后面加上一个作为分隔符的空格: + + ``` + /nfs (rw,sync,no_subtree_check) (rw,sync,no_subtree_check) (rw,sync,no_subtree_check) + ``` + + :::tip + + 你可以将 IP 地址替换为子网,例如,`10.212.50.12/24`。 + + ::: + + 1. 通过输入以下命令更新 NFS 表: + + ``` + exportfs -ra + ``` + +1. 打开 NFS 使用的端口。 + + 1. 要找出 NFS 正在使用的端口,请运行以下命令: + + ``` + rpcinfo -p | grep nfs + ``` + 2. [打开上一个命令输出的端口](https://help.ubuntu.com/lts/serverguide/firewall.html.en)。例如,以下命令打开端口 2049: + + ``` + sudo ufw allow 2049 + ``` + +**结果**:已将 NFS 服务器配置你的 Rancher 节点的存储。 + +## 后续操作 + +在 Rancher 中,将 NFS 服务器添加为存储卷和/或存储类。添加服务器后,你可以将其用于存储以进行部署。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/create-kubernetes-persistent-storage/provisioning-storage-examples/persistent-storage-in-amazon-ebs.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/create-kubernetes-persistent-storage/provisioning-storage-examples/persistent-storage-in-amazon-ebs.md new file mode 100644 index 00000000000..7b7ced2fc7b --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/create-kubernetes-persistent-storage/provisioning-storage-examples/persistent-storage-in-amazon-ebs.md @@ -0,0 +1,16 @@ +--- +title: 在 Amazon EBS 中创建持久存储 +weight: 3053 +--- + +本文介绍如何在 EC2 中设置 Amazon 的 Elastic Block Store。 + +1. 在 EC2 控制台中,转到左侧面板中的 **ELASTIC BLOCK STORE** 中,然后单击 **Volumes**。 +1. 单击 **Create Volume**。 +1. 可选:配置卷的大小或其他选项。你需要在卷要挂载到的实例所在的可用区中创建卷。 +1. 单击 **Create Volume**。 +1. 点击 **Close**。 + +**结果**:已创建持久存储。 + +有关如何在 Rancher 中设置新创建的存储的详细信息,请参阅[设置现有存储](../manage-persistent-storage/set-up-existing-storage.md)。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/create-kubernetes-persistent-storage/provisioning-storage-examples/vsphere-storage.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/create-kubernetes-persistent-storage/provisioning-storage-examples/vsphere-storage.md new file mode 100644 index 00000000000..533cb97bb8f --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/create-kubernetes-persistent-storage/provisioning-storage-examples/vsphere-storage.md @@ -0,0 +1,73 @@ +--- +title: vSphere 存储 +weight: 3055 +--- + +要为有状态的工作负载提供 vSphere 存储,我们建议创建一个 vSphereVolume StorageClass。当工作负载通过 PersistentVolumeClaim 请求卷时,这种做法会动态调配 vSphere 存储。 + +为了在 vSphere 中动态调配存储,必须[启用 vSphere 提供商](../../../../../pages-for-subheaders/vsphere-cloud-provider.md)。 + + +### 先决条件 + +为了在 [Rancher Kubernetes Engine (RKE)](../../../../../pages-for-subheaders/launch-kubernetes-with-rancher.md) 集群中配置 vSphere 卷,[vSphere cloud provider](https://rancher.com/docs/rke/latest/en/config-options/cloud-providers/vsphere) 必须在[集群选项](../../../../../reference-guides/cluster-configuration/rancher-server-configuration/rke1-cluster-configuration.md)中显式启用。 + +### 创建一个 StorageClass + +:::tip + +你也可以使用 `kubectl` 命令行工具来执行以下步骤。有关详细信息,请参阅[关于持久卷的 Kubernetes 文档](https://kubernetes.io/docs/concepts/storage/persistent-volumes/)。 + +::: + +1. 点击 **☰ > 集群管理**。 +1. 转到要配置 vSphere 存储的集群。 +1. 在左侧导航栏中,单击**存储 > 存储类**。 +1. 单击**创建**。 +3. 输入存储类的**名称**。 +4. 在 **Provisioner**下,选择 **VMWare vSphere 卷**。 + + ![](/img/vsphere-storage-class.png) + +5. 可选地,你可以在**参数**下指定存储类的其他属性。有关详细信息,请参阅 [vSphere 存储文档](https://vmware.github.io/vsphere-storage-for-kubernetes/documentation/storageclass.html)。 +5. 单击**创建**。 + +### 创建使用 vSphere 卷的工作负载 + +1. 在左侧导航栏中,单击**工作负载**。 +1. 单击**创建**。 +1. 单击 **StatefulSet**。 +1. 在**卷声明模板**选项卡上,单击**添加声明模板**。 +1. 输入持久卷名称。 +1. 在**存储类**字段中,选择你创建的 vSphere 存储类。 +6. 输入卷所需的**容量**。然后单击**定义**。 +7. 在**挂载点**字段中指定路径。这是卷将安装在容器文件系统中的完整路径,例如 `/persistent`。 +8. 单击**创建**。 + +### 验证卷的持久性 + +1. 在左侧导航栏中,单击**工作负载 > Pod**。 +1. 转到你刚刚创建的工作负载,然后单击 **⋮ > 执行命令行**。 +2. 请注意卷已挂载到的根目录下的目录(在本例中为 `/persistent`)。 +3. 通过执行命令 `touch //data.txt` 在卷中创建一个文件。 +4. 关闭 shell 窗口。 +5. 单击工作负载的名称以显示详细信息。 +7. 单击 **⋮ > 删除**。 +8. 观察 pod 是否被删除。为了让工作负载维持在所配置的单个有状态 pod 的规模,之后会调度一个新的 Pod 来替换该 Pod。 +9. 替换的 pod 运行后,单击**执行命令行**。 +10. 输入 `ls -l /` 以检查卷所挂载的目录的内容。请注意,你之前创建的文件仍然存在。 + + ![workload-persistent-data](/img/workload-persistent-data.png) + +### 为什么使用 StatefulSet 替代 Deployment + +对于消耗 vSphere 存储的工作负载,你应该始终使用 [StatefulSets](https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/),因为这种资源类型旨在解决 VMDK 块存储警告。 + +由于 vSphere 卷由 VMDK 块存储支持,因此它们仅支持 `ReadWriteOnce` 的[访问模式](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#persistentvolumeclaims)。此设置限制卷,使其一次只能挂载到一个 pod(除非使用该卷的所有 pod 位于同一节点上)。如果 deployment 资源消耗 vSphere 卷,则 deployment 资源无法用于扩展到超出单个副本。 + +即使使用仅具有单个副本的 deployment 资源也可能在更新 deployment 时出现死锁情况。如果更新的 pod 被调度到不同的节点,由于 VMDK 仍然连接到另一个节点,因此 pod 将无法启动。 + +### 相关链接 + +- [用于 Kubernetes 的 vSphere 存储](https://vmware.github.io/vsphere-storage-for-kubernetes/documentation/) +- [Kubernetes 持久卷](https://kubernetes.io/docs/concepts/storage/persistent-volumes/) diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/install-cluster-autoscaler/use-aws-ec2-auto-scaling-groups.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/install-cluster-autoscaler/use-aws-ec2-auto-scaling-groups.md new file mode 100644 index 00000000000..84c6b458d5e --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/install-cluster-autoscaler/use-aws-ec2-auto-scaling-groups.md @@ -0,0 +1,576 @@ +--- +title: 通过 AWS EC2 Auto Scaling 组使用 Cluster Autoscaler +weight: 1 +--- + +本指南介绍如何使用 AWS EC2 Auto Scaling 组在 Rancher 自定义集群上安装和使用 [Kubernetes cluster-autoscaler](https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/)。 + +我们将安装一个 Rancher RKE 自定义集群,该集群具有固定数量的具有 etcd 和 controlplane 角色的节点,以及数量可变的具有 worker 角色的节点,它们由 `cluster-autoscaler` 管理。 + + +## 先决条件 + +本指南要求: + +* Rancher Server 正常运行。 +* 你的 AWS EC2 用户具有创建虚拟机、Auto Scaling 组以及 IAM 配置文件和角色的适当权限。 + +### 1. 创建自定义集群 + +在 Rancher Server 上,我们需要创建一个自定义的 K8s 集群。请参阅[此处](https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/)以检查版本兼容性。 + +请确保 cloud_provider 名称设置为 `amazonec2`。创建集群后,我们需要获得: + +* clusterID:`c-xxxxx` 将用于 EC2 `kubernetes.io/cluster/` 实例标签。 +* clusterName:将用于 EC2 `k8s.io/cluster-autoscaler/` 实例标签。 +* nodeCommand:将添加到 EC2 实例 `user_data` 上,以包含集群上的新节点。 + + ```sh + sudo docker run -d --privileged --restart=unless-stopped --net=host -v /etc/kubernetes:/etc/kubernetes -v /var/run:/var/run rancher/rancher-agent: --server https:// --token --ca-checksum + ``` + +### 2. 配置云提供商 + +在 AWS EC2 上,我们需要创建一些对象来配置系统。为了在 AWS 上进行配置,我们定义了三个不同的组和 IAM 配置文件。 + +1. Autoscaling 组:将加入 EC2 Auto Scaling 组 (ASG) 的节点。`cluster-autoscaler` 将使用 ASG 来进行扩缩容。 +* IAM 配置文件:运行 cluster-autoscaler 的 K8s 节点需要该文件。推荐用于 Kubernetes master 节点。此配置文件称为 `K8sAutoscalerProfile`。 + + ```json + { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": [ + "autoscaling:DescribeAutoScalingGroups", + "autoscaling:DescribeAutoScalingInstances", + "autoscaling:DescribeLaunchConfigurations", + "autoscaling:SetDesiredCapacity", + "autoscaling:TerminateInstanceInAutoScalingGroup", + "autoscaling:DescribeTags", + "autoscaling:DescribeLaunchConfigurations", + "ec2:DescribeLaunchTemplateVersions" + ], + "Resource": [ + "*" + ] + } + ] + } + ``` + +2. Master 组:将成为 Kubernetes etcd 和/或 controlplane 的节点。该组不会在 ASG 中。 +* IAM 配置文件:集成 Kubernetes cloud_provider 需要该文件。或者,你也可以使用 `AWS_ACCESS_KEY` 和 `AWS_SECRET_KEY` 来代替 [using-aws-credentials](https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/cloudprovider/aws/README.md#using-aws-credentials)。此配置文件称为 `K8sMasterProfile`。 + + ```json + { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": [ + "autoscaling:DescribeAutoScalingGroups", + "autoscaling:DescribeLaunchConfigurations", + "autoscaling:DescribeTags", + "ec2:DescribeInstances", + "ec2:DescribeRegions", + "ec2:DescribeRouteTables", + "ec2:DescribeSecurityGroups", + "ec2:DescribeSubnets", + "ec2:DescribeVolumes", + "ec2:CreateSecurityGroup", + "ec2:CreateTags", + "ec2:CreateVolume", + "ec2:ModifyInstanceAttribute", + "ec2:ModifyVolume", + "ec2:AttachVolume", + "ec2:AuthorizeSecurityGroupIngress", + "ec2:CreateRoute", + "ec2:DeleteRoute", + "ec2:DeleteSecurityGroup", + "ec2:DeleteVolume", + "ec2:DetachVolume", + "ec2:RevokeSecurityGroupIngress", + "ec2:DescribeVpcs", + "elasticloadbalancing:AddTags", + "elasticloadbalancing:AttachLoadBalancerToSubnets", + "elasticloadbalancing:ApplySecurityGroupsToLoadBalancer", + "elasticloadbalancing:CreateLoadBalancer", + "elasticloadbalancing:CreateLoadBalancerPolicy", + "elasticloadbalancing:CreateLoadBalancerListeners", + "elasticloadbalancing:ConfigureHealthCheck", + "elasticloadbalancing:DeleteLoadBalancer", + "elasticloadbalancing:DeleteLoadBalancerListeners", + "elasticloadbalancing:DescribeLoadBalancers", + "elasticloadbalancing:DescribeLoadBalancerAttributes", + "elasticloadbalancing:DetachLoadBalancerFromSubnets", + "elasticloadbalancing:DeregisterInstancesFromLoadBalancer", + "elasticloadbalancing:ModifyLoadBalancerAttributes", + "elasticloadbalancing:RegisterInstancesWithLoadBalancer", + "elasticloadbalancing:SetLoadBalancerPoliciesForBackendServer", + "elasticloadbalancing:AddTags", + "elasticloadbalancing:CreateListener", + "elasticloadbalancing:CreateTargetGroup", + "elasticloadbalancing:DeleteListener", + "elasticloadbalancing:DeleteTargetGroup", + "elasticloadbalancing:DescribeListeners", + "elasticloadbalancing:DescribeLoadBalancerPolicies", + "elasticloadbalancing:DescribeTargetGroups", + "elasticloadbalancing:DescribeTargetHealth", + "elasticloadbalancing:ModifyListener", + "elasticloadbalancing:ModifyTargetGroup", + "elasticloadbalancing:RegisterTargets", + "elasticloadbalancing:SetLoadBalancerPoliciesOfListener", + "iam:CreateServiceLinkedRole", + "ecr:GetAuthorizationToken", + "ecr:BatchCheckLayerAvailability", + "ecr:GetDownloadUrlForLayer", + "ecr:GetRepositoryPolicy", + "ecr:DescribeRepositories", + "ecr:ListImages", + "ecr:BatchGetImage", + "kms:DescribeKey" + ], + "Resource": [ + "*" + ] + } + ] + } + ``` + + * IAM 角色:`K8sMasterRole: [K8sMasterProfile,K8sAutoscalerProfile]` + * 安全组:`K8sMasterSg`。详情请参见 [RKE 端口(自定义节点选项卡)](../../../../getting-started/installation-and-upgrade/installation-requirements/port-requirements.md#下游-kubernetes-集群节点) + * 标签: + `kubernetes.io/cluster/: owned` + * 用户数据:`K8sMasterUserData` Ubuntu 18.04(ami-0e11cbb34015ff725),安装 Docker 并将 etcd 和 controlplane 节点添加到 K8s 集群。 + + ```sh + #!/bin/bash -x + + cat < /etc/sysctl.d/90-kubelet.conf + vm.overcommit_memory = 1 + vm.panic_on_oom = 0 + kernel.panic = 10 + kernel.panic_on_oops = 1 + kernel.keys.root_maxkeys = 1000000 + kernel.keys.root_maxbytes = 25000000 + EOF + sysctl -p /etc/sysctl.d/90-kubelet.conf + + curl -sL https://releases.rancher.com/install-docker/19.03.sh | sh + sudo usermod -aG docker ubuntu + + TOKEN=$(curl -s -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600") + PRIVATE_IP=$(curl -H "X-aws-ec2-metadata-token: ${TOKEN}" -s http://169.254.169.254/latest/meta-data/local-ipv4) + PUBLIC_IP=$(curl -H "X-aws-ec2-metadata-token: ${TOKEN}" -s http://169.254.169.254/latest/meta-data/public-ipv4) + K8S_ROLES="--etcd --controlplane" + + sudo docker run -d --privileged --restart=unless-stopped --net=host -v /etc/kubernetes:/etc/kubernetes -v /var/run:/var/run rancher/rancher-agent: --server https:// --token --ca-checksum --address ${PUBLIC_IP} --internal-address ${PRIVATE_IP} ${K8S_ROLES} + ``` + +3. Worker 组:将加入 K8s worker plane 的节点。Worker 节点将由 cluster-autoscaler 使用 ASG 进行扩缩容。 +* IAM 配置文件:提供 cloud_provider worker 集成。 + 此配置文件称为 `K8sWorkerProfile`。 + + ```json + { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": [ + "ec2:DescribeInstances", + "ec2:DescribeRegions", + "ecr:GetAuthorizationToken", + "ecr:BatchCheckLayerAvailability", + "ecr:GetDownloadUrlForLayer", + "ecr:GetRepositoryPolicy", + "ecr:DescribeRepositories", + "ecr:ListImages", + "ecr:BatchGetImage" + ], + "Resource": "*" + } + ] + } + ``` + +* IAM 角色:`K8sWorkerRole:[K8sWorkerProfile]` +* 安全组:`K8sWorkerSg`。详情请参见 [RKE 端口(自定义节点选项卡)](../../../../getting-started/installation-and-upgrade/installation-requirements/port-requirements.md#下游-kubernetes-集群节点) +* 标签: + * `kubernetes.io/cluster/: owned` + * `k8s.io/cluster-autoscaler/: true` + * `k8s.io/cluster-autoscaler/enabled: true` +* 用户数据:`K8sWorkerUserData` Ubuntu 18.04(ami-0e11cbb34015ff725),安装 Docker 并将 worker 节点添加到 K8s 集群。 + + ```sh + #!/bin/bash -x + + cat < /etc/sysctl.d/90-kubelet.conf + vm.overcommit_memory = 1 + vm.panic_on_oom = 0 + kernel.panic = 10 + kernel.panic_on_oops = 1 + kernel.keys.root_maxkeys = 1000000 + kernel.keys.root_maxbytes = 25000000 + EOF + sysctl -p /etc/sysctl.d/90-kubelet.conf + + curl -sL https://releases.rancher.com/install-docker/19.03.sh | sh + sudo usermod -aG docker ubuntu + + TOKEN=$(curl -s -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600") + PRIVATE_IP=$(curl -H "X-aws-ec2-metadata-token: ${TOKEN}" -s http://169.254.169.254/latest/meta-data/local-ipv4) + PUBLIC_IP=$(curl -H "X-aws-ec2-metadata-token: ${TOKEN}" -s http://169.254.169.254/latest/meta-data/public-ipv4) + K8S_ROLES="--worker" + + sudo docker run -d --privileged --restart=unless-stopped --net=host -v /etc/kubernetes:/etc/kubernetes -v /var/run:/var/run rancher/rancher-agent: --server https:// --token --ca-checksum --address ${PUBLIC_IP} --internal-address ${PRIVATE_IP} ${K8S_ROLES} + ``` + +详情请参见 [AWS 上的 RKE 集群](../../../new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/set-up-cloud-providers/other-cloud-providers/amazon.md) 和 [AWS 上的 Cluster Autoscaler](https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/cloudprovider/aws/README.md)。 + +### 3. 部署节点 + +我们配置 AWS 后,我们需要创建虚拟机来引导集群: + +* master (etcd+controlplane):根据需要部署三个适当大小的 master 实例。详情请参见[生产就绪集群的建议](../../../../pages-for-subheaders/checklist-for-production-ready-clusters.md)。 + * IAM 角色:`K8sMasterRole` + * 安全组:`K8sMasterSg` + * 标签: + * `kubernetes.io/cluster/: owned` + * 用户数据:`K8sMasterUserData` + +* worker:使用以下设置在 EC2 上定义 ASG: + * 名称:`K8sWorkerAsg` + * IAM 角色:`K8sWorkerRole` + * 安全组:`K8sWorkerSg` + * 标签: + * `kubernetes.io/cluster/: owned` + * `k8s.io/cluster-autoscaler/: true` + * `k8s.io/cluster-autoscaler/enabled: true` + * 用户数据:`K8sWorkerUserData` + * 实例: + * 最少:2 + * 理想情况:2 + * 最大:10 + +部署 VM 后,你的 Rancher 自定义集群应该可以正常运行了,其中包含三个 master 节点和两个 worker 节点。 + +### 4. 安装 Cluster-autoscaler + +此时,我们的 Rancher 集群应该已正常运行。我们将根据 cluster-autoscaler 的建议,在 master 节点和 `kube-system` 命名空间上安装 cluster-autoscaler。 + +#### 参数 + +下表显示了用于微调的 cluster-autoscaler 参数: + +| 参数 | 默认 | 描述 | +|---|---|---| +| cluster-name | - | 自动扩缩的集群的名称(如果可用) | +| address | :8085 | 公开 Prometheus 指标的地址 | +| kubernetes | - | Kubernetes master 位置。如需使用默认值,则留空 | +| kubeconfig | - | 带有授权和 master 位置信息的 kubeconfig 文件的路径 | +| cloud-config | - | 云提供商配置文件的路径。如果没有配置文件,则为空字符串 | +| namespace | "kube-system" | 运行 cluster-autoscaler 的命名空间 | +| scale-down-enabled | true | CA 是否应该缩减集群 | +| scale-down-delay-after-add | "10m" | 扩容多久后恢复缩容评估 | +| scale-down-delay-after-delete | 0 | 节点删除多久后恢复缩容评估,默认为 scanInterval 的值 | +| scale-down-delay-after-failure | "3m" | 缩容失败多久后恢复缩容评估 | +| scale-down-unneeded-time | "10m" | 在能进行缩容之前,节点需要不被使用的时间 | +| scale-down-unready-time | "20m" | 在能进行缩容之前,非就绪节点应该需要不被使用的时间 | +| scale-down-utilization-threshold | 0.5 | 节点上运行的所有 pod 的 CPU 或内存之和除以节点对应的可分配资源,低于该值时可以考虑缩减一个节点 | +| scale-down-gpu-utilization-threshold | 0.5 | 节点上运行的所有 pod 的 GPU 请求总和除以节点的可分配资源,低于该值时可以考虑缩减一个节点 | +| scale-down-non-empty-candidates-count | 30 | 在一次迭代中被认为是空节点的最大数量,这些节点会成为使用清空来缩容的候选节点 | +| scale-down-candidates-pool-ratio | 0.1 | 当先前迭代的某些候选节点失效时,被视为要缩容的额外非空候选节点的比率 | +| scale-down-candidates-pool-min-count | 50 | 当先前迭代的某些候选节点失效时,被视为要缩容的额外非空候选节点的最大数量 | +| node-deletion-delay-timeout | "2m" | CA 在删除节点之前,等待删除 delay-deletion.cluster-autoscaler.kubernetes.io/ 注释的最长时间 | +| scan-interval | "10s" | 重新评估集群扩缩容的频率 | +| max-nodes-total | 0 | 所有节点组中的最大节点数。Cluster Autoscaler 不会让集群增长到超过此数量 | +| cores-total | "0:320000" | 集群中的最小和最大的核心数,格式为 `:`。Cluster Autoscaler 会在该范围内扩缩集群。 | +| memory-total | "0:6400000" | 集群中最小和最大内存千兆字节数,格式为 `:`。Cluster Autoscaler 会在该范围内扩缩集群。 | +| cloud-provider | - | 云提供商类型 | +| max-bulk-soft-taint-count | 10 | 可以同时添加/移除 PreferNoSchedule 污点的最大节点数。设置为 0 则关闭此类污点 | +| max-bulk-soft-taint-time | "3s" | 同时添加/移除 PreferNoSchedule 污点的最大持续时间。 | +| max-empty-bulk-delete | 10 | 可以同时删除的最大空节点数 | +| max-graceful-termination-sec | 600 | 尝试缩减节点时,CA 等待 pod 终止的最大秒数 | +| max-total-unready-percentage | 45 | 集群中未就绪节点的最大百分比。超过此值后,CA 将停止操作 | +| ok-total-unready-count | 3 | 允许的未就绪节点数,与 max-total-unready-percentage 无关 | +| scale-up-from-zero | true | 就绪节点数等于 0 时,CA 是否应该扩容 | +| max-node-provision-time | "15m" | CA 等待节点配置的最长时间 | +| nodes | - | 以云提供商接受的格式设置节点组的最小、最大大小和其他配置数据。可以多次使用。格式是 `::`。 | +| node-group-auto-discovery | - | 节点组自动发现的一个或多个定义。定义表示为 `:[[=]]` | +| estimator | - | "binpacking" | 用于扩容的资源评估器类型。可用值:["binpacking"] | +| expander | "random" | 要在扩容中使用的节点组扩展器的类型。可用值:`["random","most-pods","least-waste","price","priority"]` | +| ignore-daemonsets-utilization | false | CA 为了缩容而计算资源利用率时,是否应忽略 DaemonSet pod | +| ignore-mirror-pods-utilization | false | CA 为了缩容而计算资源利用率时,是否应忽略 Mirror pod | +| write-status-configmap | true | CA 是否应该将状态信息写入 configmap | +| max-inactivity | "10m" | 从上次记录的 autoscaler 活动后,自动重启之前的最长时间 | +| max-failing-time | "15m" | 从上次记录的 autoscaler 成功运行后,自动重启之前的最长时间 | +| balance-similar-node-groups | false | 检测相似的节点组,并均衡它们的节点数量 | +| node-autoprovisioning-enabled | false | CA 是否应在需要时自动配置节点组 | +| max-autoprovisioned-node-group-count | 15 | 集群中自动配置组的最大数量 | +| unremovable-node-recheck-timeout | "5m" | 在再次检查无法删除的节点之前,节点的超时时间 | +| expendable-pods-priority-cutoff | -10 | 优先级低于 cutoff 的 Pod 将是消耗性 pod。这些 pod 可以在缩容期间不加考虑地被终止,并且不会导致扩容。优先级是 null(禁用 PodPriority)的 pod 不是消耗性的 | +| regional | false | 集群是区域性的 | +| new-pod-scale-up-delay | "0s" | 生命短于这个值的 Pod 将不考虑扩容 | +| ignore-taint | - | 在扩缩容节点组时,指定在节点模板中要忽略的污点 | +| balancing-ignore-label | - | 在比较两个节点组是否相似时,指定要忽略的标签(基本标签集和云提供商标签集除外) | +| aws-use-static-instance-list | false | CA 在运行时还是使用静态列表获取实例类型。仅适用于 AWS | +| profiling | false | 是否启用了 debug/pprof 端点 | + +#### 部署 + +基于 [cluster-autoscaler-run-on-master.yaml](https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/cloudprovider/aws/examples/cluster-autoscaler-run-on-master.yaml) 示例,我们已经创建了自己的 `cluster-autoscaler-deployment.yaml` 以使用首选的 [auto-discovery 设置](https://github.com/kubernetes/autoscaler/tree/master/cluster-autoscaler/cloudprovider/aws#auto-discovery-setup),更新容忍度、nodeSelector、镜像版本和命令配置: + + +```yml +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + k8s-addon: cluster-autoscaler.addons.k8s.io + k8s-app: cluster-autoscaler + name: cluster-autoscaler + namespace: kube-system +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: cluster-autoscaler + labels: + k8s-addon: cluster-autoscaler.addons.k8s.io + k8s-app: cluster-autoscaler +rules: + - apiGroups: [""] + resources: ["events", "endpoints"] + verbs: ["create", "patch"] + - apiGroups: [""] + resources: ["pods/eviction"] + verbs: ["create"] + - apiGroups: [""] + resources: ["pods/status"] + verbs: ["update"] + - apiGroups: [""] + resources: ["endpoints"] + resourceNames: ["cluster-autoscaler"] + verbs: ["get", "update"] + - apiGroups: [""] + resources: ["nodes"] + verbs: ["watch", "list", "get", "update"] + - apiGroups: [""] + resources: + - "pods" + - "services" + - "replicationcontrollers" + - "persistentvolumeclaims" + - "persistentvolumes" + verbs: ["watch", "list", "get"] + - apiGroups: ["extensions"] + resources: ["replicasets", "daemonsets"] + verbs: ["watch", "list", "get"] + - apiGroups: ["policy"] + resources: ["poddisruptionbudgets"] + verbs: ["watch", "list"] + - apiGroups: ["apps"] + resources: ["statefulsets", "replicasets", "daemonsets"] + verbs: ["watch", "list", "get"] + - apiGroups: ["storage.k8s.io"] + resources: ["storageclasses", "csinodes"] + verbs: ["watch", "list", "get"] + - apiGroups: ["batch", "extensions"] + resources: ["jobs"] + verbs: ["get", "list", "watch", "patch"] + - apiGroups: ["coordination.k8s.io"] + resources: ["leases"] + verbs: ["create"] + - apiGroups: ["coordination.k8s.io"] + resourceNames: ["cluster-autoscaler"] + resources: ["leases"] + verbs: ["get", "update"] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: cluster-autoscaler + namespace: kube-system + labels: + k8s-addon: cluster-autoscaler.addons.k8s.io + k8s-app: cluster-autoscaler +rules: + - apiGroups: [""] + resources: ["configmaps"] + verbs: ["create","list","watch"] + - apiGroups: [""] + resources: ["configmaps"] + resourceNames: ["cluster-autoscaler-status", "cluster-autoscaler-priority-expander"] + verbs: ["delete", "get", "update", "watch"] + +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: cluster-autoscaler + labels: + k8s-addon: cluster-autoscaler.addons.k8s.io + k8s-app: cluster-autoscaler +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: cluster-autoscaler +subjects: + - kind: ServiceAccount + name: cluster-autoscaler + namespace: kube-system + +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: cluster-autoscaler + namespace: kube-system + labels: + k8s-addon: cluster-autoscaler.addons.k8s.io + k8s-app: cluster-autoscaler +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: cluster-autoscaler +subjects: + - kind: ServiceAccount + name: cluster-autoscaler + namespace: kube-system + +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: cluster-autoscaler + namespace: kube-system + labels: + app: cluster-autoscaler +spec: + replicas: 1 + selector: + matchLabels: + app: cluster-autoscaler + template: + metadata: + labels: + app: cluster-autoscaler + annotations: + prometheus.io/scrape: 'true' + prometheus.io/port: '8085' + spec: + serviceAccountName: cluster-autoscaler + tolerations: + - effect: NoSchedule + operator: "Equal" + value: "true" + key: node-role.kubernetes.io/controlplane + nodeSelector: + node-role.kubernetes.io/controlplane: "true" + containers: + - image: eu.gcr.io/k8s-artifacts-prod/autoscaling/cluster-autoscaler: + name: cluster-autoscaler + resources: + limits: + cpu: 100m + memory: 300Mi + requests: + cpu: 100m + memory: 300Mi + command: + - ./cluster-autoscaler + - --v=4 + - --stderrthreshold=info + - --cloud-provider=aws + - --skip-nodes-with-local-storage=false + - --expander=least-waste + - --node-group-auto-discovery=asg:tag=k8s.io/cluster-autoscaler/enabled,k8s.io/cluster-autoscaler/ + volumeMounts: + - name: ssl-certs + mountPath: /etc/ssl/certs/ca-certificates.crt + readOnly: true + imagePullPolicy: "Always" + volumes: + - name: ssl-certs + hostPath: + path: "/etc/ssl/certs/ca-certificates.crt" + +``` + +准备好清单文件后,将该文件部署到 Kubernetes 集群中(也可以使用 Rancher UI 进行操作): + +```sh +kubectl -n kube-system apply -f cluster-autoscaler-deployment.yaml +``` + +:::note + +你也可以通过[手动配置](https://github.com/kubernetes/autoscaler/tree/master/cluster-autoscaler/cloudprovider/aws#manual-configuration)来设置 Cluster-autoscaler deployment。 + +::: + +# 测试 + +此时,cluster-autoscaler 应该已经在 Rancher 自定义集群中启动并运行。当满足以下条件之一时,cluster-autoscaler 需要管理 `K8sWorkerAsg` ASG,以在 2 到 10 个节点之间进行扩缩容: + +* 集群中有 Pod 因资源不足而无法运行。在这种情况下,集群被扩容。 +* 集群中有一些节点长时间未得到充分利用,而且它们的 Pod 可以放到其他现有节点上。在这种情况下,集群被缩容。 + +### 生成负载 + +为了在 Kubernetes 集群上产生负载并查看 cluster-autoscaler 是否正常工作,我们准备了一个 `test-deployment.yaml`。`test-deployment` 通过三个副本请求 1000m CPU 和 1024Mi 内存。通过调整请求的资源和/或副本以确保耗尽 Kubernetes 集群资源: + +```yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: hello-world + name: hello-world +spec: + replicas: 3 + selector: + matchLabels: + app: hello-world + strategy: + rollingUpdate: + maxSurge: 1 + maxUnavailable: 0 + type: RollingUpdate + template: + metadata: + labels: + app: hello-world + spec: + containers: + - image: rancher/hello-world + imagePullPolicy: Always + name: hello-world + ports: + - containerPort: 80 + protocol: TCP + resources: + limits: + cpu: 1000m + memory: 1024Mi + requests: + cpu: 1000m + memory: 1024Mi +``` + +准备好 test deployment 后,将其部署在 Kubernetes 集群的默认命名空间中(可以使用 Rancher UI): + +``` +kubectl -n default apply -f test-deployment.yaml +``` + +### 检查扩缩容 + +Kubernetes 资源耗尽后,cluster-autoscaler 应该扩容无法调度 pod 的 worker 节点。它应该进行扩容,直到所有 pod 都能被调度。你应该会在 ASG 和 Kubernetes 集群上看到新节点。检查 `kube-system` cluster-autoscaler pod 上的日志。 + +检查完扩容后,我们开始检查缩容。为此,请减少 test deployment 的副本数,直到你能释放足够的 Kubernetes 集群资源以进行缩容。你应该能看到 ASG 和 Kubernetes 集群上的节点消失了。检查 `kube-system` cluster-autoscaler pod 上的日志。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/nodes-and-node-pools.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/nodes-and-node-pools.md new file mode 100644 index 00000000000..6d42cdd3815 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/nodes-and-node-pools.md @@ -0,0 +1,186 @@ +--- +title: 节点和节点池 +weight: 2030 +--- + +在 Rancher 中启动 Kubernetes 集群后,你可以从集群的**节点**选项卡管理各个节点。不同的配置集群[选项](../../../pages-for-subheaders/kubernetes-clusters-in-rancher-setup.md)对应不同的可用节点选项。 + +:::note + +如果你想管理 _集群_ 而不是单个节点,请参阅[编辑集群](../../../pages-for-subheaders/cluster-configuration.md)。 + +::: + + +## 每个集群创建选项的可用节点选项 + +下表列出了 Rancher 中每种集群类型的可用节点选项。单击**选项**列中的链接以获取每个功能的更多信息。 + +| 选项 | [由基础设施提供商托管的节点][1] | [自定义节点][2] | [托管集群][3] | [注册的 EKS 节点][4] | [所有其他注册节点][5] | 描述 | +| ------------------------------------------------ | ------------------------------------------------ | ---------------- | ------------------- | ------------------- | -------------------| ------------------------------------------------------------------ | +| [封锁](#封锁节点) | ✓ | ✓ | ✓ | ✓ | ✓ | 将节点标记为不可调度。 | +| [清空](#清空节点) | ✓ | ✓ | ✓ | ✓ | ✓ | 将节点标记为不可调度 _并且_ 驱逐所有 pod。 | +| [编辑](#管理和编辑单个节点) | ✓ | ✓ | ✓ | ✓ | ✓ | 输入节点的自定义名称、描述、标签或污点。 | +| [查看 API](#在-rancher-api-中查看节点) | ✓ | ✓ | ✓ | ✓ | ✓ | 查看 API 数据。 | +| [删除](#删除节点) | ✓ | ✓ | | * | * | 从集群中删除有缺陷的节点。 | +| [下载密钥](#通过-ssh-连接到由基础设施提供商托管的节点) | ✓ | | | | | 下载 SSH 密钥以通过 SSH 连接到节点。 | +| [节点缩放](#扩缩节点) | ✓ | | | ✓ | | 向上或向下扩展节点池中的节点数。 | + +[1]: ../../../pages-for-subheaders/use-new-nodes-in-an-infra-provider.md +[2]: ../../../pages-for-subheaders/use-existing-nodes.md +[3]: ../../../pages-for-subheaders/set-up-clusters-from-hosted-kubernetes-providers.md +[4]: ../../../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/register-existing-clusters.md +[5]: ../../../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/register-existing-clusters.md + +\* 可通过 View API 访问的删除选项 + + +### 由基础设施提供商托管的节点 + +在[托管在基础设施提供商](../../../pages-for-subheaders/use-new-nodes-in-an-infra-provider.md)中的节点上配置由 Rancher 启动的 Kubernetes 集群时,你可以使用节点池。 + +如果节点池被编辑,通过[节点池选项](../../../pages-for-subheaders/use-new-nodes-in-an-infra-provider.md#节点池)配置的集群可以纵向扩容或缩容。 + +如果启用[节点自动替换功能](../../../pages-for-subheaders/use-new-nodes-in-an-infra-provider.md#节点自动替换),节点池还可以自动维护在初始集群配置期间设置的节点规模。该规模决定了 Rancher 为集群维护的 active 节点的数量。 + +Rancher 使用[节点模板](../../../pages-for-subheaders/use-new-nodes-in-an-infra-provider.md#节点模板)来替换节点池中的节点。每个节点模板都使用云提供商凭证来允许 Rancher 在基础设施提供商中设置节点。 + +### 由托管 Kubernetes 提供商配置的节点 + +用于管理[由 Kubernetes 提供商托管](../../../pages-for-subheaders/set-up-clusters-from-hosted-kubernetes-providers.md)的节点的选项在 Rancher 中有些限制。例如,你不能使用 Rancher UI 向上或向下缩放节点数量,而是需要直接编辑集群。 + +### 注册节点 + +虽然你可以使用 Rancher 将工作负载部署到[已注册集群](../../new-user-guides/kubernetes-clusters-in-rancher-setup/register-existing-clusters.md),但你无法管理单个集群节点。导入的集群节点的所有管理都必须在 Rancher 之外进行。 + +## 管理和编辑单个节点 + +编辑节点可让你: + +* 更改其名称 +* 更改其描述 +* 添加[标签](https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/) +* 添加/删除[污点](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/) + +要管理单个节点,请浏览到要管理的集群,然后从主菜单中选择**节点**。你可以通过单击节点的 **⋮** (**...**) 图标来打开选项菜单。 + +## 在 Rancher API 中查看节点 + +选择此选项以查看节点的 [API 端点](../../../pages-for-subheaders/about-the-api.md)。 + +## 删除节点 + +使用 **Delete** 从云提供商中删除有缺陷的节点。 + +当你删除有缺陷的节点时,如果该节点在节点池中并启用了[节点自动替换](../../../pages-for-subheaders/use-new-nodes-in-an-infra-provider.md#节点自动替换),Rancher 可以自动将其替换为具有相同配置的节点。 + +:::tip + +如果你的集群由基础设施提供商托管,并且你希望缩容集群,而不是删除有缺陷的节点,请进行[缩容](#扩缩节点)而不是删除。 + +::: + +## 扩缩节点 + +对于由基础设施提供商托管的节点,你可以使用缩放控件来缩放每个[节点池](../../../pages-for-subheaders/use-new-nodes-in-an-infra-provider.md#节点池)中的节点数量。此选项不适用于其他集群类型。 + +## 通过 SSH 连接到由基础设施提供商托管的节点 + +对于[由基础设施提供商托管的节点](../../../pages-for-subheaders/use-new-nodes-in-an-infra-provider.md),你可以选择下载其 SSH 密钥,以便从桌面远程连接到它。 + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 在**集群**页面上,转到要通过 SSH 连接到节点的集群,然后单击集群名称。 +1. 在**主机池**选项卡上,找到要远程访问的节点,然后单击 **⋮ > 下载 SSH 密钥**。这将下载用于 SSH 的文件的 ZIP 包。 +1. 将 ZIP 文件解压缩到任何位置。 +1. 打开终端。转到解压了的 ZIP 文件的位置。 +1. 输入以下命令: + + ``` + ssh -i id_rsa root@ + ``` + +## 封锁节点 + +_封锁_ 节点表示将节点标记为不可调度。此功能适用于在短期维护(如重启,升级或停用)时在节点上执行短期任务。完成后,重新打开电源并通过取消封锁使节点再次可调度。 + +## 清空节点 + +_清空_ 指的是先封锁节点,然后驱逐其所有 pod 的过程。此功能对于执行节点维护(如内核升级或硬件维护)很有用。它可以防止新的 pod 部署到节点,同时能重新分配现有的 pod,从而避免用户遇到服务中断的情况。 + +- 具有副本集的 pod 将被一个新的 pod 替换,该新 pod 将被调度到一个新节点。此外,如果 pod 是服务的一部分,则客户端将自动重定向到新的 pod。 + +- 对于没有副本集的 pod,你需要调出 pod 的新副本。如果该 pod 不是服务的一部分,将客户端重定向到它。 + +你可以清空处于 `cordoned` 或 `active` 状态的节点。清空一个节点时,该节点会被封锁,然后会评估节点是否满足清空的必备要求,如果满足要求,则会驱逐节点的 pod。 + +但是,你可以在启动清空时覆盖清空条件。你还有机会设置宽限期和超时值。 + +### 激进和安全的清空选项 + +为集群配置升级策略时,你将能够启用节点清空。如果启用了节点清空,你将能够配置如何删除和重新调度 pod。 + +- **激进模式** + + 在这种模式下,即使 pod 没有控制器也不会被重新调度到新节点。Kubernetes 会认为你拥有自己的 pod 删除逻辑。 + + Kubernetes 还会认为你有处理使用 emptyDir 的 pod 的实现。如果 Pod 使用 emptyDir 存储本地数据,你可能无法安全地删除该 pod,因为一旦 Pod 从节点中删除,emptyDir 中的数据将被删除。选择激进模式将删除这些 pod。 + +- **安全模式** + + 如果一个节点有独立的 pod 或临时数据,它将被封锁但不会被清空。 +### 宽限期 + +给每个 pod 清理的超时时间,从而让它们优雅地退出。例如,pod 可能需要完成任何未完成的请求、回滚事务或将状态保存到某个外部存储。如果该值为负数,将使用 pod 中指定的默认值。 + +### 超时 + +在清空放弃之前应该继续等待的时间。 + +:::note Kubernetes 已知问题: + +Kubernetes 1.12 之前的版本中,在清空节点时不会强制执行[超时设置](https://github.com/kubernetes/kubernetes/pull/64378)。 + +::: + +### 清空和封锁状态 + +如果有任何与用户输入相关的错误,节点会由于清空失败进入 `cordoned` 状态。你可以更正输入并再次尝试清空节点,也可以通过解封节点来中止。 + +如果清空没有错误,则节点会进入 `draining` 状态。当节点处于此状态时,你可以选择停止清空,这将停止清空过程并将节点的状态更改为 `cordoned`。 + +清空成功完成后,节点将处于 `drained` 状态。然后你可以关闭或删除节点。 + +有关**封锁和清空**的更多信息,请参阅 [Kubernetes 文档](https://kubernetes.io/docs/tasks/administer-cluster/cluster-management/#maintenance-on-a-node)。 + +## 标记 Rancher 忽略的节点 + +某些解决方案(例如 F5 的 BIG-IP 集成)可能需要创建一个不会注册到集群的节点。 + +由于节点永远不会完成注册,因此它在 Rancher UI 中总是显示为不健康。 + +在这种情况下,你可能希望将节点标记为 Rancher 忽略的节点,从而让 Rancher 仅在节点实际发生故障时将节点状态显示为不健康。 + +你可以使用 Rancher UI 或 `kubectl` 标记要忽略的节点。 + +:::note + +已知一个[未解决的问题](https://github.com/rancher/rancher/issues/24172),即标记为被忽略的节点可能会卡在更新状态。 + +::: + + +### 使用 kubectl 标记要忽略的节点 + +要添加 Rancher 忽略的节点,请使用 `kubectl` 创建具有以下标签的节点: + +``` +cattle.rancher.io/node-status: ignore +``` + +**结果**:如果将节点添加到集群中,Rancher 将不会尝试与该节点同步。该节点仍然可以是集群的一部分,并且可以使用 `kubectl` 列出。 + +如果在将节点添加到集群之前添加了标签,则该节点将不会显示在 Rancher UI 中。 + +如果在将节点添加到 Rancher 集群后添加标签,则不会从 UI 中删除该节点。 + +如果你使用 Rancher UI 或 API 从 Rancher server 中删除节点,假如 `nodeName` 在 Rancher API 下的 `v3/settings/ignore-node-name` 中列出,则不会从集群中删除该节点。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/projects-and-namespaces.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/projects-and-namespaces.md new file mode 100644 index 00000000000..9429ee78b39 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/projects-and-namespaces.md @@ -0,0 +1,188 @@ +--- +title: 使用 Rancher 的项目和 Kubernetes 命名空间 +description: Rancher Projects 减轻了集群的管理负担并支持多租户。学习创建项目并将项目划分为 Kubernetes 命名空间 +weight: 2032 +--- + +命名空间是 Kubernetes 的概念,它允许你在集群中使用虚拟集群。这对于将集群划分为单独的“虚拟集群”很有用,每个“虚拟集群”都有自己的访问控制和资源配额。 + +项目是一组命名空间,是 Rancher 引入的一个概念。项目允许你将多个命名空间作为一个组进行管理,并在其中执行 Kubernetes 操作。你可以使用项目来支持多租户,以便团队可以在集群内访问项目,而无需访问同一集群中的其他项目。 + +:::note + +从 Rancher v2.6 开始,项目不再强调 UI,因为不再需要在项目范围内创建任何 Kubernetes 资源。但是,如果启用了旧版功能开关,则仍可以在项目范围内创建诸如 [Secrets](../../new-user-guides/kubernetes-resources-setup/secrets.md#在项目中创建密文) 之类的资源。 + +::: + +本文介绍项目和命名空间如何与 Rancher 一起使用。 + +## 关于命名空间 + +命名空间是 Kubernetes 引入的一个概念。详情请参见[命名空间的官方 Kubernetes 文档](https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/)。 + +:::note + +Kubernetes 支持由同一个物理集群支持的多个虚拟集群。这些虚拟集群称为命名空间。命名空间适用于多用户分布在多个团队或项目中的环境。如果你的集群只有几个到几十个用户,你不需要创建或考虑使用命名空间。 + +::: + +命名空间提供以下功能: + +- **为名称提供范围**:资源名称在命名空间内必须是唯一的,但跨命名空间时则不需要。命名空间不能相互嵌套,每个 Kubernetes 资源只能位于一个命名空间中。 +- **资源配额**:命名空间提供了在多用户之间划分集群资源的方法。 + +你可以在项目级别分配资源,以便项目中的每个命名空间都可以使用这些资源。你也可以通过将资源显式分配给命名空间来绕过此继承模式。 + +你可以将以下资源直接分配给命名空间: + +- [工作负载](../../../pages-for-subheaders/workloads-and-pods.md) +- [负载均衡器/Ingress](../../../pages-for-subheaders/load-balancer-and-ingress-controller.md) +- [服务发现记录](../../new-user-guides/kubernetes-resources-setup/create-services.md) +- [持久卷声明](../../../pages-for-subheaders/create-kubernetes-persistent-storage.md) +- [证书](../../new-user-guides/kubernetes-resources-setup/encrypt-http-communication.md) +- [ConfigMap](../../new-user-guides/kubernetes-resources-setup/configmaps.md) +- [镜像仓库](../../new-user-guides/kubernetes-resources-setup/kubernetes-and-docker-registries.md) +- [密文](../../new-user-guides/kubernetes-resources-setup/secrets.md) + +为了在 vanilla Kubernetes 集群中管理权限,集群管理员要为每个命名空间配置基于角色的访问策略。Rancher 在项目级别上分配用户权限,项目中的命名空间会自动继承项目的权限。 + +有关创建和移动命名空间的更多信息,请参阅[命名空间](../manage-projects/manage-namespaces.md)。 + +### 命名空间和 kubectl 的 RBAC 问题 + +由于项目是 Rancher 引入的概念,因此 kubectl 不能将命名空间的创建限制在创建者可以访问的项目中。 + +这意味着当具有项目范围权限的普通用户使用 `kubectl` 创建命名空间时,由于 `kubectl` 不需要将新命名空间限制在特定项目中,创建的命名空间可能无法使用。 + +如果你的权限仅限于项目级别,则最好[通过 Rancher 创建命名空间](../manage-projects/manage-namespaces.md),以确保你有权访问该命名空间。 + +如果普通用户是项目所有者,则该用户将能够在该项目中创建命名空间。Rancher UI 将阻止该用户在他们有权访问的项目之外创建命名空间。 + +## 关于项目 + +在层次结构方面: + +- 集群包含项目 +- 项目包含命名空间 + +你可以使用项目来支持多租户,以便团队可以在集群内访问项目,而无需访问同一集群中的其他项目。 + +在 Kubernetes 的基础版本中,RBAC 或集群资源等功能被分配给了各个命名空间。项目允许你让个人或团队同时访问多个命名空间来节省时间。 + +你可以使用项目来执行以下操作: + +- 将用户分配到一组命名空间(即[项目成员身份](../authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/cluster-and-project-roles.md))。 +- 在项目中为用户分配特定角色。角色可以是所有者、成员、只读或[自定义](../authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/custom-roles.md)。 +- 为项目分配资源。 +- 分配 Pod 安全策略。 + +创建集群时,会在其中自动创建两个项目: + +- [Default 项目](#集群的-default-项目) +- [System 项目](#system-项目) + +### 集群的 Default 项目 + +使用 Rancher 配置集群时,Rancher 会自动为集群创建一个 `default` 项目。你可以使用这个项目来开始使用集群。但你始终可以删除该项目,并用具有更多描述性名称的项目替换它。 + +如果你只需要使用 `default` 命名空间,那么你就不需要 Rancher 中 **Default** 之外的其他项目。 + +如果你需要 **Default** 之外的其他项目,你可以在 Rancher 中创建更多项目来隔离命名空间、应用和资源。 + +### System 项目 + +故障排除时,你可以查看 `system` 项目来检查 Kubernetes 系统中重要的命名空间是否正常。这是一个易于访问的项目,能让你避免对系统命名空间容器进行逐个排查。 + +要打开这个项目,请打开集群视图并单击**集群 > 项目/命名空间**。该视图显示了 `system` 项目中的所有命名空间。 + +`system` 项目: + +- 在你配置集群时自动创建。 +- 列出存在于 `v3/settings/system-namespaces` 中的所有命名空间(如果存在)。 +- 允许你添加更多命名空间,或将项目内的命名空间移动到其他项目。 +- 无法删除,因为它是集群操作所必需的。 + +:::note + +在启用了项目网络隔离的 RKE 集群中,`system` 项目会覆盖项目网络隔离选项,以便项目能与其他项目通信、收集日志和检查健康状态。 + +::: + +## 项目授权 + +普通用户仅在两种情况下会被授权访问项目: + +- 管理员、集群所有者或集群成员将普通用户显式添加到项目的**成员**中。 +- 普通用户可以访问他们自己创建的项目。 + +## Pod 安全策略 + +Rancher 在 Kubernetes 之上进行了扩展,除了集群级别之外,还允许在项目级别应用 [Pod 安全策略](https://kubernetes.io/docs/concepts/policy/pod-security-policy/)。但是,最佳实践是在集群级别应用 Pod 安全策略。 + +## 创建项目 + +本节介绍如何创建具有名称以及可选 pod 安全策略、成员和资源配额的新项目。 + +1. [命名新项目](#1-命名新项目) +2. [可选:选择 pod 安全策略](#2-可选:选择-pod-安全策略) +3. [推荐:添加项目成员](#3-推荐:添加项目成员) +4. [可选:添加资源配额](#4-可选:添加资源配额) + +### 1. 命名新项目 + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 在**集群**页面上,转到要在其中创建项目的集群,然后单击 **Explore**。 +1. 单击**集群 > 项目/命名空间**。 +1. 单击**创建项目**。 +1. 输入**项目名称**。 + +### 2. 可选:选择 Pod 安全策略 + +此选项仅在 Pod 安全策略已创建时可用。有关说明,请参阅[创建 Pod 安全策略](../authentication-permissions-and-global-configuration/create-pod-security-policies.md)。 + +将 PSP 分配给项目将: + +- 覆盖集群的默认 PSP。 +- 将 PSP 应用于项目。 +- 将 PSP 应用到后续添加到项目中的命名空间。 + +### 3. 推荐:添加项目成员 + +使用**成员**为其他用户提供项目访问权限和角色。 + +默认情况下,你的用户会被添加为项目的 `Owner`(所有者)。 + +:::note 权限说明: + +- 如果用户分配到了项目的`所有者`或`成员`角色,用户会自动继承`命名空间创建`角色。然而,这个角色是 [Kubernetes ClusterRole](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#role-and-clusterrole),这表示角色的范围会延展到集群中的所有项目。因此,对于显式分配到了项目`所有者`或`成员`角色的用户来说,即使只有`只读`角色,这些用户也可以在分配给他们的其他项目中创建命名空间。 + +- 默认情况下,Rancher 的`项目成员`角色继承自 `Kubernetes-edit` 角色,而`项目所有者`角色继承自 `Kubernetes-admin` 角色。因此,`项目成员`和`项目所有者`角色都能管理命名空间,包括创建和删除命名空间。 + +- 选择`自定义`来立即创建自定义角色:[自定义项目角色](../authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/cluster-and-project-roles.md#自定义项目角色)。 + +::: + +要添加成员: + +1. 在**成员**选项卡中,单击**添加**。 +1. 在**选择成员**字段中,搜索要分配项目访问权限的用户或组。请注意,如果你启用了外部身份验证,则只能搜索组。 +1. 在**项目权限**中选择一个角色。如需更多信息,请参阅[项目角色文档](../authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/cluster-and-project-roles.md)。 + +### 4. 可选:添加资源配额 + +资源配额用于限制项目(及其命名空间)可以使用的资源。有关详细信息,请参阅[资源配额](projects-and-namespaces.md)。 + +要添加资源配额: + +1. 在**资源配额**选项卡中,单击**添加资源**。 +1. 选择一个**资源类型**。有关详细信息,请参阅[资源配额](projects-and-namespaces.md)。 +1. 输入**项目限制**和**命名空间默认限制**的值。 +1. **可选**:指定**容器默认资源限制**,这将应用于项目中启动的所有容器。如果资源配额设置了 CPU 或内存限制,则建议使用该参数。可以在单个命名空间或容器级别上覆盖它。有关详细信息,请参阅[容器默认资源限制](../../../pages-for-subheaders/manage-project-resource-quotas.md)。 +1. 单击**创建**。 + +**结果**:项目已创建。你可以从集群的**项目/命名空间**视图中查看它。 + +| 字段 | 描述 | +| ----------------------- | -------------------------------------------------------------------------------------------------------- | +| 项目限制 | 项目的总资源限制。 | +| 命名空间默认限制 | 每个命名空间的默认资源限制。此限制在创建时会沿用到项目中的每个命名空间。项目中所有命名空间的限制之和不应超过项目限制。 | \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/rotate-certificates.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/rotate-certificates.md new file mode 100644 index 00000000000..46a8c395e78 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/rotate-certificates.md @@ -0,0 +1,82 @@ +--- +title: 证书轮换 +weight: 2040 +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +:::caution + +轮换 Kubernetes 证书可能会导致集群在组件重启时暂时不可用。对于生产环境,建议在维护时段内执行此操作。 + +::: + +默认情况下,Kubernetes 集群需要证书,Rancher 启动的 Kubernetes 集群会自动为 Kubernetes 组件生成证书。在证书过期之前或被泄露后轮换证书非常重要。证书轮换后,Kubernetes 组件会自动重启。 + +可以为以下服务轮换证书: + + + + +- etcd +- kubelet(节点证书) +- kubelet(服务证书,如果[启用](https://rancher.com/docs/rke/latest/en/config-options/services/#kubelet-options)) +- kube-apiserver +- kube-proxy +- kube-scheduler +- kube-controller-manager + + + + +- admin +- api-server +- controller-manager +- scheduler +- rke2-controller +- rke2-server +- cloud-controller +- etcd +- auth-proxy +- kubelet +- kube-proxy + + + + +:::note + +如果你未轮换 webhook 证书,且证书用了一年后已经过期,请参阅此[页面](../../../troubleshooting/other-troubleshooting-tips/expired-webhook-certificate-rotation.md)。 + +::: + +### 证书轮换 + +Rancher 启动的 Kubernetes 集群能够通过 UI 轮换自动生成的证书。 + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 在**集群**页面上,转到要轮换证书的集群,然后单击 **⋮ > 轮换证书**。 +1. 选择要轮换的证书。 + + * 轮换所有服务证书(使用相同的 CA) + * 轮换单个服务,并从下拉菜单中选择其中一项服务。 + +1. 单击**保存**。 + +**结果**:将轮换所选证书,相关服务将重新启动以使用新证书。 + +### 补充说明 + + + + +虽然 RKE CLI 可以为 Kubernetes 集群组件使用自定义证书,但 Rancher 目前不允许在 Rancher 启动的 Kubernetes 集群中上传这些证书。 + + + + +在 RKE2 中,etcd 和 controlplane 节点都被视为相同的 `server`。因此,如果你轮换其中一个组件的服务证书,则两者的证书都会被轮换。证书只会针对指定的服务更改,但你会看到两个组件的节点都进入更新状态。你可能还会看到仅 Worker 节点进入更新状态。这是在证书更改后重启 Worker,以确保他们获得最新的客户端证书。 + + + diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/rotate-encryption-key.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/rotate-encryption-key.md new file mode 100644 index 00000000000..3c8a696d6a2 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-clusters/rotate-encryption-key.md @@ -0,0 +1,49 @@ +--- +title: 加密密钥轮换 +weight: 2043 +--- + +### RKE1 加密密钥轮换 + +1. 使用以下两个选项之一来启用加密密钥轮换: + + - 在 Rancher UI 中的 **Cluster Options > Advanced Options > Secrets Encryption** 下选择 `Enabled` 单选按钮: + + ![启用加密密钥轮换](/img/rke1-enable-secrets-encryption.png) + + - 或者,应用以下 YAML: + + ```yaml + rancher_kubernetes_engine_config: + services: + kube_api: + secrets_encryption_config: + enabled: true + ``` + +2. 在 Rancher UI 中轮换密钥: + + 2.1. 点击 **☰ > 集群管理**。 + + 2.2. 在所选集群旁边的屏幕最右侧选择 **⋮ > Rotate Encryption Keys**: + + ![加密密钥轮换](/img/rke1-encryption-key.png) + + + +### RKE2 加密密钥轮换 + +_**v2.6.7 新功能**_ + +> **重要提示**:加密密钥轮换默认启用,不能禁用。 + +要在 Rancher UI 中轮换密钥: + +1. 点击 **☰ > 集群管理**。 + +1. 在所选集群旁边的屏幕最右侧选择 **⋮ > Rotate Encryption Keys**: + + ![加密密钥轮换](/img/rke2-encryption-key.png) + + +> **注意**:有关 RKE2 密文加密配置的更多信息,请参阅 [RKE2 文档](https://docs.rke2.io/security/secrets_encryption/)。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-projects/add-users-to-projects.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-projects/add-users-to-projects.md new file mode 100644 index 00000000000..4995458ca33 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-projects/add-users-to-projects.md @@ -0,0 +1,63 @@ +--- +title: 添加项目成员 +weight: 2505 +--- + +如果你想为用户提供集群内 _特定_ 项目和资源的访问权限,请为用户分配项目成员资格。 + +你可以在创建项目时将成员添加到项目中,或将用户添加到现有项目中。 + +:::tip + +如果你需要为用户提供对集群内 _所有_ 项目的访问权限,请参见[添加集群成员](../authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/cluster-and-project-roles.md)。 + +::: + +### 将成员添加到新项目 + +你可以在创建项目时将成员添加到项目中(建议)。有关创建新项目的详细信息,请参阅[集群管理](../manage-clusters/projects-and-namespaces.md)。 + +### 将成员添加到现有项目 + +创建项目后,你可以将用户添加为项目成员,以便用户可以访问项目的资源: + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 在**集群**页面上,转到要添加项目成员的集群,然后单击 **Explore**。 +1. 单击**集群 > 项目/命名空间**。 +1. 转到要添加成员的项目,然后单击 **⋮ > 编辑配置**。 +1. 在**成员**选项卡中,单击**添加**。 +1. 搜索要添加到项目的用户或组。 + + 如果配置了外部身份验证: + + - 在你键入时,Rancher 会从你的外部身份验证源返回用户。 + + - 你可以在下拉菜单中添加组,而不是单个用户。下拉列表仅会列出你(登录用户)所在的组。 + + :::note + + 如果你以本地用户身份登录,外部用户不会显示在你的搜索结果中。 + + ::: + +1. 分配用户或组的**项目**角色。 + + [什么是项目角色?](../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` 角色。因此,`项目成员`和`项目所有者`角色都能管理命名空间,包括创建和删除命名空间。 + + - 对于`自定义`角色,你可以修改可分配的角色列表。 + + - 要将角色添加到列表中,请[添加自定义角色](../authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/custom-roles.md)。 + - 要从列表中删除角色,请[锁定/解锁角色](../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/current/how-to-guides/advanced-user-guides/manage-projects/ci-cd-pipelines.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-projects/ci-cd-pipelines.md new file mode 100644 index 00000000000..4b2252eb565 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-projects/ci-cd-pipelines.md @@ -0,0 +1,16 @@ +--- +title: Rancher CI/CD 流水线 +description: 使用 Rancher 的 CI/CD 流水线自动检出代码、运行构建或脚本、发布 Docker 镜像以及向用户部署软件 +weight: 4000 +--- +你可以使用 Rancher 与 GitHub 仓库集成,从而设置持续集成(CI)流水线。 + +配置 Rancher 和 GitHub 后,你可以部署运行 Jenkins 的容器来自动化执行流水线: + +- 将应用代码构建为镜像。 +- 验证构建。 +- 将构建的镜像部署到集群。 +- 运行单元测试。 +- 运行回归测试。 + +有关详细信息,请参阅[流水线](../../../pages-for-subheaders/pipelines.md)。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-projects/manage-namespaces.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-projects/manage-namespaces.md new file mode 100644 index 00000000000..9b7ce4edae6 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-projects/manage-namespaces.md @@ -0,0 +1,75 @@ +--- +title: 命名空间 +weight: 2520 +--- + +在 Rancher 中,你可以将项目进一步划分为多个[命名空间](https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/),项目是由物理集群支持的,而命名空间是项目中的虚拟集群。当项目和 `default` 命名空间不能满足你的需求时,你可以在项目中创建多个命名空间来隔离应用和资源。 + +你可以在项目层级分配资源,从而使项目中的每个命名空间可以使用这些资源,也可以单独给某个命名空间显式分配资源。 + +可以直接分配给命名空间的资源包括: + +- [工作负载](../../../pages-for-subheaders/workloads-and-pods.md) +- [负载均衡器/Ingress](../../../pages-for-subheaders/load-balancer-and-ingress-controller.md) +- [服务发现记录](../../new-user-guides/kubernetes-resources-setup/create-services.md) +- [持久卷声明](../../../pages-for-subheaders/create-kubernetes-persistent-storage.md) +- [证书](../../new-user-guides/kubernetes-resources-setup/encrypt-http-communication.md) +- [ConfigMap](../../new-user-guides/kubernetes-resources-setup/configmaps.md) +- [镜像仓库](../../new-user-guides/kubernetes-resources-setup/kubernetes-and-docker-registries.md) +- [密文](../../new-user-guides/kubernetes-resources-setup/secrets.md) + +为了在 vanilla Kubernetes 集群中管理权限,集群管理员要为每个命名空间配置基于角色的访问策略。Rancher 在项目级别上分配用户权限,项目中的命名空间会自动继承项目的权限。 + +:::note + +如果你使用 `kubectl`创建命名空间,由于 `kubectl` 不要求将新命名空间限定在你可以访问的项目内,因此你可能无法使用该命名空间。如果你的权限仅限于项目级别,则最好[通过 Rancher 创建命名空间](manage-namespaces.md),以确保你有权访问该命名空间。 + +::: + +### 创建命名空间 + +创建一个新的命名空间来隔离项目中的应用和资源。 + +:::tip + +使用可以分配给命名空间的项目资源(例如,[工作负载](../../new-user-guides/kubernetes-resources-setup/workloads-and-pods/deploy-workloads.md)、[证书](../../new-user-guides/kubernetes-resources-setup/encrypt-http-communication.md)、[ConfigMap](../../new-user-guides/kubernetes-resources-setup/configmaps.md) 等)时,你可以动态创建命名空间。 + +::: + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 在**集群**页面上,转到要在其中创建命名空间的集群,然后单击 **Explore**。 +1. 单击**集群 > 项目/命名空间**。 +1. 转到要添加命名空间的项目,并单击**创建命名空间**。或者,你也可以转到**不在项目内**以创建不与项目关联的命名空间。 + +1. **可选**:如果你的项目具有有效的[资源配额](../../../pages-for-subheaders/manage-project-resource-quotas.md),你可以覆盖默认资源**限制**(限制命名空间可以使用的资源)。 + +1. 输入**名称**,然后单击**创建**。 + +**结果**:已将命名空间添加到项目中。你可以开始将集群资源分配给命名空间。 + +### 将命名空间移动到另一个项目 + +在某些情况下(例如希望其他团队使用该应用时),集群管理员和成员可能需要将命名空间移动到另一个项目: + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 在**集群**页面上,转到需要移动命名空间的集群,然后单击 **Explore**。 +1. 单击**集群 > 项目/命名空间**。 +1. 转到要移动的命名空间,然后单击 **⋮ > 移动**。 + +1. 选择要移动到另一个项目的命名空间。然后单击**移动**。你可以同时移动多个命名空间。 + + :::note 注意事项: + + - 不要移动 `System` 项目中的命名空间。移动命名空间可能会对集群网络产生不利影响。 + - 你不能将命名空间移动到已配置[资源配额](../../../pages-for-subheaders/manage-project-resource-quotas.md)的项目中。 + - 如果你将命名空间从已设置配额的项目移动到未设置配额的项目,则会删除该命名空间的配额。 + +1. 为新命名空间选择一个新项目,然后单击**移动**。你也可以选择**无**,从而将命名空间从所有项目中移除。 + +**结果**:你的命名空间已移至其他项目(或从所有项目中移除)。如果命名空间绑定了项目资源,命名空间会释放这些资源,然后绑定新项目的资源。 + +### 编辑命名空间资源配额 + +你可以覆盖命名空间默认限制,从而为特定命名空间提供对更多(或更少)项目资源的访问权限: + +有关详细信息,请参阅[编辑命名空间资源配额](./manage-project-resource-quotas/override-default-limit-in-namespaces.md)。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-projects/manage-pod-security-policies.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-projects/manage-pod-security-policies.md new file mode 100644 index 00000000000..32c94c141ef --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-projects/manage-pod-security-policies.md @@ -0,0 +1,40 @@ +--- +title: Pod 安全策略 +weight: 5600 +--- + +:::note + +本文介绍的集群选项仅适用于 [Rancher 已在其中启动 Kubernetes 的集群](../../../pages-for-subheaders/launch-kubernetes-with-rancher.md)。 + +::: + +你可以在创建项目的时候设置 Pod 安全策略(PSP)。如果在创建项目期间没有为项目分配 PSP,你也随时可以将 PSP 分配给现有项目。 + +### 先决条件 + +- 在 Rancher 中创建 Pod 安全策略。在将默认 PSP 分配给现有项目之前,你必须有一个可分配的 PSP。有关说明,请参阅[创建 Pod 安全策略](../authentication-permissions-and-global-configuration/create-pod-security-policies.md)。 +- 将默认 Pod 安全策略分配给项目所属的集群。如果 PSP 还没有应用到集群,你无法将 PSP 分配给项目。有关详细信息,请参阅[将 pod 安全策略添加到集群](../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/current/how-to-guides/advanced-user-guides/manage-projects/manage-project-resource-quotas/about-project-resource-quotas.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-projects/manage-project-resource-quotas/about-project-resource-quotas.md new file mode 100644 index 00000000000..899fd7cc34e --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-projects/manage-project-resource-quotas/about-project-resource-quotas.md @@ -0,0 +1,59 @@ +--- +title: Rancher 项目中资源配额的工作原理 +weight: 1 +--- + +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 资源配额实现](/img/kubernetes-resource-quota.svg) + +和原生 Kubernetes 相比,Rancher 的资源配额有不同。在 Rancher 中,你可以把资源配额应用到项目层级,进而让项目的资源配额沿用到项目内的每一个命名空间,然后 Kubernetes 会使用原生的资源配额来强制执行你设置的限制。如果要更改特定命名空间的配额,你也可以覆盖设置。 + +项目配额包括你在创建或编辑集群时设置的两个限制: + + +- **项目限制**: + + 配置了项目中所有命名空间共享的每个指定资源的总限制。 + +- **命名空间默认限制**: + + 配置了每个命名空间对每个指定资源的默认配额。 + 如果项目中的命名空间配置没有被覆盖,那么此限制会自动绑定到命名空间并强制执行。 + + +在下图中,Rancher 管理员想使用资源配额来为项目中的每个命名空间(`命名空间 1-4`)设置相同的 CPU 和内存限制。在 Rancher 中,管理员可以为项目设置资源配额(`项目资源配额`),而不需要为命名空间单独进行设置。此配额包括整个项目(`项目限制`)和单个命名空间(`命名空间默认限制`)的资源限制。然后,Rancher 会将`命名空间默认限制`的配额沿用到每个命名空间(`命名空间资源配额`)。 + +Rancher:资源配额沿用到每个命名空间 +![Rancher 资源配额实现](/img/rancher-resource-quota.png) + +以下介绍在 Rancher UI **_中_** 创建的命名空间的更细微的功能。如果你删除了项目级别的资源配额,无论命名空间层级是否有自定义的资源配额,项目内的所有命名空间也会移除这个资源配额。在项目层级修改已有的命名空间默认资源配额,不会影响命名空间内的资源配额,修改后的项目层级资源配额只会对以后新建的命名空间生效。要修改多个现有命名空间的默认限制,你可以在项目层级删除该限制,然后再使用新的默认值重新创建配额。这种方式会将新的默认值应用于项目中的所有现有命名空间。 + +在项目中创建命名空间之前,Rancher 会使用默认限制和覆盖限制来对比项目内的可用资源和请求资源。 +如果请求的资源超过了项目中这些资源的剩余容量,Rancher 将为命名空间分配该资源的剩余容量。 + +但是,在 Rancher 的 UI **_外_** 创建的命名空间的处理方法则不一样。对于通过 `kubectl` 创建的命名空间,如果请求的资源量多余项目内的余量,Rancher 会分配一个数值为 **0** 的资源配额。 + +要使用 `kubectl` 在现有项目中创建命名空间,请使用 `field.cattle.io/projectId` 注释。要覆盖默认的请求配额限制,请使用 `field.cattle.io/resourceQuota` 注释。 +``` +apiVersion: v1 +kind: Namespace +metadata: + annotations: + field.cattle.io/projectId: [your-cluster-ID]:[your-project-ID] + field.cattle.io/resourceQuota: '{"limit":{"limitsCpu":"100m", "limitsMemory":"100Mi", "configMaps": "50"}}' + name: my-ns +``` + +下表对比了 Rancher 和 Kubernetes 资源配额的主要区别: + +| Rancher 资源配额 | Kubernetes 资源配额 | +| ---------------------------------------------------------- | -------------------------------------------------------- | +| 应用于项目和命名空间。 | 仅应用于命名空间。 | +| 为项目中的所有命名空间创建资源池。 | 将静态资源限制应用到单独的命名空间。 | +| 通过沿用的模式,将资源配额应用于各个命名空间。 | 仅应用于指定的命名空间。 | diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/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/current/how-to-guides/advanced-user-guides/manage-projects/manage-project-resource-quotas/override-default-limit-in-namespaces.md new file mode 100644 index 00000000000..1278548287e --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-projects/manage-project-resource-quotas/override-default-limit-in-namespaces.md @@ -0,0 +1,34 @@ +--- +title: 覆盖命名空间的默认限制 +weight: 2 +--- + +**命名空间默认限制**会在创建时从项目沿用到每个命名空间。但在某些情况下,你可能需要增加或减少特定命名空间的配额。在这种情况下,你可以通过编辑命名空间来覆盖默认限制。 + +在下图中,Rancher 管理员的项目有一个已生效的资源配额。但是,管理员想要覆盖 `Namespace 3` 的命名空间限制,以便让该命名空间使用更多资源。因此,管理员[提高了 `Namespace 3` 的命名空间限制](../../manage-clusters/projects-and-namespaces.md),以便命名空间可以访问更多资源。 + +命名空间默认限制覆盖 +![命名空间默认限制覆盖](/img/rancher-resource-quota-override.svg) + +有关详细信息,请参阅[如何编辑命名空间资源配额](../../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/current/how-to-guides/advanced-user-guides/manage-projects/manage-project-resource-quotas/resource-quota-types.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-projects/manage-project-resource-quotas/resource-quota-types.md new file mode 100644 index 00000000000..eba71bea6a0 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-projects/manage-project-resource-quotas/resource-quota-types.md @@ -0,0 +1,28 @@ +--- +title: 资源配额类型参考 +weight: 4 +--- + +创建资源配额相当于配置项目可用的资源池。你可以为以下资源类型设置资源配额: + +| 资源类型 | 描述 | +| ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 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/current/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/current/how-to-guides/advanced-user-guides/manage-projects/manage-project-resource-quotas/set-container-default-resource-limits.md new file mode 100644 index 00000000000..0d5119d4302 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/manage-projects/manage-project-resource-quotas/set-container-default-resource-limits.md @@ -0,0 +1,40 @@ +--- +title: 设置容器默认资源限制 +weight: 3 +--- + +在设置资源配额时,如果你在项目或命名空间上设置了任何与 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 量(以毫核为单位)。 | +| 内存限制 | 分配给容器的最大内存量(以字节为单位)。 | +| 内存预留 | 保留给容器的最小内存量(以字节为单位)。 | \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/monitoring-alerting-guides/create-persistent-grafana-dashboard.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/monitoring-alerting-guides/create-persistent-grafana-dashboard.md new file mode 100644 index 00000000000..d4c0f20e691 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/monitoring-alerting-guides/create-persistent-grafana-dashboard.md @@ -0,0 +1,152 @@ +--- +title: 持久化 Grafana 仪表板 +weight: 6 +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +要在重启 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 角色](../../../explanations/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/current/how-to-guides/advanced-user-guides/monitoring-alerting-guides/customize-grafana-dashboard.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/monitoring-alerting-guides/customize-grafana-dashboard.md new file mode 100644 index 00000000000..1be161297b6 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/monitoring-alerting-guides/customize-grafana-dashboard.md @@ -0,0 +1,40 @@ +--- +title: 自定义 Grafana 仪表板 +weight: 5 +--- + +在本文中,你将学习通过自定义 Grafana 仪表板来显示特定容器的指标。 + +### 先决条件 + +在自定义 Grafana 仪表板之前,你必须先安装 `rancher-monitoring` 应用。 + +要查看指向外部监控 UI(包括 Grafana 仪表板)的链接,你至少需要一个 [project-member 角色](../../../explanations/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/panel-editor/) +- [向仪表板添加面板的 Grafana 文档](https://grafana.com/docs/grafana/latest/panels/add-a-panel/) \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/monitoring-alerting-guides/debug-high-memory-usage.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/monitoring-alerting-guides/debug-high-memory-usage.md new file mode 100644 index 00000000000..da67214aad7 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/monitoring-alerting-guides/debug-high-memory-usage.md @@ -0,0 +1,20 @@ +--- +title: 调试高内存用量 +weight: 8 +--- + +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/current/how-to-guides/advanced-user-guides/monitoring-alerting-guides/enable-monitoring.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/monitoring-alerting-guides/enable-monitoring.md new file mode 100644 index 00000000000..9843c97f41a --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/monitoring-alerting-guides/enable-monitoring.md @@ -0,0 +1,75 @@ +--- +title: 启用 Monitoring +weight: 1 +--- + +[管理员](../authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/global-permissions.md)或[集群所有者](../authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/cluster-and-project-roles.md#集群角色)可以通过配置 Rancher 来部署 Prometheus,从而监控 Kubernetes 集群。 + +本文介绍如何使用新的 monitoring 应用在集群内启用监控和告警。 + +不论是否使用 SSL,你都可以启用 monitoring。 + +# 要求 + +- 确保在每个节点上允许端口 9796 上的流量,因为 Prometheus 将从这里抓取指标。 +- 确保你的集群满足资源要求。集群应至少有 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 片段如下所示: + +```yaml +rkeEtcd: + clients: + useLocalhost: true +``` + +:::note + +如果要设置 Alertmanager、Grafana 或 Ingress,必须通过 Helm chart 部署上的设置来完成。在部署之外创建 Ingress 可能会产生问题。 + +::: + +# 设置资源限制和请求 + +安装 `rancher-monitoring` 时可以配置资源请求和限制。要从 Rancher UI 配置 Prometheus 资源,请单击左上角的**应用 & 应用市场 > 监控**。 + +有关默认限制的更多信息,请参阅[此页面](../../../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. 单击**应用 & 应用市场 > Chart**。 +1. 单击 **Monitoring**。 +1. 根据你是否已安装 Monitoring,单击**安装**或**更新**。 +1. 选中**在安装前自定义 Helm 选项**,然后单击**下一步**。 +1. 单击 **Alerting**。 +1. 在**补充密文**字段中,添加之前创建的密文。 + +**结果**:Monitoring 应用已部署到 `cattle-monitoring-system` 命名空间中。 + +[创建接收器](../monitoring-v2-configuration-guides/advanced-configuration/alertmanager.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/current/how-to-guides/advanced-user-guides/monitoring-alerting-guides/migrate-to-rancher-v2.5+-monitoring.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/monitoring-alerting-guides/migrate-to-rancher-v2.5+-monitoring.md new file mode 100644 index 00000000000..aa9de47c338 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/monitoring-alerting-guides/migrate-to-rancher-v2.5+-monitoring.md @@ -0,0 +1,130 @@ +--- +title: 迁移到 Rancher 2.5+ Monitoring +weight: 9 +--- + +如果你在 Rancher 2.5 之前启用了 Monitoring、Alerting 或 Notifiers,则无法自动升级到新的监控/告警解决方案。在 Cluster Explorer 中部署新的监控解决方案之前,你需要禁用并删除整个集群所有项目中的所有自定义告警、通知器和监控安装。 + + +## Rancher 2.5 之前的 Monitoring + +从 2.2.0 开始,旧版 Rancher UI 中的全局视图允许用户在集群内独立启用 Monitoring & Alerting V1(均由 [Prometheus Operator](https://github.com/prometheus-operator/prometheus-operator) 提供支持)。 + +启用 Monitoring 后,Monitoring V1 会将 [Prometheus](https://prometheus.io/) 和 [Grafana](https://grafana.com/docs/grafana/latest/getting-started/what-is-grafana/) 部署到集群上,从而监控集群节点、Kubernetes 组件和软件部署的进程状态,并创建自定义仪表板来简化指标的可视化。 + +Monitoring V1 可以在集群级别和项目级别进行配置,并且会自动抓取 Rancher 集群上部署为应用的某些工作负载。 + +如果启用了 Alerts 或 Notifiers,Alerting V1 将 [Prometheus Alertmanager](https://prometheus.io/docs/alerting/latest/alertmanager/) 和一组 Rancher 控制器部署到集群上,允许用户定义告警并配置电子邮件、Slack、PagerDuty 等告警通知。用户可以根据需要监控的内容(例如系统服务、资源、CIS 扫描等)创建不同类型的告警。但是,只有在启用 Monitoring V1 时才能创建基于 PromQL 表达式的告警。 + +## 通过 Rancher 2.5 中的 Cluster Explorer 进行监控和告警 + +从 2.5.0 开始,Rancher 的 Cluster Explorer 允许用户在集群内同时启用 Monitoring & Alerting V2(均由 [Prometheus Operator](https://github.com/prometheus-operator/prometheus-operator) 提供支持)。 + +与 Monitoring & Alerting V1 不同,现在这两个功能都打包在[此处](https://github.com/rancher/charts/blob/main/charts/rancher-monitoring)的单个 Helm Chart 中。此 Chart 和可配置字段与 Prometheus 社区 Helm Chart [kube-prometheus-stack](https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack) 非常匹配,与上游 Chart 的任何偏差都可以在 [CHANGELOG.md](https://github.com/rancher/charts/blob/main/charts/rancher-monitoring/CHANGELOG.md) 中找到。 + +Monitoring V2 只能在集群级别进行配置。不再支持项目级别的监控和告警。 + +有关如何配置 Monitoring & Alerting V2 的更多信息,请参阅[此页面](../../../pages-for-subheaders/monitoring-v2-configuration-guides.md)。 + +## RBAC 的更改 + +默认情况下,项目所有者和成员不再可以访问 Grafana 或 Prometheus。如果只读用户有权访问 Grafana,他们将能够查看任何命名空间的数据。对于 Kiali,任何用户都可以在任何命名空间中编辑不属于该用户的东西。 + +有关 `rancher-monitoring` 中 RBAC 的更多信息,请参阅[此页面](../../../explanations/integrations-in-rancher/monitoring-and-alerting/rbac-for-monitoring.md)。 + +## 从 Monitoring V1 迁移到 Monitoring V2 + +虽然没有可用的自动迁移方案,但你可以手动将在 Monitoring V1 中创建的自定义 Grafana 仪表板和告警迁移到 Monitoring V2。 + +在安装 Monitoring V2 之前,你需要完全卸载 Monitoring V1。要卸载 Monitoring V1: + +* 删除所有集群和项目特定的告警和告警组。 +* 删除所有通知。 +* 禁用**集群 > 项目 > 工具 > Monitoring** 下的所有项目监控安装。 +* 确保所有项目中的所有项目监控应用都已删除,并且在几分钟后不会重新创建。 +* 在**集群 > 工具 > Monitoring** 下禁用集群监控安装。 +* 确保 System 项目中的 cluster-monitoring 应用和 monitoring-operator 应用已被删除,并且在几分钟后不会重新创建。 + +#### RKE 模板集群 + +要避免重新启用 Monitoring V1,请通过修改 RKE 模板 yaml 来禁用监控以及后续的 RKE 模板修订: + +```yaml +enable_cluster_alerting: false +enable_cluster_monitoring: false +``` + +#### 迁移 Grafana 仪表板 + +你可以将在 Monitoring V1 中添加到 Grafana 的仪表板迁移到 Monitoring V2。在 Monitoring V1 中,你可以这样导出现有仪表板: + +* 登录 Grafana +* 导航到要导出的仪表板 +* 转到仪表板设置 +* 复制 [JSON 模型](https://grafana.com/docs/grafana/latest/dashboards/json-model/) + +在 JSON 模型中,将所有 `datasource` 字段从 `RANCHER_MONITORING` 更改为 `Prometheus`。你可以将所有出现的 `"datasource": "RANCHER_MONITORING"` 替换为 `"datasource": "Prometheus"`。 + +如果 Grafana 由持久卷支持,你可以将此 JSON 模型[导入](https://grafana.com/docs/grafana/latest/dashboards/export-import/)到 Monitoring V2 Grafana UI 中。 +建议使用 `cattle-dashboards` 命名空间具有 `grafana_dashboard: "1"` 标签的 ConfigMap,来为 Grafana 提供仪表板: + +```yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: custom-dashboard + namespace: cattle-dashboards + labels: + grafana_dashboard: "1" +data: + custom-dashboard.json: | + { + ... + } +``` + +创建此 ConfigMap 后,仪表板将自动添加到 Grafana。 + +### 迁移告警 + +只有基于表达式的告警能直接迁移到 Monitoring V2。幸运的是,基于事件的告警可以设置为对系统组件、节点或工作负载事件的告警,而 Monitoring V2 中的告警已覆盖这些告警。所以没有必要迁移它们。 + +如果要迁移以下表达式告警: + +![](/img/monitoring/migration/alert_2.4_to_2.5_source.png) + +你必须在任意命名空间中创建如下 PrometheusRule 配置: + +```yaml +apiVersion: monitoring.coreos.com/v1 +kind: PrometheusRule +metadata: + name: custom-rules + namespace: default +spec: + groups: + - name: custom.rules + rules: + - alert: Custom Expression Alert + expr: prometheus_query > 5 + for: 5m + labels: + severity: critical + annotations: + summary: "The result of prometheus_query has been larger than 5 for 5m. Current value {{ $value }}" +``` + +或通过 Cluster Explorer 添加 Prometheus Rule: + +![](/img/monitoring/migration/alert_2.4_to_2.5_target.png) + +有关如何在 Monitoring V2 中配置 PrometheusRules 的更多详细信息,请参阅 [Monitoring 配置](../../../pages-for-subheaders/monitoring-v2-configuration-guides.md)。 + +### 迁移 Notifiers + +Monitoring V1 中没有直接对应 Notifiers 的工作方式。相反,你必须使用 Monitoring V2 中的路由和接收器复制所需的设置。 + + +### 为 RKE 模板用户迁移 + +如果集群是使用 RKE 模板管理的,你需要在后续的 RKE 模板修订版中禁用 Monitoring,以防止重新启用旧版 Monitoring。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/monitoring-alerting-guides/prometheus-federator-guides/customize-grafana-dashboards.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/monitoring-alerting-guides/prometheus-federator-guides/customize-grafana-dashboards.md new file mode 100644 index 00000000000..2c99255a0d5 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/monitoring-alerting-guides/prometheus-federator-guides/customize-grafana-dashboards.md @@ -0,0 +1,8 @@ +--- +title: 自定义 Grafana 仪表板 +weight: 3 +--- + +无论是用于 rancher-monitoring 还是 Prometheus Federator,Grafana 仪表板的定制方式都是相同的。 + +有关说明,请参阅[此页面](../customize-grafana-dashboard.md)。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/monitoring-alerting-guides/prometheus-federator-guides/enable-prometheus-federator.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/monitoring-alerting-guides/prometheus-federator-guides/enable-prometheus-federator.md new file mode 100644 index 00000000000..3e0f18c5cd2 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/monitoring-alerting-guides/prometheus-federator-guides/enable-prometheus-federator.md @@ -0,0 +1,83 @@ +--- +title: 启用 Prometheus Federator +weight: 1 +--- + + +## 要求 + +默认情况下,Prometheus Federator 已配置并旨在与 [rancher-monitoring](https://rancher.com/docs/rancher/v2.6/en/monitoring-alerting/) 一起部署。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 项目中(或者位于一个锁定并能访问集群中其他项目的项目中) + +![选择项目/命名空间](/img/install-in-system-project.png) + +Prometheus Operator 的安全模型有一定的要求,即希望部署它的命名空间(例如,`cattle-monitoring-system`)对除集群管理员之外的任何用户都只有有限的访问权限,从而避免通过 Pod 内执行(例如正在执行的 Helm 操作的 Job)来提升权限。此外,如果将 Prometheus Federator 和所有 Project Prometheus 堆栈都部署到 System 项目中,即使网络策略是通过项目网络隔离定义的,每个 Project Prometheus 都依然能够在所有项目中抓取工作负载。它还为项目所有者、项目成员和其他用户提供有限的访问权限,从而确保这些用户无法访问他们不应访问的数据(例如,在 pod 中执行,在项目外部抓取命名空间数据等)。 + +1. 打开 `System` 项目以检查你的命名空间: + + 在 Rancher UI 中单击 **Cluster > Projects/Namespaces**。这将显示 `System` 项目中的所有命名空间: + + ![选择项目/命名空间](/img/cattle-monitoring-system.png) + +1. 如果你在 `cattle-monitoring-system` 命名空间中已经安装了一个 Monitoring V2,但该命名空间不在 `System` 项目中,你可以将 `cattle- monitoring-system` 命名空间移动到 `System` 项目或另一个访问受限的项目中。为此,你有以下两种方法: + + - 将命名空间拖放到 `System` 项目。 + - 选择命名空间右侧的 **⋮**,点击 **Move**,然后从 **Target Project** 下拉列表中选择 `System`: + + ![移至新项目](/img/move-to-new-project.png) + +### 将 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-项目中(或者位于一个锁定并能访问集群中其他项目的项目中))的另一个项目覆盖它。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/monitoring-alerting-guides/prometheus-federator-guides/uninstall-prometheus-federator.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/monitoring-alerting-guides/prometheus-federator-guides/uninstall-prometheus-federator.md new file mode 100644 index 00000000000..d84e4b80669 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/monitoring-alerting-guides/prometheus-federator-guides/uninstall-prometheus-federator.md @@ -0,0 +1,14 @@ +--- +title: 卸载 Prometheus Federator +weight: 2 +--- + +1. 点击 **☰ > 集群管理**。 +1. 选择你创建的集群,并点击 **Explore**。 +1. 在左侧导航栏中,点击**应用 & 应用市场**。 +1. 点击**已安装的应用**。 +1. 转到 `cattle-monitoring-system` 命名空间并选中 `rancher-monitoring-crd` 和 `rancher-monitoring`。 +1. 单击**删除**。 +1. 确认**删除**。 + +**结果**:已卸载 `prometheus-federator`。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/monitoring-alerting-guides/set-up-monitoring-for-workloads.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/monitoring-alerting-guides/set-up-monitoring-for-workloads.md new file mode 100644 index 00000000000..b086c8146bf --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/monitoring-alerting-guides/set-up-monitoring-for-workloads.md @@ -0,0 +1,29 @@ +--- +title: 为工作负载设置 Monitoring +weight: 4 +--- + + +如果你只需要工作负载的 CPU 和内存时间序列,则不需要部署 ServiceMonitor 或 PodMonitor,因为 Monitoring 应用默认会收集资源使用情况的指标数据。 + +设置工作负载监控的步骤取决于你是否需要基本指标(例如工作负载的 CPU 和内存),或者是否需要从工作负载中抓取自定义指标。 + +如果你只需要工作负载的 CPU 和内存时间序列,则不需要部署 ServiceMonitor 或 PodMonitor,因为 Monitoring 应用默认会收集资源使用情况的指标数据。资源使用的时间序列数据在 Prometheus 的本地时间序列数据库中。 + +Grafana 显示聚合数据,你也可以使用 PromQL 查询来查看单个工作负载的数据。进行 PromQL 查询后,你可以在 Prometheus UI 中单独执行查询并查看可视化的时间序列,你也可以使用查询来自定义显示工作负载指标的 Grafana 仪表板。有关工作负载指标的 PromQL 查询示例,请参阅[本节](https://rancher.com/docs/rancher/v2.6/en/monitoring-alerting/expression/#workload-metrics)。 + +要为你的工作负载设置自定义指标,你需要设置一个 Exporter 并创建一个新的 ServiceMonitor 自定义资源,从而将 Prometheus 配置为从 Exporter 中抓取指标。 + +### 显示工作负载的 CPU 和内存指标 + +默认情况下,Monitoring 应用会抓取 CPU 和内存指标。 + +要获取特定工作负载的细粒度信息,你可以自定义 Grafana 仪表板来显示该工作负载的指标。 + +### 设置 CPU 和内存之外的指标 + +对于自定义指标,你需要使用 Prometheus 支持的格式来公开应用上的指标。 + +我们建议你创建一个新的 ServiceMonitor 自定义资源。创建此资源时,Prometheus 自定义资源将自动更新,以便将新的自定义指标端点包含在抓取配置中。然后 Prometheus 会开始从端点抓取指标。 + +你还可以创建 PodMonitor 来公开自定义指标端点,但 ServiceMonitor 更适合大多数用例。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/monitoring-alerting-guides/uninstall-monitoring.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/monitoring-alerting-guides/uninstall-monitoring.md new file mode 100644 index 00000000000..a375550e478 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/monitoring-alerting-guides/uninstall-monitoring.md @@ -0,0 +1,20 @@ +--- +title: 卸载 Monitoring +weight: 2 +--- + +1. 点击 **☰ > 集群管理**。 +1. 选择你创建的集群,并点击 **Explore**。 +1. 在左侧导航栏中,点击**应用 & 应用市场**。 +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/current/how-to-guides/advanced-user-guides/monitoring-v2-configuration-guides/advanced-configuration/alertmanager.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/monitoring-v2-configuration-guides/advanced-configuration/alertmanager.md new file mode 100644 index 00000000000..1560c282712 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/monitoring-v2-configuration-guides/advanced-configuration/alertmanager.md @@ -0,0 +1,44 @@ +--- +title: Alertmanager 配置 +weight: 1 +--- + +通常情况下,你不需要直接编辑 Alertmanager 自定义资源。对于大多数用例,只需要编辑接收器和路由即可配置通知。 + +当路由和接收器更新时,Monitoring 应用将自动更新 Alertmanager 自定义资源来与这些更改保持一致。 + +:::note + +本节参考假设你已经熟悉 Monitoring 组件的协同工作方式。有关 Alertmanager 的详细信息,请参阅[本节](../../../../explanations/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/current/how-to-guides/advanced-user-guides/monitoring-v2-configuration-guides/advanced-configuration/prometheus.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/monitoring-v2-configuration-guides/advanced-configuration/prometheus.md new file mode 100644 index 00000000000..58e0fedfaca --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/monitoring-v2-configuration-guides/advanced-configuration/prometheus.md @@ -0,0 +1,20 @@ +--- +title: Prometheus 配置 +weight: 1 +--- + +通常情况下,你不需要直接编辑 Prometheus 自定义资源,因为 Monitoring 应用会根据 ServiceMonitor 和 PodMonitor 的更改自动更新资源。 + +:::note + +本节参考假设你已经熟悉 Monitoring 组件的协同工作方式。有关详细信息,请参阅[本节](../../../../explanations/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/current/how-to-guides/advanced-user-guides/monitoring-v2-configuration-guides/advanced-configuration/prometheusrules.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/monitoring-v2-configuration-guides/advanced-configuration/prometheusrules.md new file mode 100644 index 00000000000..d26affe2fe7 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/advanced-user-guides/monitoring-v2-configuration-guides/advanced-configuration/prometheusrules.md @@ -0,0 +1,81 @@ +--- +title: 配置 PrometheusRule +weight: 3 +--- + +PrometheusRule 定义了一组 Prometheus 告警和/或记录规则。 + +:::note + +本节参考假设你已经熟悉 Monitoring 组件的协同工作方式。有关详细信息,请参阅[本节](../../../../explanations/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 表达式示例](../../../../explanations/integrations-in-rancher/monitoring-and-alerting/promql-expressions.md)。 | +| 标签 | 为每个告警添加或覆盖的标签。 | +| 严重程度 | 启用后,标签​​会附加到告警或记录中,这些标签通过严重程度来标识告警/记录。 | +| 严重标签值 | 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 表达式示例](../../../../explanations/integrations-in-rancher/monitoring-and-alerting/promql-expressions.md)。 | +| 标签 | 在存储结果之前要添加或覆盖的标签。 | diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/back-up-docker-installed-rancher.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/back-up-docker-installed-rancher.md new file mode 100644 index 00000000000..155429cf2ce --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/back-up-docker-installed-rancher.md @@ -0,0 +1,71 @@ +--- +title: 备份 Docker 安装的 Rancher +shortTitle: 备份 +weight: 3 +--- + +成功使用 Docker 安装 Rancher 后,我们建议你定期创建备份。最近创建的备份能让你在意外灾难发生后快速进行恢复。 + +## 在你开始前 + +在创建备份的过程中,你将输入一系列命令。请使用环境中的数据替换占位符。占位符用尖括号和大写字母(如 ``)表示。以下是带有占位符的命令示例: + +``` +docker run --volumes-from rancher-data- -v $PWD:/backup busybox tar pzcvf /backup/rancher-data-backup--.tar.gz /var/lib/rancher +``` + +在该命令中,`` 是数据容器和备份创建日期的占位符(例如,`9-27-18`)。 + +请交叉参考下方的图片和表格,了解获取此占位符数据的方法。在开始[以下步骤](#创建备份)之前,请记下或复制这些信息。 + +终端 docker ps 命令,显示如何找到 <RANCHER_CONTAINER_TAG><RANCHER_CONTAINER_NAME> + +![占位符参考](/img/placeholder-ref.png) + +| 占位符 | 示例 | 描述 | +| -------------------------- | -------------------------- | --------------------------------------------------------- | +| `` | `v2.0.5` | 首次安装拉取的 rancher/rancher 镜像。 | +| `` | `festive_mestorf` | 你的 Rancher 容器的名称。 | +| `` | `v2.0.5` | 你为其创建备份的 Rancher 版本。 | +| `` | `9-27-18` | 数据容器或备份的创建日期。 | +
+ +可以通过远程连接登录到 Rancher Server 所在的主机并输入命令 `docker ps` 以查看正在运行的容器,从而获得 `` 和 ``。你还可以运行 `docker ps -a` 命令查看停止了的容器。在创建备份期间,你随时可以运行这些命令来获得帮助。 + +## 创建备份 + +此步骤将创建一个备份文件。如果 Rancher 遇到灾难情况,你可以使用该备份文件进行还原。 + + +1. 使用远程终端连接,登录到运行 Rancher Server 的节点。 + +1. 停止当前运行 Rancher Server 的容器。将 `` 替换为你的 Rancher 容器的名称: + + ``` + docker stop + ``` +1. 运行以下命令,从刚才停止的 Rancher 容器创建一个数据容器。请替换命令中的占位符: + + ``` + docker create --volumes-from --name rancher-data- rancher/rancher: + ``` + +1. 从你刚刚创建的数据容器(rancher-data-<DATE>)中,创建一个备份 tar 包(rancher-data-backup-<RANCHER_VERSION>-<DATE>.tar.gz)。替换占位符来运行以下命令: + + ``` + docker run --volumes-from rancher-data- -v $PWD:/backup:z busybox tar pzcvf /backup/rancher-data-backup--.tar.gz /var/lib/rancher + ``` + + **步骤结果**:屏幕上将运行命令流。 + +1. 输入 `ls` 命令,确认备份压缩包已创建成功。压缩包的名称格式类似 `rancher-data-backup--.tar.gz`。 + +1. 将备份压缩包移动到 Rancher Server 外的安全位置。然后从 Rancher Server 中删除 `rancher-data-` 容器。 + +1. 重启 Rancher Server。将 `` 替换为 Rancher 容器的名称: + + ``` + docker start + ``` + +**结果**:创建了 Rancher Server 数据的备份压缩包。如果你需要恢复备份数据,请参见[恢复备份:Docker 安装](restore-docker-installed-rancher.md)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/back-up-rancher-launched-kubernetes-clusters.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/back-up-rancher-launched-kubernetes-clusters.md new file mode 100644 index 00000000000..ce506b54175 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/back-up-rancher-launched-kubernetes-clusters.md @@ -0,0 +1,152 @@ +--- +title: 备份集群 +weight: 2045 +--- + +在 Rancher UI 中,你可以轻松备份和恢复 [Rancher 启动的 Kubernetes 集群](../../../pages-for-subheaders/launch-kubernetes-with-rancher.md)的 etcd。 + +Rancher 建议为所有生产集群配置定期 `etcd` 快照。此外,你还可以轻松创建单次快照。 + +etcd 数据库的快照会保存在 [etcd 节点](#本地备份目标)或 [S3 兼容目标](#s3-备份目标)上。配置 S3 的好处是,如果所有 etcd 节点都丢失了,你的快照会保存到远端并能用于恢复集群。 + +# 快照工作原理 + +### 快照组件 + +Rancher 创建快照时,快照里包括三个组件: + +- etcd 中的集群数据 +- Kubernetes 版本 +- `cluster.yml` 形式的集群配置 + +由于 Kubernetes 版本现在包含在快照中,因此你可以将集群恢复到原本的 Kubernetes 版本。 + +如果你需要使用快照恢复集群,快照的多个组件允许你选择: + +- **仅恢复 etcd 内容**:类似于在 Rancher v2.4.0 之前版本中的使用快照恢复。 +- **恢复 etcd 和 Kubernetes 版本**:如果 Kubernetes 升级导致集群失败,并且你没有更改任何集群配置,则应使用此选项。 +- **恢复 etcd、Kubernetes 版本和集群配置**:如果你在升级时同时更改了 Kubernetes 版本和集群配置,则应使用此选项。 + +始终建议在升级之前创建一个快照。 + +### 从 etcd 节点生成快照 + +集群中的每个 etcd 节点都会检查 etcd 集群的健康状况。如果节点报告 etcd 集群是健康的,则会从中创建一个快照,并可选择上传到 S3。 + +快照存储在 `/opt/rke/etcd-snapshots` 中。如果该目录在节点上配置为共享挂载,它将被覆盖。由于所有 etcd 节点都会上传快照并保留最后一个,因此 S3 上始终会保留最后一个上传的节点的快照。 + +在存在多个 etcd 节点的情况下,任何快照都是在集群健康检查通过后创建的,因此这些快照可以认为是 etcd 集群中数据的有效快照。 + +### 快照命名规则 + +快照的名称是自动生成的。在使用 RKE CLI 创建一次性快照时,你可以使用 `--name` 选项来指定快照的名称。 + +Rancher 在创建 RKE 集群的快照时,快照名称是基于快照创建类型(手动快照或定期快照)和目标(快照是保存在本地还是上传到 S3)决定的。命名规则如下: + +- `m` 代表手动 +- `r` 代表定期 +- `l` 代表本地 +- `s` 代表 S3 + +快照名称示例如下: + +- c-9dmxz-rl-8b2cx +- c-9dmxz-ml-kr56m +- c-9dmxz-ms-t6bjb +- c-9dmxz-rs-8gxc8 + +### 从快照恢复的工作原理 + +在恢复时会发生以下过程: + +1. 如果配置了 S3,则从 S3 检索快照。 +2. 如果快照压缩了,则将快照解压缩。 +3. 集群中的一个 etcd 节点会将该快照文件提供给其他节点。 +4. 其他 etcd 节点会下载快照并验证校验和,以便都能使用相同的快照进行恢复。 +5. 集群已恢复,恢复后的操作将在集群中完成。 + +# 配置定期快照 + +选择创建定期快照的频率以及要保留的快照数量。时间的单位是小时。用户可以使用时间戳快照进行时间点恢复。 + +默认情况下,[Rancher 启动的 Kubernetes 集群](../../../pages-for-subheaders/launch-kubernetes-with-rancher.md)会配置为创建定期快照(保存到本地磁盘)。为防止本地磁盘故障,建议使用 [S3 目标](#s3-备份目标)或复制磁盘上的路径。 + +在集群配置或编辑集群期间,可以在**集群选项**的高级部分中找到快照的配置。点击**显示高级选项**。 + +在集群的**高级选项**中可以配置以下选项: + +| 选项 | 描述 | 默认值 | +| --- | ---| --- | +| etcd 快照备份目标 | 选择要保存快照的位置。可以是本地或 S3 | 本地 | +| 启用定期 etcd 快照 | 启用/禁用定期快照 | 是 | +| 定期 etcd 快照的创建周期 | 定期快照之间的间隔(以小时为单位) | 12 小时 | +| 定期 etcd 快照的保留数量 | 要保留的快照数量 | 6 | + +# 单次快照 + +除了定期快照之外,你可能还想创建“一次性”快照。例如,在升级集群的 Kubernetes 版本之前,最好备份集群的状态以防止升级失败。 + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 在**集群**页面上,导航到要在其中创建一次性快照的集群。 +1. 单击 **⋮ > 拍摄快照**。 + +**结果**:根据你的[快照备份目标](#快照备份目标)创建一次性快照,并将其保存在选定的备份目标中。 + +# 快照备份目标 + +Rancher 支持两种不同的备份目标: + +* [本地目标](#本地备份目标) +* [S3 目标](#s3-备份目标) + +### 本地备份目标 + +默认情况下会选择 `local` 备份目标。此选项的好处是不需要进行外部配置。快照会在本地自动保存到 [Rancher 启动的 Kubernetes 集群](../../../pages-for-subheaders/launch-kubernetes-with-rancher.md)中 etcd 节点的 `/opt/rke/etcd-snapshots` 中。所有定期快照都是按照配置的时间间隔创建的。使用 `local` 备份目标的缺点是,如果发生全面灾难并且丢失 _所有_ etcd 节点时,则无法恢复集群。 + +### S3 备份目标 + +`S3` 备份目标允许用户配置与 S3 兼容的后端来存储快照。此选项的主要好处是,如果集群丢失了所有 etcd 节点,由于快照存储在外部,集群仍然可以恢复。Rancher 推荐使用 `S3` 备份这类外部目标。但是它的配置要求进行额外的操作,这也应该被考虑在其中。 + +| 选项 | 描述 | 必填 | +|---|---|---| +| S3 存储桶名称 | 将存储备份的 S3 存储桶名称 | * | +| S3 区域 | 备份存储桶的 S3 区域 | | +| S3 区域端点 | 备份存储桶的 S3 区域端点 | * | +| S3 访问密钥 | 有权访问备份存储桶的 S3 访问密钥 | * | +| S3 密文密钥 | 有权访问备份存储桶的 S3 密文密钥 | * | +| 自定义 CA 证书 | 用于访问私有 S3 后端的自定义证书 | + +### 为 S3 使用自定义 CA 证书 + +备份快照可以存储在自定义 `S3` 备份中,例如 [minio](https://min.io/)。如果 S3 后端使用自签名或自定义证书,请使用`自定义 CA 证书`选项来提供自定义证书,从而连接到 S3 后端。 + +### 在 S3 中存储快照的 IAM 支持 + +除了使用 API 凭证之外,`S3` 备份目标还支持对 AWS API 使用 IAM 身份验证。IAM 角色会授予应用在对 S3 存储进行 API 调用时的临时权限。要使用 IAM 身份验证,必须满足以下要求: + +- 集群 etcd 节点必须具有实例角色,该角色具有对指定备份存储桶的读/写访问权限。 +- 集群 etcd 节点必须对指定的 S3 端点具有网络访问权限。 +- Rancher Server worker 节点必须具有实例角色,该实例角色具有对指定备份存储桶的读/写访问权限。 +- Rancher Server worker 节点必须对指定的 S3 端点具有网络访问权限。 + +要授予应用对 S3 的访问权限,请参阅[使用 IAM 角色向在 Amazon EC2 实例上运行的应用授予权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2.html)的 AWS 文档。 + +# 查看可用快照 + +Rancher UI 中提供了集群所有可用快照的列表: + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 在**集群**页面中,转到要查看快照的集群并单击其名称。 +1. 单击**快照**选项卡来查看已保存快照的列表。这些快照包括创建时间的时间戳。 + +# 安全时间戳 + +快照文件带有时间戳,从而简化使用外部工具和脚本处理文件的过程。但在某些与 S3 兼容的后端中,这些时间戳无法使用。 + +添加了选项 `safe_timestamp` 以支持兼容的文件名。当此标志设置为 `true` 时,快照文件名时间戳中的所有特殊字符都将被替换。 + +此选项不能直接在 UI 中使用,只能通过`以 YAML 文件编辑`使用。 + +# 为使用 Rancher v2.2.0 之前的版本创建的集群启用快照功能 + +如果你有使用 v2.2.0 之前版本创建的 Rancher 启动的 Kubernetes 集群,升级 Rancher 后,你必须[编辑集群](../../../pages-for-subheaders/cluster-configuration.md)并 _保存_ 它,以启用更新的快照功能。即使你已经在 v2.2.0 之前创建了快照,你也必须执行此步骤,因为旧的快照将无法用于[通过 UI 备份和恢复 etcd](restore-rancher-launched-kubernetes-clusters-from-backup.md)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/back-up-rancher.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/back-up-rancher.md new file mode 100644 index 00000000000..7b0144a187b --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/back-up-rancher.md @@ -0,0 +1,93 @@ +--- +title: 备份 Rancher +weight: 1 +--- + +在本节中,你将学习如何备份运行在任何 Kubernetes 集群上的 Rancher。要备份通过 Docker 安装的 Rancher,请参见[单节点备份](back-up-docker-installed-rancher.md)。 + +`backup-restore` operator 需要安装在 local 集群上,并且只对 Rancher 应用进行备份。备份和恢复操作仅在本地 Kubernetes 集群中执行。 + +请知悉,`rancher-backup` operator 的 2.x.x 版本用于 Rancher v2.6.x。 + +:::caution + +当把备份恢复到一个新的 Rancher 设置中时,新设置的版本应该与备份的版本相同。在恢复备份时还应考虑 Kubernetes 的版本,因为集群中支持的 apiVersion 和备份文件中的 apiVersion 可能不同。 + +::: + +### 先决条件 + +Rancher 必须是 2.5.0 或更高版本。 + +请参见[此处](migrate-rancher-to-new-cluster.md#2-使用-restore-自定义资源来还原备份)获取在 Rancher 2.6.3 中将现有备份文件恢复到 v1.22 集群的帮助。 + +### 1. 安装 `rancher backup` operator + +备份存储位置是 operator 级别的设置,所以需要在安装或升级 `rancher backup` 应用时进行配置。 + +备份文件的格式是 `.tar.gz`。这些文件可以推送到 S3 或 Minio,也可以存储在一个持久卷中。 + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 在**集群**页面上,转到 `local` 集群并单击 **Explore**。Rancher Server 运行在 `local` 集群中。 +1. 单击**应用 & 应用市场 > Chart**。 +1. 点击 **Rancher 备份**。 +1. 单击**安装**。 +1. 配置默认存储位置。如需获取帮助,请参见[存储配置](../../../reference-guides/backup-restore-configuration/storage-configuration.md)。 +1. 单击**安装**。 + +:::note + +使用 `backup-restore` operator 执行恢复后,Fleet 中会出现一个已知问题:用于 `clientSecretName` 和 `helmSecretName` 的密文不包含在 Fleet 的 Git 仓库中。请参见[此处](../deploy-apps-across-clusters/fleet.md#故障排除)获得解决方法。 + +::: + +### 2. 执行备份 + +要执行备份,必须创建 Backup 类型的自定义资源。 + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 在**集群**页面上,转到 `local` 集群并单击 **Explore**。 +1. 在左侧导航栏中,点击 **Rancher 备份 > 备份**。 +1. 单击**创建**。 +1. 使用表单或 YAML 编辑器创建 Backup。 +1. 要使用该表单配置 Backup 详细信息,请单击**创建**,然后参见[配置参考](../../../reference-guides/backup-restore-configuration/backup-configuration.md)和[示例](../../../reference-guides/backup-restore-configuration/examples.md#备份)进行操作。 +1. 要使用 YAML 编辑器,单击**创建 > 使用 YAML 文件创建**。输入 Backup YAML。这个示例 Backup 自定义资源将在 S3 中创建加密的定期备份。这个应用使用 `credentialSecretNamespace` 值来确定在哪里寻找 S3 备份的密文: + + ```yaml + apiVersion: resources.cattle.io/v1 + kind: Backup + metadata: + name: s3-recurring-backup + spec: + storageLocation: + s3: + credentialSecretName: s3-creds + credentialSecretNamespace: default + bucketName: rancher-backups + folder: rancher + region: us-west-2 + endpoint: s3.us-west-2.amazonaws.com + resourceSetName: rancher-resource-set + encryptionConfigSecretName: encryptionconfig + schedule: "@every 1h" + retentionCount: 10 + ``` + + :::note + + 使用 YAML 编辑器创建 Backup 资源时,`resourceSetName` 必须设置为 `rancher-resource-set`。 + + ::: + + 如需获得配置 Backup 的帮助,请参见[配置参考](../../../reference-guides/backup-restore-configuration/backup-configuration.md)和[示例](../../../reference-guides/backup-restore-configuration/examples.md#备份)。 + + :::caution + + `rancher-backup` operator 不保存 `EncryptionConfiguration` 文件。创建加密备份时,必须保存 `EncryptionConfiguration` 文件的内容,而且在使用备份还原时必须使用同一个文件。 + + ::: + +1. 单击**创建**。 + +**结果**:备份文件创建在 Backup 自定义资源中配置的存储位置中。执行还原时使用该文件的名称。 + diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/migrate-rancher-to-new-cluster.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/migrate-rancher-to-new-cluster.md new file mode 100644 index 00000000000..2d0d7114b90 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/migrate-rancher-to-new-cluster.md @@ -0,0 +1,141 @@ +--- +title: 将 Rancher 迁移到新集群 +weight: 3 +--- + +如果你要将 Rancher 迁移到一个新的 Kubernetes 集群,先不要在新集群上安装 Rancher。这是因为如果将 Rancher 还原到已安装 Rancher 的新集群,可能会导致问题。 + +### 先决条件 + +以下说明假设你已经完成[备份创建](back-up-rancher.md),并且已经安装了用于部署 Rancher 的新 Kubernetes 集群。 + +:::caution + +你需要使用与第一个集群中设置的 Server URL 相同的主机名。否则,下游集群会在 UI 的管理页面显示为不可用,并且你不能点击集群内或集群的 **Explore** 按钮。 + +::: + +Rancher 必须是 2.5.0 或更高版本。 + +Rancher 可以安装到任意 Kubernetes 集群上,包括托管的 Kubernetes 集群(如 Amazon EKS 集群)。如需获取安装 Kubernetes 的帮助,请参见 Kubernetes 发行版的文档。你也可以使用以下 Rancher 的 Kubernetes 发行版: + +- [RKE Kubernetes 安装文档](https://rancher.com/docs/rke/latest/en/installation/) +- [K3s Kubernetes 安装文档](https://rancher.com/docs/k3s/latest/en/installation/) + +### 1. 安装 rancher-backup Helm Chart +安装 rancher-backup Chart 的 2.x.x 版本。下面命令假设你的环境可以访问 DockerHub: +``` +helm repo add rancher-charts https://charts.rancher.io +helm repo update +helm install rancher-backup-crd rancher-charts/rancher-backup-crd -n cattle-resources-system --create-namespace --version $CHART_VERSION +helm install rancher-backup rancher-charts/rancher-backup -n cattle-resources-system --version $CHART_VERSION +``` +
+如果是**离线环境**,在安装 `rancher-backup-crd` Helm Chart 时,使用以下选项从私有镜像仓库拉取 `backup-restore-operator` 镜像: +``` +--set image.repository $REGISTRY/rancher/backup-restore-operator +``` + +### 2. 使用 Restore 自定义资源来还原备份 + +:::note 重要提示: + +Kubernetes v1.22 是 Rancher 2.6.3 的实验功能,不支持使用 apiVersion `apiextensions.k8s.io/v1beta1`来还原包含 CRD 文件的备份文件。在 v1.22 中,`rancher-backup` 应用的默认 `resourceSet` 只收集使用 `apiextensions.k8s.io/v1` 的 CRD。你可以通过下面两种方法解决这个问题。 + +1. 使用 apiVersion v1 来更新默认 `resourceSet`,从而收集 CRD。 +1. 使用 `apiextensions.k8s.io/v1` 作为替代,来更新默认 `resourceSet` 和客户端,从而在内部使用新的 API。 + +- 请注意,在为 v1.22 版本制作或恢复备份时,Rancher 版本和本地集群的 Kubernetes 版本应该是一样的。由于集群中支持的 apiVersion 和备份文件中的 apiVersion 可能不同,因此在还原备份时请考虑 Kubernetes 的版本。 + +::: + +如果你使用 S3 作为备份源,并且需要使用你的 S3 凭证进行还原,请使用 S3 凭证在集群中创建一个密文(Secret)。密文数据必须有两个 key,分别是包含 S3 凭证的 `accessKey` 和 `secretKey`。 + +:::caution + +在直接创建对象时,下方示例中的 `accessKey` 和 `secretKey` 必须先进行 base64 编码。否则,在你尝试备份或恢复时,粘贴的值会导致错误。 + +::: + +```yaml +apiVersion: v1 +kind: Secret +metadata: + name: s3-creds +type: Opaque +data: + accessKey: + secretKey: +``` + +你可以在任何命名空间中创建这个密文。在上述例子中,密文创建在默认命名空间中。 + +在 Restore 自定义资源中,`prune` 必须设为 `false`。 + +参考以下示例创建 Restore 自定义资源: + +```yaml +# migrationResource.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 + prune: false + encryptionConfigSecretName: encryptionconfig + storageLocation: + s3: + credentialSecretName: s3-creds + credentialSecretNamespace: default + bucketName: backup-test + folder: ecm1 + region: us-west-2 + endpoint: s3.us-west-2.amazonaws.com +``` + +:::note 重要提示: + +只有在创建备份时启用了加密功能时,才必须设置 `encryptionConfigSecretName` 字段。提供包含加密配置文件的密文名称。如果你只有加密配置文件,但没有在此集群中用它来创建密文,请按照以下步骤创建密文。 + +::: + +1. 加密配置文件必须命名为 `encryption-provider-config.yaml`,而且必须使用 `--from-file` 标志来创建这个密文。因此,将你的 `EncryptionConfiguration` 保存到名为 `encryption-provider-config.yaml` 的文件中,并运行以下命令: +``` +kubectl create secret generic encryptionconfig \ + --from-file=./encryption-provider-config.yaml \ + -n cattle-resources-system +``` + +1. 应用清单,并观察 Restore 资源的状态: + + 应用资源: +``` +kubectl apply -f migrationResource.yaml +``` + + 观察 Restore 的状态: +``` +kubectl get restore +``` + + 查看恢复日志: +``` +kubectl logs -n cattle-resources-system --tail 100 -f rancher-backup-xxx-xxx +``` + +Restore 资源的状态变成 `Completed` 后,你可以继续安装 Rancher。 + +### 3. 安装 cert-manager + +按照在 Kubernetes 上安装 cert-manager的步骤[安装 cert-manager](../../../pages-for-subheaders/install-upgrade-on-a-kubernetes-cluster.md#4-安装-cert-manager)。 + +### 4. 使用 Helm 安装 Rancher + +使用与第一个集群上使用的相同版本的 Helm 来安装 Rancher: + +``` +helm install rancher rancher-latest/rancher \ + --namespace cattle-system \ + --set hostname= \ +``` diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/restore-docker-installed-rancher.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/restore-docker-installed-rancher.md new file mode 100644 index 00000000000..51054a9c4a8 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/restore-docker-installed-rancher.md @@ -0,0 +1,74 @@ +--- +title: 恢复备份 - Docker 安装 +shortTitle: 还原 +weight: 3 +--- + +如果遇到灾难情况,你可以将 Rancher Server 恢复到最新的备份。 + +## 在你开始前 + +在恢复备份的过程中,你将输入一系列命令。请使用环境中的数据替换占位符。占位符用尖括号和大写字母(如 ``)表示。以下是带有占位符的命令示例: + +``` +docker run --volumes-from -v $PWD:/backup \ +busybox sh -c "rm /var/lib/rancher/* -rf && \ +tar pzxvf /backup/rancher-data-backup--" +``` + +在此命令中,`` 和 `-` 是用于 Rancher 部署的环境变量。 + +请交叉参考下方的图片和表格,了解获取此占位符数据的方法。在开始以下步骤之前,请先记下或复制此信息。 + +终端 docker ps 命令,显示如何找到 <RANCHER_CONTAINER_TAG><RANCHER_CONTAINER_NAME> + +![占位符参考](/img/placeholder-ref.png) + +| 占位符 | 示例 | 描述 | +| -------------------------- | -------------------------- | --------------------------------------------------------- | +| `` | `v2.0.5` | 首次安装拉取的 rancher/rancher 镜像。 | +| `` | `festive_mestorf` | 你的 Rancher 容器的名称。 | +| `` | `v2.0.5` | Rancher 备份的版本号。 | +| `` | `9-27-18` | 数据容器或备份的创建日期。 | +
+ +可以通过远程连接登录到 Rancher Server 所在的主机并输入命令 `docker ps` 以查看正在运行的容器,从而获得 `` 和 ``。你还可以运行 `docker ps -a` 命令查看停止了的容器。在创建备份期间,你随时可以运行这些命令来获得帮助。 + +## 恢复备份 + +使用你之前创建的[备份](back-up-docker-installed-rancher.md),将 Rancher 恢复到最后已知的健康状态。 + +1. 使用远程终端连接,登录到运行 Rancher Server 的节点。 + +1. 停止当前运行 Rancher Server 的容器。将 `` 替换为 Rancher 容器的名称: + + ``` + docker stop + ``` +1. 将你在[创建备份 - Docker 安装](back-up-docker-installed-rancher.md)时创建的备份压缩包移动到 Rancher Server。切换到你将其移动到的目录。输入 `dir` 以确认它在该位置。 + + 如果你遵循了我们在[创建备份 - Docker 安装](back-up-docker-installed-rancher.md)中推荐的命名方式,它的名称会与 `rancher-data-backup--.tar.gz` 类似。 + +1. 输入以下命令删除当前状态数据,并将其替换为备份数据。请替换占位符。不要忘记关闭引号。 + + :::danger + + 该命令将删除 Rancher Server 容器中的所有当前状态数据。创建备份压缩包后保存的任何更改都将丢失。 + + ::: + + ``` + docker run --volumes-from -v $PWD:/backup \ + busybox sh -c "rm /var/lib/rancher/* -rf && \ + tar pzxvf /backup/rancher-data-backup--.tar.gz" + ``` + + **步骤结果**:屏幕上将运行命令流。 + +1. 重新启动 Rancher Server 容器,替换占位符。Rancher Server 将使用你的备份数据重新启动。 + + ``` + docker start + ``` + +1. 等待片刻,然后在浏览器中打开 Rancher。确认还原成功,并且你的数据已恢复。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/restore-rancher-launched-kubernetes-clusters-from-backup.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/restore-rancher-launched-kubernetes-clusters-from-backup.md new file mode 100644 index 00000000000..0011772afe3 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/restore-rancher-launched-kubernetes-clusters-from-backup.md @@ -0,0 +1,78 @@ +--- +title: 使用备份恢复集群 +weight: 2050 +--- + +你可以轻松备份和恢复 [Rancher 启动的 Kubernetes 集群](../../../pages-for-subheaders/launch-kubernetes-with-rancher.md)的 etcd。etcd 数据库的快照会保存在 etcd 节点或 S3 兼容目标上。配置 S3 的好处是,如果所有 etcd 节点都丢失了,你的快照会保存到远端并能用于恢复集群。 + +Rancher 建议启用 [etcd 定期快照的功能](back-up-rancher-launched-kubernetes-clusters.md#配置定期快照),但你也可以轻松创建[一次性快照](back-up-rancher-launched-kubernetes-clusters.md#单次快照)。Rancher 允许使用[保存的快照](#使用快照恢复集群)进行恢复。如果你没有任何快照,你仍然可以[恢复 etcd](#在没有快照的情况下恢复-etcd)。 + +集群也可以恢复到之前的 Kubernetes 版本和集群配置。 + +## 查看可用快照 + +Rancher UI 中提供了集群所有可用快照的列表: + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 在**集群**页面中,转到要查看快照的集群并点击集群名称。 +1. 单击**快照**选项卡。列出的快照包括创建时间的时间戳。 + +## 使用快照恢复集群 + +如果你的 Kubernetes 集群已损坏,你可以使用快照来恢复集群。 + +快照由 etcd 中的集群数据、Kubernetes 版本和 `cluster.yml` 中的集群配置组成。有了这些组件,你可以在使用快照恢复集群时选择: + +- **仅恢复 etcd 内容**:类似于在 Rancher v2.4.0 之前版本中的使用快照恢复。 +- **恢复 etcd 和 Kubernetes 版本**:如果 Kubernetes 升级导致集群失败,并且你没有更改任何集群配置,则应使用此选项。 +- **恢复 etcd、Kubernetes 版本和集群配置**:如果你在升级时同时更改了 Kubernetes 版本和集群配置,则应使用此选项。 + +回滚到之前的 Kubernetes 版本时,[升级策略选项](../../../getting-started/installation-and-upgrade/upgrade-and-roll-back-kubernetes.md#配置升级策略)会被忽略。在恢复到旧 Kubernetes 版本之前,Worker 节点不会被封锁或清空,因此可以更快地将不健康的集群恢复到健康状态。 + +:::note 先决条件: + +要恢复 S3 中的快照,需要将集群配置为[在 S3 上创建定期快照](back-up-rancher-launched-kubernetes-clusters.md#配置定期快照)。 + +::: + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 在**集群**页面中,转到要查看快照的集群并点击集群名称。 +1. 单击**快照**选项卡来查看已保存快照的列表。 +1. 转到要恢复的快照,然后单击 **⋮ > 还原快照**。 +1. 点击**还原**。 + +**结果**:集群将进入 `updating` 状态,然后将开始使用快照恢复 `etcd` 节点。集群会在返回到 `active` 状态后被恢复。 + +## 在没有快照的情况下恢复 etcd + +如果 etcd 节点组失去了仲裁(quorum),由于没有操作(例如部署工作负载)可以在 Kubernetes 集群中执行,Kubernetes 集群将报告失败。集群需要有三个 etcd 节点以防止仲裁丢失。如果你想恢复你的 etcd 节点集,请按照以下说明操作: + +1. 通过删除所有其他 etcd 节点,从而仅在集群中保留一个 etcd 节点。 + +2. 在剩余的单个 etcd 节点上,运行以下命令: + + ``` + $ docker run --rm -v /var/run/docker.sock:/var/run/docker.sock assaflavie/runlike etcd + ``` + + 此命令会输出 etcd 要运行的命令,请保存此命令以备后用。 + +3. 停止你在上一步中启动的 etcd 容器,并将其重命名为 `etcd-old`: + + ``` + $ docker stop etcd + $ docker rename etcd etcd-old + ``` + +4. 修改步骤 2 中获取保存的命令: + + - 如果你最初有超过 1 个 etcd 节点,则将 `--initial-cluster` 更改为仅包含剩余的单个节点。 + - 将 `--force-new-cluster` 添加到命令的末尾。 + +5. 运行修改后的命令。 + +6. 在单个节点启动并运行后,Rancher 建议向你的集群添加额外的 etcd 节点。如果你有一个[自定义集群](../../../pages-for-subheaders/use-existing-nodes.md),并且想要复用旧节点,则需要先[清理节点](../../advanced-user-guides/manage-clusters/clean-cluster-nodes.md),然后再尝试将它们重新添加到集群中。 + +# 为使用 Rancher v2.2.0 之前的版本创建的集群启用快照功能 + +如果你有使用 v2.2.0 之前版本创建的 Rancher 启动的 Kubernetes 集群,升级 Rancher 后,你必须[编辑集群](../../../pages-for-subheaders/cluster-configuration.md)并 _保存_ 它,以启用更新的快照功能。即使你已经在 v2.2.0 之前创建了快照,你也必须执行此步骤,因为旧的快照将无法用于[通过 UI 备份和恢复 etcd](restore-rancher-launched-kubernetes-clusters-from-backup.md)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/restore-rancher.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/restore-rancher.md new file mode 100644 index 00000000000..7c5345e273f --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/restore-rancher.md @@ -0,0 +1,93 @@ +--- +title: 还原 Rancher +weight: 2 +--- + +本页概述了如何使用 Rancher 执行恢复。 + +:::note 重要提示: + +* 请按照此页面上的说明在已备份的同一集群上还原 Rancher。要把 Rancher 迁移到新集群,请参照步骤[迁移 Rancher](migrate-rancher-to-new-cluster.md)。 +* 在使用相同设置还原 Rancher 时,operator 将在还原开始时缩减 Rancher deployment,还原完成后又会扩展 deployment。因此,Rancher 在还原期间将不可用。 +* 如果你需要在升级后将 Rancher 还原到先前版本,请参见[回滚](../../../getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/rollbacks.md)。 + +::: + +### 使用 Rancher 2.6.4+ 进行回滚的其他步骤 + +在 Rancher v2.6.4 中,cluster-api 模块已从 v0.4.4 升级到 v1.0.2,其中 CAPI CRD 的 apiVersion 已从 `cluster.x-k8s.io/v1alpha4` 升级到 `cluster.x-k8s.io/v1beta1`。由于需要回滚的 CRD 在 v1beta1 中不再可用,因此从 Rancher v2.6.4 回滚到任何 Rancher v2.6.x 先前版本都会失败。 + +为避免这种情况,请在还原或回滚**之前**先运行 Rancher 资源清理脚本。因此,我们创建了两个脚本来帮助你进行操作,一个用于清理集群(`cleanup.sh`),一个用于检查集群中与 Rancher 相关的资源 (`verify.sh`)。有关清理脚本的详细信息,请参见 [rancher/rancher-cleanup repo](https://github.com/rancher/rancher-cleanup)。 + +:::caution + +Rancher 将在运行 `cleanup` 脚本时关闭,因为它会删除 Rancher 创建的资源。 + +::: + +额外准备: + +1. 按照[说明](https://github.com/rancher/rancher-cleanup/blob/main/README.md)运行脚本。 +1. 按照[说明](https://rancher.com/docs/rancher/v2.6/en/backups/migrating-rancher/)在现有集群上安装 rancher-backup Helm Chart 并恢复之前的状态。 + 1. 省略步骤 3。 + 1. 执行到第 4 步时,在要回滚的本地集群上安装所需的 Rancher 2.6.x 版本。 + +### 创建 Restore 自定义资源 + +还原是通过创建 Restore 自定义资源实现的。 + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 在**集群**页面上,转到 `local` 集群并单击 **Explore**。Rancher Server 运行在 `local` 集群中。 +1. 在左侧导航栏中,单击 **Rancher 备份 > 还原**。 +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。 + + ```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. 单击**创建**。 + +**结果**:rancher-operator 在还原过程中将 Rancher deployment 缩容,并在还原完成后将它重新扩容。资源还原顺序如下: + +1. 自定义资源定义(CRD) +2. 集群范围资源 +3. 命名空间资源 + +### 日志 + +如需查看还原的处理方式,请检查 Operator 的日志。查看日志的命令如下: + +``` +kubectl logs -n cattle-resources-system -l app.kubernetes.io/name=rancher-backup -f +``` + +### 清理 + +如果你使用 kubectl 创建了 Restore 资源,请删除该资源以防止与未来的还原发生命名冲突。 + +### 已知问题 +在某些情况下,恢复备份后,Rancher 日志会显示类似以下的错误: +``` +2021/10/05 21:30:45 [ERROR] error syncing 'c-89d82/m-4067aa68dd78': handler rke-worker-upgrader: clusters.management.cattle.io "c-89d82" not found, requeuing +``` +发生这种情况的原因是,刚刚还原的某个资源有 finalizer,但相关的资源已经被删除,导致处理程序无法找到该资源。 + +为了消除这些错误,你需要找到并删除导致错误的资源。详情请参见[此处](https://github.com/rancher/rancher/issues/35050#issuecomment-937968556)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/deploy-apps-across-clusters/fleet.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/deploy-apps-across-clusters/fleet.md new file mode 100644 index 00000000000..e5706035807 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/deploy-apps-across-clusters/fleet.md @@ -0,0 +1,68 @@ +--- +title: Fleet - 大规模的 GitOps +weight: 1 +--- + +Fleet 是大规模的 GitOps。你可以使用 Fleet 管理多达一百万个集群。Fleet 非常轻量,可以很好地用于[单个集群](https://fleet.rancher.io/single-cluster-install/),但是在你达到[大规模](https://fleet.rancher.io/multi-cluster-install/)时,它能发挥更强的实力。此处的大规模指的是大量集群、大量部署、或组织中存在大量团队的情况。 + +Fleet 是一个独立于 Rancher 的项目,你可以使用 Helm 将它安装在任何 Kubernetes 集群上。 + + +## 架构 + +有关 Fleet 工作原理的信息,请参阅[此页面](../../../explanations/integrations-in-rancher/fleet-gitops-at-scale/architecture.md)。 + +## 在 Rancher UI 中访问 Fleet + +Fleet 预装在 Rancher 中,通过 Rancher UI 中的**持续交付**选项管理。有关持续交付和 Fleet 故障排除技巧的更多信息,请参阅[此处](https://fleet.rancher.io/troubleshooting/)。 + +用户可以通过遵循 **gitops** 的实践,利用持续交付将应用部署到 git 仓库中的 Kubernetes 集群,而无需任何手动操作。 + +按照以下步骤在 Rancher UI 中访问持续交付: + +1. 单击 **☰ > 持续交付**。 + +1. 在菜单顶部选择你的命名空间,注意以下几点: + - 默认情况下会选中 `fleet-default`,其中包括注册到 Rancher 的所有下游集群。 + - 你可以切换到仅包含 `local` 集群的 `fleet-local`,或者创建自己的工作空间,并将集群分配和移动到该工作空间。 + - 然后,你可以单击左侧导航栏上的**集群**来管理集群。 + +1. 单击左侧导航栏上的 **Git 仓库**将 git 仓库部署到当前工作空间中的集群中。 + +1. 选择你的 [git 仓库](https://fleet.rancher.io/gitrepo-add/)和[目标集群/集群组](https://fleet.rancher.io/gitrepo-structure/)。你还可以单击左侧导航栏中的**集群组**在 UI 中创建集群组。 + +1. 部署 git 仓库后,你可以通过 Rancher UI 监控应用。 + +## Windows 支持 + +有关对具有 Windows 节点的集群的支持的详细信息,请参阅[此页面](../../../explanations/integrations-in-rancher/fleet-gitops-at-scale/windows-support.md)。 + + +## GitHub 仓库 + +你可以单击此处获取 [Fleet Helm Chart](https://github.com/rancher/fleet/releases/latest)。 + + +## 在代理后使用 Fleet + +有关在代理后使用 Fleet 的详细信息,请参阅[此页面](../../../explanations/integrations-in-rancher/fleet-gitops-at-scale/use-fleet-behind-a-proxy.md)。 + +## Helm Chart 依赖 + +由于用户需要完成依赖列表,因此为了成功部署具有依赖项的 Helm Chart,你必须手动运行命令(如下所列)。如果你不这样做,并继续克隆仓库并运行 `helm install`,由于依赖项将丢失,因此你的安装将失败。 + +git 仓库中的 Helm Chart 必须在 Chart 子目录中包含其依赖项。你必须手动运行 `helm dependencies update $chart`,或在本地运行 `helm dependencies build $chart`,然后将完整的 Chart 目录提交到你的 git 仓库。请注意,你需要使用适当的参数来修改命令。 + +## 故障排除 + +--- +* **已知问题**:Fleet git 仓库的 clientSecretName 和 helmSecretName 密文不包含在 [backup-restore-operator](../backup-restore-and-disaster-recovery/back-up-rancher.md#1-安装-`rancher-backup`-operator) 创建的备份或恢复中。如果我们有了永久的解决方案,我们将通知社区。 + +* **临时解决方法:**
+ 默认情况下,用户定义的密文不会在 Fleet 中备份。如果执行灾难恢复或将 Rancher 迁移到新集群,则需要重新创建密文。要修改 resourceSet 以包含需要备份的其他资源,请参阅[此文档](https://github.com/rancher/backup-restore-operator#user-flow)。 + +--- + +## 文档 + +Fleet 文档链接:[https://fleet.rancher.io/](https://fleet.rancher.io/) diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/deploy-apps-across-clusters/multi-cluster-apps.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/deploy-apps-across-clusters/multi-cluster-apps.md new file mode 100644 index 00000000000..8077c09bd34 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/deploy-apps-across-clusters/multi-cluster-apps.md @@ -0,0 +1,178 @@ +--- +title: 多集群应用 +weight: 2 +--- + +> Rancher v2.5 开始已弃用多集群应用。我们现在建议使用 [Fleet](fleet.md) 来跨集群部署应用。 + +通常,大多数应用都部署在单个 Kubernetes 集群上,但有时你可能需要跨不同集群和/或项目部署同一应用的多个副本。在 Rancher 中,_多集群应用_ 指的是使用 Helm Chart 跨多个集群部署的应用。由于能够跨多个集群部署相同的应用,因此可以避免在每个集群上重复执行相同的应用配置操作而引入的人为错误。使用多集群应用,你可以通过自定义在所有项目/集群中使用相同的配置,并根据你的目标项目更改配置。由于多集群应用被视为单个应用,因此更容易管理和维护。 + +全局应用商店中的任何 Helm Chart 都可用于部署和管理多集群应用。 + +创建多集群应用后,你可以对全局 DNS 条目进行编程,以便更轻松地访问应用。 + +## 先决条件 + +### 权限 + +要在 Rancher 中创建多集群应用,你至少需要具有以下权限之一: + +- 目标集群中的[项目成员角色](../../advanced-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/cluster-and-project-roles.md#项目角色),能够创建、读取、更新和删除工作负载 +- 目标项目所在集群的[集群所有者角色](../../advanced-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/cluster-and-project-roles.md#集群角色) + +### 启用旧版功能 + +由于 Rancher 2.5 已弃用多集群应用并使用 Fleet 取代它,你需要使用功能开关以启用多集群应用。 + +1. 在左上角,单击 **☰ > 全局设置**。 +1. 单击**功能开关**。 +1. 转到`旧版应用`功能开关并单击**激活**。 + +## 启动多集群应用 + +1. 在左上角,单击**☰ > 多集群应用**。 +1. 点击**启动**。 +1. 找到要启动的应用。 +1. (可选)查看来自 Helm Chart `README` 的详细描述。 +1. 在**配置选项**下输入多集群应用的**名称**。默认情况下,此名称还用于在每个[目标项目](#目标)中为多集群应用创建一个 Kubernetes 命名空间。命名空间命名为 `-`。 +1. 选择一个**模板版本**。 +1. 完成[多集群应用配置选项](#多集群应用配置选项)以及[应用配置选项](#应用配置选项)。 +1. 选择可以[与多集群应用交互](#成员)的**成员**。 +1. 添加[自定义应用配置答案](#覆盖特定项目的应用配置选项),这将更改默认应用配置答案中特定项目的配置。 +1. 查看**预览**中的文件。确认后,单击**启动**。 + +**结果**:应用已部署到所选的命名空间。你可以从项目中查看应用状态。 + +## 多集群应用配置选项 + +Rancher 将多集群应用的配置选项分为以下几个部分。 + +### 目标 + +在**目标**部分中,选择用于部署应用的项目。项目列表仅显示你有权访问的项目。所选的每个项目都会被添加到列表中,其中显示了所选的集群名称和项目名称。要移除目标项目,单击 **-**。 + +### 升级 + +在**升级**部分中,选择升级应用时需要使用的升级策略。 + +* **滚动更新(批量)**:选择此升级策略时,每次升级的应用数量取决于选择的**批量大小**和**间隔**(多少秒后才开始下一批更新)。 + +* **同时升级所有应用**:选择此升级策略时,所有项目的所有应用都将同时升级。 + +### 角色 + +在**角色**中,你可以定义多集群应用的角色。通常,当用户[启动商店应用](../../../pages-for-subheaders/helm-charts-in-rancher.md)时,该用户的权限会用于创建应用所需的所有工作负载/资源。 + +多集群应用由 _系统用户_ 部署,系统用户还被指定为所有底层资源的创建者。由于实际用户可以从某个目标项目中删除,因此使用 _系统用户_ 而不是实际用户。如果实际用户从其中一个项目中删除,则该用户将不再能够管理其他项目的应用。 + +Rancher 允许你选择**项目**或**集群**的角色选项。Rancher 将允许你根据用户的权限使用其中一个角色进行创建。 + +- **项目** - 相当于[项目成员](../../advanced-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/cluster-and-project-roles.md#项目角色)。如果你选择此角色,Rancher 将检查用户是否在所有目标项目中至少具有[项目成员](../../advanced-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/cluster-and-project-roles.md#项目角色)的角色。虽然用户可能没有被明确授予 _项目成员_ 角色,但如果用户是[管理员](../../advanced-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/global-permissions.md)、[集群所有者](../../advanced-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/cluster-and-project-roles.md#集群角色)或[项目所有者](../../advanced-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/cluster-and-project-roles.md#项目角色),则认为该用户具有所需的权限级别。 + +- **集群** - 相当于[集群所有者](../../advanced-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/cluster-and-project-roles.md#集群角色)。如果你选择此角色,Rancher 将检查用户是否在所有目标项目中至少具有[集群所有者](../../advanced-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/cluster-and-project-roles.md#项目角色)的角色。虽然用户可能没有被明确授予 _集群所有者_ 角色,但如果用户是[管理员](../../advanced-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/global-permissions.md),则认为该用户具有所需的权限级别。 + +在启动应用时,Rancher 会在启动应用之前确认你在目标项目中是否拥有这些权限。 + +:::note + +某些应用(如 _Grafana_ 或 _Datadog_)需要访问特定集群级别的资源。这些应用将需要 _集群_ 角色。如果你之后发现应用需要集群角色,则可以升级多集群应用以更新角色。 + +::: + +## 应用配置选项 + +对于每个 Helm Chart,你需要输入一个必须的答案列表才能成功部署 Chart。由于 Rancher 会将答案作为 `--set` 标志传递给 Helm,因此你必须按照[使用 Helm:–set 的格式和限制](https://helm.sh/docs/intro/using_helm/#the-format-and-limitations-of---set)中的语法规则来格式化这些答案。 + +:::note 示例 + +当输入的答案包含用逗号分隔的两个值(即 `abc, bcd`)时,你需要用双引号将值括起来(即 ``"abc, bcd" ``)。 + +::: + +### 使用 questions.yml 文件 + +如果你部署的 Helm Chart 包含 `questions.yml` 文件,Rancher UI 会将此文件转换成易于使用的 UI 来收集问题的答案。 + +### 原生 Helm Chart 的键值对 + +对于原生 Helm Chart(即来自 **Helm Stable** 或 **Helm Incubator** 应用商店或自定义 Helm Chart 仓库的 Chart),答案会在 **Answers** 中以键值对的形式提供。这些答案能覆盖默认值。 + +### 成员 + +默认情况下,多集群应用只能由应用的创建者管理。你可以在**成员**中添加其他用户,以便这些用户管理或查看多集群应用。 + +1. 在**成员**搜索框中键入成员的名称,查找要添加的用户。 + +2. 为该成员选择**访问类型**。多集群项目有三种访问类型,请仔细阅读并了解这些访问类型的含义,以了解多集群应用权限的启用方式。 + + - **所有者**:此访问类型可以管理多集群应用的任何配置,包括模板版本、[多集群应用配置选项](#多集群应用配置选项),[应用配置选项](#应用配置选项),可以与多集群应用交互的成员,以及[自定义应用配置答案](#覆盖特定项目的应用配置选项)。由于多集群应用的创建使用与用户不同的权限集,因此多集群应用的任何 _所有者_ 都可以管理/删除[目标项目](#目标)中的应用,而不需要显式授权访问这些项目。请仅为受信任的用户配置此访问类型。 + + - **成员**:此访问类型只能修改模板版本、[应用配置选项](#应用配置选项)和[自定义应用配置答案](#覆盖特定项目的应用配置选项)。由于多集群应用的创建使用与用户不同的权限集,因此多集群应用的任何 _成员_ 都可以修改应用,而不需要显式授权访问这些项目。请仅为受信任的用户配置此访问类型。 + + - **只读**:此访问类型不能修改多集群应用的任何配置选项。用户只能查看这些应用。 + + :::caution + + 请确保仅为受信任的用户授予 _所有者_ 或 _成员_ 访问权限,因为这些用户即使无法直接访问项目,也将自动能够管理为此多集群应用创建的应用。 + + ::: + +### 覆盖特定项目的应用配置选项 + +多集群应用的主要优势之一,是能够在多个集群/项目中使用相同配置部署相同的应用。在某些情况下,你可能需要为某个特定项目使用稍微不同的配置选项,但你依然希望统一管理该应用与其他匹配的应用。此时,你可以为该项目覆盖特定的[应用配置选项](#应用配置选项),而不需要创建全新的应用。 + +1. 在**答案覆盖**中,单击**添加覆盖**。 + +2. 对于每个覆盖,你可以选择以下内容: + + - **范围**:在配置选项中选择要覆盖哪些目标项目的答案。 + + - **问题**:选择要覆盖的问题。 + + - **答案**:输入要使用的答案。 + +## 升级多集群应用角色和项目 + +- **在现有的多集群应用上更改角色** + 多集群应用的创建者和任何具有“所有者”访问类型的用户都可以升级其**角色**。添加新角色时,我们会检查用户在所有当前目标项目中是否具有该角色。Rancher 会根据 `Roles` 字段的安装部分,相应地检查用户是否具有全局管理员、集群所有者或项目所有者的角色。 + +- **添加/删除目标项目** +1. 多集群应用的创建者和任何具有“所有者”访问类型的用户都添加或移除目标项目。添加新项目时,我们检查此请求的调用者是否具有多集群应用中定义的所有角色。Rancher 会检查用户是否具有全局管理员、集群所有者和项目所有者的角色。 +2. 删除目标项目时,我们不会进行这些成员资格检查。这是因为调用者的权限可能与目标项目有关,或者由于该项目已被删除导致调用者希望将该项目从目标列表中删除。 + + +## 多集群应用管理 + +与同一类型的多个单独应用相比,使用多集群应用的好处之一是易于管理。你可以克隆、升级或回滚多集群应用。 + +:::note 先决条件: + +`旧版应用`功能开关已启用。 + +::: + +1. 在左上角,单击**☰ > 多集群应用**。 + +2. 选择要对其执行操作的多集群应用,然后单击 **⋮**。选择以下选项之一: + + * **克隆**:创建另一个具有相同配置的多集群应用。通过使用此选项,你可以轻松复制多集群应用。 + * **升级**:升级多集群应用以更改某些配置。在为多集群应用执行升级时,如果你有合适的[访问类型](#成员),则可以修改[升级策略](#升级)。 + * **回滚**:将你的应用回滚到特定版本。如果你的一个或多个[目标](#目标)的多集群应用在升级后出现问题,你可以使用 Rancher 存储的多达 10 个多集群应用版本进行回滚。回滚多集群应用会恢复**所有**目标集群和项目的应用,而不仅仅是受升级问题影响的目标。 + +## 删除多集群应用 + +:::note 先决条件: + +`旧版应用`功能开关已启用。 + +::: + +1. 在左上角,单击**☰ > 多集群应用**。 + +2. 选择要删除的多集群应用,然后单击**⋮ > 删除**。删除多集群应用会删除所有目标项目中的所有应用和命名空间。 + + :::note + + 不能独立删除在目标项目中为多集群应用创建的应用。只有删除多集群应用后才能删除这些应用。 + + ::: \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/helm-charts-in-rancher/create-apps.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/helm-charts-in-rancher/create-apps.md new file mode 100644 index 00000000000..4afd100be5c --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/helm-charts-in-rancher/create-apps.md @@ -0,0 +1,132 @@ +--- +title: 创建应用 +weight: 400 +--- + +Rancher 的应用市场基于 Helm 仓库和 Helm Chart。你可以添加基于 HTTP 的标准 Helm 仓库以及任何包含 Chart 的 Git 仓库。 + +:::tip + +有关开发 Chart 的完整演示,请参阅 Helm 官方文档中的 [Chart 模板开发者指南](https://helm.sh/docs/chart_template_guide/)。 + +::: + + + +# Chart 类型 + +Rancher 支持两种不同类型的 Chart,分别是 Helm Chart 和 Rancher Chart。 + +### Helm Chart + +原生 Helm Chart 包括一个应用以及运行它所需的软件。部署原生 Helm Chart 时,你可以在 YAML 编辑器中提供 Chart 的参数值。 + +### Rancher Chart + +Rancher Chart 是原生 helm Chart,包含两个可增强用户体验的文件 `app-readme.md` 和 `questions.yaml`。在 [Rancher Chart 的附加文件](#rancher-chart-的附加文件)中了解更多信息。 + +Rancher Chart 添加了简化的 Chart 描述和配置表单,使应用部署变得容易。Rancher 用户无需通读整个 Helm 变量列表即可了解如何启动应用。 + +# Chart 目录结构 + +你可以在基于 HTTP 的标准 Helm 仓库中提供 Helm Chart。有关更多信息,请参阅 Helm 官方文档中的 [Chart 仓库指南](https://helm.sh/docs/topics/chart_repository)。 + +或者,你可以在 Git 仓库中组织 Chart 并将其直接添加到应用市场。 + +下表演示了 Git 仓库的目录结构。`charts` 目录是仓库基础下的顶层目录。将仓库添加到 Rancher 将公开其中包含的所有 Chart。`questions.yaml`、`README.md` 和 `requirements.yml` 文件是针对于 Rancher Chart 的,但对于自定义 Chart 是可选的。 + +``` +/ + │ + ├── charts/ + │ ├── / # 这个目录名称将作为 Chart 名称出现在 Rancher UI 中。 + │ │ ├── / # 这个级别的每个目录提供了不同的应用版本,可以在 Rancher UI 的 Chart 中选择。 + │ │ │ ├── Chart.yaml # 必需的 Helm Chart 信息文件。 + │ │ │ ├── questions.yaml # 在 Rancher UI 中显示的表单问题。问题显示在配置选项中。* + │ │ │ ├── README.md # 可选:在 Rancher UI 中显示的 Helm 自述文件。此文本显示在详细说明中。 + │ │ │ ├── requirements.yml # 可选:列出 Chart 的依赖项的 YAML 文件。 + │ │ │ ├── values.yml # Chart 的默认配置值。 + │ │ │ ├── templates/ # 包含模板的目录,与 values.yml 一起能生成 Kubernetes YAML。 +``` + +# Rancher Chart 的附加文件 + +在创建你的自定义目录之前,你需要大致了解 Rancher chart 与原生 Helm chart 的区别。Rancher Chart 的目录结构与 Helm Chart 略有不同。Rancher Chart 包含两个 Helm Chart 没有的文件: + +- `app-readme.md` + + 在 Chart 的 UI 标头中提供描述性文本的文件。 + +- `questions.yml` + + 包含表单问题的文件。这些表单问题简化了 Chart 的部署。没有它,你必须使用更复杂的 YAML 配置来配置部署。下图显示了 Rancher Chart(包含 `questions.yml`)和原生 Helm Chart(不包含)之间的区别。 + + +
带有 questions.yml 的 Rancher Chart(上)与 Helm Chart(下)
+ + ![questions.yml](/img/rancher-app-2.6.png) + ![values.yaml](/img/helm-app-2.6.png) + + +### Chart.yaml 注释 + +Rancher 支持你添加到 `Chart.yaml` 文件的其他注释。这些注释允许你定义应用依赖项或配置其他 UI 默认值: + +| 注解 | 描述 | 示例 | +| --------------------------------- | ----------- | ------- | +| catalog.cattle.io/auto-install | 如果设置,将在安装此 Chart 之前先安装指定 Chart 的指定版本。 | other-chart-name=1.0.0 | +| catalog.cattle.io/display-name | 要在应用市场中显示的名称,而不是 Chart 本身的名称。 | Chart 的显示名称 | +| catalog.cattle.io/namespace | 用于部署 Chart 的固定命名空间。如果设置,则用户无法更改。 | fixed-namespace | +| catalog.cattle.io/release-name | Helm 安装的固定版本名称。如果设置,则用户无法更改。 | fixed-release-name | +| catalog.cattle.io/requests-cpu | 应该在集群中保留的 CPU 总量。如果可用 CPU 资源少于该值,将显示警告。 | 2000m | +| catalog.cattle.io/requests-memory | 应该在集群中保留的内存总量。如果可用内存资源少于该值,将显示警告。 | 2Gi | +| catalog.cattle.io/os | 限制可以安装此 Chart 的操作系统。可用值:`linux`、`windows`。默认:无限制 | linux | + +### questions.yml + +`questions.yml` 中大部分是向最终用户提出的问题,但也有一部分可以在此文件中设置字段。 + +### 最低/最高 Rancher 版本 + +你可以为每个 Chart 添加最低和/或最高的 Rancher 版本,这决定了该 Chart 是否可以从 Rancher 部署。 + +:::note + +Rancher 版本带有 `v` 前缀,但是使用此选项时请*不要*包括前缀。 + +::: + +``` +rancher_min_version: 2.3.0 +rancher_max_version: 2.3.99 +``` + +### Question 变量参考 + +此参考包含可以嵌套在 `questions:` 下的 `questions.yml` 中的变量: + +| 变量 | 类型 | 必填 | 描述 | +| ------------- | ------------- | --- |------------- | +| variable | string | true | 定义 `values.yml` 文件中指定的变量名,嵌套对象使用 `foo.bar`。 | +| label | string | true | 定义 UI 标签。 | +| description | string | false | 指定变量的描述。 | +| type | string | false | 如果未指定,则默认为 `string`(支持的类型为 string、multiline、boolean、int、enum、password、storageclass、hostname、pvc 和 secret)。 | +| required | bool | false | 定义变量是否是必须的(true \| false)。 | +| default | string | false | 指定默认值。 | +| group | string | false | 按输入值对问题进行分组。 | +| min_length | int | false | 最小字符长度。 | +| max_length | int | false | 最大字符长度。 | +| min | int | false | 最小整数长度。 | +| max | int | false | 最大整数长度。 | +| options | []string | false | 为 `enum` 类型的变量指定选项,例如:options:
- "ClusterIP"
- "NodePort"
- "LoadBalancer" | +| valid_chars | string | false | 输入字符验证的正则表达式。 | +| invalid_chars | string | false | 无效输入字符验证的正则表达式。 | +| subquestions | []subquestion | false | 添加一组子问题。 | +| show_if | string | false | 如果条件变量为 true,则显示当前变量。例如 `show_if: "serviceType=Nodeport"` | +| show\_subquestion_if | string | false | 如果为 true 或等于某个选项,则显示子问题。例如 `show_subquestion_if: "true"` | + +:::note + +`subquestions[]` 不能包含 `subquestions` 或 `show_subquestions_if` 键,但支持上表中的所有其他键。 + +::: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/infrastructure-setup/amazon-elb-load-balancer.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/infrastructure-setup/amazon-elb-load-balancer.md new file mode 100644 index 00000000000..ba2b3605e61 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/infrastructure-setup/amazon-elb-load-balancer.md @@ -0,0 +1,176 @@ +--- +title: 设置 Amazon NLB 网络负载均衡器 +weight: 5 +--- + +本文介绍了如何在 Amazon EC2 服务中设置 Amazon NLB 网络负载均衡器,用于将流量转发到 EC2 上的多个实例中。 + +这些示例中,负载均衡器将流量转发到三个 Rancher Server 节点。如果 Rancher 安装在 RKE Kubernetes 集群上,则需要三个节点。如果 Rancher 安装在 K3s Kubernetes 集群上,则只需要两个节点。 + +本文介绍的只是配置负载均衡器的其中一种方式。其他负载均衡器如传统负载路由器(Classic Load Balancer)和应用负载路由器(Application Load Balancer),也可以将流量转发到 Rancher Server 节点。 + +Rancher 仅支持使用 Amazon NLB 以 `TCP` 模式终止 443 端口的流量,而不支持 `TLS` 模式。这试因为在 NLB 终止时,NLB 不会将正确的标头注入请求中。如果你想使用由 Amazon Certificate Manager (ACM) 托管的证书,请使用 ALB。 + + + +## 要求 + +你已在 EC2 中创建了 Linux 实例。此外,负载均衡器会把流量转发到这些节点。 + +## 1. 创建目标组 + +首先,为 **TCP** 协议创建两个目标组,其中一个使用 TCP 端口 443,另一个使用 TCP 端口 80(用于重定向到 TCP 端口 443)。然后,将 Linux 节点添加到这些组中。 + +配置 NLB 的第一个步骤是创建两个目标组。一般来说,只需要端口 443 就可以访问 Rancher。但是,由于端口 80 的流量会被自动重定向到端口 443,因此,你也可以为端口 80 也添加一个监听器。 + +不管使用的是 NGINX Ingress 还是 Traefik Ingress Controller,Ingress 都应该将端口 80 的流量重定向到端口 443。以下为操作步骤: + +1. 登录到 [Amazon AWS 控制台](https://console.aws.amazon.com/ec2/)。确保选择的**区域**是你创建 EC2 实例 (Linux 节点)的区域。 +1. 选择**服务** > **EC2**,找到**负载均衡器**并打开**目标组**。 +1. 单击**创建目标组**,然后创建用于 TCP 端口 443 的第一个目标组。 + +:::note + +不同 Ingress 的健康检查处理方法不同。详情请参阅[本节](#nginx-ingress-和-traefik-ingress-的健康检查路径)。 + +::: + +#### 目标组(TCP 端口 443) + +根据下表配置第一个目标组: + +| 选项 | 设置 | +|-------------------|-------------------| +| 目标组名称 | `rancher-tcp-443` | +| 目标类型 | `instance` | +| 协议 | `TCP` | +| 端口 | `443` | +| VPC | 选择 VPC | + +健康检查设置: + +| 选项 | 设置 | +|---------------------|-----------------| +| 协议 | TCP | +| 端口 | `override`,`80` | +| 健康阈值 | `3` | +| 不正常阈值 | `3` | +| 超时 | `6 秒` | +| 间隔 | `10 秒` | + +单击**创建目标组**,然后创建用于 TCP 端口 80 的第二个目标组。 + +#### 目标组(TCP 端口 80) + +根据下表配置第二个目标组: + +| 选项 | 设置 | +|-------------------|------------------| +| 目标组名称 | `rancher-tcp-80` | +| 目标类型 | `instance` | +| 协议 | `TCP` | +| 端口 | `80` | +| VPC | 选择 VPC | + + +健康检查设置: + +| 选项 | 设置 | +|---------------------|----------------| +| 协议 | TCP | +| 端口 | `traffic port` | +| 健康阈值 | `3` | +| 不正常阈值 | `3` | +| 超时 | `6 秒` | +| 间隔 | `10 秒` | + +## 2. 注册目标 + +接下来,将 Linux 节点添加到两个目标组中。 + +选择名为 **rancher-tcp-443** 的目标组,点击**目标**选项卡并选择**编辑**。 + +![](/img/ha/nlb/edit-targetgroup-443.png) + +选择你要添加的实例(Linux 节点),然后单击**添加到已注册**。 + +*** +**将目标添加到目标组 TCP 端口 443**
+ +![](/img/ha/nlb/add-targets-targetgroup-443.png) + +*** +**已将目标添加到目标组 TCP 端口 443**
+ +![](/img/ha/nlb/added-targets-targetgroup-443.png) + +添加实例后,单击右下方的**保存**。 + +将 **rancher-tcp-443** 替换为 **rancher-tcp-80**,然后重复上述步骤。你需要将相同的实例作为目标添加到此目标组。 + +## 3. 创建 NLB + +使用 Amazon 的向导创建网络负载均衡器。在这个过程中,你需要添加在 [1. 创建目标组](#1-创建目标组)中创建的目标组。 + +1. 在网页浏览器中,导航到 [Amazon EC2 控制台](https://console.aws.amazon.com/ec2/)。 + +2. 在导航栏中,选择**负载均衡** > **负载均衡器**。 + +3. 单击**创建负载均衡器**。 + +4. 选择**网络负载均衡器**并单击**创建**。然后,填写每个表格。 + +- [步骤 1:配置负载均衡器](#步骤-1:配置负载均衡器) +- [步骤 2:配置路由](#步骤-2:配置路由) +- [步骤 3:注册目标](#步骤-3:注册目标) +- [步骤 4:审核](#步骤-4:审核) + +### 步骤 1:配置负载均衡器 + +在表单中设置以下字段: + +- **名称**:`rancher` +- **Scheme**:`internal` 或 `internet-facing`。实例和 VPC 的配置决定了 NLB 的 Scheme。如果你的实例没有绑定公共 IP,或者你只需要通过内网访问 Rancher,请将 NLB 的 Scheme 设置为 `internal` 而不是 `internet-facing`。 +- **监听器**:负载均衡器协议需要是 `TCP`,而且负载均衡器端口需要设为 `443`。 +- **可用区:**选择你的**VPC**和**可用区**。 + +### 步骤 2:配置路由 + +1. 从**目标组**下拉列表中,选择 **现有目标组**。 +1. 从**名称**下拉列表中,选择 `rancher-tcp-443`。 +1. 打开**高级健康检查设置**,并将**间隔**设为 `10 秒`。 + +### 步骤 3:注册目标 + +由于你已经在先前步骤注册了目标,因此你只需单击 **下一步:审核**。 + +### 步骤 4:审核 + +检查负载均衡器信息无误后,单击**创建**。 + +AWS 完成 NLB 创建后,单击**关闭**。 + +# 4. 为 TCP 端口 80 向 NLB 添加监听器 + +1. 选择新创建的 NLB 并选择**监听器**选项卡。 + +2. 单击**添加监听器**。 + +3. 使用 `TCP`:`80` 作为**协议**:**端口**。 + +4. 单击**添加操作**并选择**转发到..**。 + +5. 从**转发到**下拉列表中,选择 `rancher-tcp-80`。 + +6. 单击右上角的**保存**。 + +# NGINX Ingress 和 Traefik Ingress 的健康检查路径 + +K3s 和 RKE Kubernetes 集群使用的默认 Ingress 不同,因此对应的健康检查方式也不同。 + +RKE Kubernetes 集群默认使用 NGINX Ingress,而 K3s Kubernetes 集群默认使用 Traefik Ingress。 + +- **Traefik**:默认健康检查路径是 `/ping`。默认情况下,不管主机如何,`/ping` 总是匹配,而且 [Traefik 自身](https://docs.traefik.io/operations/ping/)总会响应。 +- **NGINX Ingress**:NGINX Ingress Controller 的默认后端有一个 `/healthz` 端点。默认情况下,不管主机如何,`/healthz` 总是匹配,而且 [`ingress-nginx` 自身](https://github.com/kubernetes/ingress-nginx/blob/0cbe783f43a9313c9c26136e888324b1ee91a72f/charts/ingress-nginx/values.yaml#L212)总会响应。 + +想要精确模拟健康检查,最好是使用 Host 标头(Rancher hostname)加上 `/ping` 或 `/healthz`(分别对应 K3s 和 RKE 集群)来获取 Rancher Pod 的响应,而不是 Ingress 的响应。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/infrastructure-setup/ha-k3s-kubernetes-cluster.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/infrastructure-setup/ha-k3s-kubernetes-cluster.md new file mode 100644 index 00000000000..bf7a64d1c80 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/infrastructure-setup/ha-k3s-kubernetes-cluster.md @@ -0,0 +1,74 @@ +--- +title: '为高可用 K3s Kubernetes 集群设置基础设施' +weight: 1 +--- + +本教程旨在帮助你为 Rancher Management Server 配置底层基础设施。 + +我们根据 Rancher 的安装位置(K3s Kubernetes 集群、RKE Kubernetes 集群或单个 Docker 容器)为专用于 Rancher 的 Kubernetes 集群推荐不同基础设施。 + +有关每个安装选项的详情,请参见[本页](../../../pages-for-subheaders/installation-and-upgrade.md)。 + +:::note 重要提示: + +这些节点必须位于同一个区域。但是你可以把这些服务器放在不同的可用区(数据中心)。 + +::: + +如需在高可用 K3s 集群中安装 Rancher Management Server,我们建议配置以下基础设施: + +- **2 个 Linux 节点**:可以是你的云提供商中的虚拟机。 +- **1 个外部数据库**:用于存储集群数据。建议使用 MySQL。 +- **1 个负载均衡器**:用于将流量转发到这两个节点中。 +- **1 个 DNS 记录**:用于将 URL 映射到负载均衡器。此 DNS 记录将成为 Rancher Server 的 URL,下游集群需要可以访问到这个地址。 + +### 1. 配置 Linux 节点 + +请确保你的节点满足[操作系统,容器运行时,硬件和网络](../../../pages-for-subheaders/installation-requirements.md)的常规要求。 + +如需获取配置 Linux 节点的示例,请参见[在 Amazon EC2 中配置节点](nodes-in-amazon-ec2.md)的教程。 + +### 2. 配置外部数据库 + +K3s 与其他 Kubernetes 发行版不同,在于其支持使用 etcd 以外的数据库来运行 Kubernetes。该功能让 Kubernetes 运维更加灵活。你可以根据实际情况选择合适的数据库。 + +对于 K3s 高可用安装,你需要配置一个 [MySQL](https://www.mysql.com/) 外部数据库。Rancher 已在使用 MySQL 5.7 作为数据存储的 K3s Kubernetes 集群上进行了测试。 + +在使用 K3s 安装脚本安装 Kubernetes 时,你需要传入 K3s 连接数据库的详细信息。 + +如需获取配置 MySQL 数据库示例,请参见[在 Amazon RDS 服务中配置 MySQL](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 选项](../../../reference-guides/installation-references/helm-chart-options.md#外部-tls-终止)。 + +如需获取配置 NGINX 负载均衡器的示例,请参见[本页](nginx-load-balancer.md)。 + +如需获取如何配置 Amazon ELB 网络负载均衡器的指南,请参见[本页](amazon-elb-load-balancer.md)。 + +:::caution + +安装后,请勿将此负载均衡(例如 `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)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/infrastructure-setup/ha-rke1-kubernetes-cluster.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/infrastructure-setup/ha-rke1-kubernetes-cluster.md new file mode 100644 index 00000000000..4438fa58196 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/infrastructure-setup/ha-rke1-kubernetes-cluster.md @@ -0,0 +1,65 @@ +--- +title: '为高可用 RKE Kubernetes 集群设置基础设施' +weight: 2 +--- + +本教程旨在帮助你创建一个高可用的 RKE 集群,用于安装 Rancher Server。 + +:::note 重要提示: + +这些节点必须位于同一个区域。但是你可以把这些服务器放在不同的可用区(数据中心)。 + +::: + +如需在高可用 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 中配置节点](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 选项](../../../reference-guides/installation-references/helm-chart-options.md#外部-tls-终止)。 + +如需获取配置 NGINX 负载均衡器的示例,请参见[本页](nginx-load-balancer.md)。 + +如需获取如何配置 Amazon ELB 网络负载均衡器的指南,请参见[本页](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)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/infrastructure-setup/ha-rke2-kubernetes-cluster.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/infrastructure-setup/ha-rke2-kubernetes-cluster.md new file mode 100644 index 00000000000..e211b4cf972 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/infrastructure-setup/ha-rke2-kubernetes-cluster.md @@ -0,0 +1,59 @@ +--- +title: '为高可用 RKE2 Kubernetes 集群设置基础设施' +weight: 1 +--- + +本教程旨在帮助你为 Rancher Management Server 配置底层基础设施。 + +我们根据 Rancher 的安装位置(RKE2 Kubernetes 集群、RKE Kubernetes 集群或单个 Docker 容器)为专用于 Rancher 的 Kubernetes 集群推荐不同基础设施。 + +:::note 重要提示: + +这些节点必须位于同一个区域。但是你可以把这些服务器放在不同的可用区(数据中心)。 + +::: + +如需在高可用 RKE2 集群中安装 Rancher Management Server,我们建议配置以下基础设施: + +- **3 个 Linux 节点**:可以是你的云提供商中的虚拟机。 +- **1 个负载均衡器**:用于将流量转发到这两个节点中。 +- **1 个 DNS 记录**:用于将 URL 映射到负载均衡器。此 DNS 记录将成为 Rancher Server 的 URL,下游集群需要可以访问到这个地址。 + +### 1. 配置 Linux 节点 + +请确保你的节点满足[操作系统,容器运行时,硬件和网络](../../../pages-for-subheaders/installation-requirements.md)的常规要求。 + +如需获取配置 Linux 节点的示例,请参见[在 Amazon EC2 中配置节点](nodes-in-amazon-ec2.md)的教程。 + +### 2. 配置负载均衡器 + +你还需要设置一个负载均衡器,来将流量重定向到所有节点上的 Rancher 副本。配置后,当单个节点不可用时,继续保障与 Rancher Management Server 的通信。 + +在后续步骤中配置 Kubernetes 时,RKE2 工具会部署一个 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 选项](../../../reference-guides/installation-references/helm-chart-options.md#外部-tls-终止)。 + +如需获取配置 NGINX 负载均衡器的示例,请参见[本页](nginx-load-balancer.md)。 + +如需获取如何配置 Amazon ELB 网络负载均衡器的指南,请参见[本页](amazon-elb-load-balancer.md)。 + +:::caution + +安装后,请勿将此负载均衡(例如 `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)。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/infrastructure-setup/mysql-database-in-amazon-rds.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/infrastructure-setup/mysql-database-in-amazon-rds.md new file mode 100644 index 00000000000..db27920f0c1 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/infrastructure-setup/mysql-database-in-amazon-rds.md @@ -0,0 +1,34 @@ +--- +title: 在 Amazon RDS 中创建 MySQL 数据库 +weight: 4 +--- +本教程介绍如何在 Amazon RDS 中创建 MySQL 数据库。 + +该数据库可用作高可用 K3s Kubernetes 集群的外部数据存储。 + +1. 登录到 [Amazon AWS RDS 控制台](https://console.aws.amazon.com/rds/)。确保选择的**区域**是你创建 EC2 实例 (Linux 节点)的区域。 +1. 在左侧面板中,点击**数据库**。 +1. 点击**创建数据库**。 +1. 在**引擎类型**中,点击 **MySQL**。 +1. 在**版本**中,选择 **MySQL 5.7.22**。 +1. 在**设置**部分的**凭证设置**下,输入 **admin** 主用户名的密码。确认密码。 +1. 展开**其它配置**。在**初始数据库名称**字段,设置数据库名称。该名称仅可包含字母,数字和下划线。这个名称会用于连接到数据库。 +1. 点击**创建数据库**。 + +你需要获取新数据库的以下信息,以便 K3s Kubernetes 集群可以连接到该数据库。 + +如需在 Amazon RDS 控制台查看此信息,点击**数据库**,然后点击你创建的数据库的名称。 + +- **用户名**:使用 admin 用户名。 +- **密码**:使用 admin 密码。 +- **主机名**:使用**端点**作为主机名。端点可以在**连接性和安全性**部分找到。 +- **端口**:默认为 3306。你可以在**连接性和安全性**处确认端口。 +- **数据库名称**:前往**配置**选项卡确认数据库名称。名称会在**数据库名称**中列出。 + +以下方格式使用上述信息,连接到数据库: + +``` +mysql://username:password@tcp(hostname:3306)/database-name +``` + +有关为 K3s 配置数据库的详情,请参见 [K3s 官方文档](https://rancher.com/docs/k3s/latest/en/installation/datastore/)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/infrastructure-setup/nginx-load-balancer.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/infrastructure-setup/nginx-load-balancer.md new file mode 100644 index 00000000000..7e09aa44c7d --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/infrastructure-setup/nginx-load-balancer.md @@ -0,0 +1,92 @@ +--- +title: 配置 NGINX 负载均衡器 +weight: 4 +--- + +将 NGINX 配置为四层负载均衡器(TCP),用于将连接转发到 Rancher 节点。 + +在此配置中,负载均衡器位于节点的前面。负载均衡器可以是任何能运行 NGINX 的主机。 + +:::note + +不要使用 Rancher 节点作为负载均衡器。 + +::: + +> 这些示例中,负载均衡器将流量转发到三个 Rancher Server 节点。如果 Rancher 安装在 RKE Kubernetes 集群上,则需要三个节点。如果 Rancher 安装在 K3s Kubernetes 集群上,则只需要两个节点。 + +## 安装 NGINX + +首先,在要用作负载均衡器的节点上安装 NGINX。NGINX 有适用于所有已知操作系统的软件包。已测试的版本为 `1.14` 和 `1.15`。如需获得安装 NGINX 的帮助,请参见[安装文档](https://www.nginx.com/resources/wiki/start/topics/tutorials/install/)。 + +`stream` 模块是必需的,NGINX 官方安装包包含了该模块。请参见你操作系统的文档,了解如何在操作系统上安装和启用 NGINX 的 `stream` 模块。 + +## 创建 NGINX 配置 + +安装 NGINX 后,使用节点的 IP 地址更新 NGINX 配置文件 `nginx.conf`。 + +1. 将以下的示例代码复制并粘贴到你使用的文本编辑器中。将文件保存为 `nginx.conf`。 + +2. 在 `nginx.conf` 中,将所有(端口 80 和端口 443)的 ``,``和 `` 替换为你节点的 IP 地址。 + + :::note + + 参见 [NGINX 文档:TCP 和 UDP 负载均衡](https://docs.nginx.com/nginx/admin-guide/load-balancer/tcp-udp-load-balancer/)了解所有配置选项。 + + ::: + +
示例 NGINX 配置
+ + ``` + worker_processes 4; + worker_rlimit_nofile 40000; + + events { + worker_connections 8192; + } + + stream { + upstream rancher_servers_http { + least_conn; + server :80 max_fails=3 fail_timeout=5s; + server :80 max_fails=3 fail_timeout=5s; + server :80 max_fails=3 fail_timeout=5s; + } + server { + listen 80; + proxy_pass rancher_servers_http; + } + + upstream rancher_servers_https { + least_conn; + server :443 max_fails=3 fail_timeout=5s; + server :443 max_fails=3 fail_timeout=5s; + server :443 max_fails=3 fail_timeout=5s; + } + server { + listen 443; + proxy_pass rancher_servers_https; + } + + } + ``` + + +3. 将 `nginx.conf` 保存到你的负载均衡器的 `/etc/nginx/nginx.conf` 路径上。 + +4. 运行以下命令重新加载 NGINX 配置: + + ``` + # nginx -s reload + ``` + +## 可选 - 将 NGINX 作为 Docker 容器运行 + +除了将 NGINX 作为软件包安装在操作系统上外,你也可以将其作为 Docker 容器运行。将编辑后的 **NGINX 配置示例** 保存为`/etc/nginx.conf`,并运行以下命令来启动 NGINX 容器: + +``` +docker run -d --restart=unless-stopped \ + -p 80:80 -p 443:443 \ + -v /etc/nginx.conf:/etc/nginx/nginx.conf \ + nginx:1.14 +``` diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/infrastructure-setup/nodes-in-amazon-ec2.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/infrastructure-setup/nodes-in-amazon-ec2.md new file mode 100644 index 00000000000..a6483700c7d --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/infrastructure-setup/nodes-in-amazon-ec2.md @@ -0,0 +1,75 @@ +--- +title: 在 Amazon EC2 中配置节点 +weight: 3 +--- + +在本教程中,你将学习一种为 Rancher Mangement Server 创建 Linux 节点的方法。这些节点将满足[操作系统、Docker、硬件和网络的要求](../../../pages-for-subheaders/installation-requirements.md)。 + +如果 Rancher Server 安装在 RKE Kubernetes 集群上,你需要配置三个实例。 + +如果 Rancher Server 安装在 K3s Kubernetes 集群上,你只需要配置两个实例。 + +如果 Rancher Server 安装在单个 Docker 容器中,你只需要配置一个实例。 + +### 1. 准备工作(可选) + +- **创建 IAM 角色**:要允许 Rancher 操作 AWS 资源,例如创建新存储或新节点,你需要将 Amazon 配置为云提供商。要在 EC2 上设置云提供商,你需要进行几个操作,其中包括为 Rancher Server 节点设置 IAM 角色。有关设置云提供商的详情,请参见[本页](../../../pages-for-subheaders/set-up-cloud-providers.md)。 +- **创建安全组**:我们建议为 Rancher 节点设置一个符合 [Rancher 节点端口要求](../../../pages-for-subheaders/installation-requirements.md#端口要求)的安全组。 + +### 2. 配置实例 + +1. 登录到 [Amazon AWS EC2 控制台](https://console.aws.amazon.com/ec2/)。由于 Rancher Management Server 的所有基础设施都需要位于同一区域,因此,请务必记下创建 EC2 实例(Linux 节点)的**区域**。 +1. 在左侧面板中,点击**实例**。 +1. 点击**启动示例**。 +1. 在**步骤 1:选择 Amazon Machine Image (AMI)** 中,使用 `ami-0d1cd67c26f5fca19 (64-bit x86)` 来使用 Ubuntu 18.04 作为 Linux 操作系统。去到 Ubuntu AMI 并点击**选择**。 +1. 在**步骤 2:选择实例类型**中,选择 `t2.medium`。 +1. 点击**下一步:配置实例详细信息**。 +1. 在**实例数量**字段中,输入实例数量。创建高可用 K3s 集群仅需要两个实例,而高可用 RKE 集群则需要三个实例。 +1. 可选:如果你为 Rancher 创建了一个 IAM 角色来操作 AWS 资源,请在 **IAM 角色**字段中选择新 IAM 角色。 +1. 分别点击**下一步:添加存储**,**下一步:添加标签**和**下一步:配置安全组**。 +1. 在**步骤 6:配置安全组**中,选择一个符合 Rancher 节点[端口要求](../../../pages-for-subheaders/installation-requirements.md#端口要求)的安全组。 +1. 点击**查看并启动**。 +1. 点击**启动**。 +1. 选择一个新的或现有的密钥对,用于之后连接到你的实例。如果使用现有密钥对,请确保你有访问私钥的权限。 +1. 点击**启动实例**。 + + +**结果**:你已创建满足操作系统、硬件和网络要求的 Rancher 节点。 + +:::note + +如果节点用于 RKE Kubernetes 集群,请在下一步操作中为每个节点安装 Docker 。如果节点用于 K3s Kubernetes 集群,你可以开始在节点上安装 K3s 了。 + +::: + +### 3. 为 RKE Kubernetes 集群节点安装 Docker 并创建用户 + +1. 在 [AWS EC2 控制台](https://console.aws.amazon.com/ec2/)中,点击左侧面板中的**实例**。 +1. 转到你想要安装 Docker 的实例。选择实例,并点击**操作 > 连接**。 +1. 按照屏幕上的说明连接到实例。复制实例的公共 DNS。SSH 进入实例的示例命令如下: +``` +sudo ssh -i [path-to-private-key] ubuntu@[public-DNS-of-instance] +``` +1. 在实例上运行以下命令,使用 Rancher 的其中一个安装脚本来安装 Docker: +``` +curl https://releases.rancher.com/install-docker/18.09.sh | sh +``` +1. 连接到实例后,在实例上运行以下命令来创建用户: +``` +sudo usermod -aG docker ubuntu +``` +1. 在每个节点上重复上述步骤,以确保 Docker 安装到每个用于运行 Rancher Management Server 的节点上。 + +:::tip + +要了解我们是否提供指定的 Docker 版本的安装脚本,请访问此 [GitHub 仓库](https://github.com/rancher/install-docker),该仓库包含 Rancher 的所有 Docker 安装脚本。 + +::: + +**结果**:你已配置满足操作系统、Docker、硬件和网络要求的 Rancher Server 节点。 + +### RKE Kubernetes 集群节点的后续步骤 + +如需在新节点上安装 RKE 集群,请记住每个节点的 **IPv4 公共 IP** 和 **私有 IP**。创建节点后,此信息可以在每个节点的**描述**选项卡中找到。公共和私有 IP 将用于设置 RKE 集群配置文件 `rancher-cluster.yml` 中每个节点的 `address` 和 `internal_address`。 + +RKE 还需要访问私钥才能连接到每个节点。因此,请记住连接到节点的私钥的路径,该路径也可用于设置 `rancher-cluster.yml` 中每个节点的 `ssh_key_path`。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-cluster-setup/high-availability-installs.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-cluster-setup/high-availability-installs.md new file mode 100644 index 00000000000..1a572518d68 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-cluster-setup/high-availability-installs.md @@ -0,0 +1,25 @@ +--- +title: 高可用安装 +weight: 1 +--- + +我们建议使用 Helm( Kubernetes 包管理器 )在专用的 Kubernetes 集群上安装 Rancher。由于 Rancher 运行在多个节点上提升了可用性,因此这种安装方式叫做高可用 Kubernetes 安装。 + +在标准安装中,先将 Kubernetes 安装在托管在云提供商(例如 Amazon 的 EC2 或 Google Compute Engine)中的三个节点上。 + +然后使用 Helm 在 Kubernetes 集群上安装 Rancher。Helm 使用 Rancher 的 Helm Chart 在 Kubernetes 集群的三个节点中均安装 Rancher 的副本。我们建议使用负载均衡器将流量转发到集群中的每个 Rancher 副本中,以提高 Rancher 的可用性。 + +Rancher Server 的数据存储在 etcd 中。etcd 数据库可以在所有三个节点上运行。为了选举出大多数 etcd 节点认同的 etcd 集群 leader,节点的数量需要是奇数。如果 etcd 数据库不能选出 leader,etcd 可能会失败。这时候就需要使用备份来还原集群。 + +有关 Rancher 如何工作的详情(与安装方法无关),请参见[架构](../../../pages-for-subheaders/rancher-manager-architecture.md)。 + +### 推荐架构 + +- Rancher 的 DNS 应该解析为 4 层负载均衡器。 +- 负载均衡器应该把 TCP/80 端口和 TCP/443 端口的流量转发到 Kubernetes 集群的全部 3 个节点上。 +- Ingress Controller 会把 HTTP 重定向到 HTTPS,在 TCP/443 端口终结 SSL/TLS。 +- Ingress Controller 会把流量转发到 Rancher deployment 的 Pod 上的 TCP/80 端口。 + +
使用 4 层负载均衡器在 Kubernetes 集群中安装 Rancher:Ingress Controller 的 SSL 终止:
+![High-availability Kubernetes Installation of Rancher](/img/ha/rancher2ha.svg) +使用 4 层负载均衡器在 Kubernetes 集群中安装 Rancher:Ingress Controller 的 SSL 终止 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-cluster-setup/k3s-for-rancher.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-cluster-setup/k3s-for-rancher.md new file mode 100644 index 00000000000..13002d2f5d4 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-cluster-setup/k3s-for-rancher.md @@ -0,0 +1,128 @@ +--- +title: 为 Rancher 设置高可用 K3s Kubernetes 集群 +shortTitle: 为 Rancher 配置 K3s +weight: 2 +--- + +本文介绍了如何根据 [Rancher Server 环境的最佳实践](../../../reference-guides/rancher-manager-architecture/architecture-recommendations.md#kubernetes-安装环境)安装 Kubernetes 集群。 + +如果你的系统无法直接访问互联网,请参见离线安装说明。 + +:::tip 单节点安装提示: + +在单节点 Kubernetes 集群中,Rancher Server 不具备高可用性,而高可用性对在生产环境中运行 Rancher 非常重要。但是,如果你想要短期内使用单节点节省资源,同时又保留高可用性迁移路径,把 Rancher 安装到单节点集群也是合适的。 + +要配置单节点 K3s 集群,你只需要在单个节点上运行 Rancher Server 安装命令(不需要在两个节点上运行命令)。 + +在这两种单节点设置中,Rancher 可以与 Helm 一起安装在 Kubernetes 集群上,安装方法与安装到其他集群上一样。 + +::: + +# 先决条件 + +以下说明假设你已参见[此章节](../infrastructure-setup/ha-k3s-kubernetes-cluster.md)配置好两个节点,一个负载均衡器,一个 DNS 记录和一个外部 MySQL 数据库。 + +Rancher 需要安装在支持的 Kubernetes 版本上。如需了解你使用的 Rancher 版本支持哪些 Kubernetes 版本,请参见[支持维护条款](https://rancher.com/support-maintenance-terms/)。如需指定 K3s 版本,请在运行 K3s 安装脚本时,使用 `INSTALL_K3S_VERSION` 环境变量。 +# 安装 Kubernetes + +### 1. 安装 Kubernetes 并设置 K3s Server + +在运行启动 K3s Kubernetes API Server 的命令时,你会传入使用之前设置的外部数据存储的选项。 + +1. 连接到你准备用于运行 Rancher Server 的其中一个 Linux 节点。 +1. 在 Linux 节点上,运行以下命令来启动 K3s Server,并将其连接到外部数据存储。 +``` +curl -sfL https://get.k3s.io | sh -s - server \ + --datastore-endpoint="mysql://username:password@tcp(hostname:3306)/database-name" +``` +要指定 K3s 版本,使用 `INSTALL_K3S_VERSION` 环境变量: +```sh +curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=vX.Y.Z sh -s - server \ + --datastore-endpoint="mysql://username:password@tcp(hostname:3306)/database-name" + ``` + +:::note + +注意:你也可以使用 `$K3S_DATASTORE_ENDPOINT` 环境变量来传递数据存储端点。 + +::: + +1. 在第二个 K3s Server 节点上运行同样的命令。 + +### 2. 确认 K3s 正在运行 + +在其中一个 K3s Server 节点上运行以下命令,来确认 K3s 是否已经设置成功: +``` +sudo k3s kubectl get nodes +``` + +然后你会看到两个具有 master 角色的节点。 +``` +ubuntu@ip-172-31-60-194:~$ sudo k3s kubectl get nodes +NAME STATUS ROLES AGE VERSION +ip-172-31-60-194 Ready master 44m v1.17.2+k3s1 +ip-172-31-63-88 Ready master 6m8s v1.17.2+k3s1 +``` + +测试集群 Pod 的健康状况: +``` +sudo k3s kubectl get pods --all-namespaces +``` + +**结果**:你已成功配置一个 K3s Kubernetes 集群。 + +### 3. 保存并开始使用 kubeconfig 文件 + +你在每个 Rancher Server 节点上安装 K3s 时,会在每个节点中的 `/etc/rancher/k3s/k3s.yaml` 位置上创建一个`kubeconfig` 文件。该文件包含访问集群的凭证。请将该文件保存在安全的位置。 + +要使用此 `kubeconfig` 文件: + +1. 安装 [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl)(Kubernetes 命令行工具)。 +2. 复制 `/etc/rancher/k3s/k3s.yaml` 文件并保存到你本地主机的 `~/.kube/config` 目录中。 +3. 在 `kubeconfig` 文件中,`server` 的参数为 localhost。你需要将 `server` 配置为负载均衡器的 DNS,并指定端口 6443(通过端口 6443 访问 Kubernetes API Server 会通过端口 6443,通过端口 80 和 443 访问 Rancher Server)。以下是一个 `k3s.yaml` 示例: + +```yml +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` 文件管理集群访问的部分。 + +### 4. 检查集群 Pod 的健康状况 + +现在你已经设置了 `kubeconfig` 文件。你可以使用 `kubectl` 在本地主机访问集群。 + +检查所有需要的 Pod 和容器是否健康: + +``` +ubuntu@ip-172-31-60-194:~$ sudo kubectl get pods --all-namespaces +NAMESPACE NAME READY STATUS RESTARTS AGE +kube-system metrics-server-6d684c7b5-bw59k 1/1 Running 0 8d +kube-system local-path-provisioner-58fb86bdfd-fmkvd 1/1 Running 0 8d +kube-system coredns-d798c9dd-ljjnf 1/1 Running 0 8d +``` + +**结果**:你可通过使用 `kubectl` 访问集群,并且 K3s 集群能成功运行。现在,你可以在集群上安装 Rancher Management Server。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-cluster-setup/rke1-for-rancher.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-cluster-setup/rke1-for-rancher.md new file mode 100644 index 00000000000..93cfc3ac59d --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-cluster-setup/rke1-for-rancher.md @@ -0,0 +1,192 @@ +--- +title: 配置高可用的 RKE Kubernetes 集群 +shortTitle: 配置 RKE Kubernetes +weight: 3 +--- + + +本文介绍如何安装 Kubernetes 集群。该集群应专用于运行 Rancher Server。 + +:::note + +Rancher 可以运行在任何 Kubernetes 集群上,包括托管的 Kubernetes,例如 Amazon EKS。以下说明只是安装 Kubernetes 其中一种方式。 + +::: + +如果系统无法直接访问互联网,请参见[离线环境:Kubernetes 安装](../../../pages-for-subheaders/air-gapped-helm-cli-install.md)。 + +:::tip 单节点安装提示: + +在单节点 Kubernetes 集群中,Rancher Server 不具备高可用性,而高可用性对在生产环境中运行 Rancher 非常重要。但是,如果你想要短期内使用单节点节省资源,同时又保留高可用性迁移路径,把 Rancher 安装到单节点集群也是合适的。 + +要设置单节点 RKE 集群,在 `cluster.yml` 中配置一个节点。该节点需具备所有三个角色,分别是`etcd`,`controlplane`和`worker`。 + +在这两种单节点设置中,Rancher 可以与 Helm 一起安装在 Kubernetes 集群上,安装方法与安装到其他集群上一样。 + +::: + +# 安装 Kubernetes + +### 所需的 CLI 工具 + +安装 Kubernetes 命令行工具 [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl)。 + +安装 [RKE](https://rancher.com/docs/rke/latest/en/installation/)(Rancher Kubernetes Engine,是一个 Kubernetes 发行版和命令行工具)。 + +### 1. 创建集群配置文件 + +在这部分,你将创建一个名为 `rancher-cluster.yml`的 Kubernetes 集群配置文件。在后续使用 RKE 命令设置集群的步骤中,此文件会用于在节点上安装 Kubernetes。 + +使用下面的示例作为指南,创建 `rancher-cluster.yml` 文件。将 `nodes` 列表中的 IP 地址替换为你创建的 3 个节点的 IP 地址或 DNS 名称。 + +如果你的节点有公共地址和内部地址,建议设置 `internal_address:` 以便 Kubernetes 使用它实现集群内部通信。如果你想使用引用安全组或防火墙,某些服务(如 AWS EC2)要求设置 `internal_address:`。 + +RKE 需要通过 SSH 连接到每个节点,它会在 `~/.ssh/id_rsa`的默认位置查找私钥。如果某个节点的私钥不在默认位置中,你还需要为该节点配置 `ssh_key_path` 选项。 + +```yaml +nodes: + - address: 165.227.114.63 + internal_address: 172.16.22.12 + user: ubuntu + role: [controlplane, worker, etcd] + - address: 165.227.116.167 + internal_address: 172.16.32.37 + user: ubuntu + role: [controlplane, worker, etcd] + - address: 165.227.127.226 + internal_address: 172.16.42.73 + user: ubuntu + role: [controlplane, worker, etcd] + +services: + etcd: + snapshot: true + creation: 6h + retention: 24h + +# Required for external TLS termination with +# ingress-nginx v0.22+ +ingress: + provider: nginx + options: + use-forwarded-headers: "true" +``` + +
通用 RKE 节点选项
+ +| 选项 | 必填 | 描述 | +| ------------------ | -------- | -------------------------------------------------------------------------------------- | +| `address` | 是 | 公共 DNS 或 IP 地址 | +| `user` | 是 | 可以运行 docker 命令的用户 | +| `role` | 是 | 分配给节点的 Kubernetes 角色列表 | +| `internal_address` | 否 | 内部集群流量的私有 DNS 或 IP 地址 | +| `ssh_key_path` | 否 | 用来验证节点的 SSH 私钥文件路径(默认值为 `~/.ssh/id_rsa`) | + +:::note 高级配置: + +RKE 提供大量配置选项,用于针对你的环境进行自定义安装。 + +如需了解选项和功能的完整列表,请参见 [RKE 官方文档](https://rancher.com/docs/rke/latest/en/config-options/)。 + +要为大规模 Rancher 安装优化 etcd 集群,请参见 [etcd 设置指南](../../../getting-started/installation-and-upgrade/advanced-options/advanced-use-cases/tune-etcd-for-large-installs.md)。 + +有关 Dockershim 支持的详情,请参见[此页面](../../../getting-started/installation-and-upgrade/installation-requirements/dockershim.md)。 + +::: + +### 2. 运行 RKE + +``` +rke up --config ./rancher-cluster.yml +``` + +完成后,结束行应该是:`Finished build Kubernetes cluster succeeded`。 + +### 3. 测试集群 + +本节介绍如何设置工作区,以便你可以使用 `kubectl` 命令行工具与此集群进行交互。 + +如果你已安装 `kubectl`,你需要将 `kubeconfig` 文件放在 `kubectl` 可访问的位置。`kubeconfig` 文件包含使用 `kubectl` 访问集群所需的凭证。 + +你在运行 `rke up` 时,RKE 应该已经创建了一个名为 `kube_config_cluster.yml`的 `kubeconfig` 文件。该文件具有 `kubectl` 和 `helm`的凭证。 + +:::note + +如果你的文件名不是 `rancher-cluster.yml`,kubeconfig 文件将命名为 `kube_config_.yml`。 + +::: + +将此文件移动到 `$HOME/.kube/config`。如果你使用多个 Kubernetes 集群,将 `KUBECONFIG` 环境变量设置为 `kube_config_cluster.yml` 的路径: + +``` +export KUBECONFIG=$(pwd)/kube_config_cluster.yml +``` + +用 `kubectl` 测试你的连接性,并查看你的所有节点是否都处于 `Ready` 状态: + +``` +kubectl get nodes + +NAME STATUS ROLES AGE VERSION +165.227.114.63 Ready controlplane,etcd,worker 11m v1.13.5 +165.227.116.167 Ready controlplane,etcd,worker 11m v1.13.5 +165.227.127.226 Ready controlplane,etcd,worker 11m v1.13.5 +``` + +### 4. 检查集群 Pod 的健康状况 + +检查所有需要的 Pod 和容器是否健康。 + +- Pod 处于 `Running` 或 `Completed` 状态。 +- `READY` 表示运行 `STATUS` 为 `Running` 的 Pod 的所有容器(例如, `3/3`)。 +- `STATUS` 为 `Completed` 的 Pod 是一次运行的 Job。这些 Pod `READY` 列的值应该为 `0/1`。 + +``` +kubectl get pods --all-namespaces + +NAMESPACE NAME READY STATUS RESTARTS AGE +ingress-nginx nginx-ingress-controller-tnsn4 1/1 Running 0 30s +ingress-nginx nginx-ingress-controller-tw2ht 1/1 Running 0 30s +ingress-nginx nginx-ingress-controller-v874b 1/1 Running 0 30s +kube-system canal-jp4hz 3/3 Running 0 30s +kube-system canal-z2hg8 3/3 Running 0 30s +kube-system canal-z6kpw 3/3 Running 0 30s +kube-system kube-dns-7588d5b5f5-sf4vh 3/3 Running 0 30s +kube-system kube-dns-autoscaler-5db9bbb766-jz2k6 1/1 Running 0 30s +kube-system metrics-server-97bc649d5-4rl2q 1/1 Running 0 30s +kube-system rke-ingress-controller-deploy-job-bhzgm 0/1 Completed 0 30s +kube-system rke-kubedns-addon-deploy-job-gl7t4 0/1 Completed 0 30s +kube-system rke-metrics-addon-deploy-job-7ljkc 0/1 Completed 0 30s +kube-system rke-network-plugin-deploy-job-6pbgj 0/1 Completed 0 30s +``` + +这表示你已成功安装了可运行 Rancher Server 的 Kubernetes 集群。 + +### 5. 保存你的文件 + +:::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)。此文件包括用于完全访问集群的凭证。

_Kubernetes 集群状态文件仅在 RKE 版本是 0.2.0 或更高版本时生成。_ + +:::note + +后两个文件名中的 `rancher-cluster` 部分取决于你命名 RKE 集群配置文件的方式。 + +::: + +### 故障排除 + +参见[故障排除](../../../getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/troubleshooting.md)页面。 + + +### 后续操作 +[安装 Rancher](../../../pages-for-subheaders/install-upgrade-on-a-kubernetes-cluster.md) + diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-cluster-setup/rke2-for-rancher.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-cluster-setup/rke2-for-rancher.md new file mode 100644 index 00000000000..27386ce86c3 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-cluster-setup/rke2-for-rancher.md @@ -0,0 +1,167 @@ +--- +title: 为 Rancher 设置高可用的 RKE2 Kubernetes 集群 +shortTitle: 为 Rancher 配置 RKE2 +weight: 2 +--- +_已在 2.5.6 版本测试_ + +本文介绍了如何根据 [Rancher Server 环境的最佳实践](../../../reference-guides/rancher-manager-architecture/architecture-recommendations.md#kubernetes-安装环境)安装 Kubernetes 集群。 + +# 先决条件 + +以下说明假设你已参见[此章节](../infrastructure-setup/ha-rke2-kubernetes-cluster.md)配置好三个节点,一个负载均衡器和一个 DNS 记录。 + +为了让 RKE2 与负载均衡器正常工作,你需要设置两个监听器,一个用于 9345 端口,另一个用于 6443 端口的 Kubernetes API。 + +Rancher 需要安装在支持的 Kubernetes 版本上。如需了解你使用的 Rancher 版本支持哪些 Kubernetes 版本,请参见[支持维护条款](https://rancher.com/support-maintenance-terms/)。如需指定 RKE2 版本,请在运行 RKE2 安装脚本时,使用 `INSTALL_RKE2_VERSION` 环境变量。 +# 安装 Kubernetes + +### 1. 安装 Kubernetes 并设置 RKE2 Server + +RKE2 Server 使用嵌入式 etcd 运行。因此你不需要设置外部数据存储就可以在 HA 模式下运行。 + +在第一个节点上,使用你的预共享密文作为 Token 来设置配置文件。Token 参数可以在启动时设置。 + +如果你不指定预共享密文,RKE2 会生成一个预共享密文并将它放在 `/var/lib/rancher/rke2/server/node-token` 中。 + +为了避免固定注册地址的证书错误,请在启动 Server 时设置 `tls-san` 参数。这个选项在 Server 的 TLS 证书中增加一个额外的主机名或 IP 作为 Subject Alternative Name。如果你想通过 IP 和主机名访问,你可以将它指定为一个列表。 + +首先,创建用于存放 RKE2 配置文件的目录: + +``` +mkdir -p /etc/rancher/rke2/ +``` + +然后,参见以下示例在 `/etc/rancher/rke2/config.yaml` 中创建 RKE2 配置文件: + +``` +token: my-shared-secret +tls-san: + - my-kubernetes-domain.com + - another-kubernetes-domain.com +``` +之后,运行安装命令并启用和启动 RKE2: + +``` +curl -sfL https://get.rke2.io | INSTALL_RKE2_CHANNEL=v1.20 sh - +systemctl enable rke2-server.service +systemctl start rke2-server.service +``` +1. 要加入其余的节点,使用同一个共享或自动生成的 Token 来配置每个额外的节点。以下是配置文件的示例: + + token: my-shared-secret + server: https://:9345 + tls-san: + - my-kubernetes-domain.com + - another-kubernetes-domain.com +运行安装程序,然后启用并启动 RKE2: + + curl -sfL https://get.rke2.io | sh - + systemctl enable rke2-server.service + systemctl start rke2-server.service + + +1. 在第三 RKE2 Server 节点上运行同样的命令。 + +### 2. 检查 RKE2 是否正常运行 + +在所有 Server 节点上启动了 RKE2 Server 进程后,确保集群已经正常启动,请运行以下命令: + +``` +/var/lib/rancher/rke2/bin/kubectl \ + --kubeconfig /etc/rancher/rke2/rke2.yaml get nodes +现在,Server 节点的状态应该是 Ready。 +``` + +测试集群 Pod 的健康状况: +``` +/var/lib/rancher/rke2/bin/kubectl \ + --kubeconfig /etc/rancher/rke2/rke2.yaml get pods --all-namespaces +``` + +**结果**:你已成功配置 RKE2 Kubernetes 集群。 + +### 3. 保存并开始使用 kubeconfig 文件 + +在每个 Rancher Server 节点安装 RKE2 时,会在每个节点的 `/etc/rancher/rke2/rke2.yaml` 中生成一个 `kubeconfig` 文件。该文件包含访问集群的凭证。请将该文件保存在安全的位置。 + +如要使用该 `kubeconfig` 文件: + +1. 安装 Kubernetes 命令行工具 [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl)。 +2. 复制 `/etc/rancher/rke2/rke2.yaml` 文件并保存到本地主机的 `~/.kube/config` 目录上。 +3. 在 kubeconfig 文件中,`server` 的参数为 localhost。在端口 6443 上将服务器配置为 controlplane 负载均衡器的 DNS(RKE2 Kubernetes API Server 使用端口 6443,而 Rancher Server 将通过 NGINX Ingress 在端口 80 和 443 上提供服务。)以下是一个示例 `rke2.yaml`: + +```yml +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` 文件管理集群访问的部分。 + +### 4. 检查集群 Pod 的健康状况 + +现在你已经设置了 `kubeconfig` 文件。你可以使用 `kubectl` 在本地主机访问集群。 + +检查所有需要的 Pod 和容器是否健康: + +``` +/var/lib/rancher/rke2/bin/kubectl --kubeconfig /etc/rancher/rke2/rke2.yaml get pods -A +NAMESPACE NAME READY STATUS RESTARTS AGE +kube-system cloud-controller-manager-rke2-server-1 1/1 Running 0 2m28s +kube-system cloud-controller-manager-rke2-server-2 1/1 Running 0 61s +kube-system cloud-controller-manager-rke2-server-3 1/1 Running 0 49s +kube-system etcd-rke2-server-1 1/1 Running 0 2m13s +kube-system etcd-rke2-server-2 1/1 Running 0 87s +kube-system etcd-rke2-server-3 1/1 Running 0 56s +kube-system helm-install-rke2-canal-hs6sx 0/1 Completed 0 2m17s +kube-system helm-install-rke2-coredns-xmzm8 0/1 Completed 0 2m17s +kube-system helm-install-rke2-ingress-nginx-flwnl 0/1 Completed 0 2m17s +kube-system helm-install-rke2-metrics-server-7sggn 0/1 Completed 0 2m17s +kube-system kube-apiserver-rke2-server-1 1/1 Running 0 116s +kube-system kube-apiserver-rke2-server-2 1/1 Running 0 66s +kube-system kube-apiserver-rke2-server-3 1/1 Running 0 48s +kube-system kube-controller-manager-rke2-server-1 1/1 Running 0 2m30s +kube-system kube-controller-manager-rke2-server-2 1/1 Running 0 57s +kube-system kube-controller-manager-rke2-server-3 1/1 Running 0 42s +kube-system kube-proxy-rke2-server-1 1/1 Running 0 2m25s +kube-system kube-proxy-rke2-server-2 1/1 Running 0 59s +kube-system kube-proxy-rke2-server-3 1/1 Running 0 85s +kube-system kube-scheduler-rke2-server-1 1/1 Running 0 2m30s +kube-system kube-scheduler-rke2-server-2 1/1 Running 0 57s +kube-system kube-scheduler-rke2-server-3 1/1 Running 0 42s +kube-system rke2-canal-b9lvm 2/2 Running 0 91s +kube-system rke2-canal-khwp2 2/2 Running 0 2m5s +kube-system rke2-canal-swfmq 2/2 Running 0 105s +kube-system rke2-coredns-rke2-coredns-547d5499cb-6tvwb 1/1 Running 0 92s +kube-system rke2-coredns-rke2-coredns-547d5499cb-rdttj 1/1 Running 0 2m8s +kube-system rke2-coredns-rke2-coredns-autoscaler-65c9bb465d-85sq5 1/1 Running 0 2m8s +kube-system rke2-ingress-nginx-controller-69qxc 1/1 Running 0 52s +kube-system rke2-ingress-nginx-controller-7hprp 1/1 Running 0 52s +kube-system rke2-ingress-nginx-controller-x658h 1/1 Running 0 52s +kube-system rke2-metrics-server-6564db4569-vdfkn 1/1 Running 0 66s +``` + +**结果**:你可通过使用 `kubectl` 访问集群,并且 RKE2 集群能成功运行。现在,你可以在集群上安装 Rancher Management Server。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/checklist-for-production-ready-clusters/recommended-cluster-architecture.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/checklist-for-production-ready-clusters/recommended-cluster-architecture.md new file mode 100644 index 00000000000..41c4ee29fba --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/checklist-for-production-ready-clusters/recommended-cluster-architecture.md @@ -0,0 +1,74 @@ +--- +title: 推荐的集群架构 +weight: 1 +--- + +有三个角色可以分配给节点,分别是 `etcd`、`controlplane` 和 `worker`。 + +## 将 Worker 节点与具有其他角色的节点分开 + +在设计集群时,你有两种选择: + +* 为每个角色使用专用节点。这确保了特定角色所需组件的资源可用性。它还根据[端口要求](../node-requirements-for-rancher-managed-clusters.md#网络要求)严格隔离每个角色之间的网络流量。 +* 将 `etcd` 和 `controlplane` 角色分配给相同的节点。该节点必须满足这两个角色的硬件要求。 + +无论在哪种情况下,都不应该在具有 `etcd` 或 `controlplane` 角色的节点中使用或添加 `worker` 角色。 + +因此,每个节点的角色都有如下几种配置选择: + +* `etcd` +* `controlplane` +* `etcd` 和 `controlplane` +* `worker` + +## 每个角色的推荐节点数 + +集群应该有: + +- 至少拥有三个角色为 `etcd` 的节点,来确保失去一个节点时仍能存活。增加 etcd 节点数量能提高容错率,而将 etcd 分散到不同可用区甚至能获取更好的容错能力。 +- 至少两个节点具有 `controlplane` 角色,以实现主组件高可用性。 +- 至少两个具有 `worker` 角色的节点,用于在节点故障时重新安排工作负载。 + +有关每个角色的用途的更多信息,请参阅 [Kubernetes 中的节点角色](roles-for-nodes-in-kubernetes.md)。 + + +### controlplane 节点数 + +添加多个具有 `controlplane` 角色的节点,使每个主组件都具有高可用性。 + +### etcd 节点数 + +在保持集群可用性的同时,可以一次丢失的节点数由分配了 `etcd` 角色的节点数决定。对于具有 n 个成员的集群,最小值为 (n/2)+1。因此,我们建议在一个区域内的 3 个不同可用区中各创建一个 `etcd` 节点,以在一个可用区丢失的情况下存活。如果你只使用两个区域,那么在“多数节点”所在的可用区不可用时,你将会丢失 etcd 集群。 + +| 具有 `etcd` 角色的节点 | 多数节点 | 容错能力 | +|--------------|------------|-------------------| +| 1 | 1 | 0 | +| 2 | 2 | 0 | +| 3 | 2 | **1** | +| 4 | 3 | 1 | +| 5 | 3 | **2** | +| 6 | 4 | 2 | +| 7 | 4 | **3** | +| 8 | 5 | 3 | +| 9 | 5 | **4** | + +参考: + +* [最佳 etcd 集群大小的官方 etcd 文档](https://etcd.io/docs/v3.4.0/faq/#what-is-failure-tolerance) +* [为 Kubernetes 操作 etcd 集群的官方 Kubernetes 文档](https://kubernetes.io/docs/tasks/administer-cluster/configure-upgrade-etcd/) + +### Worker 节点数 + +添加多个具有 `worker` 角色的节点能确保一个节点出现故障时可以重新安排工作负载。 + +### 为什么 Rancher 集群和运行应用的集群的生产要求不同 + +你可能已经注意到我们的 [Kubernetes 安装](../../../../pages-for-subheaders/install-upgrade-on-a-kubernetes-cluster.md)说明并不符合我们对生产就绪集群的要求,这是因为 `worker` 角色没有专用节点。然而,你 Rancher 中的这个三节点集群是有效的,因为: + +* 它允许一个 `etcd` 节点故障。 +* 它通过多个 `controlplane` 节点来维护 master 组件的多个实例。 +* 此集群上没有创建除 Rancher 之外的其他工作负载。 + +## 参考 + +* [Kubernetes:主组件](https://kubernetes.io/docs/concepts/overview/components/#master-components) diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/checklist-for-production-ready-clusters/roles-for-nodes-in-kubernetes.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/checklist-for-production-ready-clusters/roles-for-nodes-in-kubernetes.md new file mode 100644 index 00000000000..9d463d72f58 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/checklist-for-production-ready-clusters/roles-for-nodes-in-kubernetes.md @@ -0,0 +1,51 @@ +--- +title: Kubernetes 中节点的角色 +weight: 1 +--- + +本节介绍 Kubernetes 中 etcd 节点、controlplane 节点和 worker 节点的角色,以及这些角色如何在集群中协同工作。 + +此图适用于 [Rancher 通过 RKE 部署的 Kubernetes 集群](../../../../pages-for-subheaders/launch-kubernetes-with-rancher.md): + +![集群图](/img/clusterdiagram.svg)
+线条表示组件之间的通信。而颜色纯粹用于视觉辅助。 + +## etcd + +具有 `etcd` 角色的节点运行 etcd,这是一个一致且高可用的键值存储,用作 Kubernetes 所有集群数据的后备存储。etcd 将数据复制到每个节点。 + +:::note + +具有 `etcd` 角色的节点在 UI 中显示为`不可调度`,即默认情况下不会将 Pod 调度到这些节点。 + +::: + +## controlplane + +具有 `controlplane` 角色的节点运行 Kubernetes 主组件(不包括 `etcd`,因为它是一个单独的角色)。有关组件的详细列表,请参阅 [Kubernetes:主组件](https://kubernetes.io/docs/concepts/overview/components/#master-components)。 + +:::note + +具有 `controlplane` 角色的节点在 UI 中显示为`不可调度`,即默认情况下不会将 Pod 调度到这些节点。 + +::: + +### kube-apiserver + +Kubernetes API Server (`kube-apiserver`) 能水平扩展。如果节点具有需要访问 Kubernetes API Server 的组件,则每个具有 `controlplane` 角色的节点都将被添加到节点上的 NGINX 代理中。这意味着如果一个节点变得不可访问,该节点上的本地 NGINX 代理会将请求转发到列表中的另一个 Kubernetes API Server。 + +### kube-controller-manager + +Kubernetes Controller Manager 使用 Kubernetes 中的端点进行 Leader 选举。`kube-controller-manager` 的一个实例将在 Kubernetes 端点中创建一个条目,并在配置的时间间隔内更新该条目。其他实例将看到一个状态为 Active 的 Leader,并等待该条目过期(例如节点无响应)。 + +### kube-scheduler + +Kubernetes 调度器使用 Kubernetes 中的端点进行 Leader 选举。`kube-scheduler` 的一个实例将在 Kubernetes 端点中创建一个条目,并在配置的时间间隔内更新该条目。其他实例将看到一个状态为 Active 的 Leader,并等待该条目过期(例如节点无响应)。 + +## worker + +具有 `worker` 角色的节点运行 Kubernetes 节点组件。有关组件的详细列表,请参阅 [Kubernetes:节点组件](https://kubernetes.io/docs/concepts/overview/components/#node-components)。 + +## 参考 + +* [Kubernetes:节点组件](https://kubernetes.io/docs/concepts/overview/components/#node-components) \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/about-rancher-agents.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/about-rancher-agents.md new file mode 100644 index 00000000000..0489a7aa51d --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/about-rancher-agents.md @@ -0,0 +1,42 @@ +--- +title: Rancher Agent +weight: 2400 +--- + +Rancher 管理的集群上部署了两种不同的 Agent 资源: + +- [cattle-cluster-agent](#cattle-cluster-agent) +- [cattle-node-agent](#cattle-node-agent) + +有关 Rancher Server 如何配置集群并与集群通信的概述,请参阅[产品架构](../../../../pages-for-subheaders/rancher-manager-architecture.md)。 + +### cattle-cluster-agent + +`cattle-cluster-agent` 用于连接 [Rancher 启动的 Kubernetes](../../../../pages-for-subheaders/launch-kubernetes-with-rancher.md) 集群的 Kubernetes API。`cattle-cluster-agent` 使用 Deployment 资源进行部署。 + +### cattle-node-agent + +`cattle-node-agent` 用于在执行集群操作时与 [Rancher 启动的 Kubernetes](../../../../pages-for-subheaders/launch-kubernetes-with-rancher.md) 集群中的节点进行交互。集群操作包括升级 Kubernetes 版本和创建/恢复 etcd 快照。`cattle-node-agent` 使用 DaemonSet 资源进行部署,以确保能在每个节点上运行。当 `cattle-cluster-agent` 不可用时,`cattle-node-agent` 可以作为备选方案,用来连接 [Rancher 启动的 Kubernetes](../../../../pages-for-subheaders/launch-kubernetes-with-rancher.md) 集群的 Kubernetes API。 + +### 调度规则 + +`cattle-cluster-agent` 使用如下一组固定的容忍度(如果集群中没有可见的 controlplane 节点),或基于应用于 controlplane 节点的污点动态添加的容忍度。这种结构允许[基于污点进行驱逐](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/#taint-based-evictions)为 `cattle-cluster-agent` 正常工作。默认的容忍度如下。如果集群中存在 controlplane 节点,则容忍度将替换为与 controlplane 节点的污点匹配的容忍度。 + +| 组件 | nodeAffinity nodeSelectorTerms | nodeSelector | 容忍度 | +| ---------------------- | ------------------------------------------ | ------------ | ------------------------------------------------------------------------------ | +| `cattle-cluster-agent` | `beta.kubernetes.io/os:NotIn:windows` | none | **注意**:这些是默认容忍度,并将替换为与 controlplane 节点的污点匹配的容忍度。

`effect:NoSchedule`
`key:node-role.kubernetes.io/controlplane`
`value:true`

`effect:NoSchedule`
`key:node-role.kubernetes.io/control-plane`
`operator:Exists`

`effect:NoSchedule`
`key:node-role.kubernetes.io/master`
`operator:Exists` | +| `cattle-node-agent` | `beta.kubernetes.io/os:NotIn:windows` | none | `operator:Exists` | + +`cattle-cluster-agent` Deployment 使用 `preferredDuringSchedulingIgnoredDuringExecution` 的首选调度规则,倾向于在具有 `controlplane` 节点的节点上进行调度。当集群中没有可见的 controlplane 节点时(通常是使用[提供商托管的 Kubernetes 的集群](../../../../pages-for-subheaders/set-up-clusters-from-hosted-kubernetes-providers.md)),你可以在节点上添加 `cattle.io/cluster-agent=true` 标签,从而优先将 `cattle-cluster-agent` pod 调度到该节点。 + +有关调度规则的更多信息,请参阅 [Kubernetes:将 Pod 分配给节点](https://kubernetes.io/docs/concepts/configuration/assign-pod-node/)。 + +`preferredDuringSchedulingIgnoredDuringExecution` 配置如下表所示: + +| 权重 | 表达式 | +| ------ | ------------------------------------------------ | +| 100 | `node-role.kubernetes.io/controlplane:In:"true"` | +| 100 | `node-role.kubernetes.io/control-plane:In:"true"` | +| 100 | `node-role.kubernetes.io/master:In:"true"` | +| 1 | `cattle.io/cluster-agent:In:"true"` | + diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/rke1-vs-rke2-differences.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/rke1-vs-rke2-differences.md new file mode 100644 index 00000000000..1c596170376 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/rke1-vs-rke2-differences.md @@ -0,0 +1,34 @@ +--- +title: RKE1 和 RKE2 差​​异 +weight: 2450 +--- + +RKE2,也称为 RKE Government,是一个完全符合标准的 Kubernetes 发行版,它专注于安全性和合规性。它被认为是 Rancher Kubernetes Engine(即 RKE1)的下一个迭代。 + +RKE1 和 RKE2 有一些细微的差异,本文将重点介绍这些差异。 + +### controlplane 组件 + +RKE1 使用 Docker 来部署和管理 controlplane 组件,还使用 Docker 作为 Kubernetes 的容器运行时。相比之下,RKE2 将 controlplane 组件作为由 kubelet 管理的静态 pod 启动。RKE2 的容器运行时是 containerd,它允许容器镜像仓库 mirror 等内容(RKE1 和 Docker 不允许)。 + +### Cluster API + +RKE2/K3s 配置是基于 Cluster API (CAPI) 上游框架之上构建的,这导致 RKE2 配置的集群的行为通常与 RKE1 配置的集群不同。 + +如果你在 RKE2 中更改集群配置,节点**可能**会重新配置。这是由 CAPI 控制器而不是 Rancher 控制的。请注意,etcd 节点不适用相同的行为。 + +以下是一些可能导致上述行为的配置更改示例: + +- 编辑集群并启用`删除前清空`时,会删除现有的 controlplane 节点和 worker 并创建新节点。 + +- 在配置节点并执行缩减操作时,可能会删除当前配置的节点并配置新的节点以达到所需的节点数,而不是缩减所需的节点数量。这是 Cluster API 的一个问题,即将发布的版本会修复这个问题。一旦修复,Rancher 会更新文档。 + +如果你是习惯于 RKE1 配置的用户,请注意新的 RKE2 行为。 + +### 名词解释 + +从 RKE1 到 RKE2,某些术语已更改或已不再使用。例如,在 RKE1中,你使用**节点模板**,而在 RKE2 中,你可以在创建或编辑集群时配置集群节点池。另一个例子是 RKE1 中的**节点池(node pool)** 现在在 RKE2 中称为**主机池(machine pool)**。 + + + + diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/set-up-cloud-providers/other-cloud-providers/amazon.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/set-up-cloud-providers/other-cloud-providers/amazon.md new file mode 100644 index 00000000000..4b84a16fa10 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/set-up-cloud-providers/other-cloud-providers/amazon.md @@ -0,0 +1,154 @@ +--- +title: 设置 Amazon 云提供商 +weight: 1 +--- + +使用 `Amazon` 云提供商时,你可以利用以下功能: + +- **负载均衡器**:在 **Port Mapping** 中选择 `Layer-4 Load Balancer` 或使用 `type: LoadBalancer` 启动 `Service` 时,启动 AWS 弹性负载均衡器 (ELB)。 +- **持久卷**:允许你将 AWS 弹性块存储 (EBS) 用于持久卷。 + +有关 Amazon 云提供商的所有信息,请参阅 [cloud-provider-aws 自述文件](https://kubernetes.github.io/cloud-provider-aws/)。 + +要设置 Amazon 云提供商: + +1. [创建一个 IAM 角色并附加到实例](#1-创建-iam-角色并附加到实例) +2. [配置 ClusterID](#2-创建-clusterid) + +### 1. 创建 IAM 角色并附加到实例 + +添加到集群的所有节点都必须能够与 EC2 交互,以便它们可以创建和删除资源。你可以使用附加到实例的 IAM 角色来启用交互。请参阅 [Amazon 文档:创建 IAM 角色](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html#create-iam-role) 来创建 IAM 角色。有两个示例策略: + +* 第一个策略适用于具有 `controlplane` 角色的节点。这些节点必须能够创建/删除 EC2 资源。以下 IAM 策略是一个示例,请根据你的实际用例移除不需要的权限。 +* 第二个策略适用于具有 `etcd` 或 `worker` 角色的节点。这些节点只需能够从 EC2 检索信息。 + +在创建 [Amazon EC2 集群](../../use-new-nodes-in-an-infra-provider/create-an-amazon-ec2-cluster.md)时,你必须在创建**节点模板**时填写创建的 IAM 角色的 **IAM Instance Profile Name**(不是 ARN)。 + +创建[自定义集群](../../../../../../pages-for-subheaders/use-existing-nodes.md)时,你必须手动将 IAM 角色附加到实例。 + +具有 `controlplane` 角色的节点的 IAM 策略: + +```json +{ +"Version": "2012-10-17", +"Statement": [ + { + "Effect": "Allow", + "Action": [ + "autoscaling:DescribeAutoScalingGroups", + "autoscaling:DescribeLaunchConfigurations", + "autoscaling:DescribeTags", + "ec2:DescribeInstances", + "ec2:DescribeRegions", + "ec2:DescribeRouteTables", + "ec2:DescribeSecurityGroups", + "ec2:DescribeSubnets", + "ec2:DescribeVolumes", + "ec2:CreateSecurityGroup", + "ec2:CreateTags", + "ec2:CreateVolume", + "ec2:ModifyInstanceAttribute", + "ec2:ModifyVolume", + "ec2:AttachVolume", + "ec2:AuthorizeSecurityGroupIngress", + "ec2:CreateRoute", + "ec2:DeleteRoute", + "ec2:DeleteSecurityGroup", + "ec2:DeleteVolume", + "ec2:DetachVolume", + "ec2:RevokeSecurityGroupIngress", + "ec2:DescribeVpcs", + "elasticloadbalancing:AddTags", + "elasticloadbalancing:AttachLoadBalancerToSubnets", + "elasticloadbalancing:ApplySecurityGroupsToLoadBalancer", + "elasticloadbalancing:CreateLoadBalancer", + "elasticloadbalancing:CreateLoadBalancerPolicy", + "elasticloadbalancing:CreateLoadBalancerListeners", + "elasticloadbalancing:ConfigureHealthCheck", + "elasticloadbalancing:DeleteLoadBalancer", + "elasticloadbalancing:DeleteLoadBalancerListeners", + "elasticloadbalancing:DescribeLoadBalancers", + "elasticloadbalancing:DescribeLoadBalancerAttributes", + "elasticloadbalancing:DetachLoadBalancerFromSubnets", + "elasticloadbalancing:DeregisterInstancesFromLoadBalancer", + "elasticloadbalancing:ModifyLoadBalancerAttributes", + "elasticloadbalancing:RegisterInstancesWithLoadBalancer", + "elasticloadbalancing:SetLoadBalancerPoliciesForBackendServer", + "elasticloadbalancing:AddTags", + "elasticloadbalancing:CreateListener", + "elasticloadbalancing:CreateTargetGroup", + "elasticloadbalancing:DeleteListener", + "elasticloadbalancing:DeleteTargetGroup", + "elasticloadbalancing:DescribeListeners", + "elasticloadbalancing:DescribeLoadBalancerPolicies", + "elasticloadbalancing:DescribeTargetGroups", + "elasticloadbalancing:DescribeTargetHealth", + "elasticloadbalancing:ModifyListener", + "elasticloadbalancing:ModifyTargetGroup", + "elasticloadbalancing:RegisterTargets", + "elasticloadbalancing:SetLoadBalancerPoliciesOfListener", + "iam:CreateServiceLinkedRole", + "kms:DescribeKey" + ], + "Resource": [ + "*" + ] + } +] +} +``` + +具有 `etcd` 或 `worker` 角色的节点的 IAM 策略: + +```json +{ +"Version": "2012-10-17", +"Statement": [ + { + "Effect": "Allow", + "Action": [ + "ec2:DescribeInstances", + "ec2:DescribeRegions", + "ecr:GetAuthorizationToken", + "ecr:BatchCheckLayerAvailability", + "ecr:GetDownloadUrlForLayer", + "ecr:GetRepositoryPolicy", + "ecr:DescribeRepositories", + "ecr:ListImages", + "ecr:BatchGetImage" + ], + "Resource": "*" + } +] +} +``` + +### 2. 创建 ClusterID + +以下资源需要使用 `ClusterID` 进行标记: + +- **Nodes**:Rancher 中添加的所有主机。 +- **Subnet**:集群使用的子网。 +- **Security Group**:用于你的集群的安全组。 + +:::note + +不要标记多个安全组。创建弹性负载均衡器 (ELB) 时,标记多个组会产生错误。 + +::: + +创建 [Amazon EC2 集群](../../use-new-nodes-in-an-infra-provider/create-an-amazon-ec2-cluster.md)时,会自动为创建的节点配置 `ClusterID`。其他资源仍然需要手动标记。 + +使用以下标签: + +**Key** = `kubernetes.io/cluster/CLUSTERID` **Value** = `owned` + +`CLUSTERID` 可以是任何字符串,只要它在所有标签集中相同即可。 + +将标签的值设置为 `owned` 会通知集群带有该标签的所有资源都由该集群拥有和管理。如果你在集群之间共享资源,你可以将标签更改为: + +**Key** = `kubernetes.io/cluster/CLUSTERID` **Value** = `shared`. + +### 使用 Amazon Elastic Container Registry (ECR) + +在将[创建 IAM 角色并附加到实例](#1-创建-iam-角色并附加到实例)中的 IAM 配置文件附加到实例时,kubelet 组件能够自动获取 ECR 凭证。使用低于 v1.15.0 的 Kubernetes 版本时,需要在集群中配置 Amazon 云提供商。从 Kubernetes 版本 v1.15.0 开始,kubelet 无需在集群中配置 Amazon 云提供商即可获取 ECR 凭证。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/set-up-cloud-providers/other-cloud-providers/azure.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/set-up-cloud-providers/other-cloud-providers/azure.md new file mode 100644 index 00000000000..f35b08e5c6b --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/set-up-cloud-providers/other-cloud-providers/azure.md @@ -0,0 +1,112 @@ +--- +title: 设置 Azure 云提供商 +weight: 2 +--- + +使用 `Azure` 云提供商时,你可以使用以下功能: + +- **负载均衡器**:在特定网络安全组中启动 Azure 负载均衡器。 + +- **持久卷**:支持将 Azure Blob 磁盘和 Azure 托管磁盘与标准和高级 Storage Account 一起使用。 + +- **网络存储**:通过 CIFS 挂载支持 Azure 文件。 + +Azure 订阅不支持以下账号类型: + +- 单租户账号(即没有订阅的账号)。 +- 多订阅账号。 + +# RKE 和 RKE2 的先决条件 + +要为 RKE 和 RKE2 设置 Azure 云提供商,你需要配置以下凭证: + +1. [设置 Azure 租户 ID](#1-设置-azure-租户-id) +2. [设置 Azure 客户端 ID 和 Azure 客户端密码](#2-设置-azure-客户端-id-和-azure-客户端密码) +3. [配置应用注册权限](#3-配置应用注册权限) +4. [设置 Azure 网络安全组名称](#4-设置-azure-网络安全组名称) + +### 1. 设置 Azure 租户 ID + +访问 [Azure 门户](https://portal.azure.com),登录并转到 **Azure Active Directory**,然后选择 **Properties**。你的 **Directory ID** 是你的 **Tenant ID** (tenantID)。 + +如果要使用 Azure CLI,你可以运行 `az account show` 命令来获取信息。 + +### 2. 设置 Azure 客户端 ID 和 Azure 客户端密码 + +访问 [Azure 门户](https://portal.azure.com),登录并按照以下步骤创建 **App Registration** 和对应的 **Azure Client ID** (aadClientId) 以及 **Azure Client Secret** (aadClientSecret)。 + +1. 选择 **Azure Active Directory**。 +1. 选择 **App registrations**。 +1. 选择 **New application registration**。 +1. 选择 **Name**,选择 `Web app/API` 作为 **Application Type**,并选择任意 **Sign-on URL**。 +1. 选择 **Create**。 + +在 **App registrations** 视图中,你应该会看到你创建的应用注册。**APPLICATION ID** 列中显示的值是需要用作 **Azure Client ID** 的值。 + +下一步是生成 **Azure Client Secret**: + +1. 打开你创建的应用注册。 +1. 在 **Settings** 视图中,打开 **Keys**。 +1. 输入 **Key description**,选择过期时间,然后选择 **Save**。 +1. **Value** 列中显示的生成值是需要用作 **Azure Client Secret** 的值。该值只会显示一次。 + +### 3. 配置应用注册权限 + +最后,为你的应用注册分配适当的权限: + +1. 前往 **More services**,搜索 **Subscriptions** 并打开它。 +1. 打开 **Access control (IAM)**。 +1. 选择 **Add**。 +1. 在 **Role** 中选择 `Contributor`。 +1. 在 **Select** 中选择你创建的应用注册的名称。 +1. 选择 **Save**。 + +### 4. 设置 Azure 网络安全组名称 + +要使 Azure 负载均衡器正常工作,你需要自定义一个 Azure 网络安全组 (securityGroupName)。 + +如果你使用 Rancher Machine Azure 驱动来配置主机,则需要手动编辑主机,从而将主机分配给此网络安全组。 + +你需要在配置期间将自定义主机分配给此网络安全组。 + +只有需要成为负载均衡器后端的主机才需要分配到该组。 + +# Rancher 中的 RKE2 集群设置 + +1. 在**集群配置**中的**云提供商**下拉列表中选择 **Azure**。 + +1. + * 配置云提供商。请注意,Rancher 会自动创建新的网络安全组、资源组、可用性集、子网和虚拟网络。如果你已经创建了其中的一部分或全部,则需要在创建集群之前指定它们。 + * 你可以单击**显示高级选项**以查看更多自动生成的名称,并在需要的时候更新它们。你的云提供商配置**必须**与**主机池**中的字段匹配。如果你有多个池,它们必须使用相同的资源组、可用性集、子网、虚拟网络和网络安全组。 + * 下面提供了一个示例。你可以根据需要对其进行修改。 + +
+ 云提供商配置示例 + + ```yaml + { + "cloud":"AzurePublicCloud", + "tenantId": "YOUR TENANTID HERE", + "aadClientId": "YOUR AADCLIENTID HERE", + "aadClientSecret": "YOUR AADCLIENTSECRET HERE", + "subscriptionId": "YOUR SUBSCRIPTIONID HERE", + "resourceGroup": "docker-machine", + "location": "westus", + "subnetName": "docker-machine", + "securityGroupName": "rancher-managed-KA4jV9V2", + "securityGroupResourceGroup": "docker-machine", + "vnetName": "docker-machine-vnet", + "vnetResourceGroup": "docker-machine", + "primaryAvailabilitySetName": "docker-machine", + "routeTableResourceGroup": "docker-machine", + "cloudProviderBackoff": false, + "useManagedIdentityExtension": false, + "useInstanceMetadata": true + } + ``` + +
+ +1. 在**集群配置 > 高级选项**、中,单击**补充的 Controller Manager 参数**下的**添加**,并添加 `--configure-cloud-routes=false` 标志。 + +1. 单击**创建**按钮来提交表单并创建集群。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/set-up-cloud-providers/other-cloud-providers/google-compute-engine.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/set-up-cloud-providers/other-cloud-providers/google-compute-engine.md new file mode 100644 index 00000000000..cb184a806b1 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/set-up-cloud-providers/other-cloud-providers/google-compute-engine.md @@ -0,0 +1,58 @@ +--- +title: 设置 Google Compute Engine 云提供商 +weight: 3 +--- + +在本节中,你将了解如何在 Rancher 中为自定义集群启用 Google Compute Engine (GCE) 云提供商。自定义集群指的是 Rancher 在现有节点上安装 Kubernetes 的集群。 + +详情请参见 [GCE 云提供商的官方 Kubernetes 文档](https://kubernetes.io/docs/concepts/cluster-administration/cloud-providers/#gce)。 + +:::note 先决条件: + +GCE 上的 `Identity` ServiceAccount 和 API 访问需要`Computer Admin`权限。 + +::: + +如果你使用 Calico: + +1. 点击 **☰ > 集群管理**。 +1. 在**集群**页面中,进入自定义集群,点击 **⋮ > 编辑 YAML** 并输入如下配置: + + ```yaml + rancher_kubernetes_engine_config: + cloud_provider: + name: gce + customCloudProvider: |- + [Global] + project-id= + network-name= + subnetwork-name= + node-instance-prefix= + node-tags= + network: + options: + calico_cloud_provider: "gce" + plugin: "calico" + ``` + +如果你使用 Canal 或 Flannel: + +1. 点击 **☰ > 集群管理**。 +1. 在**集群**页面中,进入自定义集群,点击 **⋮ > 编辑 YAML** 并输入如下配置: + + ```yaml + rancher_kubernetes_engine_config: + cloud_provider: + name: gce + customCloudProvider: |- + [Global] + project-id= + network-name= + subnetwork-name= + node-instance-prefix= + node-tags= + services: + kube_controller: + extra_args: + configure-cloud-routes: true # we need to allow the cloud provider configure the routes for the hosts + ``` diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/set-up-cloud-providers/vsphere/configure-in-tree-vsphere.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/set-up-cloud-providers/vsphere/configure-in-tree-vsphere.md new file mode 100644 index 00000000000..7dcb7c04db5 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/set-up-cloud-providers/vsphere/configure-in-tree-vsphere.md @@ -0,0 +1,21 @@ +--- +title: 配置树内 vSphere 云提供商 +shortTitle: 树内云提供商 +weight: 10 +--- + +要设置树内 vSphere 云提供商,请在 Rancher 中创建 vSphere 集群时按照以下步骤操作: + +1. 将 **Cloud Provider** 选项设置为 `Custom` 或 `Custom (In-Tree)`。 +1. 单击**以 YAML 文件编辑**。 +1. 将以下结构插入到预填充的集群 YAML。这个结构必须放在 `rancher_kubernetes_engine_config` 下。请注意,`name` *必须*设置为 `vsphere`。 + + ```yaml + rancher_kubernetes_engine_config: + cloud_provider: + name: vsphere + vsphereCloudProvider: + [Insert provider configuration] + ``` + +Rancher 使用 RKE(Rancher Kubernetes Engine)来配置 Kubernetes 集群。有关 `vsphereCloudProvider` 的属性的详细信息,请参阅 RKE 文档中的 [vSphere 配置参考](https://rancher.com/docs/rke/latest/en/config-options/cloud-providers/vsphere/config-reference/)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/set-up-cloud-providers/vsphere/configure-out-of-tree-vsphere.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/set-up-cloud-providers/vsphere/configure-out-of-tree-vsphere.md new file mode 100644 index 00000000000..b145f3e7444 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/set-up-cloud-providers/vsphere/configure-out-of-tree-vsphere.md @@ -0,0 +1,66 @@ +--- +title: 配置树外 vSphere 云提供商 +shortTitle: 树外云提供商 +weight: 10 +--- + +Kubernetes 正在逐渐不在树内维护云提供商。vSphere 有一个树外云提供商,可通过安装 vSphere 云提供商和云存储插件来使用。 + +本页介绍如何在启动集群后安装 Cloud Provider Interface (CPI) 和 Cloud Storage Interface (CSI) 插件。 + +# 先决条件 + +支持的 vSphere 版本: + +* 6.7u3 +* 7.0u1 或更高版本。 + +Kubernetes 版本必须为 1.19 或更高版本。 + +树外 vSphere 云提供商要求使用 Linux 节点,不支持 Windows 节点。 + +# 安装 + +在安装云存储接口 (CSI) 之前,应先安装云提供商接口 (CPI)。 + +### 1. 创建 vSphere 集群 + +1. 点击 **☰ > 集群管理**。 +1. 在**集群**页面上,单击**创建**。 +1. 单击 **VMware vSphere** 或 **自定义**。 +1. 在**集群配置**的**基本信息**选项卡中,将**云提供商**设置为 **vSphere**。 +1. 在**附加配置**选项卡中,设置 vSphere Cloud Provider (CPI) 和 Storage Provider (CSI) 选项。 +1. 完成集群创建。 + +### 2. 安装 CPI 插件 + +1. 点击 **☰ > 集群管理**。 +1. 转到将安装 vSphere CPI 插件的集群,然后单击 **Explore**。 +1. 单击**应用 & 应用市场 > Chart**。 +1. 单击 **vSphere CPI**。 +1. 填写所需的 vCenter 详细信息。 +1. vSphere CPI 使用 vSphere CSI 驱动所需的 ProviderID 来初始化所有节点。在使用以下命令安装 CSI 驱动之前,检查是否所有节点都使用 ProviderID 进行了初始化: + + ``` + kubectl describe nodes | grep "ProviderID" + ``` + +### 3. 安装 CSI 插件 + +1. 点击 **☰ > 集群管理**。 +1. 转到将安装 vSphere CSI 插件的集群,然后单击 **Explore**。 +1. 单击**应用 & 应用市场 > Chart**。 +1. 单击 **vSphere CSI**。 +1. 单击**安装**。 +1. 填写所需的 vCenter 详细信息。在**功能**选项卡中,将**启用 CSI 迁移**设置为 **false**。 +3. 在**存储**选项卡中,填写 StorageClass 的详细信息。此 Chart 使用 `csi.vsphere.vmware.com` 作为置备程序来创建一个 StorageClass。 +1. 单击**安装**。 + + +# 使用 CSI 驱动来置备卷 + +CSI chart 默认创建一个 storageClass。 + +如果在启动 chart 时未选择该选项,请使用 `csi.vsphere.vmware.com` 作为置备程序来创建一个 storageClass。 + +使用此 StorageClass 置备的所有卷都将由 CSI 驱动配置。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/set-up-cloud-providers/vsphere/migrate-from-in-tree-to-out-of-tree.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/set-up-cloud-providers/vsphere/migrate-from-in-tree-to-out-of-tree.md new file mode 100644 index 00000000000..e61816a534c --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/set-up-cloud-providers/vsphere/migrate-from-in-tree-to-out-of-tree.md @@ -0,0 +1,108 @@ +--- +title: 将 vSphere 树内卷迁移到 CSI +weight: 5 +--- +Kubernetes 正在逐渐不在树内维护云提供商。vSphere 有一个树外云提供商,可通过安装 vSphere 云提供商和云存储插件来使用。 + +本页介绍如何从树内 vSphere 云提供商迁移到树外,以及如何在迁移后管理现有虚拟机。 + +本文遵循官方 [vSphere 迁移文档](https://vsphere-csi-driver.sigs.k8s.io/features/vsphere_csi_migration.html)中提供的步骤,并介绍了要在 Rancher 中执行的步骤。 + +### Cloud-config 格式限制 + +由于 vSphere CSI 中的现有错误,使用以下 cloud-config 格式配置的现有卷将不会迁移。 + +如果 cloud-config 具有以下格式的 datastore 和资源池路径,vsphere CSI 驱动将无法识别它: + +```yaml +default-datastore: /datastore/ +resourcepool-path: "/host//Resources/" +``` + +格式如下的使用树内提供商预置的卷将能正确迁移: + +```yaml +default-datastore: +resourcepool-path: "/Resources/" +``` + +上游 bug:https://github.com/kubernetes-sigs/vsphere-csi-driver/issues/628 + +跟踪此 bug 的 Rancher issue:https://github.com/rancher/rancher/issues/31105 + +# 先决条件 + +- vSphere CSI 迁移需要 vSphere 7.0u1。为了管理现有的树内 vSphere 卷,请将 vSphere 升级到 7.0u1。 +- Kubernetes 版本必须为 1.19 或更高版本。 + +# 迁移 + +### 1. 安装 CPI 插件 + +在安装 CPI 之前,我们需要使用 `node.cloudprovider.kubernetes.io/uninitialized=true:NoSchedule` 为所有节点添加污点。 + +这可以通过运行以下命令来完成: + +``` +curl -O https://raw.githubusercontent.com/rancher/helm3-charts/56b622f519728378abeddfe95074f1b87ab73b1e/charts/vsphere-cpi/taints.sh +``` + +或者: + +``` +wget https://raw.githubusercontent.com/rancher/helm3-charts/56b622f519728378abeddfe95074f1b87ab73b1e/charts/vsphere-cpi/taints.sh +chmod +x taints.sh +./taints.sh +``` + +通过运行脚本为所有节点添加污点后,启动 Helm vSphere CPI Chart: + +1. 点击 **☰ > 集群管理**。 +1. 转到将安装 vSphere CPI chart 的集群,然后单击 **Explore**。 +1. 单击**应用 & 应用市场 > Chart**。 +1. 单击 **vSphere CPI**。 +1. 单击**安装**。 +1. 填写所需的 vCenter 详细信息,然后单击**安装**。 + +vSphere CPI 使用 vSphere CSI 驱动所需的 ProviderID 来初始化所有节点。 + +运行以下命令,检查是否已使用 ProviderID 初始化了所有节点: + +``` +kubectl describe nodes | grep "ProviderID" +``` + +### 2. 安装 CSI 驱动 + +1. 点击 **☰ > 集群管理**。 +1. 转到将安装 vSphere CSI chart 的集群,然后单击 **Explore**。 +1. 单击**应用 & 应用市场 > Chart**。 +1. 单击 **vSphere CSI**。 +1. 单击**安装**。 +1. 填写所需的 vCenter 详细信息,然后单击**安装**。 +1. 选中**在安装前自定义 Helm 选项**,然后单击**下一步**。 +1. 在**功能**选项卡中,选中**启用 CSI 迁移**。 +1. 你也可以转到**存储**选项卡并设置 datastore。此 Chart 使用 `csi.vsphere.vmware.com` 作为置备程序来创建一个 StorageClass。在创建此 StorageClass 时,你也可以提供用于配置 CSI 卷的 datastore URL。通过选择 datastore 并转到**概述**选项卡,你可以在 vSphere 客户端中找到 datastore URL。填写 StorageClass 的详细信息。 +1. 单击**安装**。 + +### 3. 编辑集群以启用 CSI 迁移的功能开关 + +1. 在编辑集群时,如果 Kubernetes 版本低于 1.19,请从 **Kubernetes 版本**下拉菜单中选择 Kubernetes 1.19 或更高版本。 +2. 要启用功能开关,请单击**以 YAML 文件编辑**,然后在 kube-controller 和 kubelet 下添加以下内容: + + ```yaml + extra_args: + feature-gates: "CSIMigration=true,CSIMigrationvSphere=true" + ``` + +### 4. 清空 worker 节点 + +在更改 kubelet 和 kube-controller-manager 参数之前,必须在升级期间清空 worker 节点: + + +1. 点击 **☰ > 集群管理**。 +1. 转到要清空 worker 节点的集群,然后单击 **⋮ > 编辑配置**。 +1. 在**高级选项**中,将**最大不可用的 Worker 节点数**字段设置为 1。 +1. 要在升级期间清空节点,请选择**清空节点 > 是**。 +1. 将**强制**和**删除本地数据**设置为 **true**。 +1. 点击**保存**以升级集群。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/use-new-nodes-in-an-infra-provider/create-a-digitalocean-cluster.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/use-new-nodes-in-an-infra-provider/create-a-digitalocean-cluster.md new file mode 100644 index 00000000000..819a79e1faa --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/use-new-nodes-in-an-infra-provider/create-a-digitalocean-cluster.md @@ -0,0 +1,103 @@ +--- +title: 创建 DigitalOcean 集群 +shortTitle: DigitalOcean +weight: 2215 +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +在本节中,你将学习如何使用 Rancher 在 DigitalOcean 中安装 [RKE](https://rancher.com/docs/rke/latest/en/) Kubernetes 集群。 + +首先,在 Rancher 中设置你的 DigitalOcean 云凭证。然后,使用云凭证创建一个节点模板,Rancher 将使用该模板在 DigitalOcean 中配置新节点。 + +然后,在 Rancher 中创建一个 DigitalOcean 集群,并在配置新集群时为集群定义节点池。每个节点池都有一个 etcd、controlplane 或 worker 的 Kubernetes 角色。Rancher 会在新节点上安装 RKE Kubernetes,并为每个节点设置节点池定义的 Kubernetes 角色。 + + + + +1. [创建云凭证](#1-创建云凭证) +2. [使用云凭证创建节点模板](#2-使用云凭证创建节点模板) +3. [使用节点模板创建具有节点池的集群](#3-使用节点模板创建具有节点池的集群) + +### 1. 创建云凭证 + +1. 点击 **☰ > 集群管理**。 +1. 单击**云凭证**。 +1. 单击**创建**。 +1. 单击 **DigitalOcean**。 +1. 输入你的 Digital Ocean 凭证。 +1. 单击**创建**。 + +**结果**:已创建用于在集群中配置节点的云凭证。你可以在其他节点模板或集群中复用这些凭证。 + +### 2. 使用云凭证创建节点模板 + +为 DigitalOcean 创建[节点模板](../../../../../pages-for-subheaders/use-new-nodes-in-an-infra-provider.md#节点模板) 会允许 Rancher 在 DigitalOcean 中配置新节点。其他集群可以复用节点模板。 + +1. 点击 **☰ > 集群管理**。 +1. 单击 **RKE1 配置 > 节点模板**。 +1. 单击**添加模板**。 +1. 单击 **DigitalOcean**。 +1. 填写 DigitalOcean 的节点模板。有关填写表单的帮助,请参阅 [DigitalOcean 节点模板配置](../../../../../reference-guides/cluster-configuration/downstream-cluster-configuration/node-template-configuration/digitalocean.md)。 + +### 3. 使用节点模板创建具有节点池的集群 + +1. 点击 **☰ > 集群管理**。 +1. 在**集群**页面上,单击**创建**。 +1. 单击 **DigitalOcean**。 +1. 输入**集群名称**。 +1. 将一个或多个节点池添加到你的集群。将一个或多个节点池添加到你的集群。每个节点池都使用节点模板来配置新节点。有关节点池的更多信息,包括为节点分配 Kubernetes 角色的最佳实践,请参阅[本节](../../../../../pages-for-subheaders/use-new-nodes-in-an-infra-provider.md)。 +1. 在**集群配置**中,选择要安装的 Kubernetes 版本、要使用的网络提供商,以及是否启用项目网络隔离。要查看更多集群选项,请单击**显示高级选项**。如需获取配置集群的帮助,请参阅 [RKE 集群配置参考](../../../../../reference-guides/cluster-configuration/rancher-server-configuration/rke1-cluster-configuration.md)。 +1. 使用**成员角色**为集群配置用户授权。点击**添加成员**添加可以访问集群的用户。使用**角色**下拉菜单为每个用户设置权限。 +1. 单击**创建**。 + + + + +### 1. 创建云凭证 + +如果你已经有一组可用的云凭证,请跳过此部分。 + +1. 点击 **☰ > 集群管理**。 +1. 单击**云凭证**。 +1. 单击**创建**。 +1. 单击 **DigitalOcean**。 +1. 输入你的 Digital Ocean 凭证。 +1. 单击**创建**。 + +### 2. 创建你的集群 + +使用 Rancher 在 DigitalOcean 中创建 Kubernetes 集群。 + +1. 点击 **☰ > 集群管理**。 +1. 在**集群**页面上,单击**创建**。 +1. 将开关切换到 **RKE2/K3s**。 +1. 单击 **DigitalOcean**。 +1. 选择一个**云凭证**。如果存在多个则需要选择。否则,它是预选的。 +1. 输入**集群名称**。 +1. 为每个 Kubernetes 角色创建一个主机池。请参阅[最佳实践](../../../../../pages-for-subheaders/use-new-nodes-in-an-infra-provider.md#rke2-中的节点角色)了解角色分配和计数的建议。 + 1. 为每个主机池定义主机配置。有关配置选项的信息,请参阅 [DigitalOcean 主机配置参考](../../../../../reference-guides/cluster-configuration/downstream-cluster-configuration/machine-configuration/digitalocean.md)。 +1. 使用**集群配置**,选择要安装的 Kubernetes 版本、要使用的网络提供商,以及是否启用项目网络隔离。有关配置集群的帮助,请参阅 [RKE2 集群配置参考](../../../../../reference-guides/cluster-configuration/rancher-server-configuration/rke2-cluster-configuration.md)。 +1. 使用**成员角色**为集群配置用户授权。点击**添加成员**添加可以访问集群的用户。使用**角色**下拉菜单为每个用户设置权限。 +1. 单击**创建**。 + + + + +**结果**: + +你已创建集群,集群的状态是**配置中**。Rancher 已在你的集群中。 + +当集群状态变为 **Active** 后,你可访问集群。 + +**Active** 状态的集群会分配到两个项目: + +- `Default`:包含 `default` 命名空间 +- `System`:包含 `cattle-system`,`ingress-nginx`,`kube-public` 和 `kube-system` 命名空间。 +# 可选的后续步骤 + +创建集群后,你可以通过 Rancher UI 访问集群。最佳实践建议你设置以下访问集群的备用方式: + +- **通过 kubectl CLI 访问你的集群**:按照[这些步骤](../../../../advanced-user-guides/manage-clusters/access-clusters/use-kubectl-and-kubeconfig.md#在工作站使用-kubectl-访问集群)在你的工作站上使用 kubectl 访问集群。在这种情况下,你将通过 Rancher Server 的身份验证代理进行身份验证,然后 Rancher 会让你连接到下游集群。此方法允许你在没有 Rancher UI 的情况下管理集群。 +- **通过 kubectl CLI 使用授权的集群端点访问你的集群**:按照[这些步骤](../../../../advanced-user-guides/manage-clusters/access-clusters/use-kubectl-and-kubeconfig.md#直接使用下游集群进行身份验证)直接使用 kubectl 访问集群,而无需通过 Rancher 进行身份验证。我们建议设置此替代方法来访问集群,以便在无法连接到 Rancher 时访问集群。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/use-new-nodes-in-an-infra-provider/create-an-amazon-ec2-cluster.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/use-new-nodes-in-an-infra-provider/create-an-amazon-ec2-cluster.md new file mode 100644 index 00000000000..11668980911 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/use-new-nodes-in-an-infra-provider/create-an-amazon-ec2-cluster.md @@ -0,0 +1,288 @@ +--- +title: 创建 Amazon EC2 集群 +shortTitle: Amazon EC2 +description: 了解使用 Rancher 创建 Amazon EC2 集群所需的先决条件和步骤 +weight: 2210 +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +在本节中,你将学习如何使用 Rancher 在 Amazon EC2 中安装 [RKE](https://rancher.com/docs/rke/latest/en/) Kubernetes 集群。 + +首先,在 Rancher 中设置你的 EC2 云凭证。然后,使用云凭证创建一个节点模板,Rancher 将使用该模板在 EC2 中配置新节点。 + +然后,在 Rancher 中创建一个 EC2 集群,并在配置新集群时为集群定义节点池。每个节点池都有一个 etcd、controlplane 或 worker 的 Kubernetes 角色。Rancher 会在新节点上安装 RKE Kubernetes,并为每个节点设置节点池定义的 Kubernetes 角色。 + +### 先决条件 + +- **AWS EC2 访问密钥和密文密钥**,用于创建实例。请参阅 [Amazon 文档:创建访问密钥](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html#Using_CreateAccessKey)来创建访问密钥和密文密钥。 +- **已创建 IAM 策略**,用于为用户添加的访问密钥和密文密钥。请参阅 [Amazon 文档:创建 IAM 策略(控制台)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-start)来创建 IAM 策略。参阅下面的三个示例 JSON 策略: + - [IAM 策略示例](#iam-策略示例) + - [带有 PassRole 的 IAM 策略示例](#带有-passrole-的-iam-策略示例)(如果要使用 [Kubernetes 云提供商](../../../../../pages-for-subheaders/set-up-cloud-providers.md),或将 IAM 配置文件传递给实例,则需要) + - [允许加密 EBS 卷的 IAM 策略示例](#允许加密-ebs-卷的-iam-策略示例) +- 为用户添加 **IAM 策略权限**。请参阅 [Amazon 文档:为用户添加权限(控制台)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console),来将权限添加给用户。 + +# 创建 EC2 集群 + +创建集群的步骤因 Rancher 版本而异。 + + + + +1. [创建云凭证](#1-创建云凭证) +2. [使用云凭证和 EC2 的信息来创建节点模板](#2-使用云凭证和-ec2-的信息来创建节点模板) +3. [使用节点模板创建具有节点池的集群](#3-使用节点模板创建具有节点池的集群) + +### 1. 创建云凭证 + +1. 点击 **☰ > 集群管理**。 +1. 单击**云凭证**。 +1. 单击**创建**。 +1. 单击 **Amazon**。 +1. 输入云凭证的名称。 +1. 在**默认区域**字段中,选择集群节点所在的 AWS 区域。 +1. 输入 AWS EC2 **Access Key** 和 **Secret Key**。 +1. 单击**创建**。 + +**结果**:已创建用于在集群中配置节点的云凭证。你可以在其他节点模板或集群中复用这些凭证。 + +### 2. 使用云凭证和 EC2 的信息来创建节点模板 + +为 EC2 创建[节点模板](../../../../../pages-for-subheaders/use-new-nodes-in-an-infra-provider.md#节点模板)会允许 Rancher 在 EC2 中配置新节点。其他集群可以复用节点模板。 + +1. 点击 **☰ > 集群管理**。 +1. 单击 **RKE1 配置 > 节点模板**。 +1. 单击**添加模板**。 +1. 填写 EC2 的节点模板。有关填写表单的帮助,请参阅 [EC2 节点模板配置](../../../../../reference-guides/cluster-configuration/downstream-cluster-configuration/node-template-configuration/amazon-ec2.md)。 +1. 单击**创建**。 + + :::note + + 如果要使用[双栈](https://kubernetes.io/docs/concepts/services-networking/dual-stack/)功能,请关注其他额外的[要求](https://rancher.com/docs/rke//latest/en/config-options/dual-stack#requirements)。 + + ::: + +### 3. 使用节点模板创建具有节点池的集群 + +将一个或多个节点池添加到你的集群。有关节点池的更多信息,请参阅[本节](../../../../../pages-for-subheaders/use-new-nodes-in-an-infra-provider.md)。 + +1. 点击 **☰ > 集群管理**。 +1. 在**集群**页面上,单击**创建**。 +1. 单击 **Amazon EC2**。 +1. 为每个 Kubernetes 角色创建一个节点池。为每个节点池选择你已创建的节点模板。有关节点池的更多信息,包括为节点分配 Kubernetes 角色的最佳实践,请参阅[本节](../../../../../pages-for-subheaders/use-new-nodes-in-an-infra-provider.md)。 +1. 点击**添加成员**添加可以访问集群的用户。使用**角色**下拉菜单为每个用户设置权限。 +1. 使用**集群选项**选择要安装的 Kubernetes 版本、要使用的网络提供商,以及是否启用项目网络隔离。参见[选择云提供商](../../../../../pages-for-subheaders/set-up-cloud-providers.md)来配置 Kubernetes 云提供商。如需获取配置集群的帮助,请参阅 [RKE 集群配置参考](../../../../../reference-guides/cluster-configuration/rancher-server-configuration/rke1-cluster-configuration.md)。 + + :::note + + 如果要使用[双栈](https://kubernetes.io/docs/concepts/services-networking/dual-stack/)功能,请关注其他额外的[要求](https://rancher.com/docs/rke//latest/en/config-options/dual-stack#requirements)。 + + ::: + +1. 单击**创建**。 + + + + +### 1. 创建云凭证 + +如果你已经有一组可用的云凭证,请跳过此部分。 + +1. 点击 **☰ > 集群管理**。 +1. 单击**云凭证**。 +1. 单击**创建**。 +1. 单击 **Amazon**。 +1. 输入云凭证的名称。 +1. 在**默认区域**字段中,选择集群节点所在的 AWS 区域。 +1. 输入 AWS EC2 **Access Key** 和 **Secret Key**。 +1. 单击**创建**。 + +**结果**:已创建用于在集群中配置节点的云凭证。你可以在其他节点模板或集群中复用这些凭证。 + +### 2. 创建你的集群 + +1. 点击 **☰ > 集群管理**。 +1. 在**集群**页面上,单击**创建**。 +1. 将开关切换到 **RKE2/K3s**。 +1. 单击 **Amazon EC2**。 +1. 选择一个**云凭证**。如果存在多个则需要选择。否则,它是预选的。 +1. 输入**集群名称**。 +1. 为每个 Kubernetes 角色创建一个主机池。请参阅[最佳实践](../../../../../pages-for-subheaders/use-new-nodes-in-an-infra-provider.md#rke2-中的节点角色)了解角色分配和计数的建议。 + 1. 为每个主机池定义主机配置。有关配置选项的信息,请参阅 [EC2 主机配置参考](../../../../../reference-guides/cluster-configuration/downstream-cluster-configuration/machine-configuration/amazon-ec2.md)。 +1. 使用**集群配置**,选择要安装的 Kubernetes 版本、要使用的网络提供商,以及是否启用项目网络隔离。有关配置集群的帮助,请参阅 [RKE2 集群配置参考](../../../../../reference-guides/cluster-configuration/rancher-server-configuration/rke2-cluster-configuration.md)。 +1. 使用**成员角色**为集群配置用户授权。点击**添加成员**添加可以访问集群的用户。使用**角色**下拉菜单为每个用户设置权限。 +1. 单击**创建**。 + + + + +**结果**: + +你已创建集群,集群的状态是**配置中**。Rancher 已在你的集群中。 + +当集群状态变为 **Active** 后,你可访问集群。 + +**Active** 状态的集群会分配到两个项目: + +- `Default`:包含 `default` 命名空间 +- `System`:包含 `cattle-system`,`ingress-nginx`,`kube-public` 和 `kube-system` 命名空间。 + +### 可选的后续步骤 + +创建集群后,你可以通过 Rancher UI 访问集群。最佳实践建议你设置以下访问集群的备用方式: + +- **通过 kubectl CLI 访问你的集群**:按照[这些步骤](../../../../advanced-user-guides/manage-clusters/access-clusters/use-kubectl-and-kubeconfig.md#在工作站使用-kubectl-访问集群)在你的工作站上使用 kubectl 访问集群。在这种情况下,你将通过 Rancher Server 的身份验证代理进行身份验证,然后 Rancher 会让你连接到下游集群。此方法允许你在没有 Rancher UI 的情况下管理集群。 +- **通过 kubectl CLI 使用授权的集群端点访问你的集群**:按照[这些步骤](../../../../advanced-user-guides/manage-clusters/access-clusters/use-kubectl-and-kubeconfig.md#直接使用下游集群进行身份验证)直接使用 kubectl 访问集群,而无需通过 Rancher 进行身份验证。我们建议设置此替代方法来访问集群,以便在无法连接到 Rancher 时访问集群。 + +# IAM 策略 + +### IAM 策略示例 + +```json +{ + "Version": "2012-10-17", + "Statement": [ + { + "Sid": "VisualEditor0", + "Effect": "Allow", + "Action": [ + "ec2:AuthorizeSecurityGroupIngress", + "ec2:Describe*", + "ec2:ImportKeyPair", + "ec2:CreateKeyPair", + "ec2:CreateSecurityGroup", + "ec2:CreateTags", + "ec2:DeleteKeyPair", + "ec2:ModifyInstanceMetadataOptions" + ], + "Resource": "*" + }, + { + "Sid": "VisualEditor1", + "Effect": "Allow", + "Action": [ + "ec2:RunInstances" + ], + "Resource": [ + "arn:aws:ec2:REGION::image/ami-*", + "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:instance/*", + "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:placement-group/*", + "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:volume/*", + "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:subnet/*", + "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:key-pair/*", + "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:network-interface/*", + "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:security-group/*" + ] + }, + { + "Sid": "VisualEditor2", + "Effect": "Allow", + "Action": [ + "ec2:RebootInstances", + "ec2:TerminateInstances", + "ec2:StartInstances", + "ec2:StopInstances" + ], + "Resource": "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:instance/*" + } + ] +} +``` + +### 带有 PassRole 的 IAM 策略示例 + +```json +{ + "Version": "2012-10-17", + "Statement": [ + { + "Sid": "VisualEditor0", + "Effect": "Allow", + "Action": [ + "ec2:AuthorizeSecurityGroupIngress", + "ec2:Describe*", + "ec2:ImportKeyPair", + "ec2:CreateKeyPair", + "ec2:CreateSecurityGroup", + "ec2:CreateTags", + "ec2:DeleteKeyPair", + "ec2:ModifyInstanceMetadataOptions" + ], + "Resource": "*" + }, + { + "Sid": "VisualEditor1", + "Effect": "Allow", + "Action": [ + "iam:PassRole", + "ec2:RunInstances" + ], + "Resource": [ + "arn:aws:ec2:REGION::image/ami-*", + "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:instance/*", + "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:placement-group/*", + "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:volume/*", + "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:subnet/*", + "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:key-pair/*", + "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:network-interface/*", + "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:security-group/*", + "arn:aws:iam::AWS_ACCOUNT_ID:role/YOUR_ROLE_NAME" + ] + }, + { + "Sid": "VisualEditor2", + "Effect": "Allow", + "Action": [ + "ec2:RebootInstances", + "ec2:TerminateInstances", + "ec2:StartInstances", + "ec2:StopInstances" + ], + "Resource": "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:instance/*" + } + ] +} +``` +### 允许加密 EBS 卷的 IAM 策略示例 +```json +{ + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": [ + "kms:Decrypt", + "kms:GenerateDataKeyWithoutPlaintext", + "kms:Encrypt", + "kms:DescribeKey", + "kms:CreateGrant", + "ec2:DetachVolume", + "ec2:AttachVolume", + "ec2:DeleteSnapshot", + "ec2:DeleteTags", + "ec2:CreateTags", + "ec2:CreateVolume", + "ec2:DeleteVolume", + "ec2:CreateSnapshot" + ], + "Resource": [ + "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:volume/*", + "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:instance/*", + "arn:aws:ec2:REGION:AWS_ACCOUNT_ID:snapshot/*", + "arn:aws:kms:REGION:AWS_ACCOUNT_ID:key/KMS_KEY_ID" + ] + }, + { + "Effect": "Allow", + "Action": [ + "ec2:DescribeInstances", + "ec2:DescribeTags", + "ec2:DescribeVolumes", + "ec2:DescribeSnapshots" + ], + "Resource": "*" + } + ] +} +``` diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/use-new-nodes-in-an-infra-provider/create-an-azure-cluster.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/use-new-nodes-in-an-infra-provider/create-an-azure-cluster.md new file mode 100644 index 00000000000..325b6052855 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/use-new-nodes-in-an-infra-provider/create-an-azure-cluster.md @@ -0,0 +1,146 @@ +--- +title: 创建 Azure 集群 +shortTitle: Azure +weight: 2220 +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +在本节中,你将学习如何通过 Rancher 在 Azure 中安装 [RKE](https://rancher.com/docs/rke/latest/en/) Kubernetes 集群。 + +首先,在 Rancher 中设置你的 Azure 云凭证。然后,使用云凭证创建一个节点模板,Rancher 将使用该模板在 Azure 中配置新节点。 + +然后,在 Rancher 中创建一个 Azure 集群,并在配置新集群时为集群定义节点池。每个节点池都有一个 etcd、controlplane 或 worker 的 Kubernetes 角色。Rancher 会在新节点上安装 Kubernetes,并为每个节点设置节点池定义的 Kubernetes 角色。 + +:::caution + +当 Rancher RKE 集群在 Azure 中运行并且前面有 Azure 负载均衡器时,出站流量会失败。问题的解决方法如下: + +- 终止内部负载均衡器上的 SSL/TLS +- 使用 L7 负载均衡器 + +详情请参见 [Azure 负载均衡器限制](https://docs.microsoft.com/en-us/azure/load-balancer/components#limitations)。 + +::: + +有关 Rancher 在 Azure 节点上安装的 Kubernetes 集群的更多信息,请参阅 [RKE 集群配置参考](../../../../../reference-guides/cluster-configuration/rancher-server-configuration/rke1-cluster-configuration.md)。 + +有关配置 Azure 节点模板的详细信息,请参阅 [Azure 节点模板配置参考](../../../../../reference-guides/cluster-configuration/downstream-cluster-configuration/node-template-configuration/azure.md)。 + +- [Azure 中的准备工作](#azure-中的准备工作) +- [创建 Azure 集群](#创建-azure-集群) + +# Azure 中的准备工作 + +在使用 Azure 等云厂商在 Rancher 中创建节点模板之前,必须先配置 Rancher 以允许操作 Azure 订阅中的资源。 + +为此,首先在 Azure 的 **Active Directory (AD)** 中创建一个新的 Azure **service principal (服务主体,缩写是 SP)**,它是具有管理 Azure 权限的应用用户。 + +以下是创建服务主体必须运行的 `az cli` 脚本模板,你必须在其中输入你的服务主体名称、角色和范围: + +``` +az ad sp create-for-rbac \ + --name="" \ + --role="Contributor" \ + --scopes="/subscriptions/" +``` + +创建服务主体后会返回三个标识信息,分别是*应用 ID(也称为客户端 ID)*,以及*客户端密码*。为 Azure 创建节点模板时将使用这些信息。 + +# 创建 Azure 集群 + + + + +1. [创建云凭证](#1-创建云凭证) +2. [使用云凭证创建节点模板](#2-使用云凭证创建节点模板) +3. [使用节点模板创建具有节点池的集群](#3-使用节点模板创建具有节点池的集群) + +### 1. 创建云凭证 + +1. 点击 **☰ > 集群管理**。 +1. 单击**云凭证**。 +1. 单击**创建**。 +1. 单击 **Azure**。 +1. 输入你的 Azure 凭证。 +1. 单击**创建**。 + +**结果**:已创建用于在集群中配置节点的云凭证。你可以在其他节点模板或集群中复用这些凭证。 + +### 2. 使用云凭证创建节点模板 + +为 Azure 创建[节点模板](../../../../../pages-for-subheaders/use-new-nodes-in-an-infra-provider.md#节点模板)会允许 Rancher 在 Azure 中配置新节点。其他集群可以复用节点模板。 + +1. 点击 **☰ > 集群管理**。 +1. 单击 **RKE1 配置 > 节点模板**。 +1. 单击**添加模板**。 +1. 单击 **Azure**。 +1. 填写 Azure 的节点模板。有关填写表单的帮助,请参阅 [Azure 节点模板配置](../../../../../reference-guides/cluster-configuration/downstream-cluster-configuration/node-template-configuration/azure.md)。 + +### 3. 使用节点模板创建具有节点池的集群 + +使用 Rancher 在 Azure 中创建 Kubernetes 集群。 + +1. 点击 **☰ > 集群管理**。 +1. 在**集群**页面上,单击**创建**。 +1. 单击 **Azure**。 +1. 输入**集群名称**。 +1. 将一个或多个节点池添加到你的集群。每个节点池都使用节点模板来配置新节点。有关节点池及其最佳实践的更多信息,请参阅[本节](../../../../../pages-for-subheaders/use-new-nodes-in-an-infra-provider.md)。 +1. 在**集群配置**中,选择要安装的 Kubernetes 版本、要使用的网络提供商,以及是否启用项目网络隔离。要查看更多集群选项,请单击**显示高级选项**。如需获取配置集群的帮助,请参阅 [RKE 集群配置参考](../../../../../reference-guides/cluster-configuration/rancher-server-configuration/rke1-cluster-configuration.md)。 +1. 使用**成员角色**为集群配置用户授权。点击**添加成员**添加可以访问集群的用户。使用**角色**下拉菜单为每个用户设置权限。 +1. 单击**创建**。 + + + + +### 1. 创建云凭证 + +如果你已经有一组可用的云凭证,请跳过此部分。 + +1. 点击 **☰ > 集群管理**。 +1. 单击**云凭证**。 +1. 单击**创建**。 +1. 单击 **Azure**。 +1. 输入你的 Azure 凭证。 +1. 单击**创建**。 + +**结果**:已创建用于在集群中配置节点的云凭证。你可以在其他节点模板或集群中复用这些凭证。 + +### 2. 创建你的集群 + +使用 Rancher 在 Azure 中创建 Kubernetes 集群。 + +1. 点击 **☰ > 集群管理**。 +1. 在**集群**页面上,单击**创建**。 +1. 将开关切换到 **RKE2/K3s**。 +1. 单击 **Azure**。 +1. 选择一个**云凭证**。如果存在多个则需要选择。否则,它是预选的。 +1. 输入**集群名称**。 +1. 为每个 Kubernetes 角色创建一个主机池。请参阅[最佳实践](../../../../../pages-for-subheaders/use-new-nodes-in-an-infra-provider.md#rke2-中的节点角色)了解角色分配和计数的建议。 + 1. 为每个主机池定义主机配置。有关配置选项的信息,请参阅 [Azure 主机配置参考](../../../../../reference-guides/cluster-configuration/downstream-cluster-configuration/machine-configuration/azure.md)。 +1. 使用**集群配置**,选择要安装的 Kubernetes 版本、要使用的网络提供商,以及是否启用项目网络隔离。有关配置集群的帮助,请参阅 [RKE2 集群配置参考](../../../../../reference-guides/cluster-configuration/rancher-server-configuration/rke2-cluster-configuration.md)。 +1. 使用**成员角色**为集群配置用户授权。点击**添加成员**添加可以访问集群的用户。使用**角色**下拉菜单为每个用户设置权限。 +1. 单击**创建**。 + + + + +**结果**: + +你已创建集群,集群的状态是**配置中**。Rancher 已在你的集群中。 + +当集群状态变为 **Active** 后,你可访问集群。 + +**Active** 状态的集群会分配到两个项目: + +- `Default`:包含 `default` 命名空间 +- `System`:包含 `cattle-system`,`ingress-nginx`,`kube-public` 和 `kube-system` 命名空间。 + + +### 可选的后续步骤 + +创建集群后,你可以通过 Rancher UI 访问集群。最佳实践建议你设置以下访问集群的备用方式: + +- **通过 kubectl CLI 访问你的集群**:按照[这些步骤](../../../../advanced-user-guides/manage-clusters/access-clusters/use-kubectl-and-kubeconfig.md#在工作站使用-kubectl-访问集群)在你的工作站上使用 kubectl 访问集群。在这种情况下,你将通过 Rancher Server 的身份验证代理进行身份验证,然后 Rancher 会让你连接到下游集群。此方法允许你在没有 Rancher UI 的情况下管理集群。 +- **通过 kubectl CLI 使用授权的集群端点访问你的集群**:按照[这些步骤](../../../../advanced-user-guides/manage-clusters/access-clusters/use-kubectl-and-kubeconfig.md#直接使用下游集群进行身份验证)直接使用 kubectl 访问集群,而无需通过 Rancher 进行身份验证。我们建议设置此替代方法来访问集群,以便在无法连接到 Rancher 时访问集群。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/use-new-nodes-in-an-infra-provider/nutanix/provision-kubernetes-clusters-in-aos.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/use-new-nodes-in-an-infra-provider/nutanix/provision-kubernetes-clusters-in-aos.md new file mode 100644 index 00000000000..2cd7532f757 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/use-new-nodes-in-an-infra-provider/nutanix/provision-kubernetes-clusters-in-aos.md @@ -0,0 +1,93 @@ +--- +title: 在 Nutanix AOS 中配置 Kubernetes 集群 +weight: 1 +--- + +要使用 Rancher 在 Nutanix AOS (AHV) 中安装 [RKE](https://rancher.com/docs/rke/latest/en/) Kubernetes 集群: + +1. 找到 Rancher 的内置 Nutanix [主机驱动并激活它](../../../../../advanced-user-guides/authentication-permissions-and-global-configuration/about-provisioning-drivers/manage-node-drivers.md#激活/停用主机驱动)。 + +1. 创建一个节点模板,Rancher 将使用该模板在 Nutanix AOS 中配置节点。 + +1. 在 Rancher 中创建 Nutanix AOS 集群。配置新集群时,你需要为它定义节点池。每个节点池都有一个 etcd、controlplane 或 worker 的 Kubernetes 角色。Rancher 会在新节点上安装 RKE Kubernetes,并为每个节点设置节点池定义的 Kubernetes 角色。 + +有关配置 Nutanix AOS 节点模板的详细信息,请参阅 [Nutanix AOS 节点模板配置参考](../../../../../../reference-guides/cluster-configuration/downstream-cluster-configuration/node-template-configuration/nutanix.md)。 + +有关在 Rancher 中配置 RKE Kubernetes 集群的详细信息,请参阅[集群配置参考](../../../../../../reference-guides/cluster-configuration/rancher-server-configuration/rke1-cluster-configuration.md)。 + +- [Nutanix AOS 中的准备工作](#nutanix-aos-中的准备工作) +- [创建 Nutanix AOS 集群](#创建-nutanix-aos-集群) + +# Nutanix AOS 中的准备工作 + +下文介绍了设置 Nutanix AOS 的要求,以便 Rancher 可以配置虚拟机和集群。 + +:::note + +节点模板已使用 Nutanix AOS 5.20.2 和 6.0.1 版本进行记录和测试。 + +::: +### 在 Nutanix AOS 中创建凭证 + +在继续创建集群之前,请确保你拥有具有管理员权限的 [Nutanix Prism Central 用户账号](https://portal.nutanix.com/page/documents/details?targetId=Nutanix-Security-Guide-v6_0:wc-user-create-wc-t.html)。设置节点模板时,模板将需要使用这些凭证。 + +### 网络权限 + +必须确保运行 Rancher Server 的主机能够建立以下网络连接: + +- 连接到 Nutanix Prism Central API(通常是端口 9440/TCP)。 +- 连接到创建的 VM 上的 22/TCP 和 2376/TCP 端口。 + +有关在基础设施提供商上创建节点的端口要求,请参阅[节点网络要求](../../../node-requirements-for-rancher-managed-clusters.md#网络要求)。 + +### VM-VM 反亲和性策略 + +建议设置 [VM-VM 反亲和性策略](https://portal.nutanix.com/page/documents/details?targetId=AHV-Admin-Guide-v6_1:ahv-vm-anti-affinity-t.html)。这些规则允许分配了 etcd 和 controlplane 角色的虚拟机在分配给不同节点池时,在单独的 AHV 主机上运行。这种做法可确保单个物理机的故障不会影响这些平面的可用性。 + +# 创建 Nutanix AOS 集群 + +1. [创建节点模板](#1-创建节点模板) +2. [使用节点模板创建具有节点池的集群](#2-使用节点模板创建具有节点池的集群) + +### 1. 创建节点模板 + +为 Nutanix AOS 创建[节点模板](../../../../../../pages-for-subheaders/use-new-nodes-in-an-infra-provider.md#节点模板)会允许 Rancher 在 Nutanix AOS 中配置新节点。其他集群可以复用节点模板。 + +1. 点击 **☰ > 集群管理**。 +1. 单击 **RKE1 配置 > 节点模板**。 +1. 单击**创建**。 +1. 单击**添加模板**。 +1. 单击 **Nutanix**。 +1. 填写 Nutanix AOS 的节点模板。有关填写表格的帮助,请参阅 Nutanix AOS 节点模板[配置参考](../../../../../../reference-guides/cluster-configuration/downstream-cluster-configuration/node-template-configuration/nutanix.md)。 +1. 单击**创建**。 + +### 2. 使用节点模板创建具有节点池的集群 + +使用 Rancher 在 Nutanix AOS 中创建 Kubernetes 集群。 + +1. 点击 **☰ > 集群管理**。 +1. 在**集群**页面上,单击**创建**。 +1. 单击 **Nutanix**。 +1. 输入**集群名称**,然后点击**继续**。 +1. 使用**成员角色**为集群配置用户授权。点击**添加成员**添加可以访问集群的用户。使用**角色**下拉菜单为每个用户设置权限。 +1. 使用**集群选项**选择要安装的 Kubernetes 版本、要使用的网络提供商,以及是否启用项目网络隔离。要查看更多集群选项,请单击**显示高级选项**。如需获取配置集群的帮助,请参阅 [RKE 集群配置参考](../../../../../../reference-guides/cluster-configuration/rancher-server-configuration/rke1-cluster-configuration.md)。 +1. 将一个或多个节点池添加到你的集群。每个节点池都使用节点模板来配置新节点。有关节点池的更多信息,包括为节点分配 Kubernetes 角色的最佳实践,请参阅[本节](../../../../../../pages-for-subheaders/use-new-nodes-in-an-infra-provider.md#节点池)。 +1. 检查并确认你的选项。然后单击**创建**。 + +**结果**:集群已创建,并处于 **Provisioning** 状态。Rancher 已在你的集群中。 + +当集群状态变为 **Active** 后,你可访问集群。 + +**Active** 状态的集群会分配到两个项目: + +- `Default`:包含 `default` 命名空间 +- `System`:包含 `cattle-system`,`ingress-nginx`,`kube-public` 和 `kube-system` 命名空间。 + + +# 可选的后续步骤 + +创建集群后,你可以通过 Rancher UI 访问集群。最佳实践建议你设置以下访问集群的备用方式: + +- **通过 kubectl CLI 访问你的集群**:按照[这些步骤](../../../../../advanced-user-guides/manage-clusters/access-clusters/use-kubectl-and-kubeconfig.md#在工作站使用-kubectl-访问集群)在你的工作站上使用 kubectl 访问集群。在这种情况下,你将通过 Rancher Server 的身份验证代理进行身份验证,然后 Rancher 会让你连接到下游集群。此方法允许你在没有 Rancher UI 的情况下管理集群。 + +- **通过 kubectl CLI 使用授权的集群端点访问你的集群**:按照[这些步骤](../../../../../advanced-user-guides/manage-clusters/access-clusters/use-kubectl-and-kubeconfig.md#直接使用下游集群进行身份验证)直接使用 kubectl 访问集群,而无需通过 Rancher 进行身份验证。我们建议设置此替代方法来访问集群,以便在无法连接到 Rancher 时访问集群。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/use-new-nodes-in-an-infra-provider/vsphere/create-a-vm-template.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/use-new-nodes-in-an-infra-provider/vsphere/create-a-vm-template.md new file mode 100644 index 00000000000..cc08a6e13f7 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/use-new-nodes-in-an-infra-provider/vsphere/create-a-vm-template.md @@ -0,0 +1,163 @@ +--- +title: 创建 vSphere 虚拟机模板 +weight: 4 +--- + +要重复且可靠地创建虚拟机通常非常困难。VMware vSphere 支持构建可以转换为模板的虚拟机。然后,你可以使用该模板来创建配置相同的虚拟机。Rancher 会在节点池中利用此功能来创建相同的 RKE1 和 RKE2 节点。 + +为了使用模板创建新的虚拟机,Rancher 有虚拟机必须预先安装的[特定要求](#要求)。根据这些要求配置虚拟机后,你需要[准备虚拟机](#准备虚拟机),然后再[创建模板](#创建模板)。准备工作完成后,虚拟机可以[转换为模板](#转换为模板)并[移动到内容库中](#移动到内容库),然后 Rancher 节点池就可以使用它了。 + + +## 要求 + +Linux 和 Windows 虚拟机都需要特定工具才能供 vSphere 主机驱动使用。最关键的依赖项是 Linux 的 [cloud-init](https://cloud-init.io/) 和 Windows 的 [cloudbase-init](https://cloudbase.it/cloudbase-init/)。二者都用于通过配置主机名和设置 SSH 访问以及默认 Rancher 用户来配置虚拟机。如果需要其他配置,用户可以根据需要添加其他内容。此外,下面列出了其他要求以供参考。 + +:::note + +如果你有任何特定的防火墙规则或配置,则需要在创建模板之前将其添加到虚拟机。 + +::: + +## Linux 依赖项 + +下面列出了需要在模板上安装的包。不同的发行版对应的名称会略有不同,例如,某些发行版会默认提供。 + +* curl +* wget +* git +* net-tools +* unzip +* apparmor-parser +* ca-certificates +* cloud-init +* cloud-guest-utils +* cloud-image-utils +* growpart +* cloud-initramfs-growroot +* open-iscsi +* openssh-server +* [open-vm-tools](https://docs.vmware.com/en/VMware-Tools/11.3.0/com.vmware.vsphere.vmwaretools.doc/GUID-8B6EA5B7-453B-48AA-92E5-DB7F061341D1.html) + +## Windows 依赖项 + +模板上需要安装的包如下: + +* Windows 容器功能 +* [cloudbase-init](https://cloudbase.it/cloudbase-init/#download) +* [Docker EE](https://docs.microsoft.com/en-us/virtualization/windowscontainers/quick-start/set-up-environment?tabs=Windows-Server#install-docker) - 仅限 RKE1 + +:::note + +RKE1 和 RKE2 对应的 Windows 模板的配置有所不同: + +- RKE1 使用 Docker,因此任何 RKE1 模板都需要预先安装 Docker EE +- RKE2 不需要 Docker EE,因此不需要安装 + +::: + +## 创建模板 + +你可以手动创建虚拟机,也可以使用[其他替代方法](#手动创建的替代方案)来创建虚拟机。 + +### 手动创建 +1. 在 VMware 中按照[这些说明](https://docs.vmware.com/en/VMware-vSphere/7.0/com.vmware.vsphere.vm_admin.doc/GUID-AE8AFBF1-75D1-4172-988C-378C35C9FAF2.html)手动创建虚拟机。虚拟机运行后,你可以手动安装上面列出的依赖项,以便为 vSphere 主机驱动正确配置虚拟机。 +2. 根据你的特定环境和要求按需定制。 +3. 在创建模板之前进行最后的准备工作。 + +### 手动创建的替代方案 + +下面列出了创建虚拟机的其他替代选项: + +* [VMware PowerCLI](https://developer.vmware.com/powercli) +* [Packer](https://www.packer.io/) +* [SaltStack](https://saltproject.io/) +* [Ansible](https://www.ansible.com/) + +Packer 是一种常用的替代方案。有关将其与 vSphere 一起使用的示例,请参阅[参考](https://github.com/vmware-samples/packer-examples-for-vsphere)。 + +## 准备虚拟机 + +创建具有所有必需依赖项(以及任何其他必需项)的虚拟机后,你必须执行最关键的下一个步骤,即准备将虚拟机转换为模板。此准备步骤会重置关键数据(例如虚拟机主机名、IP 等)以防止这些信息被带入新虚拟机。如果你无法执行此步骤,你也可以创建一个具有相同主机名、IP 地址等的虚拟机。 + +请注意,Linux 和 Windows 对应的准备步骤有所不同。 + +### Linux 准备 + +以下命令将在 Linux 中重置你的虚拟机: + +```bash +# 清理日志。 +if [ -f /var/log/audit/audit.log ]; then + cat /dev/null > /var/log/audit/audit.log +fi +if [ -f /var/log/wtmp ]; then + cat /dev/null > /var/log/wtmp +fi +if [ -f /var/log/lastlog ]; then + cat /dev/null > /var/log/lastlog +fi + +# 清理 udev 规则。 +if [ -f /etc/udev/rules.d/70-persistent-net.rules ]; then + rm /etc/udev/rules.d/70-persistent-net.rules +fi + +# 清理 /tmp 路径。 +rm -rf /tmp/* +rm -rf /var/tmp/* + +# 清理 SSH 主机密钥。 +rm -f /etc/ssh/ssh_host_* + +# 清理 machine-id。 +truncate -s 0 /etc/machine-id +rm /var/lib/dbus/machine-id +ln -s /etc/machine-id /var/lib/dbus/machine-id + +# 清理 shell 历史。 +unset HISTFILE +history -cw +echo > ~/.bash_history +rm -fr /root/.bash_history + +# 截断主机名、主机和 resolv.conf,并将主机名设置为 localhost。 +truncate -s 0 /etc/{hostname,hosts,resolv.conf} +hostnamectl set-hostname localhost + +# 清理 cloud-init。 +cloud-init clean -s -l +``` + +### Windows 准备 + +Windows 有一个名为 [sysprep](https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/sysprep--generalize--a-windows-installation) 的实用程序,用于一般化镜像并重置上述 Linux 项目。命令如下: + +```PowerShell +sysprep.exe /generalize /shutdown /oobe +``` + +## 转换为模板 + +1. 关闭并停止虚拟机。 +2. 右键单击清单列表中的虚拟机,然后选择**模板**。 +3. 点击**转换为模板**。 + +**结果**:流程完成后,即可使用模板。 + +有关将虚拟机转换为模板的更多信息,请参阅 [VMware 指南](https://docs.vmware.com/en/VMware-vSphere/7.0/com.vmware.vsphere.vm_admin.doc/GUID-5B3737CC-28DB-4334-BD18-6E12011CDC9F.html)。 + +## 移动到内容库 + +Rancher 支持使用内容库提供的模板。内容库在 vSphere 中存储和管理内容,还支持发布和共享该内容。 + +以下是有关内容库的一些有用链接: + +* [创建内容库](https://docs.vmware.com/en/VMware-vSphere/7.0/com.vmware.vsphere.vm_admin.doc/GUID-2A0F1C13-7336-45CE-B211-610D39A6E1F4.html) +* [将模板克隆到内容库](https://docs.vmware.com/en/VMware-vSphere/7.0/com.vmware.vsphere.vm_admin.doc/GUID-AC1545F0-F8BA-4CD2-96EB-21B3DFAA1DC1.html) + +## 其他资源 + +以下是可能有用的其他资源列表: + +* [Linux 模板创建教程](https://docs.microsoft.com/en-us/azure/cloud-adoption-framework/manage/hybrid/server/best-practices/vmware-ubuntu-template) +* [Windows 模板创建教程](https://docs.microsoft.com/en-us/azure/cloud-adoption-framework/manage/hybrid/server/best-practices/vmware-windows-template) diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/use-new-nodes-in-an-infra-provider/vsphere/create-credentials.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/use-new-nodes-in-an-infra-provider/vsphere/create-credentials.md new file mode 100644 index 00000000000..c0f948a470e --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/use-new-nodes-in-an-infra-provider/vsphere/create-credentials.md @@ -0,0 +1,43 @@ +--- +title: 在 vSphere 控制台中创建凭证 +weight: 3 +--- + +本节介绍如何创建 vSphere 用户名和密码。你需要将这些 vSphere 凭证提供给 Rancher,Rancher 才能在 vSphere 中配置资源。 + +下表列出了 vSphere 用户账号所需的权限: + +| 特权组 | 操作 | +|:----------------------|:-----------------------------------------------------------------------| +| Datastore | AllocateSpace
Browse
FileManagement (Low level file operations)
UpdateVirtualMachineFiles
UpdateVirtualMachineMetadata | +| 全局 | Set custom attribute | +| 网络 | Assign | +| 资源 | AssignVMToPool | +| 虚拟机 | Config (All)
GuestOperations (All)
Interact (All)
Inventory (All)
Provisioning (All) | +| vSphere 标签 | Assign or Unassign vSphere Tag
Assign or Unassign vSphere Tag on Object | + +以下步骤创建具有所需权限的角色,然后在 vSphere 控制台中将角色分配给新用户: + +1. 在 **vSphere** 控制台中转到 **Administration** 页面。 + +2. 转到 **Roles** 选项卡。 + +3. 创建一个新角色。为新角色命名,并选择上面权限表中列出的权限。 + + ![](/img/rancherroles1.png) + +4. 转到 **Users and Groups** 选项卡。 + +5. 创建一个新用户。填写表单,然后单击 **OK**。请务必记下用户名和密码,因为在 Rancher 中配置节点模板时将需要用到这些信息。 + + ![](/img/rancheruser.png) + +6. 转到 **Global Permissions** 选项卡。 + +7. 创建一个新的全局权限。添加之前创建的用户,并为其分配之前创建的角色。单击 **OK**。 + + ![](/img/globalpermissionuser.png) + + ![](/img/globalpermissionrole.png) + +**结果**:你已拥有 Rancher 所需的操作 vSphere 资源的凭证。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/use-new-nodes-in-an-infra-provider/vsphere/provision-kubernetes-clusters-in-vsphere.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/use-new-nodes-in-an-infra-provider/vsphere/provision-kubernetes-clusters-in-vsphere.md new file mode 100644 index 00000000000..4d0d3c77605 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/use-new-nodes-in-an-infra-provider/vsphere/provision-kubernetes-clusters-in-vsphere.md @@ -0,0 +1,113 @@ +--- +title: 在 vSphere 中配置 Kubernetes 集群 +weight: 1 +--- + +在本节中,你将学习如何使用 Rancher 在 vSphere 中安装 [RKE](https://rancher.com/docs/rke/latest/en/) Kubernetes 集群。 + +首先,在 Rancher 中设置你的 vSphere 云凭证。然后,使用云凭证创建一个节点模板,Rancher 将使用该模板在 vSphere 中配置节点。 + +然后,在 Rancher 中创建一个 vSphere 集群,并在配置新集群时为集群定义节点池。每个节点池都有一个 etcd、controlplane 或 worker 的 Kubernetes 角色。Rancher 会在新节点上安装 RKE Kubernetes,并为每个节点设置节点池定义的 Kubernetes 角色。 + +有关配置 vSphere 节点模板的详细信息,请参阅 [vSphere 节点模板配置参考](../../../../../../reference-guides/cluster-configuration/downstream-cluster-configuration/node-template-configuration/vsphere.md)。 + +有关在 Rancher 中配置 RKE Kubernetes 集群的详细信息,请参阅[集群配置参考](../../../../../../reference-guides/cluster-configuration/rancher-server-configuration/rke1-cluster-configuration.md#rke-集群配置文件参考)。 + + +- [vSphere 中的准备工作](#vsphere-中的准备工作) +- [创建 vSphere 集群](#创建-vsphere-集群) + +# vSphere 中的准备工作 + +本节介绍设置 vSphere 的要求,以便 Rancher 可以配置虚拟机和集群。 + +节点模板已使用 vSphere Web Services API 6.5 版本进行记录和测试。 + +### 在 vSphere 中创建凭证 + +在继续创建集群之前,确保你的 vSphere 用户拥有足够的权限。设置节点模板时,模板将需要使用这些 vSphere 凭证。 + +有关如何在 vSphere 中创建具有所需权限的用户的说明,请参阅此[操作指南](create-credentials.md)。这些步骤会产生需要向 Rancher 提供的用户名和密码,从而允许 Rancher 在 vSphere 中配置资源。 + +### 网络权限 + +必须确保运行 Rancher Server 的主机能够建立以下网络连接: + +- 连接到 vCenter Server 上的 vSphere API(通常是端口 443/TCP)。 +- 连接到用于实例化集群虚拟机的所有 ESXi 主机上的 Host API(端口 443/TCP)(*仅在使用 ISO 创建模式时需要*)。 +- 连接到创建的 VM 上的 22/TCP 和 2376/TCP 端口。 + +有关在基础设施提供商上创建节点的端口要求,请参阅[节点网络要求](../../../node-requirements-for-rancher-managed-clusters.md#网络要求)。 + +### 用于 vSphere API 访问的有效 ESXi 许可证 + +免费的 ESXi 许可证不支持 API 访问。vSphere Server 必须具有有效或评估的 ESXi 许可证。 + +### 具有 DRS 的集群的 VM-VM 关联规则 + +如果你的集群启用了 DRS,建议设置 [VM-VM 关联规则](https://docs.vmware.com/en/VMware-vSphere/6.5/com.vmware.vsphere.resmgmt.doc/GUID-7297C302-378F-4AF2-9BD6-6EDB1E0A850A.html)。这些规则允许分配了 etcd 和 controlplane 角色的虚拟机在分配给不同节点池时,在单独的 ESXi 主机上运行。这种做法可确保单个物理机的故障不会影响这些平面的可用性。 + +## 创建 vSphere 集群 + +在 Rancher 中创建 vSphere 集群的操作取决于 Rancher 的版本。 + +1. [创建云凭证](#1-创建云凭证) +2. [使用云凭证创建节点模板](#2-使用云凭证创建节点模板) +3. [使用节点模板创建具有节点池的集群](#3-使用节点模板创建具有节点池的集群) + +### 1. 创建云凭证 + +1. 点击 **☰ > 集群管理**。 +1. 单击**云凭证**。 +1. 单击**创建**。 +1. 单击 **VMware vSphere**。 +1. 输入你的 vSphere 凭证。如需帮助,请参见[节点模板配置参考](../../../../../../reference-guides/cluster-configuration/downstream-cluster-configuration/node-template-configuration/vsphere.md)中的**账号访问**。 +1. 单击**创建**。 + +**结果**:已创建用于在集群中配置节点的云凭证。你可以在其他节点模板或集群中复用这些凭证。 + +### 2. 使用云凭证创建节点模板 + +为 vSphere 创建[节点模板](../../../../../../pages-for-subheaders/use-new-nodes-in-an-infra-provider.md#节点模板)会允许 Rancher 在 vSphere 中配置新节点。其他集群可以复用节点模板。 + +1. 点击 **☰ > 集群管理**。 +1. 单击 **RKE1 配置 > 节点模板**。 +1. 单击**创建**。 +1. 单击**添加模板**。 +1. 单击 **vSphere**。 +1. 填写 vSphere 的节点模板。有关填写表格的帮助,请参阅 vSphere 节点模板[配置参考](../../../../../../reference-guides/cluster-configuration/downstream-cluster-configuration/node-template-configuration/vsphere.md)。 +1. 单击**创建**。 + +### 3. 使用节点模板创建具有节点池的集群 + +使用 Rancher 在 vSphere 中创建 Kubernetes 集群。 + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 在**集群**页面上,单击**创建**。 +1. 单击 **VMware vSphere**。 +1. 输入**集群名称**并使用你的 vSphere 云凭证。点击**继续**。 +1. 使用**成员角色**为集群配置用户授权。点击**添加成员**添加可以访问集群的用户。使用**角色**下拉菜单为每个用户设置权限。 +1. 使用**集群选项**选择要安装的 Kubernetes 版本、要使用的网络提供商,以及是否启用项目网络隔离。要查看更多集群选项,请单击**显示高级选项**。如需获取配置集群的帮助,请参阅 [RKE 集群配置参考](../../../../../../reference-guides/cluster-configuration/rancher-server-configuration/rke1-cluster-configuration.md)。 +1. 如果你想稍后动态配置持久存储或其他基础设施,你需要修改集群 YAML 文件来启用 vSphere 云提供商。详情请参阅[本节](../../../../../../pages-for-subheaders/vsphere-cloud-provider.md)。 +1. 将一个或多个节点池添加到你的集群。每个节点池都使用节点模板来配置新节点。有关节点池的更多信息,包括为节点分配 Kubernetes 角色的最佳实践,请参阅[本节](../../../../../../pages-for-subheaders/use-new-nodes-in-an-infra-provider.md#节点池)。 +1. 检查并确认你的选项。然后单击**创建**。 + +**结果**: + +你已创建集群,集群的状态是**配置中**。Rancher 已在你的集群中。 + +当集群状态变为 **Active** 后,你可访问集群。 + +**Active** 状态的集群会分配到两个项目: + +- `Default`:包含 `default` 命名空间 +- `System`:包含 `cattle-system`,`ingress-nginx`,`kube-public` 和 `kube-system` 命名空间。 + + +## 可选的后续步骤 + +创建集群后,你可以通过 Rancher UI 访问集群。最佳实践建议你设置以下访问集群的备用方式: + +- **通过 kubectl CLI 访问你的集群**:按照[这些步骤](../../../../../advanced-user-guides/manage-clusters/access-clusters/use-kubectl-and-kubeconfig.md#在工作站使用-kubectl-访问集群)在你的工作站上使用 kubectl 访问集群。在这种情况下,你将通过 Rancher Server 的身份验证代理进行身份验证,然后 Rancher 会让你连接到下游集群。此方法允许你在没有 Rancher UI 的情况下管理集群。 +- **通过 kubectl CLI 使用授权的集群端点访问你的集群**:按照[这些步骤](../../../../../advanced-user-guides/manage-clusters/access-clusters/use-kubectl-and-kubeconfig.md#直接使用下游集群进行身份验证)直接使用 kubectl 访问集群,而无需通过 Rancher 进行身份验证。我们建议设置此替代方法来访问集群,以便在无法连接到 Rancher 时访问集群。 +- **配置存储**:有关如何使用 Rancher 在 vSphere 中配置存储的示例,请参阅[本节](../../../../../advanced-user-guides/manage-clusters/create-kubernetes-persistent-storage/provisioning-storage-examples/vsphere-storage.md)。要在 vSphere 中动态配置存储,你必须[启用](../../../../../../pages-for-subheaders/vsphere-cloud-provider.md) vSphere 云提供商。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/use-windows-clusters/azure-storageclass-configuration.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/use-windows-clusters/azure-storageclass-configuration.md new file mode 100644 index 00000000000..568ce34b77d --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/use-windows-clusters/azure-storageclass-configuration.md @@ -0,0 +1,42 @@ +--- +title: Azure 中存储类的配置 +weight: 3 +--- + +如果你的节点使用 Azure VM,则可以使用 [Azure 文件](https://docs.microsoft.com/en-us/azure/aks/azure-files-dynamic-pv)作为集群的存储类(StorageClass)。 + +为了让 Azure 创建所需的存储资源,请执行以下步骤操作: + +1. [配置 Azure 云提供商](../set-up-cloud-providers/other-cloud-providers/azure.md)。 +1. 配置 `kubectl` 以连接到你的集群。 +1. 复制 ServiceAccount 的 `ClusterRole` 和 `ClusterRoleBinding` 清单: + ```yml + --- + apiVersion: rbac.authorization.k8s.io/v1 + kind: ClusterRole + metadata: + name: system:azure-cloud-provider + rules: + - apiGroups: [''] + resources: ['secrets'] + verbs: ['get','create'] + --- + apiVersion: rbac.authorization.k8s.io/v1 + kind: ClusterRoleBinding + metadata: + name: system:azure-cloud-provider + roleRef: + kind: ClusterRole + apiGroup: rbac.authorization.k8s.io + name: system:azure-cloud-provider + subjects: + - kind: ServiceAccount + name: persistent-volume-binder + namespace: kube-system + ``` + +1. 使用以下命令在集群中进行创建: + + ``` + # kubectl create -f + ``` diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/use-windows-clusters/network-requirements-for-host-gateway.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/use-windows-clusters/network-requirements-for-host-gateway.md new file mode 100644 index 00000000000..01ec185f589 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/use-windows-clusters/network-requirements-for-host-gateway.md @@ -0,0 +1,37 @@ +--- +title: Host Gateway (L2bridge) 的网络要求 +weight: 1000 +--- + +本节介绍如何配置使用 *Host Gateway (L2bridge)* 模式的自定义 Windows 集群。 + +### 禁用私有 IP 地址检查 + +如果你使用 *Host Gateway (L2bridge)* 模式,并将节点托管在下面列出的云服务上,则必须在启动时禁用 Linux 或 Windows 主机的私有 IP 地址检查。要为每个节点禁用此检查,请按照以下各个云服务对应的说明进行操作: + +| 服务 | 禁用私有 IP 地址检查的说明 | +--------|------------------------------------------------ +| Amazon EC2 | [禁用源/目标检查](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_NAT_Instance.html#EIP_Disable_SrcDestCheck) | +| Google GCE | [为实例启用 IP 转发](https://cloud.google.com/vpc/docs/using-routes#canipforward)(默认情况下,VM 无法转发由另一个 VM 发起的数据包) | +| Azure VM | [启用或禁用 IP 转发](https://docs.microsoft.com/en-us/azure/virtual-network/virtual-network-network-interface#enable-or-disable-ip-forwarding) | + +### 云托管虚拟机的路由配置 + +如果是使用 Flannel 的 [**Host Gateway (L2bridge)**](https://github.com/coreos/flannel/blob/master/Documentation/backends.md#host-gw) 后端,同一节点上的所有容器都属于私有子网,流量通过主机网络从一个节点上的子网路由到在另一个节点上的子网。 + +- 在 AWS、虚拟化集群或裸机服务器上配置 worker 节点时,请确保它们属于同一个第 2 层子网。如果节点不属于同一个第 2 层子网,`host-gw` 网络将不起作用。 + +- 在 GCE 或 Azure 上配置 worker 节点时,节点不在同一个第 2 层子网上。GCE 和 Azure 上的节点属于可路由的第 3 层网络。按照以下说明配置 GCE 和 Azure,以便云网络知道如何在每个节点上传送主机子网。 + +要在 GCE 或 Azure 上配置主机子网路由,首先运行以下命令,以找出每个 worker 节点上的主机子网: + +```bash +kubectl get nodes -o custom-columns=nodeName:.metadata.name,nodeIP:status.addresses[0].address,routeDestination:.spec.podCIDR +``` + +然后按照各个云提供商的说明,为每个节点配置路由规则: + +| 服务 | 说明 | +--------|------------- +| Google GCE | 为每个节点添加静态路由:[添加静态路由](https://cloud.google.com/vpc/docs/using-routes#addingroute)。 | +| Azure VM | 创建一个路由表:[自定义路由:用户定义](https://docs.microsoft.com/en-us/azure/virtual-network/virtual-networks-udr-overview#user-defined)。 | diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/use-windows-clusters/windows-linux-cluster-feature-parity.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/use-windows-clusters/windows-linux-cluster-feature-parity.md new file mode 100644 index 00000000000..257626defd1 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/use-windows-clusters/windows-linux-cluster-feature-parity.md @@ -0,0 +1,47 @@ +--- +title: Windows 和 Linux 集群的功能奇偶一致性 +weight: 3 +--- + +Windows 集群与 Linux 集群的功能支持不相同。 + +下图描述了 Rancher 上 Windows 和 Linux 之间的功能奇偶一致性: + +| **组件** | **Linux** | **Windows** | +--- | --- | --- +| **发行版** | | +| RKE | 支持 | 支持 | +| RKE2 | 支持 | 支持 | +| K3S | 支持 | 不支持 | +| EKS | 支持 | 不支持 | +| GKE | 支持 | 不支持 | +| AKS | 支持 | 不支持 | +| **Rancher 组件** | | +| Server | 支持 | 不支持 | +| Agent | 支持 | 支持 | +| Fleet | 支持 | 支持 | +| EKS Operator | 支持 | 不支持 | +| AKS Operator | 不支持 | 不支持 | +| GKE Operator | 不支持 | 不支持 | +| Alerting v1 | 支持 | 支持 | +| Monitoring v1 | 支持 | 支持 | +| Logging v1 | 支持 | 支持 | +| Monitoring/Alerting v2 | 支持 | 支持 | +| Logging v2 | 支持 | 支持 | +| Istio | 支持 | 不支持 | +| Catalog v1 | 支持 | 不支持 | +| Catalog v2 | 支持 | 不支持 | +| OPA | 支持 | 不支持 | +| Longhorn | 支持 | 不支持 | +| CIS 扫描 | 支持 | 不支持 | +| Backup/Restore Operator | 支持 | 不支持 | +| **CNI/附加组件** | | +| Flannel | 支持 | 支持 | +| Canal | 支持 | 不支持 | +| Calico | 支持 | 支持(仅 RKE2) | +| Cilium | 支持 | 不支持 | +| Multus | 支持 | 不支持 | +| Traefik | 支持 | 不支持 | +| NGINX Ingress | 支持 | 不支持 | + +有关功能支持的更新信息,你可以访问 GitHub 上的 [rancher/windows](https://github.com/rancher/windows)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/use-windows-clusters/workload-migration-guidance.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/use-windows-clusters/workload-migration-guidance.md new file mode 100644 index 00000000000..499183a14c7 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/use-windows-clusters/workload-migration-guidance.md @@ -0,0 +1,303 @@ +--- +title: 将 Windows 工作负载从 RKE2 迁移到 RKE2 +weight: 3 +--- + +**注意**:Rancher Support 的 SLA 不涵盖本文档的内容。因此,请谨慎继续。 + +本文档介绍了如何将 Windows 工作负载从 RKE1 迁移到 RKE2。 + +## RKE1 Windows 调度 + +RKE1 Windows 工作负载是基于污点和容忍度调度的。 + +RKE1 Windows 集群中的每个 Linux 节点(无论分配了什么角色)都会有一个默认污点,除非工作负载配置了容忍度,否则该污点会阻止工作负载调度到节点上。这是 RKE1 Windows 集群的一个主要特性,目的是为了仅运行 Windows 工作负载。 + +- 默认 RKE1 Linux 节点 `NoSchedule` 污点: + +```yml +apiVersion: v1 +kind: Node +spec: + ... + taints: + - effect: NoSchedule + key: cattle.io/os + value: linux +``` +
+ +- RKE1 Linux `NoSchedule` 对工作负载的容忍度 + +以下容忍度允许将最终用户的工作负载调度到 RKE1 Windows 集群中的任何 Linux 节点上。这些容忍度用于核心的 Rancher 服务和工作负载: + +```yml +apiVersion: apps/v1 +kind: Deployment +spec: + ... + template: + ... + spec: + tolerations: + - effect: NoSchedule + key: cattle.io/os + operator: Equal + value: linux +``` +
+ +- 根据最佳实践,在 Linux 节点上运行的任何最终用户工作负载都将仅调度到具有 worker 角色的节点上: + +```yml +apiVersion: apps/v1 +kind: Deployment +spec: + ... + template: + ... + spec: + tolerations: + - effect: NoSchedule + key: cattle.io/os + operator: Equal + value: linux + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - preference: + matchExpressions: + - key: node-role.kubernetes.io/worker + operator: In + values: + - "true" + weight: 100 + ... +``` + +## RKE2 Windows 调度 + +根据对混合工作负载支持的反馈和请求,RKE2 Windows 默认支持 Linux 和 Windows 工作负载。RKE2 调度默认依赖节点选择器。这是不同于 RKE1 的一个显着变化,因为 RKE2 中没有包含污点和容忍。节点选择器是 RKE1 Windows 集群的关键部分,可以帮助你轻松迁移工作负载。 + +## 示例迁移 + +### 将 Windows 工作负载从 RKE1 迁移到 RKE2 + +- 迁移前的 RKE1 Windows Deployment: + +```yaml +apiVersion: apps/v1 +kind: Deployment +spec: + ... + template: + ... + spec: + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: kubernetes.io/os + operator: NotIn + values: + - linux +``` +
+ +- 使用 `nodeAffinity` 迁移后的 RKE2 Windows Deployment: + +```yaml +apiVersion: apps/v1 +kind: Deployment +... +spec: + ... + template: + ... + spec: + ... + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: kubernetes.io/os + operator: In + values: + - windows +``` + +### RKE1 Windows 集群的 Linux-Only Deployment + +> **重要提示**:在利用 `nodeSelector` 和 `nodeAffinity` 时,请注意以下几点: +> +> - 如果同时指定了 `nodeSelector` 和 `nodeAffinity`,则必须满足这两个条件才能将 `Pod` 调度到节点上。 +> - 如果指定了与单个 `nodeSelectorTerms` 关联的多个 `matchExpressions`,则只有当所有 `matchExpressions` 都符合要求时才会调度 `Pod`。 + +
+ +- 迁移前的 RKE1 Windows 集群 Linux-only Deployment(针对 RKE1 Linux Worker 节点): + +```yml +apiVersion: apps/v1 +kind: Deployment +spec: + ... + template: + ... + spec: + tolerations: + - effect: NoSchedule + key: cattle.io/os + operator: Equal + value: linux + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - weight: 100 + preference: + matchExpressions: + - key: node-role.kubernetes.io/worker + operator: In + values: + - "true" + +``` +
+ +- 使用 `nodeSelector` 迁移后的 RKE2 混合集群 Linux-only Deployment(针对 RKE2 Linux Worker 节点) + +```yml +apiVersion: apps/v1 +kind: Deployment +spec: + ... + template: + ... + spec: + nodeSelector: + kubernetes.io/os: "linux" + node-role.kubernetes.io/worker: "true" +``` +
+ +- 使用 `nodeAffinity` 迁移后的 RKE2 混合集群 Linux-only Deployment(针对 RKE2 Linux Worker 节点) + +```yaml +apiVersion: apps/v1 +kind: Deployment +spec: + ... + template: + ... + spec: + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - weight: 100 + preference: + matchExpressions: + - key: node-role.kubernetes.io/worker + operator: In + values: + - "true" + nodeSelectorTerms: + - matchExpressions: + - key: kubernetes.io/os + operator: In + values: + - linux +``` +## RKE1 Windows - 支持的 Windows Server 版本 + +### 长期服务渠道(LTSC) + +- Windows Server 2019 LTSC ✅ 将于 2024 年 1 月 9 日 达到 Mainstream EOL 并于 2029 年 1 月 9 日 达到 Extended EOL + +### 半年频道 (SAC) + +- Windows Server 20H2 SAC ❌ 2022 年 8 月 9 日已达到 EOL +- Windows Server 2004 SAC ❌ 2021 年 12 月 14 日已达到 EOL +- Windows Server 1909 SAC ❌ 2021 年 5 月 11 日已达到 EOL +- Windows Server 1903 SAC ❌ 2020 年 12 月 8 日已达到 EOL +- Windows Server 1809 SAC ❌ 2020 年 11 月 10 日已达到 EOL + +## RKE2 Windows - 支持的 Windows Server 版本 + +### RKE2 中的长期服务通道(LTSC) + +- Windows Server 2019 LTSC ✅ 将于 2024 年 1 月 9 日 达到 Mainstream EOL 并于 2029 年 1 月 9 日 达到 Extended EOL +- Windows Server 2022 LTSC ✅ 将于 2026 年 10 月 13 日达到 Mainstream EOL,并于 2031 年 10 月 13 日达到 Extended EOL + +> **注意**:RKE2 不支持 SAC。 + + +有关详细信息,请参阅以下参考资料: + +- [Windows Server SAC 生命周期](https://docs.microsoft.com/en-us/lifecycle/products/windows-server) + +- [Windows Server 2022 LTSC 生命周期](https://docs.microsoft.com/en-us/lifecycle/products/windows-server-2022) + +- [Windows Server 2019 LTSC 生命周期](https://docs.microsoft.com/en-us/lifecycle/products/windows-server-2019) + + +## Kubernetes 版本支持 + +> **注意**:根据 [Rancher 2.6.7 支持矩阵](https://www.suse.com/suse-rancher/support-matrix/all-supported-versions/rancher-v2-6-7/),下面列出的所有版本均支持 SLA。未列出的版本都视为为已达到 EOL 且不受 SUSE SLA 支持。 + +### 对比 Rancher 2.5 与 Rancher 2.6:Windows 集群的支持矩阵 + +**对比 RKE1 与 RKE2:Windows 集群支持的 Kubernetes 版本**: + +| Kubernetes 版本 | RKE1 | RKE2 | +|-------------- |:----: |:----: | +| 1.18 | ✓ | | +| 1.19 | ✓ | | +| 1.20 | ✓ | | +| 1.21 | ✓ | | +| 1.22 | ✓ | ✓ | +| 1.23 | | ✓ | +| 1.24 | | ✓ | +| 1.25+ | | ✓ | + + +### 对比 Rancher 2.5 与 Rancher 2.6:支持用于配置 RKE1 和 RKE2 Windows 集群的 Kubernetes 版本 + +| Rancher 版本 | Kubernetes 版本 | RKE1 | RKE2 | +|:-----------------------: |:------------------------: |:----: |:----: | +| 2.5 - RKE1 配置 | 1.18 1.19 1.20 | ✓ | | +| 2.6 - RKE1 配置 | 1.18 1.19 1.20 1.21 1.22 | ✓ | | +| 2.6 - RKE2 配置 | 1.22 1.23 1.24 1.25+ | | ✓ | + + +## 将工作负载迁移到 RKE2 Windows 的指南 +参考[对比 Rancher 2.5 与 Rancher 2.6:Windows 集群的支持矩阵](#对比-rancher-25-与-rancher-26windows-集群的支持矩阵)和[对比 Rancher 2.5 与 Rancher 2.6:支持用于配置 RKE1 和 RKE2 Windows 集群的 Kubernetes 版本](#对比-rancher-25-与-rancher-26支持用于配置-rke1-和-rke2-windows-集群的-kubernetes-版本)中的表格,你会发现 RKE1 和 RKE2 的 Kubernetes 1.22 版本发生了重叠。因此,当遵循 Rancher 推荐的方法时,这将是迁移 RKE1 Windows 工作负载所需的基本版本。 + +### Rancher 2.5 的就地升级 + +1. 将 Rancher 版本升级到 2.6.5+。 +1. 使用最新的可用补丁版本将 RKE1 Windows 下游集群升级到 RKE1 v1.22。 +1. 通过 RKE1 Windows 集群所在的匹配补丁版本,使用 RKE2 v1.22 配置新的 RKE2 Windows 下游集群。 +1. 开始将 Windows 工作负载从 RKE1 迁移到 RKE2 集群。 +1. 执行验证测试,确保在将应用程序从 RKE1 迁移到 RKE2 时没有丢失或更改功能。 +1. 验证测试成功后,你可以选择将 RKE2 1.22.x 集群升级到新的次要版本,例如 1.23 或 1.24。 + + +### 将 Windows 工作负载迁移到新的 Rancher 环境 + +> **重要提示**:要执行以下任一选项,你需要使用 Rancher 2.6.5 或更高版本。 + +**为 RKE1 和 RKE2 使用匹配的 Kubernetes 补丁版本时**: + +1. 通过 RKE1 Windows 集群所在的匹配补丁版本,使用 RKE2 v1.22 配置新的 RKE2 Windows 下游集群。 +1. 开始将 Windows 工作负载从 RKE1 迁移到 RKE2 集群。 +1. 执行验证测试,确保在将应用程序从 RKE1 迁移到 RKE2 时没有丢失或更改功能。 +1. 验证测试成功后,你可以选择将 RKE2 1.22.x 集群升级到新的次要版本,例如 1.23 或 1.24。 + + +**为 RKE2 使用更新的 Kubernetes 补丁版本时**: + +1. 使用 RKE2 v1.23 或 v1.24 配置新的 RKE2 Windows 下游集群。 +1. 开始将 Windows 工作负载从 RKE1 迁移到 RKE2 集群。 +1. 执行验证测试,确保在将应用程序从 RKE1 迁移到 RKE2 时没有丢失或更改功能。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/node-requirements-for-rancher-managed-clusters.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/node-requirements-for-rancher-managed-clusters.md new file mode 100644 index 00000000000..d3eb14e9d40 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/node-requirements-for-rancher-managed-clusters.md @@ -0,0 +1,127 @@ +--- +title: Rancher 管理集群的节点要求 +weight: 1 +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +本页描述了 Rancher 管理的 Kubernetes 集群的要求,你的应用和服务将安装在这些集群中。这些下游集群应该与运行 Rancher 的三节点集群分开。 + +:::note + +如果 Rancher 安装在高可用的 Kubernetes 集群上,Rancher Server 的三节点集群和下游集群有不同的要求。有关 Rancher 的安装要求,请参考[安装文档](../../../pages-for-subheaders/installation-requirements.md)中的节点要求。 + +::: + +## 操作系统和容器运行时要求 + +Rancher 兼容当前所有的主流 Linux 发行版和任何通用的 Docker 版本。所有下游集群的 etcd 和 controlplane 节点都需要运行在 Linux 上。而 Worker 节点可以运行在 Linux 或 [Windows Server](#windows-节点) 上。 + +如需了解各个 Rancher 版本通过了哪些操作系统和 Docker 版本测试,请参见[支持和维护条款](https://rancher.com/support-maintenance-terms/)。 + +所有支持的操作系统都使用 64-bit x86 架构。 + +如果你想使用 ARM64,请参阅[在 ARM64 上运行(实验功能)。](../../../getting-started/installation-and-upgrade/advanced-options/enable-experimental-features/rancher-on-arm64.md) + +有关如何安装 Docker 的信息,请参阅 [Docker 官方文档](https://docs.docker.com/)。 + +### Oracle Linux 和 RHEL 衍生的 Linux 节点 + +某些源自 RHEL 的 Linux 发行版(包括 Oracle Linux)的默认防火墙规则可能会阻止与 Helm 的通信。我们建议禁用 firewalld。如果你的 Kubernetes 版本是 1.19,请务必禁用 firewalld。 + +:::note + +在 RHEL 8.4 中,NetworkManager 上有两个额外的服务,即 `nm-cloud-setup.service` 和 `nm-cloud-setup.timer`。这些服务增加了一个路由表,干扰了 CNI 插件的配置。如果启用了这些服务,你必须使用以下命令禁用它们,然后重新启动节点以恢复连接: + +``` +systemctl disable nm-cloud-setup.service nm-cloud-setup.timer +reboot +``` + +::: + +### SUSE Linux 节点 + +SUSE Linux 可能有一个防火墙,默认情况下会阻止所有端口。在这种情况下,请按照[步骤](../../../getting-started/installation-and-upgrade/installation-requirements/port-requirements.md#打开-suse-linux-端口)打开将主机添加到自定义集群所需的端口。 + +### Flatcar Container Linux 节点 + +使用 Flatcar Container Linux 节点[通过 Rancher 启动 Kubernetes](../../../pages-for-subheaders/launch-kubernetes-with-rancher.md) 时,需要在 [Cluster Config 文件](../../../reference-guides/cluster-configuration/rancher-server-configuration/rke1-cluster-configuration.md#rke-集群配置文件参考)中使用如下配置: + + + + +```yaml +rancher_kubernetes_engine_config: + network: + plugin: canal + options: + canal_flex_volume_plugin_dir: /opt/kubernetes/kubelet-plugins/volume/exec/nodeagent~uds + flannel_backend_type: vxlan + + services: + kube-controller: + extra_args: + flex-volume-plugin-dir: /opt/kubernetes/kubelet-plugins/volume/exec/ +``` + + + + +```yaml +rancher_kubernetes_engine_config: + network: + plugin: calico + options: + calico_flex_volume_plugin_dir: /opt/kubernetes/kubelet-plugins/volume/exec/nodeagent~uds + flannel_backend_type: vxlan + + services: + kube-controller: + extra_args: + flex-volume-plugin-dir: /opt/kubernetes/kubelet-plugins/volume/exec/ +``` + + + + +还需要启用 Docker 服务,你可以使用以下命令启用 Docker 服务: + +``` +systemctl enable docker.service +``` + +使用[主机驱动](../../../pages-for-subheaders/about-provisioning-drivers.md#主机驱动)时会自动启用 Docker 服务。 + +### Windows 节点 + +运行 Windows Server 节点必须使用 Docker 企业版。 + +Windows 节点只能用于 Worker 节点。请参阅[配置 Windows 自定义集群](../../../pages-for-subheaders/use-windows-clusters.md)。 + +## 硬件要求 + +你的工作负载决定了具有 `worker` 角色的节点的硬件要求。运行 Kubernetes 节点组件的最低要求是 1 个 CPU(核心)和 1GB 内存。 + +关于 CPU 和内存,建议将 Kubernetes 集群的不同平面(etcd、controlplane 和 worker)托管在不同的节点上,以便它们可以相互独立扩展。 + +有关大型 Kubernetes 集群的硬件建议,请参阅[构建大型集群](https://kubernetes.io/docs/setup/best-practices/cluster-large/)的官方 Kubernetes 文档。 + +有关生产环境中 etcd 集群的硬件建议,请参阅官方 [etcd 文档](https://etcd.io/docs/v3.4.0/op-guide/hardware/)。 + +## 网络要求 + +对于生产集群,我们建议你通过仅打开以下端口要求中定义的端口来限制流量。 + +需要开放的端口根据下游集群的启动方式而有所不同。以下列出了需要为不同[集群创建选项](../../../pages-for-subheaders/kubernetes-clusters-in-rancher-setup.md)打开的端口。 + +有关 Kubernetes 集群中 etcd 节点、controlplane 节点和 Worker 节点的端口要求的详细信息,请参阅 [Rancher Kubernetes Engine 的端口要求](https://rancher.com/docs/rke/latest/en/os/#ports)。 + +在[下游集群端口要求](../../../getting-started/installation-and-upgrade/installation-requirements/port-requirements.md#下游-kubernetes-集群节点)中,你可以找到在各种情况下使用的端口的详细信息。 + +## 可选:安全注意事项 + +如果你要配置符合 CIS(互联网安全中心)Kubernetes 基准的 Kubernetes 集群,我们建议你在安装 Kubernetes 之前按照我们的强化指南来配置节点。 + +有关强化指南的更多信息,以及了解哪个指南版本对应于你的 Rancher 和 Kubernetes 版本,请参阅[安全](../../../pages-for-subheaders/rancher-security.md#rancher-强化指南)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/register-existing-clusters.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/register-existing-clusters.md new file mode 100644 index 00000000000..1b051178e1c --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/register-existing-clusters.md @@ -0,0 +1,300 @@ +--- +title: 注册现有集群 +weight: 6 +--- + +集群注册功能取代了导入集群的功能。 + +Rancher 管理注册集群的范围取决于集群的类型。详情请参见[对注册集群的管理能力](#对注册集群的管理能力)。 + + +## 先决条件 + +### Kubernetes 节点角色 + +已注册的 RKE Kubernetes 集群必须具有所有三个节点角色,分别是 etcd、controlplane 和 worker。只有 controlplane 组件的集群无法在 Rancher 中注册。 + +有关 RKE 节点角色的更多信息,请参阅[最佳实践](../../../pages-for-subheaders/checklist-for-production-ready-clusters.md#集群架构)。 + +### 权限 + +如果你现有的 Kubernetes 集群已经定义了 `cluster-admin` 角色,则你必须具有此 `cluster-admin` 权限才能在 Rancher 中注册集群。 + +为了应用权限,你需要先运行: + +```plain +kubectl create clusterrolebinding cluster-admin-binding \ + --clusterrole cluster-admin \ + --user [USER_ACCOUNT] +``` + +然后再运行 `kubectl` 命令来注册集群。 + +默认情况下,GKE 用户没有此权限,因此你需要在注册 GKE 集群之前运行该命令。要详细了解 GKE RBAC,请单击[此处](https://cloud.google.com/kubernetes-engine/docs/how-to/role-based-access-control)。 + +如果你正在注册 K3s 集群,请确保 `cluster.yml` 是可读的。默认情况下它受到保护。详情请参考[配置 K3s 集群以导入到 Rancher](#配置-k3s-集群以在-rancher-中启用注册)。 + +### EKS 集群 + +EKS 集群必须至少有一个托管节点组才能导入 Rancher 或通过 Rancher 进行配置。 + +## 注册集群 + +1. 点击 **☰ > 集群管理**。 +1. 在**集群**页面上,单击**导入集群**。 +1. 选择集群类型。 +1. 使用**成员角色**为集群配置用户授权。点击**添加成员**添加可以访问集群的用户。使用**角色**下拉菜单为每个用户设置权限。 +1. 如果你在 Rancher 中导入一个通用 Kubernetes 集群,请执行以下步骤:
+ a. 点击**集群选项**下的 **Agent 环境变量**,为 [rancher cluster agent](launch-kubernetes-with-rancher/about-rancher-agents.md) 设置环境变量。你可以使用键值对设置环境变量。如果 Rancher Agent 需要使用代理与 Rancher Server 通信,则可以使用 Agent 环境变量设置 `HTTP_PROXY`,`HTTPS_PROXY` 和 `NO_PROXY` 环境变量。
+ b. 启用项目网络隔离,确保集群支持 Kubernetes `NetworkPolicy` 资源。用户可以通过**项目网络隔离**选项下的**高级选项**下拉菜单进行操作。 +1. 单击**创建**。 +1. 此处会显示 `cluster-admin` 权限的先决条件(参见上文的**先决条件**),其中包括满足先决条件的示例命令。 +1. 将 `kubectl` 命令复制到剪贴板,并在配置了 kubeconfig 的节点上运行该命令,从而指向要导入的集群。如果你不确定配置是否正确,请在运行 Rancher 显示的命令之前运行 `kubectl get nodes` 进行验证。 +1. 如果你使用自签名证书,你将收到 `certificate signed by unknown authority` 的消息。要解决此验证问题,请将 Rancher 中显示的以 `curl` 开头的命令复制到剪贴板。然后在配置了 kubeconfig 的节点上运行该命令,从而指向要导入的集群。 +1. 在节点上运行完命令后,单击**完成**。 + +**结果**: + +- 集群已注册并分配了 **Pending** 状态。Rancher 正在部署资源来管理你的集群。 +- 当集群状态变为 **Active** 后,你可访问集群。 +- **Active** 集群分配了两个项目,分别是 `Default`(包含命名空间 `default`)和 `System`(包含命名空间 `cattle-system`、`ingress-nginx`、`kube-public` 和 `kube-system`)。 + + +:::note + +无法重新注册当前在 Rancher 中处于 Active 状态的集群。 + +::: + +### 配置 K3s 集群以在 Rancher 中启用注册 + +K3s server 需要配置为允许写入 kubeconfig 文件。 + +这可以通过在安装期间传递 `--write-kubeconfig-mode 644` 作为标志来完成: + +``` +$ curl -sfL https://get.k3s.io | sh -s - --write-kubeconfig-mode 644 +``` + +你也可以使用 `K3S_KUBECONFIG_MODE` 环境变量来指定该选项: + +``` +$ curl -sfL https://get.k3s.io | K3S_KUBECONFIG_MODE="644" sh -s - +``` + +### 使用 Terraform 配置导入的 EKS 集群 + +你**仅**需要定义 Rancher 使用 Terraform 导入 EKS 集群所需的最少字段。请谨记这点,因为 Rancher 会使用用户提供的任何配置覆盖 EKS 集群中的配置。 + +:::caution + +即使当前 EKS 集群的配置与用户提供的配置之间只存在微小差异,但是微小的差异也有可能产生很大的影响。 + +::: + +Rancher 通过 `eks_config_v2` 使用 Terraform 导入 EKS 集群所需的最少配置字段如下: + +- cloud_credential_id +- name +- region +- imported (对于导入的集群,此字段应始终设置为 `true`) + +导入的 EKS 集群的示例 YAML 配置: + +``` +resource "rancher2_cluster" "my-eks-to-import" { + name = "my-eks-to-import" + description = "Terraform EKS Cluster" + eks_config_v2 { + cloud_credential_id = rancher2_cloud_credential.aws.id + name = var.aws_eks_name + region = var.aws_region + imported = true + } +} +``` + +## 对注册集群的管理能力 + +Rancher 管理注册集群的范围取决于集群的类型。 + +- [所有已注册集群的功能](#2-5-8-所有已注册集群的功能) +- [已注册 K3s 集群的附加功能](#2-5-8-已注册-k3s-集群的附加功能) +- [已注册的 EKS 和 GKE 集群的附加功能](#已注册的-eks-和-gke-集群的附加功能) + +### 所有已注册集群的功能 + +注册集群后,集群所有者可以: + +- 通过 RBAC [管理集群访问](../../advanced-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/cluster-and-project-roles.md) +- 启用[Monitoring、告警和 Notifiers](../../../pages-for-subheaders/monitoring-and-alerting.md) +- 启用 [Logging](../../../pages-for-subheaders/logging.md) +- 启用 [Istio](../../../pages-for-subheaders/istio.md) +- 使用[流水线](../../advanced-user-guides/manage-projects/ci-cd-pipelines.md) +- 管理项目和工作负载 + +### 已注册 K3s 集群的附加功能 + +[K3s](https://rancher.com/docs/k3s/latest/en/) 是一个轻量且完全兼容的 Kubernetes 发行版。 + +K3s 集群注册到 Rancher 后,Rancher 会将它识别为 K3s。Rancher UI 将开放[所有已注册集群](#所有已注册集群的功能)的功能,以及以下用于编辑和升级集群的功能: + +- [升级 K3s 版本](../../../getting-started/installation-and-upgrade/upgrade-and-roll-back-kubernetes.md) +- 配置能同时升级的最大节点数 +- 查看 K3s 集群的配置参数和用于启动集群中每个节点的环境变量的只读版本 + +### 已注册的 EKS 和 GKE 集群的附加功能 + +如果你注册了 Amazon EKS 或 GKE 集群,Rancher 将视其为在 Rancher 中创建的集群。 + +你现在可以将 Amazon EKS 和 GKE 集群注册到 Rancher。在大多数情况下,注册的集群和在 Rancher UI 中创建的集群的处理方式相同(除了删除)。 + +删除在 Rancher 中创建的 EKS 或 GKE 集群后,该集群将被销毁。删除在 Rancher 中注册集群时,它与 Rancher Server 会断开连接,但它仍然存在。你仍然可以像在 Rancher 中注册之前一样访问它。 + +[此页面](../../../pages-for-subheaders/kubernetes-clusters-in-rancher-setup.md)上的表格中列出了已注册集群的功能。 + +## 配置 K3s 集群升级 + +:::tip + +Kubernetes 的最佳实践是在升级之前备份集群。使用外部数据库升级高可用 K3s 集群时,请使用关系数据库提供商推荐的方式备份数据库。 + +::: + +**并发**是升级期间允许不可用的最大节点数。如果不可用节点的数量大于**并发**,升级将失败。如果升级失败,你可能需要修复或移除失败的节点,然后升级才能成功。 + +- **controlplane 并发**:可以同时升级的最大服务器节点数;也是最大不可用服务器节点数 +- **Worker 并发**:可以同时升级的最大 worker 节点数;也是最大不可用 worker 节点数 + +在 K3s 文档中,controlplane 节点也称为 server 节点。Kubernetes master 节点运行在这些节点上,用于维护集群的状态。在 K3s 中,controlplane 节点默认能够让工作负载调度到节点上。 + +类似的,在 K3s 文档中,具有 worker 角色的节点称为 Agent 节点。默认情况下,部署在集群中的任何工作负载或 Pod 都能调度到这些节点上。 + +## 已注册 K3s 集群的 Logging 调试和故障排除 + +节点由运行在下游集群中的 `system-upgrade-controller` 升级。基于集群配置,Rancher 部署了两个[计划](https://github.com/rancher/system-upgrade-controller#example-upgrade-plan)来升级 K3s 节点,分别用于升级 controlplane 节点和 worker 节点。`system-upgrade-controller` 会按照计划对节点进行升级。 + +要在 `system-upgrade-controller` deployment 上启用调试日志记录,请编辑 [configmap](https://github.com/rancher/system-upgrade-controller/blob/50a4c8975543d75f1d76a8290001d87dc298bdb4/manifests/system-upgrade-controller.yaml#L32) 以将调试环境变量设置为 true。然后重启 `system-upgrade-controller` pod。 + +你可以运行以下命令查看 `system-upgrade-controller` 创建的日志: + +``` +kubectl logs -n cattle-system system-upgrade-controller +``` + +运行以下命令查看计划的当前状态: + +``` +kubectl get plans -A -o yaml +``` + +如果集群卡在升级中,请重启 `system-upgrade-controller`。 + +为防止升级时出现问题,应遵循 [Kubernetes 升级最佳实践](https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/)进行操作。 + +## 对 RKE2 和 K3s 集群的授权集群端点支持 + +_从 v2.6.3 起可用_ + +授权集群端点 (ACE) 已支持注册的 RKE2 和 K3s 集群。此支持还包括你在下游集群上启用 ACE 的手动步骤。有关授权集群端点的更多信息,请单击[这里](../../advanced-user-guides/manage-clusters/access-clusters/authorized-cluster-endpoint.md)。 + +:::note 注意事项: + +- 只需要在下游集群的 controlplane 节点上执行这些步骤。你必须单独配置每个 controlplane 节点。 + +- 以下步骤适用于在 v2.6.x 中注册的 RKE2 和 K3s 集群,以及从先前的 Rancher 版本注册(或导入)并升级到 v2.6.x 的集群。 + +- 这些步骤将改变下游 RKE2 和 K3s 集群的配置并部署 `kube-api-authn-webhook`。如果 ACE 的未来实现需要更新 `kube-api-authn-webhook`,那么这也必须手动完成。有关此 webhook 的更多信息,请单击[此处](../../advanced-user-guides/manage-clusters/access-clusters/authorized-cluster-endpoint.md#关于-kube-api-auth-身份验证-webhook)。 + +::: + +###### **在每个下游集群的 controlplane 上启用 ACE 的手动执行步骤**: + +1. 在 `/var/lib/rancher/{rke2,k3s}/kube-api-authn-webhook.yaml` 创建一个文件,内容如下: + ```yaml + apiVersion: v1 + kind: Config + clusters: + - name: Default + cluster: + insecure-skip-tls-verify: true + server: http://127.0.0.1:6440/v1/authenticate + users: + - name: Default + user: + insecure-skip-tls-verify: true + current-context: webhook + contexts: + - name: webhook + context: + user: Default + cluster: Default + ``` + +1. 将以下内容添加到配置文件中(如果文件不存在,则创建一个)。请注意,默认位置是 `/etc/rancher/{rke2,k3s}/config.yaml`: + ```yaml + kube-apiserver-arg: + - authentication-token-webhook-config-file=/var/lib/rancher/{rke2,k3s}/kube-api-authn-webhook.yaml + ``` + +1. 运行以下命令: + + sudo systemctl stop {rke2,k3s}-server + sudo systemctl start {rke2,k3s}-server + +1. 最后,你**必须**返回 Rancher UI 并在那里编辑导入的集群,从而完成 ACE 启用。单击 **⋮ > 编辑配置**,然后单击**集群配置**下的**网络**选项卡。最后,单击**授权端点**的**启用**按钮。启用 ACE 后,你可以输入完全限定的域名 (FQDN) 和证书信息。 + +:::note + +FQDN 字段是可选的。如果指定了该字段,它应该指向下游集群。仅当下游集群前面有使用了不受信任证书的负载均衡器时才需要证书信息。如果你使用的是有效证书,则不需要填写 CA 证书字段。 + +::: + +## 注释已注册的集群 + +Rancher 没有注册的 Kubernetes 集群(除了 K3s Kubernetes 集群之外)如何预置或配置集群的任何信息。 + +因此,当 Rancher 注册集群时,它假设某些功能是默认禁用的。Rancher 这样做是为了避免向用户暴露 UI 选项(即使注册的集群没有启用这些功能)。 + +但是,如果集群具有某种功能(例如使用 pod 安全策略),那么该集群的用户可能仍希望在 Rancher UI 中为集群选择 pod 安全策略。为此,用户需要手动让 Rancher 知道集群已启用 pod 安全策略。 + +通过对已注册的集群进行注释,你可以向 Rancher 表明集群在 Rancher 之外被赋予了 Pod 安全策略或其他功能。 + +此示例注释表示启用了 pod 安全策略: + +```json +"capabilities.cattle.io/pspEnabled": "true" +``` + +以下注释表示 Ingress 功能。请注意,非原始对象的值需要进行 JSON 编码,并转义引号: + +```json +"capabilities.cattle.io/ingressCapabilities": "[ + { + "customDefaultBackend":true, + "ingressProvider":"asdf" + } +]" +``` + +你可以为集群注释以下功能: + +- `ingressCapabilities` +- `loadBalancerCapabilities` +- `nodePoolScalingSupported` +- `nodePortRange` +- `pspEnabled` +- `taintSupport` + +所有功能及其类型定义都可以在 Rancher API 视图中查看,地址是 `[Rancher Server URL]/v3/schemas/capabilities`。 + +要注释已注册的集群: + +1. 点击 **☰ > 集群管理**。 +1. 在**集群**页面上,转到要注释的自定义集群,然后单击 **⋮ > 编辑配置**。 +1. 展开**标签 & 注释**。 +1. 单击**添加注释**。 +1. 使用 `capabilities/: ` 格式向集群添加注释,其中 `value` 是要使用注释覆盖的集群功能。在这种情况下,Rancher 在你添加注释之前都不知道集群的任何功能。 +1. 单击**保存**。 + +**结果**:注释并不是给集群提供功能,而是告知 Rancher 集群具有这些功能。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-clusters-from-hosted-kubernetes-providers/aks.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-clusters-from-hosted-kubernetes-providers/aks.md new file mode 100644 index 00000000000..3265c5570ea --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-clusters-from-hosted-kubernetes-providers/aks.md @@ -0,0 +1,155 @@ +--- +title: 创建 AKS 集群 +shortTitle: Azure Kubernetes 服务 +weight: 2115 +--- + +你可以使用 Rancher 创建托管在 Microsoft Azure Kubernetes 服务 (AKS) 中的集群。 + + +## Microsoft Azure 中的先决条件 + +:::caution + +部署到 AKS 会产生费用。 + +::: + +若要与 Azure API 交互,AKS 集群需要 Azure Active Directory (AD) 服务主体。服务主体是动态创建和管理其他 Azure 资源所必需的,它为集群提供凭证来与 AKS 通信。有关服务主体的详细信息,请参阅 [AKS 文档](https://docs.microsoft.com/en-us/azure/aks/kubernetes-service-principal)。 + +在创建服务主体之前,你需要从 [Microsoft Azure 门户](https://portal.azure.com)获取以下信息: + +- 订阅 ID +- 客户端 ID +- 客户端密码 + +以下介绍如何使用 Azure 命令行工具或 Azure 门户进行设置,从而满足先决条件。 + +### 使用 Azure 命令行工具设置服务主体 + +运行以下命令来创建服务主体: + +``` +az ad sp create-for-rbac --skip-assignment +``` + +结果应显示新服务主体的信息: +``` +{ + "appId": "xxxx--xxx", + "displayName": "", + "name": "http://", + "password": "", + "tenant": "" +} +``` + +你还需要向服务主体添加角色,以便它具有与 AKS API 通信的权限。它还需要访问权限才能创建和列出虚拟网络。 + +下面是将参与者角色分配给服务主体的示例命令。参与者可以管理 AKS 上的任何内容,但不能授予其他人访问权限: + +``` +az role assignment create \ + --assignee $appId \ + --scope /subscriptions/$/resourceGroups/$ \ + --role Contributor +``` + +你还可以通过合并两个命令,来创建服务主体并授予参与者权限。在此命令中,`scope` 需要提供 Azure 资源的完整路径: + +``` +az ad sp create-for-rbac \ + --scope /subscriptions/$/resourceGroups/$ \ + --role Contributor +``` + +### 从 Azure 门户设置服务主体 + +你还可以按照这些说明设置服务主体,并从 Azure 门户为它授予基于角色的访问权限。 + +1. 转到 Microsoft Azure 门户[主页](https://portal.azure.com)。 + +1. 单击 **Azure Active Directory**。 +1. 单击 **App registrations**。 +1. 单击 **New registration**。 +1. 输入名称。这将是你服务主体的名称。 +1. 可选:选择可以使用服务主体的账号。 +1. 单击 **Register**。 +1. 你现在应该能在 **Azure Active Directory > App registrations** 下看到服务主体的名称。 +1. 单击你的服务主体的名称。记下应用 ID(也称为应用 ID 或客户端 ID),以便在预配 AKS 集群时使用。然后单击 **Certificates & secrets**。 +1. 单击 **New client secret**。 +1. 输入简短说明,选择过期时间,然后单击 **Add**。记下客户端密码,以便在预配 AKS 集群时使用它。 + +**结果**:你已经创建了一个服务主体,现在你能够在 **App registrations** 下的 **Azure Active Directory** 中找到它。你仍然需要向服务主体授予对 AKS 的访问权限。 + +要授予对服务主体基于角色的访问权限: + +1. 点击左侧导航栏中的 **All Services**。然后单击 **Subscriptions**。 +1. 单击要与 Kubernetes 集群关联的订阅的名称。记下订阅 ID,以便在预配 AKS 集群时使用它。 +1. 单击 **Access Control (IAM)**。 +1. 在 **Add role assignment** 中,单击 **Add**。 +1. 在 **Role** 字段中,选择将有权访问 AKS 的角色。例如,你可以使用 **Contributor** 角色,该角色有权管理除授予其他用户访问权限之外的所有内容。 +1. 在 **Assign access to** 字段中,选择 **Azure AD 用户、组或服务主体**。 +1. 在 **Select** 字段中,选择服务主体的名称,然后单击 **Save**。 + +**结果**:你的服务主体现在可以访问 AKS。 + +## 1. 创建 AKS 云凭证 + +1. 在 Rancher UI 中,单击 **☰ > 集群管理**。 +1. 单击**云凭证**。 +1. 单击**创建**。 +1. 单击 **Azure**。 +1. 填写表单。有关填写表格的帮助,请参阅[配置参考](../../../../reference-guides/cluster-configuration/rancher-server-configuration/aks-cluster-configuration.md#云凭证)。 +1. 单击**创建**。 + +## 2. 创建 AKS 集群 + +使用 Rancher 配置你的 Kubernetes 集群。 + +1. 点击 **☰ > 集群管理**。 +1. 在**集群**中,单击**创建**。 +1. 单击 **Azure AKS**。 +1. 填写表单。有关填写表格的帮助,请参阅[配置参考](../../../../reference-guides/cluster-configuration/rancher-server-configuration/aks-cluster-configuration.md)。 +1. 单击**创建**。 + +**结果**:集群已创建,并处于 **Provisioning** 状态。Rancher 已在你的集群中。 + +当集群状态变为 **Active** 后,你可访问集群。 + +## RBAC +在 Rancher UI 中配置 AKS 集群时,由于 RBAC 需要启用,因此 RBAC 不可配置。 + +注册或导入到 Rancher 的 AKS 集群需要 RBAC。 + +## AKS 集群配置参考 + +有关如何在 Rancher UI 配置 AKS 集群的更多信息,请参阅[配置参考](../../../../reference-guides/cluster-configuration/rancher-server-configuration/aks-cluster-configuration.md)。 + +## 私有集群 + +通常情况下,无论集群是否为私有,AKS worker 节点都不会获得公共 IP。在私有集群中,controlplane 没有公共端点。 + +Rancher 可以通过以下两种方式之一连接到私有 AKS 集群。 + +第一种方法是确保 Rancher 运行在与 AKS 节点相同的 [NAT](https://docs.microsoft.com/en-us/azure/virtual-network/nat-overview) 上。 + +第二种方法是运行命令向 Rancher 注册集群。配置集群后,你可以在任何能连接到集群的 Kubernetes API 的地方运行显示的命令。配置启用了私有 API 端点的 AKS 集群时,此命令将显示在弹出窗口中。 + +:::note + +注册现有 AKS 集群时,集群可能需要一些时间(可能是数小时)才会出现在 `Cluster To register` 下拉列表中。不同区域的结果可能不同。 + +::: + +有关连接到 AKS 专用集群的详细信息,请参阅 [AKS 文档](https://docs.microsoft.com/en-us/azure/aks/private-clusters#options-for-connecting-to-the-private-cluster)。 + +## 同步 + +AKS 配置者可以在 Rancher 和提供商之间同步 AKS 集群的状态。有关其工作原理的技术说明,请参阅[同步](../../../../reference-guides/cluster-configuration/rancher-server-configuration/sync-clusters.md)。 + +有关配置刷新间隔的信息,请参阅[本节](../../../../pages-for-subheaders/gke-cluster-configuration.md#配置刷新间隔)。 + +## 以编程方式创建 AKS 集群 + +通过 Rancher 以编程方式部署 AKS 集群的最常见方法是使用 Rancher 2 Terraform Provider。详情请参见[使用 Terraform 创建集群](https://registry.terraform.io/providers/rancher/rancher2/latest/docs/resources/cluster)。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-clusters-from-hosted-kubernetes-providers/alibaba.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-clusters-from-hosted-kubernetes-providers/alibaba.md new file mode 100644 index 00000000000..99a3ee9bc95 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-clusters-from-hosted-kubernetes-providers/alibaba.md @@ -0,0 +1,61 @@ +--- +title: 创建阿里云 ACK 集群 +shortTitle: 阿里云 Kubernetes 容器服务 +weight: 2120 +--- + +你可以使用 Rancher 创建托管在阿里云 Alibaba Cloud Kubernetes (ACK) 中的集群。Rancher 已经为 ACK 实现并打包了针对 ACK 的[集群驱动](../../../advanced-user-guides/authentication-permissions-and-global-configuration/about-provisioning-drivers/manage-cluster-drivers.md),但是默认情况下,这个集群驱动的状态是 `inactive`。为了启动 ACK 集群,你需要[启用 ACK 集群驱动](../../../advanced-user-guides/authentication-permissions-and-global-configuration/about-provisioning-drivers/manage-cluster-drivers.md#激活/停用集群驱动)。启用集群驱动后,你可以开始配置 ACK 集群。 + +## Rancher 之外的先决条件 + +:::caution + +部署到 ACK 会产生费用。 + +::: + +1. 在阿里云中,在对应的控制台中激活以下服务。 + + - [容器服务](https://cs.console.aliyun.com) + - [资源编排服务](https://ros.console.aliyun.com) + - [RAM](https://ram.console.aliyun.com) + +2. 确保你用于创建 ACK 集群的账号具有适当的权限。详见阿里云[角色授权](https://www.alibabacloud.com/help/doc-detail/86483.htm)和[使用容器服务控制台作为 RAM 用户](https://www.alibabacloud.com/help/doc-detail/86484.htm)官方文档。 + +3. 在阿里云中,创建[访问密钥](https://www.alibabacloud.com/help/doc-detail/53045.html)。 + +4. 在阿里云中,创建 [SSH 密钥对](https://www.alibabacloud.com/help/doc-detail/51793.html)。该密钥用于访问 Kubernetes 集群中的节点。 + +## Rancher 先决条件 + +你需要启用阿里云 ACK 集群驱动: + +1. 点击 **☰ > 集群管理**。 +1. 点击**驱动**。 +1. 在**集群驱动**选项卡中,转到 **Alibaba ACK** 集群驱动并单击 **⋮ > 激活**。 + +集群驱动下载完成后,就可以在 Rancher 中创建阿里云 ACK 集群了。 + +## 创建 ACK 集群 + +1. 点击 **☰ > 集群管理**。 +1. 在**集群**页面,点击**创建**。 +1. 单击 **Alibaba ACK**。 +1. 输入**集群名称**。 +1. 使用**成员角色**为集群配置用户授权。点击**添加成员**添加可以访问集群的用户。使用**角色**下拉菜单为每个用户设置权限。 +1. 为 ACK 集群配置**账号访问**。选择要在其中构建集群的地理区域,并输入在先决条件步骤中创建的访问密钥。 +1. 点击**下一步:配置集群**,然后选择集群类型、Kubernetes 版本和可用区。 +1. 如果选择 **Kubernetes** 作为集群类型,请单击**下一步:配置 master 节点**,然后填写 **master 节点**表单。 +1. 单击**下一步:配置 Worker 节点**,然后填写 **Worker 节点**表单。 +1. 检查并确认你的选项。然后单击**创建**。 + +**结果**: + +你已创建集群,集群的状态是**配置中**。Rancher 已在你的集群中。 + +当集群状态变为 **Active** 后,你可访问集群。 + +**Active** 状态的集群会分配到两个项目: + +- `Default`:包含 `default` 命名空间 +- `System`:包含 `cattle-system`,`ingress-nginx`,`kube-public` 和 `kube-system` 命名空间。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-clusters-from-hosted-kubernetes-providers/gke.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-clusters-from-hosted-kubernetes-providers/gke.md new file mode 100644 index 00000000000..361583e1368 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-clusters-from-hosted-kubernetes-providers/gke.md @@ -0,0 +1,103 @@ +--- +title: 管理 GKE 集群 +shortTitle: Google Kubernetes Engine +weight: 2105 +--- + + +## 先决条件 + +你需要在 Google Kubernetes Engine 中进行一些设置。 + +### ServiceAccount 令牌 + +使用 [Google Kubernetes Engine](https://console.cloud.google.com/projectselector/iam-admin/serviceaccounts) 创建服务帐号。GKE 使用这个账号来操作你的集群。创建此账号还会生成用于身份验证的私钥。 + +该 ServiceAccount 需要以下角色: + +- **Compute Viewer:** `roles/compute.viewer` +- **Project Viewer:** `roles/viewer` +- **Kubernetes Engine Admin:** `roles/container.admin` +- **Service Account User:** `roles/iam.serviceAccountUser` + +[Google 文档:创建和启用 ServiceAccount](https://cloud.google.com/compute/docs/access/create-enable-service-accounts-for-instances) + +有关获取 ServiceAccount 的私钥的详细信息,请参阅[此 Google 云文档](https://cloud.google.com/iam/docs/creating-managing-service-account-keys#creating_service_account_keys)。你需要将密钥保存为 JSON 格式。 + +### Google 项目 ID + +你的集群需要包括到谷歌项目中。 + +要创建新项目,请参阅[此 Google 云文档](https://cloud.google.com/resource-manager/docs/creating-managing-projects#creating_a_project)。 + +要获取现有项目的项目 ID,请参阅[此 Google 云文档](https://cloud.google.com/resource-manager/docs/creating-managing-projects#identifying_projects)。 + +## 配置 GKE 集群 + +:::caution + +部署到 GKE 会产生费用。 + +::: + +### 1. 创建云凭证 + +1. 点击 **☰ > 集群管理**。 +1. 在左侧导航栏中,单击**云凭证**。 +1. 单击**创建**。 +1. 输入你 Google 云凭证的名称。 +1. 在 **ServiceAccount** 文本框中,粘贴你的 ServiceAccount 私钥 JSON,或上传 JSON 文件。 +1. 单击**创建**。 + +**结果**:你已创建 Rancher 用于配置新 GKE 集群的凭证。 + +### 2. 创建 GKE 集群 +使用 Rancher 配置你的 Kubernetes 集群。 + +1. 点击 **☰ > 集群管理**。 +1. 在**集群**页面上,单击**创建**。 +1. 单击 **Google GKE**。 +1. 输入**集群名称**。 +1. 可选:使用**成员角色**为集群配置用户授权。点击**添加成员**添加可以访问集群的用户。使用**角色**下拉菜单为每个用户设置权限。 +1. 可选:将 Kubernetes [标签](https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/)或[注释](https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/)添加到集群。 +1. 输入你的 Google 项目 ID 和 Google 云凭证。 +1. 完成表单的其余部分。如需帮助,请参阅 [GKE 集群配置参考](../../../../pages-for-subheaders/gke-cluster-configuration.md)。 +1. 单击**创建**。 + +**结果**:你已成功部署 GKE 集群。 + +你已创建集群,集群的状态是**配置中**。Rancher 已在你的集群中。 + +当集群状态变为 **Active** 后,你可访问集群。 + +**Active** 状态的集群会分配到两个项目: + +- `Default`:包含 `default` 命名空间 +- `System`:包含 `cattle-system`,`ingress-nginx`,`kube-public` 和 `kube-system` 命名空间。 + +## 私有集群 + +支持私有 GKE 集群。注意,此高级设置可能涉及更多步骤。有关详细信息,请参阅[本节](../../../../reference-guides/cluster-configuration/rancher-server-configuration/gke-cluster-configuration/gke-private-clusters.md)。 + +## 配置参考 + +有关在 Rancher 中配置 GKE 集群的详细信息,请参阅[此页面](../../../../pages-for-subheaders/gke-cluster-configuration.md)。 +## 更新 Kubernetes 版本 + +集群的 Kubernetes 版本可以升级到 GKE 集群所在区域或地区中可用的任何版本。升级 Kubernetes 主版本不会自动升级 Worker 节点。节点可以独立升级。 + +:::note + +GKE 在 1.19+ 中取消了基本身份验证。要将集群升级到 1.19+,必须在谷歌云中禁用基本身份认证。否则,在升级到 1.19+ 时,Rancher 会出现错误。你可以按照 [Google 文档](https://cloud.google.com/kubernetes-engine/docs/how-to/api-server-authentication#disabling_authentication_with_a_static_password)进行操作。然后,你就可以使用 Rancher 将 Kubernetes 版本更新到 1.19+。 + +::: + +## 同步 + +GKE 配置者可以在 Rancher 和提供商之间同步 GKE 集群的状态。有关其工作原理的技术说明,请参阅[同步](../../../../reference-guides/cluster-configuration/rancher-server-configuration/sync-clusters.md)。 + +有关配置刷新间隔的信息,请参阅[本节](../../../../pages-for-subheaders/gke-cluster-configuration.md#配置刷新间隔)。 + +## 以编程方式创建 GKE 集群 + +通过 Rancher 以编程方式部署 GKE 集群的最常见方法是使用 Rancher 2 Terraform Provider。详情请参见[使用 Terraform 创建集群](https://registry.terraform.io/providers/rancher/rancher2/latest/docs/resources/cluster)。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-clusters-from-hosted-kubernetes-providers/huawei.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-clusters-from-hosted-kubernetes-providers/huawei.md new file mode 100644 index 00000000000..bf0e4845106 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-clusters-from-hosted-kubernetes-providers/huawei.md @@ -0,0 +1,102 @@ +--- +title: 创建华为 CCE 集群 +shortTitle: 华为云 Kubernetes 服务 +weight: 2130 +--- + +你可以使用 Rancher 创建托管在华为云容器引擎 (CCE) 中的集群。Rancher 已经为 CCE 实现并打包了针对 CCE 的[集群驱动](../../../advanced-user-guides/authentication-permissions-and-global-configuration/about-provisioning-drivers/manage-cluster-drivers.md),但是默认情况下,这个集群驱动的状态是 `inactive`。为了启动 CCE 集群,你需要[启用 CCE 集群驱动](../../../advanced-user-guides/authentication-permissions-and-global-configuration/about-provisioning-drivers/manage-cluster-drivers.md#激活/停用集群驱动)。启用集群驱动后,你可以开始配置 CCE 集群。 + +## 华为先决条件 + +:::caution + +部署到 CCE 会产生费用。 + +::: + +1. 在华为 CCE 门户中找到你的项目 ID。请参阅 CCE 文档以了解如何[管理你的项目](https://support.huaweicloud.com/en-us/usermanual-iam/en-us_topic_0066738518.html)。 + +2. 创建一个[访问密钥 ID 和密文访问密钥](https://support.huaweicloud.com/en-us/usermanual-iam/en-us_topic_0079477318.html)。 + +## Rancher 先决条件 + +你需要启用华为 CCE 集群驱动: + +1. 点击 **☰ > 集群管理**。 +1. 点击**驱动**。 +1. 在**集群驱动**选项卡中,转到 **Huawei CCE** 集群驱动并单击 **⋮ > 激活**。 + +集群驱动下载完成后,就可以在 Rancher 中创建华为 CCE 集群了。 + +## 限制 + +华为 CCE 服务不支持通过其 API 创建具有公共访问权限的集群。你需要在要配置的 CCE 集群的相同 VPC 中运行 Rancher。 + +## 创建 CCE 集群 + +1. 在**集群**页面,点击**创建**。 +1. 单击 **Huawei CCE**。 +1. 输入**集群名称**。 +1. 使用**成员角色**为集群配置用户授权。点击**添加成员**添加可以访问集群的用户。使用**角色**下拉菜单为每个用户设置权限。 +1. 输入**项目 ID**,访问密钥 ID,**Access Key**,和密文访问密钥 **Secret Key**。然后点击**下一步:配置集群**。填写集群配置。有关填写表单的帮助,请参阅[华为 CCE 配置](#华为-cce-配置)。 +1. 填写集群的以下节点配置。有关填写表单的帮助,请参阅[节点配置](#节点配置)。 +1. 点击**创建**来创建 CCE 集群。 + +**结果**: + +你已创建集群,集群的状态是**配置中**。Rancher 已在你的集群中。 + +当集群状态变为 **Active** 后,你可访问集群。 + +**Active** 状态的集群会分配到两个项目: + +- `Default`:包含 `default` 命名空间 +- `System`:包含 `cattle-system`,`ingress-nginx`,`kube-public` 和 `kube-system` 命名空间。 + +## 华为 CCE 配置 + +| 设置 | 描述 | +|---|---| +| 集群类型 | 要包含到集群的节点类型,可以是 `VirtualMachine` 或 `BareMetal`。 | +| 描述 | 集群的描述。 | +| 主版本 | Kubernetes 版本。 | +| 管理规模数量 | 集群的最大节点数。选项为 50、200 和 1000。规模计数越大,成本越高。 | +| 高可用性 | 启用 master 节点的高可用性。启用高可用性的集群成本会更高。 | +| 容器网络模式 | 集群中使用的网络模式。`VirtualMachine` 支持 `overlay_l2` 和 `vpc-router`,而 `BareMetal` 支持 `underlay_ipvlan`。 | +| 容器网络 CIDR | 集群的网络 CIDR。 | +| VPC 名称 | 要部署集群的 VPC 名称。如果留空,Rancher 将创建一个。 | +| 子网名称 | 要部署集群的子网名称。如果留空,Rancher 将创建一个。 | +| 外部服务器 | 预留选项,用于通过 API 启用 CCE 集群的公共访问。这个选项暂时是一直禁用的。 | +| 集群标签 | 集群的标签。 | +| 高速子网 | 只有 `BareMetal` 支持该选项。裸机要求选择网速高的 VPC。 | + +:::note + +如果你在 `cluster.yml` 中编辑集群,而不是使用 Rancher UI,则集群配置参数必须嵌套在 `cluster.yml` 中的 `rancher_kubernetes_engine_config` 中。有关详细信息,请参阅[配置文件结构](../../../../reference-guides/cluster-configuration/rancher-server-configuration/rke1-cluster-configuration.md#rancher-中的配置文件结构)。 + +::: + +## 节点配置 + +| 设置 | 描述 | +|---|---| +| 地区 | 部署集群节点的可用区域。 | +| 计费方式 | 集群节点的计费模式。`VirtualMachine` 仅支持 `Pay-per-use`。`BareMetal` 支持 `Pay-per-use` 或 `Yearly/Monthly`。 | +| 有效期 | 该选项仅在 `Yearly/Monthly` 计费模式中显示。表示支付集群节点费用的时间。 | +| 自动续期 | 该选项仅在 `Yearly/Monthly` 计费模式中显示。表示是否为集群节点自动续期 `Yearly/Monthly` 计费。 | +| 数据卷类型 | 集群节点的数据卷类型。可选 `SATA`,`SSD` 或 `SAS`。 | +| 数据量大小 | 集群节点的数据卷大小。 | +| 根卷类型 | 集群节点的根卷类型。可选 `SATA`,`SSD` 或 `SAS`。 | +| 根卷大小 | 集群节点的根卷大小。 | +| 节点风格 | 集群节点的节点风格。Rancher UI 中的风格列表取自华为云。其中包括所有支持的节点风格。 | +| 节点数 | 集群的节点数 | +| 节点操作系统 | 集群节点的操作系统。目前仅支持 `EulerOS 2.2` 和 `CentOS 7.4`。 | +| SSH 密钥名称 | 集群节点的 SSH 密钥 | +| EIP | 集群节点的公共 IP 选项。`已禁用`表示集群节点不会绑定公共 IP。`创建 EIP`表示集群节点在配置后将绑定一个或多个新创建的 EIP,UI 中将显示更多用来创建 EIP 参数的选项。`选择现有 EIP` 表示节点将绑定到你选择的 EIP。 | +| EIP 数量 | 此选项仅在选择`创建 EIP`时显示。表示你要为节点创建的 EIP 数量。 | +| EIP 类型 | 此选项仅在选择`创建 EIP`时显示。可选 `5_bgp` 和 `5_sbgp`。 | +| EIP 共享类型 | 此选项仅在选择`创建 EIP`时显示。仅可选 `PER`。 | +| EIP 收费模式 | 此选项仅在选择`创建 EIP`时显示。选择按照`带宽`或`流量`计费。 | +| EIP 带宽大小 | 此选项仅在选择`创建 EIP`时显示。EIP 的带宽。 | +| 身份验证模式 | 表示启用 `RBAC`,或同时启用`认证代理`。如果选择`认证代理`,则还需要用于验证代理的证书。 | +| 节点标签 | 集群节点的标签。无效标签会阻止升级,或阻止 Rancher 启动。有关标签语法的详细信息,请参阅 [Kubernetes 文档](https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#syntax-and-character-set)。 | \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-clusters-from-hosted-kubernetes-providers/tencent.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-clusters-from-hosted-kubernetes-providers/tencent.md new file mode 100644 index 00000000000..2c76c8dc64e --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-clusters-from-hosted-kubernetes-providers/tencent.md @@ -0,0 +1,101 @@ +--- +title: 创建腾讯 TKE 集群 +shortTitle: Tencent Kubernetes Engine +weight: 2125 +--- + +你可以使用 Rancher 创建托管在腾讯 Tencent Kubernetes Engine (TKE) 中的集群。Rancher 已经为 TKE 实现并打包了针对 TKE 的[集群驱动](../../../advanced-user-guides/authentication-permissions-and-global-configuration/about-provisioning-drivers/manage-cluster-drivers.md),但是默认情况下,这个集群驱动的状态是 `inactive`。为了启动 TKE 集群,你需要[启用 TKE 集群驱动](../../../advanced-user-guides/authentication-permissions-and-global-configuration/about-provisioning-drivers/manage-cluster-drivers.md#激活/停用集群驱动)。启用集群驱动后,你可以开始配置 TKE 集群。 + +## 腾讯先决条件 + +:::caution + +部署到 TKE 会产生费用。 + +::: + +1. 参见[云访问管理](https://intl.cloud.tencent.com/document/product/598/10600)文档,确保用于创建 TKE 集群的账号具有适当的权限。 + +2. 创建[云 API 密钥 ID 和密钥](https://console.cloud.tencent.com/capi)。 + +3. 在要部署 Kubernetes 集群的区域中创建[私有网络和子网](https://intl.cloud.tencent.com/document/product/215/4927)。 + +4. 创建 [SSH 密钥对](https://intl.cloud.tencent.com/document/product/213/6092)。该密钥用于访问 Kubernetes 集群中的节点。 + +## Rancher 先决条件 + +你需要启用腾讯 TKE 集群驱动: + +1. 点击 **☰ > 集群管理**。 +1. 点击**驱动**。 +1. 在**集群驱动**选项卡中,转到 **Tencent TKE** 集群驱动并单击 **⋮ > 激活**。 + +集群驱动下载完成后,就可以在 Rancher 中创建腾讯 TKE 集群了。 + +## 创建 TKE 集群 + +1. 在**集群**页面,点击**创建**。 + +2. 选择 **Tencent TKE**。 + +3. 输入**集群名称**。 + +4. 使用**成员角色**为集群配置用户授权。点击**添加成员**添加可以访问集群的用户。使用**角色**下拉菜单为每个用户设置权限。 + +5. 为 TKE 集群配置**账号访问**。使用[先决条件](#腾讯先决条件)中获得的信息完成每个下拉列表和字段。 + + | 选项 | 描述 | + | ---------- | -------------------------------------------------------------------------------------------------------------------- | + | 区域 | 从下拉列表中选择构建集群的地理区域。 | + | 密文 ID | 输入从腾讯云控制台获取的密文 ID。 | + | 密文密钥 | 输入从腾讯云控制台获取的密文密钥。 | + +6. 然后,单击`下一步:配置集群`来配置 TKE 集群。 + + | 选项 | 描述 | + | ---------- | -------------------------------------------------------------------------------------------------------------------- | + | Kubernetes 版本 | TKE 目前只支持 Kubernetes 1.10.5。 | + | 节点数 | 输入要为 Kubernetes 集群购买的 worker 节点数,最大值是 100。 | + | VPC | 选择在腾讯云控制台中创建的 VPC 名称。 | + | 容器网络 CIDR | 输入 Kubernetes 集群的 CIDR 范围。你可以在腾讯云控制台的 VPC 服务中查看该 CIDR 的可用范围。默认为 172.16.0.0/16。 | + + :::note + + 如果你在 `cluster.yml` 中编辑集群,而不是使用 Rancher UI,则集群配置参数必须嵌套在 `cluster.yml` 中的 `rancher_kubernetes_engine_config` 中。有关详细信息,请参阅 [Rancher 2.3.0+ 配置文件结构](../../../../reference-guides/cluster-configuration/rancher-server-configuration/rke1-cluster-configuration.md#rancher-中的配置文件结构)。 + + ::: + +7. 点击`下一步:选择实例类型`,然后选择将用于 TKE 集群的实例类型。 + + | 选项 | 描述 | + | ---------- | -------------------------------------------------------------------------------------------------------------------- | + | 可用区 | 选择 VPC 区域的可用区。 | + | 子网 | 选择你在 VPC 中创建的子网。如果在所选可用区中没有该子网,请添加一个新子网。 | + | 实例类型 | 从下拉列表中选择要用于 TKE 集群的 VM 实例类型,默认为 S2.MEDIUM4(CPU 2;内存 4 GiB)。 | + +8. 点击`下一步:配置实例`,配置用于 TKE 集群的 VM 实例。 + + | 选项 | 描述 | + -------|------------ + | 操作系统 | 操作系统名称,目前支持 Centos7.2x86_64 或 ubuntu16.04.1 LTSx86_64。 | + | 安全组 | 安全组 ID,默认不绑定任何安全组。 | + | 根磁盘类型 | 系统盘类型。系统盘类型限制详见 [CVM 实例配置](https://cloud.tencent.com/document/product/213/11518)。 | + | 根磁盘大小 | 系统盘大小。Linux 系统调整范围为 20-50 GB,步长为 1。 | + | 数据盘类型 | 数据盘类型,默认为 SSD 云盘。 | + | 数据磁盘大小 | 数据盘大小(GB),步长为 10。 | + | 带宽类型 | 带宽收费类型,PayByTraffic 或 PayByHour。 | + | 带宽 | 公网带宽 (Mbps) | + | 密钥对 | 密钥 ID,关联后可以用来登录 VM 节点。 | + +9. 单击**创建**。 + +**结果**: + +你已创建集群,集群的状态是**配置中**。Rancher 已在你的集群中。 + +当集群状态变为 **Active** 后,你可访问集群。 + +**Active** 状态的集群会分配到两个项目: + +- `Default`:包含 `default` 命名空间 +- `System`:包含 `cattle-system`,`ingress-nginx`,`kube-public` 和 `kube-system` 命名空间。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-resources-setup/configmaps.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-resources-setup/configmaps.md new file mode 100644 index 00000000000..7cfb5e3abc9 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-resources-setup/configmaps.md @@ -0,0 +1,36 @@ +--- +title: ConfigMap +weight: 3061 +--- + +大多数 Kubernetes 密文用于存储敏感信息,但是 [ConfigMap](https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/) 会存储一般配置信息,例如一组配置文件。由于 ConfigMap 不存储敏感信息,因此 ConfigMap 可以自动更新,不需要在更新后重启其容器(其他类型的密文大多需要手动更新和重启容器后才能生效)。 + +ConfigMap 接受常见字符串格式的键值对,例如配置文件或 JSON Blob。上传配置映射后,任何工作负载都可以将其引用为环境变量或卷挂载。 + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 转到具有要引用 ConfigMap 的工作负载的集群,然后单击 **Explore**。 +1. 在左侧导航栏中,单击**更多资源 > 核心 > ConfigMaps**。 +1. 单击**创建**。 +1. 输入 ConfigMap 的**名称**。 + + :::note + + Kubernetes 将 ConfigMap 归类为[密文](https://kubernetes.io/docs/concepts/configuration/secret/),项目或命名空间中的密文不能重名。因此,为了避免冲突,ConfigMap 的名称必须与工作空间中的其他证书、镜像仓库和密文不一样。 + + ::: + +1. 选择要添加 ConfigMap 的**命名空间**。 + +1. 在**数据**选项卡上,将键值对添加到你的 ConfigMap。你可以根据需要添加任意数量的值。通过复制和粘贴的方式将多个键值对添加到 ConfigMap。你也可以使用**从文件读取**来添加数据。请注意,如果要存储敏感数据,请[使用密文](secrets.md),不要使用 ConfigMap。 +1. 单击**创建**。 + +**结果**:已将 ConfigMap 添加到命名空间。你可以在 Rancher UI 的**资源 > ConfigMaps** 视图中查看它。 + +## 后续操作 + +现在你已经将 ConfigMap 添加到命名空间,你可以将其添加到原始命名空间部署的工作负载中。你可以使用 ConfigMap 指定应用程序使用的信息,例如: + +- 应用程序环境变量。 +- 指定安装到工作负载的卷的参数。 + +有关将 ConfigMap 添加到工作负载的更多信息,请参阅[部署工作负载](workloads-and-pods/deploy-workloads.md)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-resources-setup/create-services.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-resources-setup/create-services.md new file mode 100644 index 00000000000..ec0686f4a1e --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-resources-setup/create-services.md @@ -0,0 +1,30 @@ +--- +title: Services +weight: 3045 +--- + +Deployment、StatefulSet 和 Daemonset 会管理 Pod 配置,而 Service 使用选择器将流量引导到 Pod。 + +每个工作负载(至少配置一个端口)都会创建一个补充的服务发现条目。此服务发现条目使用以下命名约定为工作负载的 pod 启用 DNS 解析: +`..svc.cluster.local`。 + +你可以创建其它 service,这样,指定的命名空间就可以使用一个或多个外部 IP 地址、外部主机名、另一个 DNS 记录的别名、其他工作负载或与你创建的选择器匹配的一组 pod 来进行解析。 + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 转到要添加 service 的集群,然后单击 **Explore**。 +1. 点击**服务发现 > 服务**。 +1. 单击**创建**。 +1. 选择要创建的 service 类型。 +1. 从下拉列表中选择一个的**命名空间**。 +1. 输入 service 的**名称**。此名称会用于 DNS 解析。 +1. 完成表单的其余部分。如需帮助,请参阅 [service 的上游 Kubernetes 文档](https://kubernetes.io/docs/concepts/services-networking/service/)。 +1. 单击**创建**。 + +**结果**:创建了一个新 service。 + +- 你可以从项目的**服务发现**选项卡查看记录。 +- 访问你创建的新记录的新 DNS 名称 (`..svc.cluster.local`) 时,它会解析所选的命名空间。 + +## 相关链接 + +- [使用 HostAliases 向 Pod /etc/hosts 文件添加条目](https://kubernetes.io/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases/) diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-resources-setup/encrypt-http-communication.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-resources-setup/encrypt-http-communication.md new file mode 100644 index 00000000000..ee0d68f244c --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-resources-setup/encrypt-http-communication.md @@ -0,0 +1,39 @@ +--- +title: 加密 HTTP 通信 +description: 了解如何添加 SSL 证书或 TLS 证书 +weight: 3060 +--- + +在 Rancher/Kubernetes 中创建 Ingress 时,你必须提供包含 TLS 私钥和证书的密文,用于加密和解密通过 Ingress 的通信。你可以通过将证书添加到 Ingress Deployment 来让 Ingress 使用证书。 + +:::note 先决条件: + +你必须具有可上传的 TLS 私钥和证书。 + +::: + +### 1. 创建一个密文 + + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 转到要部署 Ingress 的集群,然后单击**更多资源 > 核心 > 密文**。 +1. 单击**创建**。 +1. 单击 **TLS 证书**。 +1. 输入密文的名称。请注意,密文的名称必须与项目/工作空间中的其他证书、镜像仓库和密文不一样。 +1. 在**私钥**字段中,将证书的私钥复制并粘贴到文本框中(包括标头和页脚),或者单击**从文件读取**选择文件系统上的私钥。如果可能,我们建议使用**从文件读取**以减少出错的可能性。请注意,私钥文件的扩展名是 `.key`。 +1. 在**证书**字段中,将你的证书复制并粘贴到文本框中(包括标头和页脚),或者单击**从文件读取**选择文件系统上的证书文件。如果可能,我们建议使用**从文件读取**以减少出错的可能性。请注意,证书文件的扩展名是 `.crt`。 +1. 单击**创建**。 + +### 2. 将密文添加到 Ingress + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 转到要部署 Ingress 的集群,然后单击**服务发现 > Ingress**。 +1. 单击**创建**。 +1. 选择 Ingress 的**命名空间**。 +1. 输入 Ingress 的**名称**。 +1. 在**证书**选项卡中,选择包含你的证书和私钥的密文。 +1. 单击**创建**。 + +## 后续操作 + +现在,你可以在该项目或命名空间中启动 Ingress 时添加证书。如需更多信息,请参阅[添加 Ingress](load-balancer-and-ingress-controller/add-ingresses.md)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-resources-setup/horizontal-pod-autoscaler/about-hpas.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-resources-setup/horizontal-pod-autoscaler/about-hpas.md new file mode 100644 index 00000000000..fa42a3bae89 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-resources-setup/horizontal-pod-autoscaler/about-hpas.md @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-resources-setup/horizontal-pod-autoscaler/manage-hpas-with-kubectl.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-resources-setup/horizontal-pod-autoscaler/manage-hpas-with-kubectl.md new file mode 100644 index 00000000000..fa42a3bae89 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-resources-setup/horizontal-pod-autoscaler/manage-hpas-with-kubectl.md @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-resources-setup/horizontal-pod-autoscaler/manage-hpas-with-ui.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-resources-setup/horizontal-pod-autoscaler/manage-hpas-with-ui.md new file mode 100644 index 00000000000..fa42a3bae89 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-resources-setup/horizontal-pod-autoscaler/manage-hpas-with-ui.md @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-resources-setup/horizontal-pod-autoscaler/test-hpas-with-kubectl.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-resources-setup/horizontal-pod-autoscaler/test-hpas-with-kubectl.md new file mode 100644 index 00000000000..fa42a3bae89 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-resources-setup/horizontal-pod-autoscaler/test-hpas-with-kubectl.md @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-resources-setup/kubernetes-and-docker-registries.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-resources-setup/kubernetes-and-docker-registries.md new file mode 100644 index 00000000000..dc692786667 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-resources-setup/kubernetes-and-docker-registries.md @@ -0,0 +1,166 @@ +--- +title: Kubernetes 镜像仓库和 Docker 镜像仓库 +description: 了解 Docker 镜像仓库和 Kubernetes 镜像仓库、它们的用例以及如何在 Rancher UI 中使用私有镜像仓库 +weight: 3063 +--- +镜像仓库是 Kubernetes 密文(Secret),包含用于向[私有 Docker 镜像仓库](https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/)进行身份验证的凭证。 + +“Registry” 这个词可能有两种意思,可指代 Docker 或 Kubernetes 镜像仓库: + +- **Docker 镜像仓库**包含 Docker 镜像,你可以拉取镜像以便在 deployment 中使用镜像。镜像仓库是一个无状态、可扩展的服务器端应用程序,用于存储和分发 Docker 镜像。 +- **Kubernetes 镜像仓库**是一个镜像拉取密文,你的 deployment 使用该密文来向 Docker 镜像仓库进行身份验证。 + +Deployment 使用 Kubernetes 镜像仓库密文向私有 Docker 镜像仓库进行身份验证,然后拉取托管在仓库上的 Docker 镜像。 + +目前,只有在 Rancher UI 中创建工作负载时(通过 kubectl 创建的工作负载不可以),Deployment 才会自动拉取私有镜像仓库凭证。 + +# 在命名空间中创建镜像仓库 + +:::note 先决条件: + +你必须有一个可用的[私有镜像仓库](https://docs.docker.com/registry/deploying/)。 + +::: + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 转到要添加镜像仓库的集群,然后单击 **Explore**。 +1. 在左侧导航中,单击**存储 > 密文**或**更多资源 > 核心 > 密文**。 +1. 单击**创建**。 +1. 单击**镜像仓库**。 +1. 输入镜像仓库的**名称**。 + + :::note + + Kubernetes 将密文、证书和镜像仓库都归类为[密文](https://kubernetes.io/docs/concepts/configuration/secret/),命名空间或项目中的密文名称不能重复。因此,为了避免冲突,镜像仓库的名称必须与工作空间中的其他密文不一样。 + + ::: + +1. 为镜像仓库选择一个命名空间。 +1. 选择托管你的私人镜像仓库的网站。然后,输入向镜像仓库进行身份验证的凭证。例如,如果你使用 DockerHub,请提供你的 DockerHub 用户名和密码。 +1. 单击**保存**。 + +**结果**: + +- 已将你的密文添加到命名空间中。 +- 你可以通过单击**存储 > 密文**或**更多资源 > 核心 > 密文**在 Rancher UI 中查看密文。 +- 如果工作负载在镜像仓库的范围内,你在 Rancher UI 中创建的任何工作负载都将具有访问镜像仓库的凭证。 + +# 在项目中创建镜像仓库 + +:::note 先决条件: + +你必须有一个可用的[私有镜像仓库](https://docs.docker.com/registry/deploying/)。 + +::: + +在 Rancher 2.6 之前,密文必须创建在项目级别。现在不再需要项目级别,你可以采用命名空间级别。因此,Rancher UI 进行了更新以反映这一新功能。但是,你仍然可以按照需要创建项目级别的镜像仓库。执行以下步骤进行操作: + +1. 在左上角,单击下拉菜单中的 **☰ > 全局设置**。 +1. 单击**功能开关**。 +1. 转到`旧版应用`功能开关并单击**激活**。 +1. 在左上角,单击 **☰ > 集群管理**。 +1. 转到要添加镜像仓库的集群,然后单击 **Explore**。 +1. 在左侧导航中,单击**存储 > 密文**或**更多资源 > 核心 > 密文**。 +1. 单击**创建**。 +1. 单击**镜像仓库**。 +1. 在顶部导航栏中进行过滤,从而仅查看一个项目。 +1. 输入镜像仓库的**名称**。 + + :::note + + Kubernetes 将密文、证书和镜像仓库都归类为[密文](https://kubernetes.io/docs/concepts/configuration/secret/),命名空间或项目中的密文名称不能重复。因此,为了避免冲突,镜像仓库的名称必须与工作空间中的其他密文不一样。 + + ::: + +1. 为镜像仓库选择一个命名空间。 +1. 选择托管你的私人镜像仓库的网站。然后,输入向镜像仓库进行身份验证的凭证。例如,如果你使用 DockerHub,请提供你的 DockerHub 用户名和密码。 +1. 单击**保存**。 + +**结果**: + +- 密文已添加到你选择的项目中。 +- 你可以通过单击**存储 > 密文**或**更多资源 > 核心 > 密文**在 Rancher UI 中查看密文。 +- 如果工作负载在镜像仓库的范围内,你在 Rancher UI 中创建的任何工作负载都将具有访问镜像仓库的凭证。 + +:::note + +local 集群上的项目级别镜像仓库仅在选择单个项目时可见。 + +::: + +# 使用私有镜像仓库 + +你可以通过 Rancher UI 或 `kubectl` 使用私有镜像仓库的镜像来部署工作负载。 + +### 在 Rancher UI 中使用私有镜像仓库 + +要使用私有镜像仓库中的镜像来部署工作负载: + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 转到要部署工作负载的集群,然后单击 **Explore**。 +1. 点击**工作负载**。 +1. 单击**创建**。 +1. 选择要创建的工作负载类型。 +1. 输入工作负载的独特名称,并选择命名空间。 +1. 在**容器镜像**字段中,输入私有镜像仓库中镜像的路径 URL。例如,如果你的私有镜像仓库位于 Quay.io,你可以使用 `quay.io//`。 +1. 单击**创建**。 + +**结果**:你的 deployment 能启动,能使用你在 Rancher UI 中添加的私有镜像仓库凭证进行身份验证,并拉取指定的 Docker 镜像。 + +### 通过 kubectl 使用私有镜像仓库 + +使用 `kubectl`创建工作负载时,你需要配置 pod,从而使其 YAML 具有私有镜像仓库中镜像的路径。如果 Pod 是在 Rancher UI 中创建的,它只会自动获取对私有镜像仓库凭证的访问权限,因此你还必须创建和引用镜像仓库密文。 + +密文必须创建在部署工作负载的同一命名空间中。 + +下面是一个示例 `pod.yml`,它用于使用私有镜像仓库的镜像的工作负载。在此示例中,pod 使用来自 Quay.io 的镜像,而且 .yml 指定了镜像的路径。pod 使用存储在名为 `testquay` 的 Kubernetes 密文中的凭证来向镜像仓库进行身份验证,该密文在 `name` 字段的 `spec.imagePullSecrets` 中指定: + +```yaml +apiVersion: v1 +kind: Pod +metadata: + name: private-reg +spec: + containers: + - name: private-reg-container + image: quay.io// + imagePullSecrets: + - name: testquay +``` + +在此示例中,名为 `testquay` 的密文位于 Default 命名空间中。 + +你可以通过 `kubectl` 使用私有镜像仓库凭证来创建密文。此命令创建名为 `testquay` 的密文: + +``` +kubectl create secret docker-registry testquay \ + --docker-server=quay.io \ + --docker-username= \ + --docker-password= +``` + +要查看密文是如何存储在 Kubernetes 中的,可以使用以下命令: + +``` +kubectl get secret testquay --output="jsonpath={.data.\.dockerconfigjson}" | base64 --decode +``` + +结果如下所示: + +``` +{"auths":{"quay.io":{"username":"","password":"","auth":"c291bXlhbGo6dGVzdGFiYzEyMw=="}}} +``` + +部署工作负载后,你可以检查镜像是否已拉取成功: + +``` +kubectl get events +``` +结果应如下所示: +``` +14s Normal Scheduled Pod Successfully assigned default/private-reg2 to minikube +11s Normal Pulling Pod pulling image "quay.io//" +10s Normal Pulled Pod Successfully pulled image "quay.io//" +``` + +有关详细信息,请参阅 Kubernetes 文档中的[创建使用你密文的 pod](https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/#create-a-pod-that-uses-your-secret)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-resources-setup/load-balancer-and-ingress-controller/add-ingresses.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-resources-setup/load-balancer-and-ingress-controller/add-ingresses.md new file mode 100644 index 00000000000..4ffff921ee9 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-resources-setup/load-balancer-and-ingress-controller/add-ingresses.md @@ -0,0 +1,20 @@ +--- +title: 添加 Ingress +description: 你可以为工作负载添加 Ingress,从而提供负载均衡、SSL 终止和基于主机/路径的路由。了解如何添加 Rancher Ingress +weight: 3042 +--- + +你可以为工作负载添加 Ingress,从而提供负载均衡、SSL 终止和基于主机/路径的路由。在项目中使用 Ingress 时,你可以通过设置全局 DNS 条目来将 Ingress 主机名编程到外部 DNS。 + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 转到要添加 Ingress 的集群,然后单击 **Explore**。 +1. 点击**服务发现 > Ingresses**。 +1. 单击**创建**。 +1. 从下拉列表中选择一个现有的**命名空间**。 +1. 输入 Ingress 的**名称**。 +1. 创建 Ingress 转发**规则**。有关配置规则的帮助,请参阅[本节](./ingress-configuration.md#ingress-规则配置)。如果你的任何 Ingress 规则处理加密端口的请求,请添加证书以加密/解密通信。 +1. **可选**:点击**添加规则**来创建其他 Ingress 规则。例如,在创建 Ingress 规则以引导主机名请求后,你可能想创建一个默认后端来处理 404。 +1. 点击右下角的**创建**。 + +**结果**:已将 Ingress 添加到项目中。Ingress 会开始执行你的 Ingress 规则。 + diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-resources-setup/load-balancer-and-ingress-controller/ingress-configuration.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-resources-setup/load-balancer-and-ingress-controller/ingress-configuration.md new file mode 100644 index 00000000000..a7e99e6dd73 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-resources-setup/load-balancer-and-ingress-controller/ingress-configuration.md @@ -0,0 +1,44 @@ +--- +title: Ingress 配置 +description: Ingress 配置 +weight: 9999 +--- + +### Kubernetes 1.21 中的 NGINX Ingress Controller 变更 + +在 Kubernetes 1.21 及更高版本中,NGINX Ingress Controller 不再运行在 hostNetwork 中,而是将 hostPorts 用于端口 80 和端口 443。这样可以将 admission webhook 配置为使用 ClusterIP 访问,从而只在集群内部访问它。 + +# Ingress 规则配置 + +- [指定要使用的主机名](#指定要使用的主机名) +- [用作默认后端](#用作默认后端) +- [证书](#证书) +- [标签和注释](#标签和注释) + +### 指定要使用的主机名 + +如果使用此选项,Ingress 会将主机名请求路由到你指定的服务或工作负载。 + +1. 输入**请求主机**,你的 Ingress 会为它处理请求转发。例如,`www.mysite.com`。 +1. 添加一个**目标服务**。 +1. **可选**:如果你想在将请求发送到特定主机名路径时指定工作负载或服务,请为目标添加**路径**。例如,如果你希望将 `www.mysite.com/contact-us` 的请求发送到与 `www.mysite.com` 不同的服务,在**路径**字段中输入 `/contact-us`。通常情况下,你创建的第一条规则不包含路径。 +1. 输入每个目标操作的**端口**号。 +### 证书 + +:::note + +你必须具有 SSL 证书,Ingress 可使用该证书来加密/解密通信。有关详细信息,请参阅[添加 SSL 证书](../encrypt-http-communication.md)。 + +::: + +1. 创建 Ingress 时,单击**证书**选项卡。 +1. 单击**添加证书**。 +1. 从下拉列表中选择一个**证书 - 密文名称**。 +1. 使用加密通信进入主机。 +1. 要添加使用证书的其他主机,请单击**添加主机**。 + +### 标签和注释 + +添加[标签](https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/)和/或[注释](https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/)为你的 Ingress 提供元数据。 + +有关可用的注释列表,请参阅 [Nginx Ingress Controller 文档](https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-resources-setup/load-balancer-and-ingress-controller/layer-4-and-layer-7-load-balancing.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-resources-setup/load-balancer-and-ingress-controller/layer-4-and-layer-7-load-balancing.md new file mode 100644 index 00000000000..176f4722199 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-resources-setup/load-balancer-and-ingress-controller/layer-4-and-layer-7-load-balancing.md @@ -0,0 +1,68 @@ +--- +title: "四层和七层负载均衡" +description: "Kubernetes 支持四层负载均衡和七层负载均衡。了解对不同 deployment 的支持" +weight: 3041 +--- +Kubernetes 支持四层负载均衡和七层负载均衡。 + +## 四层负载均衡器 + +四层负载均衡器(或外部负载均衡器)将流量转发到 Nodeport。四层负载均衡器支持转发 HTTP 和 TCP 流量。 + +通常情况下,四层负载均衡器由底层云提供商支持,因此,如果你在裸金属服务器和 vSphere 集群上部署 RKE 集群,则不支持四层负载均衡器。但是,单个[全局管理的 config-map](https://kubernetes.github.io/ingress-nginx/user-guide/exposing-tcp-udp-services/) 可用于在 NGINX 或第三方 Ingress 上公开服务。 + +:::note + +你可以使用非云负载均衡器(例如 [MetalLB](https://metallb.universe.tf/))来部署集群。但是,该用例比云提供商支持的四层负载均衡器更高级,而且不可以在 Rancher 或 RKE 中配置。 + +::: + +### 四层负载均衡支持 + +不同底层云提供商对四层负载均衡器的支持有所不同: + +| 集群部署 | 四层负载均衡器支持 | +----------------------------------------------|-------------------------------- +| Amazon EKS | 由 AWS 云提供商支持 | +| Google GKE | 由 GCE 云提供商支持 | +| Azure AKS | 由 Azure 云提供商支持 | +| EC2 上的 RKE | 由 AWS 云提供商支持 | +| DigitalOcean 上的 RKE | 受限的 NGINX 或第三方 Ingress\* | +| vSphere 上的 RKE | 受限的 NGINX 或第三方 Ingress\* | +| 自定义主机上的 RKE
(例如裸金属服务器) | 受限的 NGINX 或第三方 Ingress\* | +| 第三方 MetalLB | 受限的 NGINX 或第三方 Ingress\* | + +\* 可以通过单个[全局管理的 config-map](https://kubernetes.github.io/ingress-nginx/user-guide/exposing-tcp-udp-services/) 来公开服务。 + +## 七层负载均衡器 + +七层负载均衡器(或 Ingress Controller)支持基于主机和路径的负载均衡和 SSL 终止。七层负载均衡器仅转发 HTTP 和 HTTPS 流量,因此它们仅侦听端口 80 和 443。亚马逊和谷歌等云提供商支持七层负载均衡器。此外,RKE 集群部署了 Nginx Ingress Controller。 + +### 七层负载均衡支持 + +不同底层云提供商对七层负载均衡器的支持有所不同: + +| 集群部署 | 七层负载均衡器支持 | +----------------------------------------------|-------------------------------- +| Amazon EKS | 由 AWS 云提供商支持 | +| Google GKE | 由 GKE 云提供商支持 | +| Azure AKS | 不支持 | +| EC2 上的 RKE | Nginx Ingress Controller | +| DigitalOcean 上的 RKE | Nginx Ingress Controller | +| vSphere 上的 RKE | Nginx Ingress Controller | +| 自定义主机上的 RKE
(例如裸金属服务器) | Nginx Ingress Controller | + +### 七层负载均衡器中的主机名 + +一些托管在云上的七层负载均衡器(例如 AWS 上的 ALB Ingress Controller)会为 Ingress 规则公开 DNS 地址。你需要(使用 CNAME)将你的域名映射到七层负载均衡器生成的 DNS 地址。 + +其他七层负载均衡器(例如 Google Load Balancer 或 Nginx Ingress Controller)会直接公开一个或多个 IP 地址。Google Load Balancer 提供了一个可路由的 IP 地址。Nginx Ingress Controller 公开了运行 Nginx Ingress Controller 的所有节点的外部 IP。你可以执行以下任一操作: + +1. 配置你自己的 DNS,从而(使用 A 记录)将你的域名映射到七层负载均衡器公开的 IP 地址。 +2. 让 Rancher 为你的 Ingress 规则生成一个 xip.io 主机名。Rancher 将使用你公开的其中一个 IP(假设是 `a.b.c.d`)生成一个主机名(即 `..a.b.c.d.xip.io`)。 + +使用 xip.io 的好处是你可以在创建 Ingress 规则后立即获得一个有效的入口点 URL。此外,如果你设置自己的域名,则需要配置 DNS 服务器并等待 DNS 传播。 + +## 相关链接 + +- [创建外部负载均衡器](https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/) diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-resources-setup/secrets.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-resources-setup/secrets.md new file mode 100644 index 00000000000..f2092362a8d --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-resources-setup/secrets.md @@ -0,0 +1,77 @@ +--- +title: 密文 +weight: 3062 +--- + +[密文(secret)](https://kubernetes.io/docs/concepts/configuration/secret/#overview-of-secrets)存储敏感数据,例如密码、令牌或密钥。它们可能包含一个或多个键值对。 + +:::note + +本文介绍密文的概述。有关设置私有镜像仓库的详细信息,请参阅[镜像仓库](kubernetes-and-docker-registries.md)。 + +::: + +配置工作负载时,你能够选择要包含的密文。与 ConfigMap 一样,工作负载可以将密文引用为环境变量或卷挂载。 + +除非作为子路径卷挂载,否则挂载的密文会自动更新。有关如何传播更新的密文,请参阅 [Kubernetes 文档](https://kubernetes.io/docs/concepts/configuration/secret/#mounted-secrets-are-updated-automatically)。 + +# 在命名空间中创建密文 + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 转到要添加密文的集群,然后单击 **Explore**。 +1. 要导航到密文,单击**存储 > 密文**或**更多资源 > 核心 > 密文**。 +1. 单击**创建**。 +1. 选择要创建的密文类型。 +1. 为密文选择一个**命名空间**。 +1. 输入密文的**名称**。 + + :::note + + Kubernetes 将密文、证书和镜像仓库都归类为[密文](https://kubernetes.io/docs/concepts/configuration/secret/),命名空间中的密文名称不能重复。因此,为了避免冲突,密文的名称必须与工作空间中的其他密文不一样。 + + ::: + +1. 在**数据**中,单击**添加**以添加键值对。你可以根据需要添加任意数量的值。 + + :::tip + + 你可以通过复制和粘贴的方式将多个键值对添加到密文中。 + + ::: + + ![](/img/bulk-key-values.gif) + +1. 单击**保存**。 + +**结果**:密文已添加到你选择的命名空间中。你可以在 Rancher UI 中单击**存储 > 密文**或**更多资源 > 核心 > 密文**来查看密文。 + +除非作为子路径卷挂载,否则挂载的密文会自动更新。有关如何传播更新的密文,请参阅 [Kubernetes 文档](https://kubernetes.io/docs/concepts/configuration/secret/#mounted-secrets-are-updated-automatically)。 + + +# 在项目中创建密文 + +在 Rancher 2.6 之前,密文必须创建在项目级别。现在不再需要项目级别,你可以采用命名空间级别。因此,Rancher UI 进行了更新以反映这一新功能。但是,你仍然可以按照需要创建项目级别的密文。请注意,你必须先启用`旧版`功能开关并查看单个项目。执行以下步骤设置你的项目级别密文: + +1. 在左上角,单击下拉菜单中的 **☰ > 全局设置**。 +1. 单击**功能开关**。 +1. 转到`旧版应用`功能开关并单击**激活**。 +1. 点击左上角下拉菜单中的 **☰ > 集群管理**。 +1. 转到你创建的集群,然后单击 **Explore**。 +1. 单击**旧版 > 项目**。 +1. 在顶部导航栏中进行过滤,从而仅查看一个项目。 +1. 在左侧导航栏中,单击**密文**。 +1. 单击**添加密文**。 + +**结果**:密文已添加到你选择的项目中。你可以在 Rancher UI 中单击**存储 > 密文**或**更多资源 > 核心 > 密文**来查看密文。 + +:::note + +local 集群上的项目级别密文仅在选择单个项目时可见。 + +::: + +# 后续操作 + +现在你已将密文添加到命名空间,你可以将其添加到你部署的工作负载中。 + +有关将密文添加到工作负载的更多信息,请参阅[部署工作负载](workloads-and-pods/deploy-workloads.md)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-resources-setup/workloads-and-pods/add-a-sidecar.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-resources-setup/workloads-and-pods/add-a-sidecar.md new file mode 100644 index 00000000000..a58267322fa --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-resources-setup/workloads-and-pods/add-a-sidecar.md @@ -0,0 +1,35 @@ +--- +title: 添加 Sidecar +weight: 3029 +--- +_sidecar_ 是一个容器,用于扩展或增强 pod 中的主容器。主容器和 Sidecar 共享一个 pod,因此共享相同的网络空间和存储。你可以使用**添加 Sidecar** 选项将 Sidecar 添加到现有工作负载。 + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 转到要添加 Sidecar 的集群,然后单击 **Explore**。 +1. 在左侧导航栏中,单击**工作负载**。 + +1. 找到要扩展的工作负载。选择 **⋮ > + 添加 Sidecar**。 + +1. 输入 Sidecar 的**名称**。 + +1. 在**通用**中,选择 Sidecar 类型。此选项确定 Sidecar 容器是在主容器之前还是之后部署。 + + - **标准容器**: + + Sidecar 容器部署在主容器之后。 + + - **初始化容器**: + + Sidecar 容器部署在主容器之前。 + +1. 在**容器镜像**字段中,输入要部署来支持主容器的容器镜像的名称。部署时,Rancher 会从 [Docker Hub](https://hub.docker.com/explore/) 拉取这个镜像。输入与 Docker Hub 上完全相同的名称。 + +1. 设置其余选项。你可以在[部署工作负载](deploy-workloads.md)中了解它们。 + +1. 点击**启动**。 + +**结果**:已根据你的参数部署 Sidecar。部署后,你可以选择 **⋮ > 编辑** 来查看 Sidecar。 + +## 相关链接 + +- [分布式系统工具包:复合容器的模式](https://kubernetes.io/blog/2015/06/the-distributed-system-toolkit-patterns/) diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-resources-setup/workloads-and-pods/deploy-workloads.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-resources-setup/workloads-and-pods/deploy-workloads.md new file mode 100644 index 00000000000..4655af98835 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-resources-setup/workloads-and-pods/deploy-workloads.md @@ -0,0 +1,58 @@ +--- +title: 部署工作负载 +description: 阅读此步骤指南以部署工作负载。部署工作负载以在一个或多个容器中运行应用程序。 +weight: 3026 +--- + +部署工作负载以在一个或多个容器中运行应用程序。 + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 转到要升级工作负载的集群,然后单击 **Explore**。 +1. 在左侧导航栏中,单击**工作负载**。 +1. 单击**创建**。 +1. 选择工作负载的类型。 +1. 选择要部署工作负载的命名空间。 +1. 为工作负载设置**名称**。 + +1. 在**容器镜像**字段中,输入要部署到项目的 Docker 镜像的名称。你可以选择在前面加上镜像仓库主机(例如 `quay.io`、`registry.gitlab.com` 等)。部署时,Rancher 从指定的公共或私有镜像仓库中拉取镜像。如果没有提供镜像仓库主机,Rancher 将从 [Docker Hub](https://hub.docker.com/explore/) 拉取镜像。输入与镜像仓库服务器中显示的名称完全相同的名称,任何所需的路径,也可以选择所需的标签(例如 `registry.gitlab.com/user/path/image:tag`)。如果没有提供标签,将自动使用 `latest` 标签。 + +1. 选择现有命名空间,或单击**添加到新命名空间**并输入新命名空间。 + +1. 点击**添加端口**进入端口映射,这让你可以访问集群内外的应用程序。如需更多信息,请参阅 [Service](../../../../pages-for-subheaders/workloads-and-pods.md#services)。 + +1. 配置其余选项: + + - **环境变量** + + 你可以在这里为工作负载指定环境变量以即时使用它们,或者从其他来源(例如密文或 [ConfigMap](../configmaps.md))拉取它们。 + + - **节点调度** + - **健康检查** + - **卷** + + 在此处为你的工作负载添加存储。你可以手动指定要添加的卷,使用持久卷声明为工作负载动态创建卷,或从 [ConfigMap](../configmaps.md) 等文件中读取要使用的卷数据。 + + 部署 StatefulSet 时,应在使用持久卷时使用卷声明模板。这将确保在扩展 StatefulSet 时能动态创建持久卷。 + + - **扩展/升级策略** + + :::note AWS 卷注意事项: + + 要挂载 Amazon EBS 卷: + + - 在 [AWS](https://aws.amazon.com/) 中,节点必须位于同一可用区中并具有附加/分离卷的 IAM 权限。 + + - 集群必须使用 [AWS 云提供商](https://kubernetes.io/docs/concepts/cluster-administration/cloud-providers/#aws)选项。有关启用此选项的更多信息,请参阅[创建 AWS EC2 集群](../../kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/use-new-nodes-in-an-infra-provider/create-an-amazon-ec2-cluster.md)或[创建自定义集群](../../../../pages-for-subheaders/use-existing-nodes.md)。 + + ::: + +1. 点击**显示高级选项**并配置: + + - **命令** + - **网络** + - **标签 & 注释** + - **安全和主机配置** + +1. 点击**启动**。 + +**结果**:工作负载已部署到选定的命名空间。你可以在项目的**工作负载**视图查看工作负载的状态。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-resources-setup/workloads-and-pods/roll-back-workloads.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-resources-setup/workloads-and-pods/roll-back-workloads.md new file mode 100644 index 00000000000..4c634aa5863 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-resources-setup/workloads-and-pods/roll-back-workloads.md @@ -0,0 +1,15 @@ +--- +title: 回滚工作负载 +weight: 3027 +--- + +在调试或升级不顺利时,你可能需要将应用程序回滚到先前的版本。 + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 转到要升级工作负载的集群,然后单击 **Explore**。 +1. 在左侧导航栏中,单击**工作负载**。 +1. 找到要回滚的工作负载,然后选择 **⋮ > 回滚**。 + +1. 选择要回滚到的修订版。单击**回滚**。 + +**结果**:你的工作负载已恢复到你选择的先前版本。等待几分钟待操作完成。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-resources-setup/workloads-and-pods/upgrade-workloads.md b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-resources-setup/workloads-and-pods/upgrade-workloads.md new file mode 100644 index 00000000000..73899f2bce6 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/how-to-guides/new-user-guides/kubernetes-resources-setup/workloads-and-pods/upgrade-workloads.md @@ -0,0 +1,21 @@ +--- +title: 升级工作负载 +weight: 3028 +--- +如果 Docker Hub 发布新版本的应用程序镜像,你可以将运行旧版应用程序的工作负载升级到新版本。 + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 转到要升级工作负载的集群,然后单击 **Explore**。 +1. 在左侧导航栏中,单击**工作负载**。 + +1. 找到要升级的工作负载并选择 **⋮ > 编辑配置**。 + +1. 更新**容器镜像**和要更改的选项。 + +1. 查看和编辑工作负载的**扩展/升级策略**。 + + 这些选项能控制升级如何在运行的容器中进行。例如,对于可扩展的 deployment,你可以选择是否要在部署新 Pod 之前停止旧 Pod,以及选择升级的批数量。 + +1. 单击**保存**。 + +**结果**:工作负载会根据你的设置来升级容器。请注意,扩展 deployment 或更新升级/扩展策略不会导致 Pod 重新创建。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/k8s-in-rancher/horizontal-pod-autoscaler/horizontal-pod-autoscaler.md b/i18n/zh/docusaurus-plugin-content-docs/current/k8s-in-rancher/horizontal-pod-autoscaler/horizontal-pod-autoscaler.md new file mode 100644 index 00000000000..04791df49f4 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/k8s-in-rancher/horizontal-pod-autoscaler/horizontal-pod-autoscaler.md @@ -0,0 +1,27 @@ +--- +title: Horizontal Pod Autoscaler +description: 了解 Pod 水平自动扩缩 (HPA)。如何管理 HPA 以及如何使用服务部署来进行测试 +weight: 3026 +--- + +[Horizontal Pod Autoscaler(HPA)](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/)是一项 Kubernetes 功能,用于将集群配置为自动扩缩其运行的服务。 + +Rancher 提供了一些附加功能来帮助管理 HPA,具体取决于 Rancher 的版本。 + +你可以使用 Rancher UI 创建、管理和删除 HPA。仅在 `autoscaling/v2beta2` API 中支持 HPA。 + +## 管理 HPA + +管理 HPA 的方式因你的 Kubernetes API 版本而异: + +- **Kubernetes API 版本 autoscaling/V2beta1**:允许根据应用程序的 CPU 和内存利用率自动扩缩 pod。 +- **Kubernetes API 版本 autoscaling/V2beta2**:允许根据 CPU 和内存利用率以及自定义指标自动扩缩 pod。 + +你可以使用 Rancher UI 创建、管理和删除 HPA。在 Rancher UI 中,你可以将 HPA 配置为根据 CPU 和内存利用率进行扩缩。有关详细信息,请参阅[使用 Rancher UI 管理 HPA](k8s-in-rancher/horizontal-pod-autoscaler/manage-hpa-with-rancher-ui)。如需根据自定义指标进行 HPA,你仍然需要使用 `kubectl`。有关详细信息,请参阅[配置 HPA 以使用 Prometheus 自定义指标进行扩缩](k8s-in-rancher/horizontal-pod-autoscaler/manage-hpa-with-kubectl.md#配置-hpa-以使用-prometheus-自定义指标进行扩缩)。 + +在 Rancher 2.0.7 及更高版本中创建的集群自动满足使用 HPA 的所有要求(metrics-server 和 Kubernetes 集群配置)。 +## 使用服务部署测试 HPA + +你可以转到你的项目并单击**资源 > HPA**来查看​​ HPA 当前的副本数。有关详细信息,请参阅[获取 HPA 指标和状态](k8s-in-rancher/horizontal-pod-autoscaler/manage-hpa-with-rancher-ui/)。 + +你还可以使用 `kubectl` 来获取你使用负载测试工具测试的 HPA 的状态。有关详细信息,请参阅[使用 kubectl 测试 HPA](k8s-in-rancher/horizontal-pod-autoscaler/testing-hpa/)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/k8s-in-rancher/horizontal-pod-autoscaler/hpa-background/hpa-background.md b/i18n/zh/docusaurus-plugin-content-docs/current/k8s-in-rancher/horizontal-pod-autoscaler/hpa-background/hpa-background.md new file mode 100644 index 00000000000..5b905b78322 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/k8s-in-rancher/horizontal-pod-autoscaler/hpa-background/hpa-background.md @@ -0,0 +1,40 @@ +--- +title: Horizontal Pod Autoscaler 介绍 +weight: 3027 +--- + +[Horizontal Pod Autoscaler(HPA)](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/)是一项 Kubernetes 功能,用于将集群配置为自动扩缩其运行的服务。本节介绍 HPA 如何与 Kubernetes 一起工作。 + +## 为什么要使用 Horizo​​ntal Pod Autoscaler? + +你可以使用 HPA 来自动扩缩 ReplicationController、Deployment 或 ReplicaSet 中的 pod 数量。HPA 会自动扩缩正在运行的 pod 数量以实现最高效率。影响 pod 数量的因素包括: + +- 允许运行的最小和最大 pod 数,由用户定义。 +- 资源指标中报告的 CPU/内存使用情况。 +- 第三方指标应用程序(如 Prometheus、Datadog 等)提供的自定义指标。 + +HPA 通过以下方式改进你的服务: + +- 释放硬件资源,避免资源被过多的 pod 浪费。 +- 按需提高/降低性能以达到服务级别协议。 + +## HPA 的工作原理 + +![HPA 架构](/img/horizontal-pod-autoscaler.jpg) + +HPA 实现为一个控制循环,其周期由以下 `kube-controller-manager` 标志控制: + +| 标志 | 默认 | 描述 | +---------|----------|----------| +| `--horizontal-pod-autoscaler-sync-period` | `30s` | HPA 在 deployment 中审核资源/自定义指标的频率。 | +| `--horizontal-pod-autoscaler-downscale-delay` | `5m0s` | 完成缩减操作后,HPA 必须等待多长时间才能启动另一个缩减操作。 | +| `--horizontal-pod-autoscaler-upscale-delay` | `3m0s` | 完成扩展操作后,HPA 必须等待多长时间才能启动另一个扩展操作。 | + + +有关 HPA 的完整文档,请参阅 [Kubernetes 文档](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/)。 + +## Horizo​​ntal Pod Autoscaler API 对象 + +HPA 是 Kubernetes `autoscaling` API 组中的 API 资源。当前的稳定版本是 `autoscaling/v1`,它只支持对 CPU 自动扩缩。要获得内存和自定义指标的扩缩支持,请改用 beta 版本 `autoscaling/v2beta1`。 + +有关 HPA API 对象的更多信息,请参阅 [HPA GitHub 自述文件](https://git.k8s.io/community/contributors/design-proposals/autoscaling/horizontal-pod-autoscaler.md#horizontalpodautoscaler-object)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/k8s-in-rancher/horizontal-pod-autoscaler/manage-hpa-with-kubectl/manage-hpa-with-kubectl.md b/i18n/zh/docusaurus-plugin-content-docs/current/k8s-in-rancher/horizontal-pod-autoscaler/manage-hpa-with-kubectl/manage-hpa-with-kubectl.md new file mode 100644 index 00000000000..a6fe5db9293 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/k8s-in-rancher/horizontal-pod-autoscaler/manage-hpa-with-kubectl/manage-hpa-with-kubectl.md @@ -0,0 +1,205 @@ +--- +title: 使用 kubectl 管理 HPA +weight: 3029 +--- + +本文介绍如何使用 `kubectl` 管理 HPA。本文对以下操作进行了说明: + +- 创建 HPA +- 获取 HPA 的信息 +- 删除 HPA +- 配置 HPA 以根据 CPU 或内存利用率进行扩缩 +- 如果你使用 Prometheus 等第三方工具的指标,配置 HPA 以使用自定义指标进行扩缩 + + +你可以在 Rancher UI 中创建、查看和删除 HPA。你还可以根据 Rancher UI 中的 CPU/内存使用情况进行扩缩。有关详细信息,请参阅[使用 Rancher UI 管理 HPA](k8s-in-rancher/horizontal-pod-autoscaler/manage-hpa-with-rancher-ui)。如果要使用 CPU/内存以外的指标来扩缩 HPA,你需要使用 `kubectl`。 + +##### 管理 HPA 的基本 kubectl 命令 + +如果你有 HPA 清单文件,则可以使用 `kubectl` 来创建、管理和删除 HPA: + +- 创建 HPA + + - 有清单:`kubectl create -f ` + + - 没有清单(仅支持 CPU):`kubectl autoscale deployment hello-world --min=2 --max=5 --cpu-percent=50` + +- 获取 HPA 信息 + + - 基本:`kubectl get hpa hello-world` + + - 详细描述:`kubectl describe hpa hello-world` + +- 删除 HPA + + - `kubectl delete hpa hello-world` + +##### HPA 清单定义示例 + +HPA 清单是用于使用 `kubectl` 管理 HPA 的配置文件。 + +以下代码片段在 HPA 清单中使用了不同的指令。请参阅示例下方的列表以了解每个指令的用途。 + +```yml +apiVersion: autoscaling/v2beta1 +kind: HorizontalPodAutoscaler +metadata: + name: hello-world +spec: + scaleTargetRef: + apiVersion: extensions/v1beta1 + kind: Deployment + name: hello-world + minReplicas: 1 + maxReplicas: 10 + metrics: + - type: Resource + resource: + name: cpu + targetAverageUtilization: 50 + - type: Resource + resource: + name: memory + targetAverageValue: 100Mi +``` + + +| 指令 | 描述 | +---------|----------| +| `apiVersion: autoscaling/v2beta1` | 正在使用的 Kubernetes `autoscaling` API 组的版本。此示例清单使用 beta 版本,因此启用了按 CPU./内存进行扩缩。 | +| `name: hello-world` | 表示 HPA 在为 `hello-word` deployment 执行自动扩缩。 | +| `minReplicas: 1` | 表示运行的最小副本数不能低于 1。 | +| `maxReplicas: 10` | 指示 deployment 中的最大副本数不能超过 10。 | +| `targetAverageUtilization: 50` | 表示当平均运行的 pod 使用超过请求 CPU 的 50% 时,deployment 将扩展 pod。 | +| `targetAverageValue: 100Mi` | 表示当平均运行的 pod 使用超过 100Mi 的内存时,deployment 将扩展 pod。 | +
+ +##### 使用资源指标(CPU 和内存)配置 HPA 以进行扩缩 + +在 Rancher 2.0.7 及更高版本中创建的集群满足使用 Horizontal Pod Autoscaler 的所有要求(metrics-server 和 Kubernetes 集群配置)。 + +运行以下命令以检查你的安装中是否有可用的指标: + +``` +$ kubectl top nodes +NAME CPU(cores) CPU% MEMORY(bytes) MEMORY% +node-controlplane 196m 9% 1623Mi 42% +node-etcd 80m 4% 1090Mi 28% +node-worker 64m 3% 1146Mi 29% +$ kubectl -n kube-system top pods +NAME CPU(cores) MEMORY(bytes) +canal-pgldr 18m 46Mi +canal-vhkgr 20m 45Mi +canal-x5q5v 17m 37Mi +canal-xknnz 20m 37Mi +kube-dns-7588d5b5f5-298j2 0m 22Mi +kube-dns-autoscaler-5db9bbb766-t24hw 0m 5Mi +metrics-server-97bc649d5-jxrlt 0m 12Mi +$ kubectl -n kube-system logs -l k8s-app=metrics-server +I1002 12:55:32.172841 1 heapster.go:71] /metrics-server --source=kubernetes.summary_api:https://kubernetes.default.svc?kubeletHttps=true&kubeletPort=10250&useServiceAccount=true&insecure=true +I1002 12:55:32.172994 1 heapster.go:72] Metrics Server version v0.2.1 +I1002 12:55:32.173378 1 configs.go:61] Using Kubernetes client with master "https://kubernetes.default.svc" and version +I1002 12:55:32.173401 1 configs.go:62] Using kubelet port 10250 +I1002 12:55:32.173946 1 heapster.go:128] Starting with Metric Sink +I1002 12:55:32.592703 1 serving.go:308] Generated self-signed cert (apiserver.local.config/certificates/apiserver.crt, apiserver.local.config/certificates/apiserver.key) +I1002 12:55:32.925630 1 heapster.go:101] Starting Heapster API server... +[restful] 2018/10/02 12:55:32 log.go:33: [restful/swagger] listing is available at https:///swaggerapi +[restful] 2018/10/02 12:55:32 log.go:33: [restful/swagger] https:///swaggerui/ is mapped to folder /swagger-ui/ +I1002 12:55:32.928597 1 serve.go:85] Serving securely on 0.0.0.0:443 +``` + + +##### 配置 HPA 以使用 Prometheus 自定义指标进行扩缩 + +你可以将 HPA 配置为根据第三方软件提供的自定义指标进行自动扩缩。使用第三方软件进行自动扩缩的最常见用例是使用应用程序级别的指标(即每秒 HTTP 请求数)。HPA 使用 `custom.metrics.k8s.io` API 来使用这些指标。通过为指标收集解决方案部署自定义指标适配器,你可以启用此 API。 + +对于这个例子,我们将使用 [Prometheus](https://prometheus.io/)。我们假设: + +- Prometheus 部署在集群中。 +- Prometheus 配置正确,并从 pod、节点、命名空间等收集合适的指标。 +- Prometheus 暴露在以下 URL 和端口:`http://prometheus.mycompany.io:80` + +Prometheus 可用于 Rancher 2.0 应用商店中的 Deployment。如果它还没有运行在你的集群中,请在 Rancher 应用商店中部署它。 + +为了让 HPA 使用来自 Prometheus 的自定义指标,[k8s-prometheus-adapter](https://github.com/DirectXMan12/k8s-prometheus-adapter) 包需要在你集群的 `kube-system` 命名空间中。要安装 `k8s-prometheus-adapter`,使用 [banzai-charts](https://github.com/banzaicloud/banzai-charts) 提供的 Helm Chart。 + +1. 在集群中初始化 Helm。 +``` +# kubectl -n kube-system create serviceaccount tiller +kubectl create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount=kube-system:tiller +helm init --service-account tiller +``` + +1. 从 GitHub 克隆 `banzai-charts` 仓库: +``` +# git clone https://github.com/banzaicloud/banzai-charts +``` + +1. 安装 `prometheus-adapter` Chart,指定 Prometheus URL 和端口号: +``` +# helm install --name prometheus-adapter banzai-charts/prometheus-adapter --set prometheus.url="http://prometheus.mycompany.io",prometheus.port="80" --namespace kube-system +``` + +1. 检查 `prometheus-adapter` 是否正常运行。检查服务 pod 并在 `kube-system` 命名空间中登录。 + +1. 检查服务 pod 是否处于 `Running` 状态。输入以下命令: + ``` + # kubectl get pods -n kube-system + ``` + 在输出结果中查找 `Running` 状态。 + ``` + NAME READY STATUS RESTARTS AGE + ... + prometheus-adapter-prometheus-adapter-568674d97f-hbzfx 1/1 Running 0 7h + ... + ``` +1. 通过输入以下命令检查服务日志,确保服务正常运行: + ``` + # kubectl logs prometheus-adapter-prometheus-adapter-568674d97f-hbzfx -n kube-system + ``` + 然后查看日志输出以确认服务正在运行。 + +
+ Prometheus Adaptor 日志 + + ... + I0724 10:18:45.696679 1 round_trippers.go:436] GET https://10.43.0.1:443/api/v1/namespaces/default/pods?labelSelector=app%3Dhello-world 200 OK in 2 milliseconds + I0724 10:18:45.696695 1 round_trippers.go:442] Response Headers: + I0724 10:18:45.696699 1 round_trippers.go:445] Date: Tue, 24 Jul 2018 10:18:45 GMT + I0724 10:18:45.696703 1 round_trippers.go:445] Content-Type: application/json + I0724 10:18:45.696706 1 round_trippers.go:445] Content-Length: 2581 + I0724 10:18:45.696766 1 request.go:836] Response Body: {"kind":"PodList","apiVersion":"v1","metadata":{"selfLink":"/api/v1/namespaces/default/pods","resourceVersion":"6237"},"items":[{"metadata":{"name":"hello-world-54764dfbf8-q6l82","generateName":"hello-world-54764dfbf8-","namespace":"default","selfLink":"/api/v1/namespaces/default/pods/hello-world-54764dfbf8-q6l82","uid":"484cb929-8f29-11e8-99d2-067cac34e79c","resourceVersion":"4066","creationTimestamp":"2018-07-24T10:06:50Z","labels":{"app":"hello-world","pod-template-hash":"1032089694"},"annotations":{"cni.projectcalico.org/podIP":"10.42.0.7/32"},"ownerReferences":[{"apiVersion":"extensions/v1beta1","kind":"ReplicaSet","name":"hello-world-54764dfbf8","uid":"4849b9b1-8f29-11e8-99d2-067cac34e79c","controller":true,"blockOwnerDeletion":true}]},"spec":{"volumes":[{"name":"default-token-ncvts","secret":{"secretName":"default-token-ncvts","defaultMode":420}}],"containers":[{"name":"hello-world","image":"rancher/hello-world","ports":[{"containerPort":80,"protocol":"TCP"}],"resources":{"requests":{"cpu":"500m","memory":"64Mi"}},"volumeMounts":[{"name":"default-token-ncvts","readOnly":true,"mountPath":"/var/run/secrets/kubernetes.io/serviceaccount"}],"terminationMessagePath":"/dev/termination-log","terminationMessagePolicy":"File","imagePullPolicy":"Always"}],"restartPolicy":"Always","terminationGracePeriodSeconds":30,"dnsPolicy":"ClusterFirst","serviceAccountName":"default","serviceAccount":"default","nodeName":"34.220.18.140","securityContext":{},"schedulerName":"default-scheduler","tolerations":[{"key":"node.kubernetes.io/not-ready","operator":"Exists","effect":"NoExecute","tolerationSeconds":300},{"key":"node.kubernetes.io/unreachable","operator":"Exists","effect":"NoExecute","tolerationSeconds":300}]},"status":{"phase":"Running","conditions":[{"type":"Initialized","status":"True","lastProbeTime":null,"lastTransitionTime":"2018-07-24T10:06:50Z"},{"type":"Ready","status":"True","lastProbeTime":null,"lastTransitionTime":"2018-07-24T10:06:54Z"},{"type":"PodScheduled","status":"True","lastProbeTime":null,"lastTransitionTime":"2018-07-24T10:06:50Z"}],"hostIP":"34.220.18.140","podIP":"10.42.0.7","startTime":"2018-07-24T10:06:50Z","containerStatuses":[{"name":"hello-world","state":{"running":{"startedAt":"2018-07-24T10:06:54Z"}},"lastState":{},"ready":true,"restartCount":0,"image":"rancher/hello-world:latest","imageID":"docker-pullable://rancher/hello-world@sha256:4b1559cb4b57ca36fa2b313a3c7dde774801aa3a2047930d94e11a45168bc053","containerID":"docker://cce4df5fc0408f03d4adf82c90de222f64c302bf7a04be1c82d584ec31530773"}],"qosClass":"Burstable"}}]} + I0724 10:18:45.699525 1 api.go:74] GET http://prometheus-server.prometheus.34.220.18.140.xip.io/api/v1/query?query=sum%28rate%28container_fs_read_seconds_total%7Bpod_name%3D%22hello-world-54764dfbf8-q6l82%22%2Ccontainer_name%21%3D%22POD%22%2Cnamespace%3D%22default%22%7D%5B5m%5D%29%29+by+%28pod_name%29&time=1532427525.697 200 OK + I0724 10:18:45.699620 1 api.go:93] Response Body: {"status":"success","data":{"resultType":"vector","result":[{"metric":{"pod_name":"hello-world-54764dfbf8-q6l82"},"value":[1532427525.697,"0"]}]}} + I0724 10:18:45.699939 1 wrap.go:42] GET /apis/custom.metrics.k8s.io/v1beta1/namespaces/default/pods/%2A/fs_read?labelSelector=app%3Dhello-world: (12.431262ms) 200 [[kube-controller-manager/v1.10.1 (linux/amd64) kubernetes/d4ab475/system:serviceaccount:kube-system:horizontal-pod-autoscaler] 10.42.0.0:24268] + I0724 10:18:51.727845 1 request.go:836] Request Body: {"kind":"SubjectAccessReview","apiVersion":"authorization.k8s.io/v1beta1","metadata":{"creationTimestamp":null},"spec":{"nonResourceAttributes":{"path":"/","verb":"get"},"user":"system:anonymous","group":["system:unauthenticated"]},"status":{"allowed":false}} + ... +
+ + + +1. 检查是否可以从 kubectl 访问 metrics API。 + +- 如果你直接访问集群,请在 kubectl 配置中输入你的服务器 URL,格式是 `https://:6443`: + ``` + # kubectl get --raw /apis/custom.metrics.k8s.io/v1beta1 + ``` + 如果 API 可访问,你应该会看到类似以下内容的输出: + +
+ API 响应 + + {"kind":"APIResourceList","apiVersion":"v1","groupVersion":"custom.metrics.k8s.io/v1beta1","resources":[{"name":"pods/fs_usage_bytes","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/memory_rss","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/spec_cpu_period","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/cpu_cfs_throttled","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/fs_io_time","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/fs_read","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/fs_sector_writes","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/cpu_user","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/last_seen","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/tasks_state","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/spec_cpu_quota","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/start_time_seconds","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/fs_limit_bytes","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/fs_write","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/memory_cache","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/memory_usage_bytes","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/cpu_cfs_periods","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/cpu_cfs_throttled_periods","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/fs_reads_merged","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/memory_working_set_bytes","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/network_udp_usage","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/fs_inodes_free","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/fs_inodes","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/fs_io_time_weighted","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/memory_failures","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/memory_swap","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/spec_cpu_shares","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/spec_memory_swap_limit_bytes","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/cpu_usage","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/fs_io_current","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/fs_writes","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/memory_failcnt","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/fs_reads","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/fs_writes_bytes","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/fs_writes_merged","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/network_tcp_usage","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/memory_max_usage_bytes","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/spec_memory_limit_bytes","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/spec_memory_reservation_limit_bytes","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/cpu_load_average_10s","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/cpu_system","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/fs_reads_bytes","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/fs_sector_reads","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]}]} +
+ +- 如果你通过 Rancher 访问集群,请在 kubectl 配置中输入你的服务器 URL,格式是 `https:///k8s/clusters/`。将 `/k8s/clusters/` 后缀添加到 API 路径: + ``` + # kubectl get --raw /k8s/clusters//apis/custom.metrics.k8s.io/v1beta1 + ``` + 如果 API 可访问,你应该会看到类似以下内容的输出: + +
+ API 响应 + + {"kind":"APIResourceList","apiVersion":"v1","groupVersion":"custom.metrics.k8s.io/v1beta1","resources":[{"name":"pods/fs_usage_bytes","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/memory_rss","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/spec_cpu_period","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/cpu_cfs_throttled","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/fs_io_time","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/fs_read","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/fs_sector_writes","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/cpu_user","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/last_seen","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/tasks_state","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/spec_cpu_quota","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/start_time_seconds","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/fs_limit_bytes","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/fs_write","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/memory_cache","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/memory_usage_bytes","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/cpu_cfs_periods","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/cpu_cfs_throttled_periods","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/fs_reads_merged","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/memory_working_set_bytes","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/network_udp_usage","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/fs_inodes_free","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/fs_inodes","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/fs_io_time_weighted","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/memory_failures","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/memory_swap","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/spec_cpu_shares","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/spec_memory_swap_limit_bytes","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/cpu_usage","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/fs_io_current","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/fs_writes","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/memory_failcnt","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/fs_reads","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/fs_writes_bytes","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/fs_writes_merged","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/network_tcp_usage","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/memory_max_usage_bytes","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/spec_memory_limit_bytes","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/spec_memory_reservation_limit_bytes","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/cpu_load_average_10s","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/cpu_system","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/fs_reads_bytes","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"pods/fs_sector_reads","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]}]} +
diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/k8s-in-rancher/horizontal-pod-autoscaler/manage-hpa-with-rancher-ui/manage-hpa-with-rancher-ui.md b/i18n/zh/docusaurus-plugin-content-docs/current/k8s-in-rancher/horizontal-pod-autoscaler/manage-hpa-with-rancher-ui/manage-hpa-with-rancher-ui.md new file mode 100644 index 00000000000..a8c8537a902 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/k8s-in-rancher/horizontal-pod-autoscaler/manage-hpa-with-rancher-ui/manage-hpa-with-rancher-ui.md @@ -0,0 +1,52 @@ +--- +title: 使用 Rancher UI 管理 HPA +weight: 3028 +--- + +Rancher UI 支持创建、管理和删除 HPA。你可以将 CPU 或内存使用情况配置为用于 HPA 扩缩的指标。 + +如果你想使用 CPU/内存之外的其他指标创建 HPA,请参阅[配置 HPA 以使用 Prometheus 的自定义指标进行扩缩](k8s-in-rancher/horizontal-pod-autoscaler/manage-hpa-with-kubectl.md#配置-hpa-以使用-prometheus-自定义指标进行扩缩)。 + +## 创建 HPA + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 转到要创建 HPA 的集群,然后单击 **Explore**。 +1. 在左侧导航栏中,单击**服务发现 > Horizo​​ntalPodAutoscalers**。 +1. 单击**创建**。 +1. 为 HPA 选择 **命名空间**。 +1. 输入 HPA 的**名称**。 +1. 选择**目标引用**作为 HPA 的扩缩目标。 +1. 为 HPA 指定**最小副本数**和**最大副本数**。 +1. 配置 HPA 的指标。你可以将内存或 CPU 使用率作为让 HPA 扩缩服务的指标。在**数量**字段中,输入让 HPA 扩缩服务的工作负载内存/CPU 使用率的百分比。要配置其他 HPA 指标,包括 Prometheus 提供的指标,你需要[使用 kubectl 管理 HPA](k8s-in-rancher/horizontal-pod-autoscaler/manage-hpa-with-kubectl.md#配置-hpa-以使用-prometheus-自定义指标进行扩缩)。 + +1. 单击**创建**以创建HPA。 + +:::note 结果: + +HPA 已被部署到选定的命名空间。你可以在项目的**资源 > HPA** 视图中查看 HPA 的状态。 + +::: + +## 获取 HPA 指标和状态 + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 转到具有 HPA 的集群并单击 **Explore**。 +1. 在左侧导航栏中,单击**服务发现 > Horizo​​ntalPodAutoscalers**。**Horizo​​ntalPodAutoscalers** 页面显示当前副本的数量。 + +有关特定 HPA 的更详细指标和状态,请单击 HPA 的名称。你会转到 HPA 的详情页面。 + + +## 删除 HPA + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 转到要删除的 HPA 的集群,然后单击 **Explore**。 +1. 在左侧导航栏中,单击**服务发现 > Horizo​​ntalPodAutoscalers**。 +1. 单击**资源 > HPA**。 +1. 找到要删除的 HPA,然后单击 **⋮ > 删除**。 +1. 单击**删除**以进行确认。 + +:::note 结果: + +HPA 已从当前集群中删除。 + +::: \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/k8s-in-rancher/horizontal-pod-autoscaler/testing-hpa/testing-hpa.md b/i18n/zh/docusaurus-plugin-content-docs/current/k8s-in-rancher/horizontal-pod-autoscaler/testing-hpa/testing-hpa.md new file mode 100644 index 00000000000..0e79ce92b6d --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/k8s-in-rancher/horizontal-pod-autoscaler/testing-hpa/testing-hpa.md @@ -0,0 +1,532 @@ +--- +title: 使用 kubectl 测试 HPA +weight: 3031 +--- + +本文介绍如何在使用负载测试工具扩缩 HPA 后检查 HPA 的状态。有关使用 Rancher UI(最低版本 2.3.x)检查状态的信息,请参阅[使用 Rancher UI 管理 HPA](k8s-in-rancher/horizontal-pod-autoscaler/manage-hpa-with-kubectl/)。 + +要让 HPA 正常工作,服务部署应该具有容器的资源请求定义。按照以下 hello-world 示例测试 HPA 是否正常工作。 + +1. 将 `kubectl` 连接到你的 Kubernetes 集群。 + +1. 复制下方的 `hello-world` 部署清单。 + +
+ Hello World 清单 + + ``` + apiVersion: apps/v1beta2 + kind: Deployment + metadata: + labels: + app: hello-world + name: hello-world + namespace: default + spec: + replicas: 1 + selector: + matchLabels: + app: hello-world + strategy: + rollingUpdate: + maxSurge: 1 + maxUnavailable: 0 + type: RollingUpdate + template: + metadata: + labels: + app: hello-world + spec: + containers: + - image: rancher/hello-world + imagePullPolicy: Always + name: hello-world + resources: + requests: + cpu: 500m + memory: 64Mi + ports: + - containerPort: 80 + protocol: TCP + restartPolicy: Always + --- + apiVersion: v1 + kind: Service + metadata: + name: hello-world + namespace: default + spec: + ports: + - port: 80 + protocol: TCP + targetPort: 80 + selector: + app: hello-world + ``` + +
+ +1. 将其部署到您的集群。 + + ``` + # kubectl create -f + ``` + +1. 根据你使用的指标类型复制以下其中一个 HPA: + +
+ Hello World HPA:资源指标 + + ``` + apiVersion: autoscaling/v2beta1 + kind: HorizontalPodAutoscaler + metadata: + name: hello-world + namespace: default + spec: + scaleTargetRef: + apiVersion: extensions/v1beta1 + kind: Deployment + name: hello-world + minReplicas: 1 + maxReplicas: 10 + metrics: + - type: Resource + resource: + name: cpu + targetAverageUtilization: 50 + - type: Resource + resource: + name: memory + targetAverageValue: 1000Mi + ``` + +
+
+ Hello World HPA:自定义指标 + + ``` + apiVersion: autoscaling/v2beta1 + kind: HorizontalPodAutoscaler + metadata: + name: hello-world + namespace: default + spec: + scaleTargetRef: + apiVersion: extensions/v1beta1 + kind: Deployment + name: hello-world + minReplicas: 1 + maxReplicas: 10 + metrics: + - type: Resource + resource: + name: cpu + targetAverageUtilization: 50 + - type: Resource + resource: + name: memory + targetAverageValue: 100Mi + - type: Pods + pods: + metricName: cpu_system + targetAverageValue: 20m + ``` + +
+ +1. 查看 HPA 信息和描述。确认显示的指标数据。 + +
+ 资源指标 + + 1. 输入以下命令: + ``` + # kubectl get hpa + NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE + hello-world Deployment/hello-world 1253376 / 100Mi, 0% / 50% 1 10 1 6m + # kubectl describe hpa + Name: hello-world + Namespace: default + Labels: + Annotations: + CreationTimestamp: Mon, 23 Jul 2018 20:21:16 +0200 + Reference: Deployment/hello-world + Metrics: ( current / target ) + resource memory on pods: 1253376 / 100Mi + resource cpu on pods (as a percentage of request): 0% (0) / 50% + Min replicas: 1 + Max replicas: 10 + Conditions: + Type Status Reason Message + ---- ------ ------ ------- + AbleToScale True ReadyForNewScale the last scale time was sufficiently old as to warrant a new scale + ScalingActive True ValidMetricFound the HPA was able to successfully calculate a replica count from memory resource + ScalingLimited False DesiredWithinRange the desired count is within the acceptable range + Events: + ``` + +
+
+ 自定义指标 + + 1. 输入以下命令: + ``` + # kubectl describe hpa + ``` + 你应该会看到以下输出: + ``` + Name: hello-world + Namespace: default + Labels: + Annotations: + CreationTimestamp: Tue, 24 Jul 2018 18:36:28 +0200 + Reference: Deployment/hello-world + Metrics: ( current / target ) + resource memory on pods: 3514368 / 100Mi + "cpu_system" on pods: 0 / 20m + resource cpu on pods (as a percentage of request): 0% (0) / 50% + Min replicas: 1 + Max replicas: 10 + Conditions: + Type Status Reason Message + ---- ------ ------ ------- + AbleToScale True ReadyForNewScale the last scale time was sufficiently old as to warrant a new scale + ScalingActive True ValidMetricFound the HPA was able to successfully calculate a replica count from memory resource + ScalingLimited False DesiredWithinRange the desired count is within the acceptable range + Events: + ``` + +
+ +1. 为服务生成负载,从而测试你的 pod 是否按预期进行了自动扩缩。你可以使用任何负载测试工具(Hey、Gatling 等),我们使用的是 [Hey](https://github.com/rakyll/hey)。 + +1. 测试 pod 自动扩缩是否按预期工作。

+ **使用资源指标测试自动扩缩:** + +
+ 扩展到两个 Pod:CPU 用量达到目标 + + 使用你的负载测试工具根据 CPU 使用情况扩展到两个 Pod。 + + 1. 查看你的 HPA。 + ``` + # kubectl describe hpa + ``` + 你应该会看到类似以下的输出: + ``` + Name: hello-world + Namespace: default + Labels: + Annotations: + CreationTimestamp: Mon, 23 Jul 2018 22:22:04 +0200 + Reference: Deployment/hello-world + Metrics: ( current / target ) + resource memory on pods: 10928128 / 100Mi + resource cpu on pods (as a percentage of request): 56% (280m) / 50% + Min replicas: 1 + Max replicas: 10 + Conditions: + Type Status Reason Message + ---- ------ ------ ------- + AbleToScale True SucceededRescale the HPA controller was able to update the target scale to 2 + ScalingActive True ValidMetricFound the HPA was able to successfully calculate a replica count from cpu resource utilization (percentage of request) + ScalingLimited False DesiredWithinRange the desired count is within the acceptable range + Events: + Type Reason Age From Message + ---- ------ ---- ---- ------- + Normal SuccessfulRescale 13s horizontal-pod-autoscaler New size: 2; reason: cpu resource utilization (percentage of request) above target + ``` + 1. 输入以下命令,确认你已扩展到两个 pod: + ``` + # kubectl get pods + ``` + 你应该会看到类似以下的输出: + ``` + NAME READY STATUS RESTARTS AGE + hello-world-54764dfbf8-k8ph2 1/1 Running 0 1m + hello-world-54764dfbf8-q6l4v 1/1 Running 0 3h + ``` + +
+
+ 扩展到三个 Pod:CPU 用量达到目标 + + 使用你的负载测试工具根据 CPU 用量扩展到三个 Pod,并将 `horizo​​ntal-pod-autoscaler-upscale-delay` 设置为 3 分钟。 + + 1. 输入以下命令: + ``` + # kubectl describe hpa + ``` + 你应该会看到类似以下的输出: + ``` + Name: hello-world + Namespace: default + Labels: + Annotations: + CreationTimestamp: Mon, 23 Jul 2018 22:22:04 +0200 + Reference: Deployment/hello-world + Metrics: ( current / target ) + resource memory on pods: 9424896 / 100Mi + resource cpu on pods (as a percentage of request): 66% (333m) / 50% + Min replicas: 1 + Max replicas: 10 + Conditions: + Type Status Reason Message + ---- ------ ------ ------- + AbleToScale True SucceededRescale the HPA controller was able to update the target scale to 3 + ScalingActive True ValidMetricFound the HPA was able to successfully calculate a replica count from cpu resource utilization (percentage of request) + ScalingLimited False DesiredWithinRange the desired count is within the acceptable range + Events: + Type Reason Age From Message + ---- ------ ---- ---- ------- + Normal SuccessfulRescale 4m horizontal-pod-autoscaler New size: 2; reason: cpu resource utilization (percentage of request) above target + Normal SuccessfulRescale 16s horizontal-pod-autoscaler New size: 3; reason: cpu resource utilization (percentage of request) above target + ``` + 2. 输入以下命令,确认三个 pod 正在运行: + ``` + # kubectl get pods + ``` + 你应该会看到类似以下的输出: + ``` + NAME READY STATUS RESTARTS AGE + hello-world-54764dfbf8-f46kh 0/1 Running 0 1m + hello-world-54764dfbf8-k8ph2 1/1 Running 0 5m + hello-world-54764dfbf8-q6l4v 1/1 Running 0 3h + ``` + +
+
+ 缩减到 1 个 Pod:所有指标均低于目标 + + 当 `horizontal-pod-autoscaler-downscale-delay` 的所有指标均低于目标(默认为 5 分钟)时,使用你的负载测试工具缩减到 1 个 pod。 + + 1. 输入以下命令: + ``` + # kubectl describe hpa + ``` + 你应该会看到类似以下的输出: + ``` + Name: hello-world + Namespace: default + Labels: + Annotations: + CreationTimestamp: Mon, 23 Jul 2018 22:22:04 +0200 + Reference: Deployment/hello-world + Metrics: ( current / target ) + resource memory on pods: 10070016 / 100Mi + resource cpu on pods (as a percentage of request): 0% (0) / 50% + Min replicas: 1 + Max replicas: 10 + Conditions: + Type Status Reason Message + ---- ------ ------ ------- + AbleToScale True SucceededRescale the HPA controller was able to update the target scale to 1 + ScalingActive True ValidMetricFound the HPA was able to successfully calculate a replica count from memory resource + ScalingLimited False DesiredWithinRange the desired count is within the acceptable range + Events: + Type Reason Age From Message + ---- ------ ---- ---- ------- + Normal SuccessfulRescale 10m horizontal-pod-autoscaler New size: 2; reason: cpu resource utilization (percentage of request) above target + Normal SuccessfulRescale 6m horizontal-pod-autoscaler New size: 3; reason: cpu resource utilization (percentage of request) above target + Normal SuccessfulRescale 1s horizontal-pod-autoscaler New size: 1; reason: All metrics below target + ``` + +
+ + **使用自定义指标测试自动缩放:** + +
+ 扩展到两个 Pod:CPU 用量达到目标 + + 使用负载测试工具根据 CPU 用量扩展到两个 Pod。 + + 1. 输入以下命令: + ``` + # kubectl describe hpa + ``` + 你应该会看到类似以下的输出: + ``` + Name: hello-world + Namespace: default + Labels: + Annotations: + CreationTimestamp: Tue, 24 Jul 2018 18:01:11 +0200 + Reference: Deployment/hello-world + Metrics: ( current / target ) + resource memory on pods: 8159232 / 100Mi + "cpu_system" on pods: 7m / 20m + resource cpu on pods (as a percentage of request): 64% (321m) / 50% + Min replicas: 1 + Max replicas: 10 + Conditions: + Type Status Reason Message + ---- ------ ------ ------- + AbleToScale True SucceededRescale the HPA controller was able to update the target scale to 2 + ScalingActive True ValidMetricFound the HPA was able to successfully calculate a replica count from cpu resource utilization (percentage of request) + ScalingLimited False DesiredWithinRange the desired count is within the acceptable range + Events: + Type Reason Age From Message + ---- ------ ---- ---- ------- + Normal SuccessfulRescale 16s horizontal-pod-autoscaler New size: 2; reason: cpu resource utilization (percentage of request) above target + ``` + 1. 输入以下命令,确认两个 pod 正在运行: + ``` + # kubectl get pods + ``` + 你应该会看到类似以下的输出: + ``` + NAME READY STATUS RESTARTS AGE + hello-world-54764dfbf8-5pfdr 1/1 Running 0 3s + hello-world-54764dfbf8-q6l82 1/1 Running 0 6h + ``` + +
+
+ 扩展到三个 Pod:CPU 用量达到目标 + + 当 cpu_system 用量达到目标时,使用你的负载测试工具扩展到三个 Pod。 + + 1. 输入以下命令: + ``` + # kubectl describe hpa + ``` + 你应该会看到类似以下的输出: + ``` + Name: hello-world + Namespace: default + Labels: + Annotations: + CreationTimestamp: Tue, 24 Jul 2018 18:01:11 +0200 + Reference: Deployment/hello-world + Metrics: ( current / target ) + resource memory on pods: 8374272 / 100Mi + "cpu_system" on pods: 27m / 20m + resource cpu on pods (as a percentage of request): 71% (357m) / 50% + Min replicas: 1 + Max replicas: 10 + Conditions: + Type Status Reason Message + ---- ------ ------ ------- + AbleToScale True SucceededRescale the HPA controller was able to update the target scale to 3 + ScalingActive True ValidMetricFound the HPA was able to successfully calculate a replica count from cpu resource utilization (percentage of request) + ScalingLimited False DesiredWithinRange the desired count is within the acceptable range + Events: + Type Reason Age From Message + ---- ------ ---- ---- ------- + Normal SuccessfulRescale 3m horizontal-pod-autoscaler New size: 2; reason: cpu resource utilization (percentage of request) above target + Normal SuccessfulRescale 3s horizontal-pod-autoscaler New size: 3; reason: pods metric cpu_system above target + ``` + 1. 输入以下命令,确认三个 pod 正在运行: + ``` + # kubectl get pods + ``` + 你应该会看到类似以下的输出: + ``` + # kubectl get pods + NAME READY STATUS RESTARTS AGE + hello-world-54764dfbf8-5pfdr 1/1 Running 0 3m + hello-world-54764dfbf8-m2hrl 1/1 Running 0 1s + hello-world-54764dfbf8-q6l82 1/1 Running 0 6h + ``` + +
+
+ 扩展到四个 Pod:CPU 用量达到目标 + + 使用负载测试工具根据 CPU 用量扩展到四个 Pod。`horizontal-pod-autoscaler-upscale-delay` 默认设置为 3 分钟。 + + 1. 输入以下命令: + ``` + # kubectl describe hpa + ``` + 你应该会看到类似以下的输出: + ``` + Name: hello-world + Namespace: default + Labels: + Annotations: + CreationTimestamp: Tue, 24 Jul 2018 18:01:11 +0200 + Reference: Deployment/hello-world + Metrics: ( current / target ) + resource memory on pods: 8374272 / 100Mi + "cpu_system" on pods: 27m / 20m + resource cpu on pods (as a percentage of request): 71% (357m) / 50% + Min replicas: 1 + Max replicas: 10 + Conditions: + Type Status Reason Message + ---- ------ ------ ------- + AbleToScale True SucceededRescale the HPA controller was able to update the target scale to 3 + ScalingActive True ValidMetricFound the HPA was able to successfully calculate a replica count from cpu resource utilization (percentage of request) + ScalingLimited False DesiredWithinRange the desired count is within the acceptable range + Events: + Type Reason Age From Message + ---- ------ ---- ---- ------- + Normal SuccessfulRescale 5m horizontal-pod-autoscaler New size: 2; reason: cpu resource utilization (percentage of request) above target + Normal SuccessfulRescale 3m horizontal-pod-autoscaler New size: 3; reason: pods metric cpu_system above target + Normal SuccessfulRescale 4s horizontal-pod-autoscaler New size: 4; reason: cpu resource utilization (percentage of request) above target + ``` + + 1. 输入以下命令,确认四个 pod 正在运行: + ``` + # kubectl get pods + ``` + 你应该会看到类似以下的输出: + ``` + NAME READY STATUS RESTARTS AGE + hello-world-54764dfbf8-2p9xb 1/1 Running 0 5m + hello-world-54764dfbf8-5pfdr 1/1 Running 0 2m + hello-world-54764dfbf8-m2hrl 1/1 Running 0 1s + hello-world-54764dfbf8-q6l82 1/1 Running 0 6h + ``` + +
+
+ 缩减到 1 个 Pod:所有指标均低于目标 + + 当 `horizontal-pod-autoscaler-downscale-delay` 的所有指标均低于目标时,使用你的负载测试工具缩减到 1 个 pod。 + + 1. 输入以下命令: + ``` + # kubectl describe hpa + ``` + 你应该会看到类似以下的输出: + ``` + Name: hello-world + Namespace: default + Labels: + Annotations: + CreationTimestamp: Tue, 24 Jul 2018 18:01:11 +0200 + Reference: Deployment/hello-world + Metrics: ( current / target ) + resource memory on pods: 8101888 / 100Mi + "cpu_system" on pods: 8m / 20m + resource cpu on pods (as a percentage of request): 0% (0) / 50% + Min replicas: 1 + Max replicas: 10 + Conditions: + Type Status Reason Message + ---- ------ ------ ------- + AbleToScale True SucceededRescale the HPA controller was able to update the target scale to 1 + ScalingActive True ValidMetricFound the HPA was able to successfully calculate a replica count from memory resource + ScalingLimited False DesiredWithinRange the desired count is within the acceptable range + Events: + Type Reason Age From Message + ---- ------ ---- ---- ------- + Normal SuccessfulRescale 10m horizontal-pod-autoscaler New size: 2; reason: cpu resource utilization (percentage of request) above target + Normal SuccessfulRescale 8m horizontal-pod-autoscaler New size: 3; reason: pods metric cpu_system above target + Normal SuccessfulRescale 5m horizontal-pod-autoscaler New size: 4; reason: cpu resource utilization (percentage of request) above target + Normal SuccessfulRescale 13s horizontal-pod-autoscaler New size: 1; reason: All metrics below target + ``` + 1. 输入以下命令,确认单个 pod 正在运行: + ``` + # kubectl get pods + ``` + 你应该会看到类似以下的输出: + ``` + NAME READY STATUS RESTARTS AGE + hello-world-54764dfbf8-q6l82 1/1 Running 0 6h + ``` + +
diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/about-authentication.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/about-authentication.md new file mode 100644 index 00000000000..1816664ad00 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/about-authentication.md @@ -0,0 +1,105 @@ +--- +title: 身份验证 +weight: 10 +--- + +Rancher 向 Kubernetes 添加的关键功能之一,就是集中式用户身份验证。此功能允许你的用户使用一组凭证对你的所有 Kubernetes 集群进行身份验证。 + +这种集中式的用户身份验证是使用 Rancher 身份验证代理完成的,该代理与 Rancher 的其他组件一起安装。这个代理验证你的用户,并使用一个 ServiceAccount 将用户请求转发到你的 Kubernetes 集群。 + +## 外部验证与本地验证 + +Rancher 身份验证代理支持与以下外部身份验证服务集成: + +| 验证服务 | +| ------------------------------------------------------------------------------------------------ | +| [Microsoft Active Directory](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/configure-active-directory.md) | +| [GitHub](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/configure-github.md) | +| [Microsoft Azure AD](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/configure-azure-ad.md) | +| [FreeIPA](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/configure-freeipa.md) | +| [OpenLDAP](configure-openldap.md) | +| [Microsoft AD FS](configure-microsoft-ad-federation-service-saml.md) | +| [PingIdentity](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/configure-pingidentity.md) | +| [Keycloak (OIDC)](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/configure-keycloak-oidc.md) | +| [Keycloak (SAML)](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/configure-keycloak-saml.md) | +| [Okta](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/configure-okta-saml.md) | +| [Google OAuth](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/configure-google-oauth.md) | +| [Shibboleth](configure-shibboleth-saml.md) | + +
+ +同时,Rancher 也提供了[本地验证](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/create-local-users.md)。 + +大多数情况下,应该使用外部身份验证服务,而不是本地身份验证,因为外部身份验证允许对用户进行集中管理。但是你可能需要一些本地身份验证用户,以便在特定的情况下(例如在外部身份验证系统不可用或正在进行维护时)管理 Rancher。 + +## 用户和组 + +Rancher 依赖用户和组来决定允许登录到 Rancher 的用户,以及他们可以访问哪些资源。使用外部系统进行身份验证时,将由外部系统提供用户和组。这些用户和组被赋予集群、项目、多集群应用、全局 DNS 提供商等资源的特定角色。当你将访问权限授予某个组时,身份验证提供程序中属于该组的所有用户都将能够使用你指定的权限访问该资源。有关角色和权限的更多信息,请参见 [RBAC](manage-role-based-access-control-rbac.md)。 + +:::note + +本地认证不支持创建或管理用户组。 + +::: + +详情请参见[用户和组](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/manage-users-and-groups.md)。 + +## Rancher 授权范围 + +将 Rancher 配置成允许使用外部验证提供程序登录后,你需要配置允许登录和使用 Rancher 的用户。可用选项如下: + +| 访问级别 | 描述 | +|----------------------------------------------|-------------| +| 允许任何有效用户 | 授权服务中的 _任何_ 用户都可以访问Rancher。通常不建议使用此设置。 | +| 允许集群和项目成员,以及授权的用户和组织 | 认证服务中的任何用户,以及添加为**集群成员**或**项目成员**的任何组都可以登录到 Rancher。此外,添加到**授权用户和组织**列表中的身份验证服务中的任何用户和组都能登录到 Rancher。 | +| 仅允许授权用户和组织 | 只有添加到**授权用户和组织**的身份验证服务中的用户和组能登录 Rancher。 | + +要在授权服务中为用户设置 Rancher 访问级别,请执行以下步骤: + +1. 在左上角,单击 **☰ > 用户 & 认证**。 +1. 单击左侧导航栏的**认证**。 +1. 设置好认证提供程序的配置后,使用 **Site Access** 选项来配置用户的授权范围。上表说明了每个选项的访问级别。 +1. 可选:如果你选择**允许任何有效用户**以外的选项,你可以通过在显示的文本字段中搜索用户,将用户添加到**授权用户和组织**的列表中。 +1. 单击**保存**。 + +**结果**:Rancher 访问配置已应用。 + +:::note SAML 身份提供商注意事项 + +- SAML 协议不支持搜索或查找用户或组。因此,将用户或组添加到 Rancher 时不会对其进行验证。 +- 添加用户时,必须正确输入确切的用户 ID(即 `UID` 字段)。键入用户 ID 时,将不会搜索可能匹配的其他用户 ID。 +- 添加组时,必须从文本框旁边的下拉列表中选择组。Rancher 假定来自文本框的任何输入都是用户。 +- 用户组下拉列表仅显示你所属的用户组。如果你不是某个组的成员,你将无法添加该组。 + +::: + +## 外部身份验证配置和用户主体 + +配置外部认证需要: + +- 分配了管理员角色的本地用户,以下称为 _本地主体_。 +- 可以使用外部认证服务进行认证的外部用户,以下称为 _外部主体_。 + +外部身份验证的配置将影响 Rancher 中主体用户的管理方式。按照下面的列表来更好地理解这些影响。 + +1. 作为本地主体登录到 Rancher 并完成外部身份验证的配置。 + + ![Sign In](/img/sign-in.png) + +2. Rancher 将外部主体与本地主体相关联。这两个用户共享本地主体的用户 ID。 + + ![Principal ID Sharing](/img/principal-ID.png) + +3. 完成配置后,Rancher 将自动退出本地主体。 + + ![Sign Out Local Principal](/img/sign-out-local.png) + +4. 然后,Rancher 会自动将你作为外部主体重新登录。 + + ![Sign In External Principal](/img/sign-in-external.png) + +5. 由于外部主体与本地主体共享一个 ID,因此**用户**页面不会再单独显示外部主体的对象。 + + ![Sign In External Principal](/img/users-page.png) + +6. 外部主体和本地主体共享相同的访问权限。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/about-provisioning-drivers.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/about-provisioning-drivers.md new file mode 100644 index 00000000000..bcb5b4f3696 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/about-provisioning-drivers.md @@ -0,0 +1,48 @@ +--- +title: 配置驱动 +weight: 70 +--- + +使用 Rancher 中的驱动,你可以管理可以使用哪些供应商来部署[托管的 Kubernetes 集群](set-up-clusters-from-hosted-kubernetes-providers.md)或[云服务器节点](use-new-nodes-in-an-infra-provider.md),以允许 Rancher 部署和管理 Kubernetes。 + +### Rancher 驱动 + +你可以启用或禁用 Rancher 中内置的驱动。如果相关驱动 Rancher 尚未实现,你可以添加自己的驱动。 + +Rancher 中有两种类型的驱动: + +* [集群驱动](#集群驱动) +* [主机驱动](#主机驱动) + +### 集群驱动 + +集群驱动用于配置[托管的 Kubernetes 集群](set-up-clusters-from-hosted-kubernetes-providers.md),例如 GKE、EKS、AKS 等。创建集群时可以显示的集群驱动,是由集群驱动的状态定义的。只有 `active` 集群驱动将显示为为托管 Kubernetes 集群创建集群的选项。默认情况下,Rancher 与几个现有的集群驱动打包在一起,但你也可以创建自定义集群驱动并添加到 Rancher。 + +默认情况下,Rancher 已激活多个托管 Kubernetes 云提供商,包括: + +* [Amazon EKS](amazon-eks-permissions.md) +* [Google GKE](../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-clusters-from-hosted-kubernetes-providers/gke.md) +* [Azure AKS](../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-clusters-from-hosted-kubernetes-providers/aks.md) + +还有几个托管的 Kubernetes 云提供商是默认禁用的,但也打包在 Rancher 中: + +* [Alibaba ACK](../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-clusters-from-hosted-kubernetes-providers/alibaba.md) +* [Huawei CCE](../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-clusters-from-hosted-kubernetes-providers/huawei.md) +* [Tencent](../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-clusters-from-hosted-kubernetes-providers/tencent.md) + +### 主机驱动 + +主机驱动用于配置主机,Rancher 使用这些主机启动和管理 Kubernetes 集群。主机驱动与 [Docker Machine 驱动](https://docs.docker.com/machine/drivers/)相同。创建主机模板时可以显示的主机驱动,是由主机驱动的状态定义的。只有 `active` 主机驱动将显示为创建节点模板的选项。默认情况下,Rancher 与许多现有的 Docker Machine 驱动打包在一起,但你也可以创建自定义主机驱动并添加到 Rancher。 + +如果你不想向用户显示特定的主机驱动,则需要停用这些主机驱动。 + +Rancher 支持几家主要的云提供商,但默认情况下,这些主机驱动处于 active 状态并可供部署: + +* [Amazon EC2](../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/use-new-nodes-in-an-infra-provider/create-an-amazon-ec2-cluster.md) +* [Azure](../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/use-new-nodes-in-an-infra-provider/create-an-azure-cluster.md) +* [Digital Ocean](../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/use-new-nodes-in-an-infra-provider/create-a-digitalocean-cluster.md) +* [vSphere](vsphere.md) + +还有其他几个默认禁用的主机驱动,但打包在 Rancher 中: + +* [Harvester](../explanations/integrations-in-rancher/harvester.md#harvester-主机驱动) - 在 Rancher 2.6.1 中可用 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/about-rke1-templates.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/about-rke1-templates.md new file mode 100644 index 00000000000..1a57316beab --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/about-rke1-templates.md @@ -0,0 +1,127 @@ +--- +title: RKE 模板 +weight: 80 +--- + +RKE 模板旨在让 DevOps 和安全团队标准化和简化 Kubernetes 集群创建的流程。 + +RKE 的全称是 [Rancher Kubernetes Engine](https://rancher.com/docs/rke/latest/en/),它是 Rancher 用来配置 Kubernetes 集群的工具。 + +随着 Kubernetes 越来越受欢迎,管理更多小型集群逐渐成为趋势。如果你想要创建大量集群,对集群进行一致管理尤为重要。多集群管理面临着安全和附件配置执行的挑战,在将集群移交给最终用户之前,这些配置需要标准化。 + +RKE 模板有助于标准化这些配置。无论是使用 Rancher UI、Rancher API 还是自动化流程创建的集群,Rancher 都将保证从 RKE 集群模板创建的每个集群在生成方式上是一致的。 + +管理员可以控制最终用户能更改的集群选项。RKE 模板还可以与特定的用户和组共享,以便管理员可以为不同的用户集创建不同的 RKE 模板。 + +如果集群是使用 RKE 模板创建的,则不能让集群使用另一个 RKE 模板。你只能将集群更新为同一模板的新版本。 + +你可以[将现有集群的配置保存为 RKE 模板](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/apply-templates.md#将现有集群转换为使用-rke-模板)。这样,只有模板更新后才能更改集群的设置。新模板还可用于启动新集群。 + +RKE 模板的核心功能允许 DevOps 和安全团队: + +- 标准化集群配置并确保按照最佳实践创建 Rancher 配置的集群 +- 配置集群时,防止用户做出不明智的选择 +- 与不同的用户和组共享不同的模板 +- 将模板的所有权委托给受信任的用户进行更改 +- 控制哪些用户可以创建模板 +- 要求用户使用模板来创建集群 + +## 可配置的设置 + +RKE 模板可以在 Rancher UI 中创建或以 YAML 格式定义。当你使用 Rancher 从基础设施提供商配置自定义节点或一般节点时,它们可以指定为相同的参数: + +- 云提供商选项 +- Pod 安全选项 +- 网络提供商 +- Ingress Controller +- 网络安全配置 +- 网络插件 +- 私有镜像仓库 URL 和凭证 +- 附加组件 +- Kubernetes 选项,包括 kube-api、kube-controller、kubelet 和服务等 Kubernetes 组件的配置 + +RKE 模板的[附加组件](#附加组件)的功能特别强大,因为它允许多种自定义选项。 + +## RKE 模板的范围 + +Rancher 配置的集群支持 RKE 模板。模板可用于配置自定义集群或由基础设施提供商启动的集群。 + +RKE 模板用于定义 Kubernetes 和 Rancher 设置。节点模板负责配置节点。有关如何将 RKE 模板与硬件结合使用的参考,请参阅 [RKE 模板和硬件](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/infrastructure.md)。 + +可以从头开始创建 RKE 模板来预先定义集群配置。它们可以用于启动新集群,也可以从现有的 RKE 集群导出模板。 + +现有集群的设置可以[保存为 RKE 模板](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/apply-templates.md#将现有集群转换为使用-rke-模板)。这会创建一个新模板并将集群设置绑定到该模板。这样,集群只有在[模板更新](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/manage-rke1-templates.md#更新模板)的情况下才能[使用新版本的模板](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/manage-rke1-templates.md#升级集群以使用新的模板修订版)进行升级。新模板也可以用来创建新集群。 + + +## 示例场景 +如果一个组织同时拥有普通和高级 Rancher 用户,管理员可能希望为高级用户提供更多用于集群创建的选项,并限制普通用户的选项。 + +这些[示例场景](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/example-use-cases.md)描述组织如何使用模板来标准化集群创建。 + +示例场景包括: + +- **强制执行模板**:如果希望所有 Rancher 配置的新集群都具有某些设置,管理员可能想要[为每个用户强制执行一项或多项模板设置](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/example-use-cases.md#强制执行模板设置)。 +- **与不同的用户共享不同的模板**:管理员可以为[普通用户和高级用户提供不同的模板](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/example-use-cases.md#普通用户和高级用户模板)。这样,普通用户会有更多限制选项,而高级用户在创建集群时可以使用更多选项。 +- **更新模板设置**:如果组织的安全和 DevOps 团队决定将最佳实践嵌入到新集群所需的设置中,这些最佳实践可能会随着时间而改变。如果最佳实践发生变化,[可以将模板更新为新版本](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/example-use-cases.md#更新模板和集群),这样,使用模板创建的集群可以[升级到模板的新版本](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/manage-rke1-templates.md#升级集群以使用新的模板修订版)。 +- **共享模板的所有权**:当模板所有者不再想要维护模板或想要共享模板的所有权时,此方案描述了如何[共享模板所有权](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/example-use-cases.md#允许其他用户控制和共享模板)。 + +## 模板管理 + +创建 RKE 模板时,可以在 Rancher UI 中的**集群管理**下的 **RKE 模板**中使用模板。创建模板后,你将成为模板所有者,这将授予你修改和共享模板的权限。你可以与特定用户或组共享 RKE 模板,也可以公开模板。 + +管理员可以开启模板强制执行,要求用户在创建集群时始终使用 RKE 模板。这使管理员可以保证 Rancher 总是创建指定配置的集群。 + +RKE 模板更新通过修订系统处理。如果要更改或更新模板,请创建模板的新版本。然后,可以将使用旧版本模板创建的集群升级到新模板修订版。 + +在 RKE 模板中,模板所有者可以限制设置的内容,也可以打开设置以供最终用户选择值。它们的差别体现在,创建模板时,Rancher UI 中的每个设置上的**允许用户覆盖**标示。 + +对于无法覆盖的设置,最终用户将无法直接编辑它们。为了让用户使用这些设置的不同选项,RKE 模板所有者需要创建 RKE 模板的新版本,这将允许用户升级和更改该选项。 + +本节中的文件解释了 RKE 模板管理的细节: + +- [获取创建模板的权限](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/creator-permissions.md) +- [创建和修改模板](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/manage-rke1-templates.md) +- [强制执行模板设置](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/enforce-templates.md#强制新集群使用-rke-模板) +- [覆盖模板设置](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/override-template-settings.md) +- [与集群创建者共享模板](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/access-or-share-templates.md#与特定用户或组共享模板) +- [共享模板的所有权](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/access-or-share-templates.md#共享模板所有权) + +你可以参见此[模板的示例 YAML 文件](../reference-guides/rke1-template-example-yaml.md)作为参考。 + +## 应用模板 + +你可以使用你自己创建的模板来[创建集群](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/apply-templates.md#使用-rke-模板创建集群),也可以使用[与你共享的模板](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/access-or-share-templates.md)来创建集群。 + +如果 RKE 模板所有者创建了模板的新版本,你可以[将你的集群升级到该版本](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/apply-templates.md#更新使用-rke-模板创建的集群)。 + +可以从头开始创建 RKE 模板来预先定义集群配置。它们可以用于启动新集群,也可以从现有的 RKE 集群导出模板。 + +你可以[将现有集群的配置保存为 RKE 模板](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/apply-templates.md#将现有集群转换为使用-rke-模板)。这样,只有模板更新后才能更改集群的设置。 + +## 标准化硬件 + +RKE 模板的目的是标准化 Kubernetes 和 Rancher 设置。如果你还想标准化你的基础设施,一个选择是将 RKE 模板与[其他工具](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/infrastructure.md)一起使用。 + +另一种选择是使用包含节点池配置选项,但不强制执行配置的[集群模板](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/manage-cluster-templates.md)。 + +## YAML 定制 + +如果将 RKE 模板定义为 YAML 文件,则可以修改此[示例 RKE 模板 YAML](../reference-guides/rke1-template-example-yaml.md)。RKE 模板中的 YAML 使用了 Rancher 在创建 RKE 集群时使用的相同自定义设置。但由于 YAML 要在 Rancher 配置的集群中使用,因此需要将 RKE 模板自定义项嵌套在 YAML 中的 `rancher_kubernetes_engine_config` 参数下。 + +RKE 文档也提供[注释的](https://rancher.com/docs/rke/latest/en/example-yamls/) `cluster.yml` 文件供你参考。 + +有关可用选项的更多信息,请参阅[集群配置](https://rancher.com/docs/rke/latest/en/config-options/)上的 RKE 文档。 + +### 附加组件 + +RKE 模板配置文件的附加组件部分的工作方式与[集群配置文件的附加组件部分](https://rancher.com/docs/rke/latest/en/config-options/add-ons/)相同。 + +用户定义的附加组件指令允许你调用和下拉 Kubernetes 清单或将它们直接内联。如果这些 YAML 清单包括在 RKE 模板中,Rancher 将在集群中部署这些 YAML 文件。 + +你可以使用附加组件执行以下操作: + +- 启动 Kubernetes 集群后,在集群上安装应用 +- 在使用 Kubernetes Daemonset 部署的节点上安装插件 +- 自动设置命名空间、ServiceAccount 或角色绑定 + +RKE 模板配置必须嵌套在 `rancher_kubernetes_engine_config` 参数中。要设置附加组件,在创建模板时单击**以 YAML 文件编辑**。然后使用 `addons` 指令添加清单,或使用 `addons_include` 指令设置哪些 YAML 文件可用于附加组件。有关自定义附加组件的更多信息,请参见[用户自定义附加组件文档](https://rancher.com/docs/rke/latest/en/config-options/add-ons/user-defined-add-ons/)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/about-the-api.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/about-the-api.md new file mode 100644 index 00000000000..5e3766abe7e --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/about-the-api.md @@ -0,0 +1,84 @@ +--- +title: API +weight: 24 +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +## 如何使用 API + +API 有自己的用户界面,你可以从 Web 浏览器访问它。这是查看资源、执行操作以及查看等效 cURL 或 HTTP 请求和响应的一种简单的方法。要访问它: + + + + +1. 单击右上角的用户头像。 +1. 单击**账号 & API 密钥**。 +1. 在 **API 密钥**下,找到 **API 端点**字段并单击链接。该链接类似于 `https:///v3`,其中 `` 是 Rancher deployment 的完全限定域名。 + + + + +转到位于 `https:///v3` 的 URL 端点,其中 `` 是你的 Rancher deployment 的完全限定域名。 + + + + +## 身份验证 + +API 请求必须包含身份验证信息。身份验证是通过 [API 密钥](../reference-guides/user-settings/api-keys.md)使用 HTTP 基本身份验证完成的。API 密钥可以创建新集群并通过 `/v3/clusters/` 访问多个集群。[集群和项目角色](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/cluster-and-project-roles.md)会应用于这些键,并限制账号可以查看的集群和项目以及可以执行的操作。 + +默认情况下,某些集群级别的 API 令牌是使用无限期 TTL(`ttl=0`)生成的。换言之,除非你让令牌失效,否则 `ttl=0` 的 API 令牌永远不会过期。有关如何使 API 令牌失效的详细信息,请参阅 [API 令牌](../reference-guides/about-the-api/api-tokens.md)。 + +## 发出请求 + +该 API 通常是 RESTful 的,但是还具有多种功能。这些功能可以使客户端发现所有内容,因此可以编写通用客户端,而不必为每种资源编写特定代码。有关通用 API 规范的详细信息,请参阅[此处](https://github.com/rancher/api-spec/blob/master/specification.md)。 + +- 每种类型都有一个 Schema,这个 Schema 描述了以下内容: + - 用于获取此类资源集合的 URL + - 资源可以具有的每个字段及其类型、基本验证规则、是必填还是可选字段等 + - 在此类资源上可以执行的每个操作,以及它们的输入和输出(也作为 schema) + - 允许过滤的每个字段 + - 集合本身或集合中的单个资源可以使用的 HTTP 操作方法 + + +- 因此,你可以只加载 schema 列表并了解 API 的所有信息。实际上,这是 API 的 UI 工作方式,它不包含特定于 Rancher 本身的代码。每个 HTTP 响应中的 `X-Api-Schemas` 标头都会发送获取 Schemas 的 URL。你可以按照每个 schema 上的 `collection` 链接了解要在哪里列出资源,并在返回资源中的其他 `links` 中获取其他信息。 + +- 在实践中,你可能只想构造 URL 字符串。我们强烈建议将此限制为在顶层列出的集合 (`/v3/`),或获取特定资源 (`/v3//`)。除此之外的任何内容都可能在将来的版本中发生更改。 + +- 资源之间相互之间有联系,称为链接(links)。每个资源都包含一个 `links` 映射,其中包含链接名称和用于检索该信息的 URL。同样,你应该 `GET` 资源并遵循 `links` 映射中的 URL,而不是自己构造这些字符串。 + +- 大多数资源都有操作(action),表示可以执行某个操作或改变资源的状态。要使用操作,请将 HTTP `POST` 请求发送到 `actions` 映射中你想要的操作的 URL。某些操作需要输入或生成输出,请参阅每种类型的独立文档或 schema 以获取具体信息。 + +- 要编辑资源,请将 HTTP `PUT` 请求发送到资源上的 `links.update` 链接,其中包含要更改的字段。如果链接丢失,则你无权更新资源。未知字段和不可编辑的字段将被忽略。 + +- 要删除资源,请将 HTTP `DELETE` 请求发送到资源上的 `links.remove` 链接。如果链接丢失,则你无权更新资源。 + +- 要创建新资源,HTTP `POST` 到 schema(即 `/v3/`)中的集合 URL。 + +## 过滤 + +你可以使用 HTTP 查询参数的公共字段在服务器端过滤大多数集合。`filters` 映射显示了可以过滤的字段,以及过滤后的值在你发起的请求中是什么。API UI 具有设置过滤和显示适当请求的控件。对于简单的 "equals" 匹配,它只是 `field=value`。你可以将修饰符添加到字段名称,例如 `field_gt=42` 表示“字段大于 42”。详情请参阅 [API 规范](https://github.com/rancher/api-spec/blob/master/specification.md#filtering)。 + +## 排序 + +你可以使用 HTTP 查询参数的公共字段在服务器端排序大多数集合。`sortLinks` 映射显示了可用的排序,以及用于获取遵循该排序的集合的 URL。它还包括当前响排序依据的信息(如果指定)。 + +## 分页 + +默认情况下,API 响应以每页 100 个资源的限制进行分页。你可以通过 `limit` 查询参数进行更改,最大为 1000,例如 `/v3/pods?limit=1000`。集合响应中的 `pagination` 映射能让你知道你是否拥有完整的结果集,如果没有,则会指向下一页的链接。 + +## 捕获 Rancher API 调用 + +你可以使用浏览器开发人员工具来捕获 Rancher API 的调用方式。例如,你可以按照以下步骤使用 Chrome 开发人员工具来获取用于配置 RKE 集群的 API 调用: + +1. 在 Rancher UI 中,转到**集群管理**并单击**创建**。 +1. 单击某个集群类型。此示例使用 Digital Ocean。 +1. 使用集群名称和节点模板填写表单,但不要单击**创建**。 +1. 在创建集群之前,你需要打开开发人员工具才能看到正在记录的 API 调用。要打开工具,右键单击 Rancher UI,然后单击**检查**。 +1. 在开发者工具中,单击 **Network** 选项卡。 +1. 在 **Network** 选项卡上,确保选择了 **Fetch/XHR**。 +1. 在 Rancher UI 中,单击**创建**。在开发者工具中,你应该会看到一个名为 `cluster?_replace=true` 的新网络请求。 +1. 右键单击 `cluster?_replace=true` 并单击**复制 > 复制为 cURL**。 +1. 将结果粘贴到文本编辑器中。你将能够看到 POST 请求,包括被发送到的 URL、所有标头以及请求的完整正文。此命令可用于从命令行创建集群。请注意,请求包含凭证,因此请将请求存储在安全的地方。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/access-clusters.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/access-clusters.md new file mode 100644 index 00000000000..a70075a139b --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/access-clusters.md @@ -0,0 +1,32 @@ +--- +title: 集群访问 +weight: 1 +--- + +本节介绍可以用来访问 Rancher 管理的集群的工具。 + +有关如何授予用户访问集群的权限的信息,请参阅[将用户添加到集群](../how-to-guides/advanced-user-guides/manage-clusters/access-clusters/add-users-to-clusters.md)。 + +有关 RBAC 的更多信息,请参阅[本节](manage-role-based-access-control-rbac.md)。 + +有关如何设置身份验证系统的信息,请参阅[本节](about-authentication.md)。 + + +### Rancher UI + +Rancher 提供了一个直观的用户界面来让你与集群进行交互。UI 中所有可用的选项都使用 Rancher API。因此,UI 中的任何操作都可以在 Rancher CLI 或 Rancher API 中进行。 + +### kubectl + +你可以使用 Kubernetes 命令行工具 [kubectl](https://kubernetes.io/docs/reference/kubectl/overview/) 来管理你的集群。使用 kubectl 有两种选择: + +- **Rancher kubectl shell**:通过启动 Rancher UI 中可用的 kubectl shell 与集群交互。此选项不需要你进行任何配置操作。有关详细信息,请参阅[使用 kubectl Shell 访问集群](../how-to-guides/advanced-user-guides/manage-clusters/access-clusters/use-kubectl-and-kubeconfig.md)。 +- **终端远程连接**:你也可以通过在本地桌面上安装 [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/),然后将集群的 kubeconfig 文件复制到本地 `~/.kube/config` 目录来与集群交互。有关更多信息,请参阅[使用 kubectl 和 kubeconfig 文件访问集群](../how-to-guides/advanced-user-guides/manage-clusters/access-clusters/use-kubectl-and-kubeconfig.md)。 + +### Rancher CLI + +你可以下载 Rancher 自己的命令行工具 [Rancher CLI](cli-with-rancher.md) 来控制你的集群。这个 CLI 工具可以直接与不同的集群和项目进行交互,或者向它们传递 `kubectl` 命令。 + +### Rancher API + +最后,你可以通过 Rancher API 与集群进行交互。在使用 API 之前,你必须先获取 [API 密钥](../reference-guides/user-settings/api-keys.md)。要查看 API 对象的不同资源字段和操作,请打开 API UI(API UI 可以通过单击 Rancher UI 对象的**在 API 中查看**访问)。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/advanced-configuration.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/advanced-configuration.md new file mode 100644 index 00000000000..33a3bebe019 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/advanced-configuration.md @@ -0,0 +1,16 @@ +--- +title: 高级配置 +weight: 500 +--- + +### Alertmanager + +有关配置 Alertmanager 自定义资源的信息,请参阅[此页面](../how-to-guides/advanced-user-guides/monitoring-v2-configuration-guides/advanced-configuration/alertmanager.md)。 + +### Prometheus + +有关配置 Prometheus 自定义资源的信息,请参阅[此页面](../how-to-guides/advanced-user-guides/monitoring-v2-configuration-guides/advanced-configuration/prometheus.md)。 + +### PrometheusRules + +有关配置 Prometheus 自定义资源的信息,请参阅[此页面](../how-to-guides/advanced-user-guides/monitoring-v2-configuration-guides/advanced-configuration/prometheusrules.md)。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/advanced-options.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/advanced-options.md new file mode 100644 index 00000000000..144256da2fb --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/advanced-options.md @@ -0,0 +1,6 @@ +--- +title: 高级配置 +weight: 1000 +--- + +本节将介绍较不常用的用例的资源。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/advanced-user-guides.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/advanced-user-guides.md new file mode 100644 index 00000000000..0f8f5a7df69 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/advanced-user-guides.md @@ -0,0 +1,7 @@ +--- +title: 高级用户指南 +--- + +高级用户指南是“问题导向”的文档,用户可以从中学习如何解决问题。高级用于指南与新用户指南的主要区别在于,高级用户指南面向更有经验或更高级的用户,这些用户对文档有更多的技术需求,而且已经了解 Rancher 及其功能。他们知道自己需要做什么,只是需要额外的指导来完成更复杂的任务。 + +应该注意的是,新用户指南和高级用户指南都没有提供详细的解释或讨论(这些文档不包括在本部分)。操作指南侧重于引导用户通过可重复、有效的步骤来学习新技能、掌握某些操作或解决某些问题。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/air-gapped-helm-cli-install.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/air-gapped-helm-cli-install.md new file mode 100644 index 00000000000..ad357178c02 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/air-gapped-helm-cli-install.md @@ -0,0 +1,32 @@ +--- +title: 离线 Helm CLI 安装 +weight: 1 +--- + +本文介绍如何使用 Helm CLI 在离线环境中安装 Rancher Server。离线环境可以是 Rancher Server 离线安装、防火墙后面或代理后面。 + +Rancher 安装在 RKE Kubernetes 集群、K3s Kubernetes 集群,或单个 Docker 容器上对应的安装步骤会有所不同。 + +如需了解各个安装方式的更多信息,请参见[本页](installation-and-upgrade.md)。 + +在安装指导中,我们为不同的安装选项提供对应的 _选项卡_ 。 + +:::note 重要提示: + +如果你按照 Docker 安装指南安装 Rancher,你将没有把 Docker 安装转换为 Kubernetes 安装的升级途径。 + +::: + +# 安装概要 + +1. [设置基础设施和私有镜像仓库](../getting-started/installation-and-upgrade/other-installation-methods/air-gapped-helm-cli-install/infrastructure-private-registry.md) +2. [收集镜像到私有镜像仓库](../getting-started/installation-and-upgrade/other-installation-methods/air-gapped-helm-cli-install/publish-images.md) +3. [设置 Kubernetes 集群(如果你使用 Docker 安装,请跳过此步骤)](../getting-started/installation-and-upgrade/other-installation-methods/air-gapped-helm-cli-install/install-kubernetes.md) +4. [安装 Rancher](../getting-started/installation-and-upgrade/other-installation-methods/air-gapped-helm-cli-install/install-rancher-ha.md) + +# 升级 + +如需在离线环境中使用 Helm CLI 升级 Rancher,请按照[升级步骤](../getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/upgrades.md)进行操作。 + +### 后续操作 +[准备节点](../getting-started/installation-and-upgrade/other-installation-methods/air-gapped-helm-cli-install/infrastructure-private-registry.md) diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/amazon-eks-permissions.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/amazon-eks-permissions.md new file mode 100644 index 00000000000..227d497f07b --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/amazon-eks-permissions.md @@ -0,0 +1,111 @@ +--- +title: 创建 EKS 集群 +shortTitle: Amazon EKS +weight: 2110 +--- +Amazon EKS 为 Kubernetes 集群提供托管的 controlplane。Amazon EKS 跨多个可用区运行 Kubernetes controlplane 实例,以确保高可用性。Rancher 提供了一个直观的用户界面,用于管理和部署你运行在 Amazon EKS 中的 Kubernetes 集群。通过本指南,你将使用 Rancher 在你的 AWS 账户中快速轻松地启动 Amazon EKS Kubernetes 集群。有关 Amazon EKS 的更多信息,请参阅此[文档](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html)。 + + +## Amazon Web 服务的先决条件 + +:::caution + +部署到 Amazon AWS 会产生费用。有关详细信息,请参阅 [EKS 定价页面](https://aws.amazon.com/eks/pricing/)。 + +::: + +要在 EKS 上设置集群,你需要设置 Amazon VPC(虚拟私有云)。你还需要确保用于创建 EKS 集群的账号具有适当的[权限](#最小-eks-权限)。详情请参阅 [Amazon EKS 先决条件官方指南](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-console.html#eks-prereqs)。 + +### Amazon VPC + +你需要建立一个 Amazon VPC 来启动 EKS 集群。VPC 使你能够将 AWS 资源启动到你定义的虚拟网络中。你可以自己设置一个 VPC,并在 Rancher 中创建集群时提供它。如果你创建过程中没有提供,Rancher 将创建一个 VPC。详情请参阅[教程:为你的 Amazon EKS 集群创建具有公有和私有子网的 VPC](https://docs.aws.amazon.com/eks/latest/userguide/create-public-private-vpc.html)。 + +### IAM 策略 + +Rancher 需要访问你的 AWS 账户才能在 Amazon EKS 中预置和管理你的 Kubernetes 集群。你需要在 AWS 账户中为 Rancher 创建一个用户,并定义该用户可以访问的内容。 + +1. 按照[此处](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html)的步骤创建具有编程访问权限的用户。 + +2. 创建一个 IAM 策略,定义该用户在 AWS 账户中有权访问的内容。请务必仅授予此用户所需的最小访问权限。[此处](#最小-eks-权限)列出了 EKS 集群所需的最低权限。请按照[此处](https://docs.aws.amazon.com/eks/latest/userguide/EKS_IAM_user_policies.html)的步骤创建 IAM 策略并将策略绑定到你的用户。 + +3. 最后,按照[此处](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html#Using_CreateAccessKey)的步骤为该用户创建访问密钥和密文密钥。 + +:::note 重要提示: + +定期轮换访问密钥和密文密钥非常重要。有关详细信息,请参阅此[文档](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html#rotating_access_keys_console)。 + +::: + +有关 EKS 的 IAM 策略的更多详细信息,请参阅 [Amazon EKS IAM 策略、角色和权限的官方文档](https://docs.aws.amazon.com/eks/latest/userguide/IAM_policies.html)。 + + +## 创建 EKS 集群 + +使用 Rancher 配置你的 Kubernetes 集群。 + +1. 点击 **☰ > 集群管理**。 +1. 在**集群**页面上,单击**创建**。 +1. 选择 **Amazon EKS**。 +1. 输入**集群名称**。 +1. 使用**成员角色**为集群配置用户授权。点击**添加成员**添加可以访问集群的用户。使用**角色**下拉菜单为每个用户设置权限。 +1. 完成表单的其余部分。如需帮助,请参阅[配置参考](#eks-集群配置参考)。 +1. 单击**创建**。 + +**结果**: + +你已创建集群,集群的状态是**配置中**。Rancher 已在你的集群中。 + +当集群状态变为 **Active** 后,你可访问集群。 + +**Active** 状态的集群会分配到两个项目: + +- `Default`:包含 `default` 命名空间 +- `System`:包含 `cattle-system`,`ingress-nginx`,`kube-public` 和 `kube-system` 命名空间。 + +## EKS 集群配置参考 + +有关 EKS 集群配置选项的完整列表,请参阅[此页面](../reference-guides/cluster-configuration/rancher-server-configuration/eks-cluster-configuration.md)。 + +## 架构 + +下图展示了 Rancher 2.x 的上层架构。下图中,Rancher Server 管理两个 Kubernetes 集群,其中一个由 RKE 创建,另一个由 EKS 创建。 + +
通过 Rancher 的认证代理管理 Kubernetes 集群
+ +![架构](/img/rancher-architecture-rancher-api-server.svg) + +## AWS 服务事件 + +有关 AWS 服务事件的信息,请参阅[此页面](https://status.aws.amazon.com/)。 + +## 安全与合规 + +默认情况下,只有创建集群的 IAM 用户或角色才能访问该集群。在没有额外配置的情况下,使用其他用户或角色访问集群将导致错误。在 Rancher 中,这意味着使用映射到未用于创建集群的用户或角色的凭证,导致未经授权的错误。除非用于注册集群的凭证与 EKSCtl 使用的角色或用户匹配,否则 EKSCtl 集群将不会注册到 Rancher。通过将其他用户和角色添加到 kube-system 命名空间中的 aws-auth configmap,可以授权其他用户和角色访问集群。如需更深入的解释和详细说明,请参阅此[文档](https://aws.amazon.com/premiumsupport/knowledge-center/amazon-eks-cluster-access/)。 + +有关 Amazon EKS Kubernetes 集群的安全性和合规性的更多信息,请参阅此[文档](https://docs.aws.amazon.com/eks/latest/userguide/shared-responsibilty.html)。 + +## 教程 + +AWS 开源博客上的这篇[教程](https://aws.amazon.com/blogs/opensource/managing-eks-clusters-rancher/)将指导你使用 Rancher 设置一个 EKS 集群,部署一个可公开访问的示例应用来测试集群,并部署一个使用其他开源软件(如 Grafana 和 influxdb)来实时监控地理信息的示例项目。 + +## 最小 EKS 权限 + +请参阅[此页面](../reference-guides/amazon-eks-permissions/minimum-eks-permissions.md),了解在 Rancher 中使用 EKS 驱动所有功能所需的最小权限。 + +## 同步 + +EKS 配置者可以在 Rancher 和提供商之间同步 EKS 集群的状态。有关其工作原理的技术说明,请参阅[同步](../reference-guides/cluster-configuration/rancher-server-configuration/sync-clusters.md)。 + +有关配置刷新间隔的信息,请参阅[本节](../reference-guides/cluster-configuration/rancher-server-configuration/eks-cluster-configuration.md#配置刷新间隔)。 + +## 故障排除 + +如果你的更改被覆盖,可能是集群数据与 EKS 同步的方式导致的。不要在使用其他源(例如 EKS 控制台)对集群进行更改后,又在五分钟之内在 Rancher 中进行更改。有关其工作原理,以及如何配置刷新间隔的信息,请参阅[同步](#同步)。 + +如果在修改或注册集群时返回未经授权的错误,并且集群不是使用你的凭证所属的角色或用户创建的,请参阅[安全与合规](#安全与合规)。 + +有关 Amazon EKS Kubernetes 集群的任何问题或故障排除详细信息,请参阅此[文档](https://docs.aws.amazon.com/eks/latest/userguide/troubleshooting.html)。 + +## 以编程方式创建 EKS 集群 + +通过 Rancher 以编程方式部署 EKS 集群的最常见方法是使用 Rancher 2 Terraform Provider。详情请参见[使用 Terraform 创建集群](https://registry.terraform.io/providers/rancher/rancher2/latest/docs/resources/cluster)。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/authentication-config.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/authentication-config.md new file mode 100644 index 00000000000..ef89a141afe --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/authentication-config.md @@ -0,0 +1,18 @@ +--- +title: 身份验证配置 +--- + +在以下教程中,你将学习如何: +1. [管理用户和组](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/manage-users-and-groups.md) +1. [创建本地用户](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/create-local-users.md) +1. [配置 Google OAuth](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/configure-google-oauth.md) +1. [配置 Active Directory (AD)](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/configure-active-directory.md) +1. [配置 FreeIPA](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/configure-freeipa.md) +1. [配置 Azure AD](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/configure-azure-ad.md) +1. [配置 GitHub](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/configure-github.md) +1. [配置 Keycloak (OIDC)](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/configure-keycloak-oidc.md) +1. [配置 Keycloak (SAML)](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/configure-keycloak-saml.md) +1. [配置 PingIdentity (SAML)](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/configure-pingidentity.md) +1. [配置 Okta (SAML)](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/authentication-config/configure-okta-saml.md) +1. [配置 Shibboleth (SAML)](../pages-for-subheaders/configure-shibboleth-saml.md) +1. [配置 Microsoft AD FS (SAML)](../pages-for-subheaders/configure-microsoft-ad-federation-service-saml.md) \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/authentication-permissions-and-global-configuration.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/authentication-permissions-and-global-configuration.md new file mode 100644 index 00000000000..7bf343e95c8 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/authentication-permissions-and-global-configuration.md @@ -0,0 +1,54 @@ +--- +title: 身份验证、权限和全局配置 +weight: 6 +--- + +安装完成后,[系统管理员](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/global-permissions.md)需要配置 Rancher 来配置身份验证,安全,默认设定,安全策略,驱动和全局 DNS 条目。 + +## 首次登录 + +首次登录 Rancher 后,Rancher 会提示你输入 **Rancher Server URL**。你需要将 URL 设置为 Rancher Server 的主要入口点。当负载均衡器位于 Rancher Server 集群前面时,URL 需要设置为负载均衡器地址。系统会自动尝试从运行 Rancher Server 的主机的 IP 地址或主机名推断 Rancher Server 的URL,上述推断仅在你运行单节点 Rancher Server 时才正确。因此,在大多数情况下,你需要自己将 Rancher Server 的 URL 设置为正确的值。 + +:::danger + +Rancher Server 的 URL 在设置后不可再更新。因此,你需要谨慎设置该 URL。 + +::: + +## 身份验证 + +Rancher 向 Kubernetes 添加的关键功能之一,就是集中式用户身份验证。此功能允许将本地用户连接到外部身份验证系统,使用该系统的用户和组进行身份验证。 + +有关身份验证如何工作及如何设置外部身份认证系统,请参见[身份验证](about-authentication.md)。 + +## 授权 + +Rancher 通过 _用户_ 进行授权管理。用户的 _授权_ 或系统访问权限由用户角色决定。Rancher 提供了预设角色,让你轻松配置用户对资源的权限,还提供了为每个 Kubernetes 资源定制角色的能力。 + +有关授权如何工作及如何自定义角色,请参见 [RBAC](manage-role-based-access-control-rbac.md)。 + +## Pod 安全策略 + +_Pod 安全策略(PSP)_ 是用来控制安全敏感相关 Pod 规范(例如 root 特权)的对象。如果某个 Pod 不满足 PSP 指定的条件,Kubernetes 将不允许它启动,并在 Rancher 中显示错误消息。 + +有关如何创建和使用 PSP,请参见[Pod 安全策略](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/create-pod-security-policies.md)。 + +## 配置驱动 + +使用 Rancher 中的驱动,你可以管理可以使用哪些供应商来配置[托管的 Kubernetes 集群](set-up-clusters-from-hosted-kubernetes-providers.md)或[云服务器节点](use-new-nodes-in-an-infra-provider.md),以允许 Rancher 部署和管理 Kubernetes。 + +详情请参考[配置驱动](about-provisioning-drivers.md)。 + +## 添加 Kubernetes 版本到 Rancher + +你可以通过这个功能,在不升级 Rancher 的情况下,升级到最新发布的 Kubernetes 版本。Kubernetes 倾向于在次要版本删除或新增 API 接口。本功能让你轻松升级 Kubernetes 补丁版本(即 `v1.15.X`),但不升级 Kubernetes 次要版本(即 `v1.X.0`)。 + +Rancher 用于配置 [RKE 集群](launch-kubernetes-with-rancher.md) 的信息现在位于 Rancher Kubernetes 元数据中。有关元数据配置以及如何更改用于配置 RKE 集群的 Kubernetes 版本,请参见 [Rancher Kubernetes 元数据。](../getting-started/installation-and-upgrade/upgrade-kubernetes-without-upgrading-rancher.md) + +Rancher 用于配置 [RKE 集群](launch-kubernetes-with-rancher.md)的 Kubernetes 版本信息包含在 Rancher Kubernetes 元数据中。 + +有关元数据如何工作以及如何配置元数据,请参见 [Rancher Kubernetes 元数据](../getting-started/installation-and-upgrade/upgrade-kubernetes-without-upgrading-rancher.md)。 + +## 启用实验功能 + +Rancher 包含一些默认关闭的实验功能。我们引入了功能开关,让你试用这些新功能。详情请参见[功能开关](enable-experimental-features.md)的章节。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/aws-cloud-marketplace.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/aws-cloud-marketplace.md new file mode 100644 index 00000000000..cda6ad282e9 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/aws-cloud-marketplace.md @@ -0,0 +1,32 @@ +--- +title: AWS Marketplace 集成 +weight: 1 +--- + +# 概述 + +Rancher 提供了与 AWS Marketplace 的集成,允许用户向 SUSE 购买支持。此集成帮助你在需要使用更多集群时轻松调整支持需求。 + +# 限制 + +- 必须使用 Rancher v2.6.7 或更高版本。 +- Rancher 必须在启用其他指标的情况下进行部署。 +- Rancher 必须安装在 EKS 集群上。 +- 必须通过 AWS Marketplace 购买至少一项 Rancher 支持的 Entitlement。 +- 你可能需要额外的设置来支持代理/离线用例。有关详细信息,请参阅[先决条件](../explanations/integrations-in-rancher/cloud-marketplace/aws-cloud-marketplace/adapter-requirements.md)。 + +# 如何使用 +1. 完成[先决条件步骤](../explanations/integrations-in-rancher/cloud-marketplace/aws-cloud-marketplace/adapter-requirements.md)。 +2. [安装 CSP Adapter](../explanations/integrations-in-rancher/cloud-marketplace/aws-cloud-marketplace/install-adapter.md)。 + +# 常见问题 + +**我以后后续再购买更多节点的支持吗?** + +是的。你需要转到最初购买支持的 AWS Marketplace 条目并增加 Entitlement 的数量。 + +**我可以在同一个 AWS 账户中使用多个 Rancher 实例吗?** + +是的。但是,安装 Rancher 的每个集群都需要遵守先决条件。 + +此外,一个 Entitlement 每次只能由一台 Rancher management server 使用。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/backup-restore-and-disaster-recovery.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/backup-restore-and-disaster-recovery.md new file mode 100644 index 00000000000..d8d9ba1d6ac --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/backup-restore-and-disaster-recovery.md @@ -0,0 +1,96 @@ +--- +title: 备份和灾难恢复 +weight: 5 +--- + +在本节中,你将学习如何创建 Rancher 的备份,如何从备份中恢复 Rancher,以及如何将 Rancher 迁移到新的 Kubernetes 集群。 + +`rancher-backup` operator 可以用来备份和恢复任何 Kubernetes 集群上的 Rancher。这个应用是一个 Helm Chart,可以通过 Rancher 的**应用 & 应用市场**页面或使用 Helm CLI 部署。你可以访问[本页面](https://github.com/rancher/charts/tree/release-v2.6/charts/rancher-backup)获取 `rancher-backup` Helm Chart。 + +`backup-restore` operator 需要安装在 local 集群上,并且只对 Rancher 应用进行备份。备份和恢复操作仅在本地 Kubernetes 集群中执行。 + + +## 备份和恢复 Docker 安装的 Rancher + +对于使用 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)对 Rancher 进行备份和恢复。 + +## 备份和恢复原理 + +`rancher-backup` operator 引入了三个自定义资源,分别是 Backups、Restores 和 ResourceSets。将以下集群范围的自定义资源定义添加到集群中: + +- `backups.resources.cattle.io` +- `resourcesets.resources.cattle.io` +- `restores.resources.cattle.io` + +ResourceSet 定义了需要备份哪些 Kubernetes 资源。由于备份 Rancher 所需的值是预设的,因此 ResourceSet 无法通过 Rancher UI 进行配置。请不要修改此 ResourceSet。 + +在创建 Backup 自定义资源时,`rancher-backup` operator 调用 `kube-apiserver` 来获取 Backup 自定义资源引用的 ResourceSet(即预设的 `rancher-resource-set`)资源。 + +然后,operator 以 `.tar.gz` 格式创建备份文件,并将其存储在 Backup 资源中配置的位置。 + +在创建 Restore 自定义资源时,operator 访问 Restore 指定的 `tar.gz` 备份文件,并从该文件恢复应用。 + +你可以使用 Rancher UI 或 `kubectl apply` 来创建 Backup 和 Restore 自定义资源。 + +:::note + +请参见[此处](../how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/migrate-rancher-to-new-cluster.md#使用-restore-自定义资源来还原备份)获取在 Rancher 2.6.3 中将现有备份文件恢复到 v1.22 集群的帮助。 + +::: + +## 安装 rancher-backup operator + +你可以使用 Rancher UI 或 Helm CLI 来安装 `rancher-backup` operator。两种安装方法都将 `rancher-backup` Helm Chart 安装在运行 Rancher Server 的 Kubernetes 集群上。它是集群管理员独有的功能,仅适用于 **local** 集群。(*如果你在 Rancher UI 中没有看到 `rancher-backup`,你可能选择了错误的集群。*) + +:::note + +使用 `backup-restore` operator 执行恢复后,Fleet 中会出现一个已知问题:用于 `clientSecretName` 和 `helmSecretName` 的密文不包含在 Fleet 的 Git 仓库中。请参见[此处](./fleet-gitops-at-scale.md#故障排除)获得解决方法。 + +::: + +### 使用 Rancher UI 安装 rancher-backup + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 在**集群**页面上,转到 `local` 集群并单击 **Explore**。 +1. 在左侧导航栏中,单击**应用 & 应用市场 > Chart**。 +1. 点击 **Rancher 备份**。 +1. 单击**安装**。 +1. 可选:配置默认存储位置。如需获取帮助,请参见[配置](../reference-guides/backup-restore-configuration/storage-configuration.md)。 +1. 单击**安装**。 + +**结果**:`rancher-backup` operator 已安装。 + +在**集群仪表板**中,你可以看到列在 **Deployments** 下的 `rancher-backup` operator。 + +如果需要在 Rancher 中配置备份应用,在左侧导航栏中单击 **Rancher 备份**。 + +### RBAC + +只有 Rancher 管理员和本地集群的所有者可以: + +* 安装 Chart +* 看到 Backup 和 Restore CRD 的导航链接 +* 通过分别创建 Backup CR 和 Restore CR 执行备份和恢复 +* 列出目前已执行的备份和恢复操作 + +## 备份 Rancher + +备份是通过创建 Backup 自定义资源实现的。如需查看教程,请参见[本页面](../how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/back-up-rancher.md)。 + +## 还原 Rancher + +还原是通过创建 Restore 自定义资源实现的。如需查看教程,请参见[本页面](../how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/restore-rancher.md)。 + +## 将 Rancher 迁移到新集群 + +你可以按照[这些步骤](../how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/migrate-rancher-to-new-cluster.md)执行迁移。 + +## 默认存储位置配置 + +配置一个用于保存所有备份的默认存储位置。你可以选择对每个备份进行覆盖,但仅限于使用 S3 或 Minio 对象存储。 + +如需了解各个选项的配置,请参见[本页面](../reference-guides/backup-restore-configuration/storage-configuration.md)。 + +### rancher-backup Helm Chart 的示例 values.yaml + +当使用 Helm CLI 安装时,可以使用示例 [values.yaml 文件](../reference-guides/backup-restore-configuration/storage-configuration.md#rancher-backup-helm-chart-的示例-values-yaml) 来配置 `rancher-backup` operator。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/backup-restore-configuration.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/backup-restore-configuration.md new file mode 100644 index 00000000000..25c7cd48f51 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/backup-restore-configuration.md @@ -0,0 +1,10 @@ +--- +title: Rancher 备份配置参考 +shortTitle: 配置 +weight: 4 +--- + +- [备份配置](../reference-guides/backup-restore-configuration/backup-configuration.md) +- [还原配置](../reference-guides/backup-restore-configuration/restore-configuration.md) +- [存储位置配置](../reference-guides/backup-restore-configuration/storage-configuration.md) +- [Backup 和 Restore 自定义资源示例](../reference-guides/backup-restore-configuration/examples.md) \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/best-practices.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/best-practices.md new file mode 100644 index 00000000000..6af69309037 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/best-practices.md @@ -0,0 +1,18 @@ +--- +title: 最佳实践 +weight: 4 +--- + +本节介绍 Rancher 实现的最佳实践,其中包括对 Kubernetes、Docker、容器等技术的使用建议。最佳实践旨在利用 Rancher 及其客户的运营经验,助你更好地实现 Rancher。 + +如果你对用例的实际应用有任何疑问,请联系客户成功经理或支持中心。 + +你可以在左侧导航栏快速找到管理和部署 Rancher Server 的最佳实践。 + +如需查看更多最佳实践指南,请参见: + +- [安全类文档](rancher-security.md) +- [Rancher 博客](https://www.suse.com/c/rancherblog/) +- [Rancher 论坛](https://forums.rancher.com/) +- [Rancher 用户的 Slack 群组](https://slack.rancher.io/) +- [B 站](https://space.bilibili.com/430496045/) diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/checklist-for-production-ready-clusters.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/checklist-for-production-ready-clusters.md new file mode 100644 index 00000000000..7baa119417c --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/checklist-for-production-ready-clusters.md @@ -0,0 +1,49 @@ +--- +title: 生产就绪集群检查清单 +weight: 2 +--- + +本节将介绍创建生产就绪型 Kubernetes 集群的最佳实践。这个集群可用于运行你的应用和服务。 + +有关集群的要求(包括对 OS/Docker、硬件和网络的要求),请参阅[节点要求](../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/node-requirements-for-rancher-managed-clusters.md)。 + +本文介绍了我们推荐用于所有生产集群的最佳实践的简短列表。 + +如需获取推荐的所有最佳实践的完整列表,请参阅[最佳实践](best-practices.md)。 + +### 节点要求 + +* 确保你的节点满足所有[节点要求](../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/node-requirements-for-rancher-managed-clusters.md),包括端口要求。 + +### 备份 etcd + +* 启用 etcd 快照。验证是否正在创建快照,并执行灾难恢复方案,从而验证快照是否有效。etcd 是存储集群状态的位置,丢失 etcd 数据意味着丢失集群。因此,请确保为集群配置 etcd 的定期快照,并确保快照也是存储在外部(节点外)的。 + +### 集群架构 + +* 节点应具有以下角色配置之一: + * `etcd` + * `controlplane` + * `etcd` 和 `controlplane` + * `worker`(不应在具有 `etcd` 或 `controlplane` 角色的节点上使用或添加 `worker` 角色) +* 至少拥有三个角色为 `etcd` 的节点,来确保失去一个节点时仍能存活。增加 etcd 节点数量能提高容错率,而将 etcd 分散到不同可用区甚至能获取更好的容错能力。 +* 为两个或更多节点分配 `controlplane` 角色,能实现主组件的高可用性。 +* 为两个或多个节点分配 `worker` 角色,以便在节点故障时重新安排工作负载。 + +有关每个角色的用途的更多信息,请参阅 [Kubernetes 中的节点角色](../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/checklist-for-production-ready-clusters/roles-for-nodes-in-kubernetes.md)。 + +有关每个 Kubernetes 角色的节点数的详细信息,请参阅[推荐架构](../reference-guides/rancher-manager-architecture/architecture-recommendations.md)。 + +### Logging 和 Monitoring + +* 为 Kubernetes 组件(系统服务)配置告警/通知程序。 +* 为集群分析和事后剖析配置 Logging。 + +### 可靠性 + +* 在集群上执行负载测试,以验证硬件是否可以支持你的工作负载。 + +### 网络 + +* 最小化网络延迟。Rancher 建议尽量减少 etcd 节点之间的延迟。`heartbeat-interval` 的默认设置是 `500`,`election-timeout` 的默认设置是 `5000`。这些 [etcd 调优设置](https://coreos.com/etcd/docs/latest/tuning.html) 允许 etcd 在大多数网络(网络延迟特别高的情况下除外)中运行。 +* 集群节点应位于单个区域内。大多数云厂商在一个区域内提供多个可用区,这可以提高你集群的可用性。任何角色的节点都可以使用多个可用区。如果你使用 [Kubernetes Cloud Provider](set-up-cloud-providers.md) 资源,请查阅文档以了解限制(即区域存储限制)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/cis-scan-guides.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/cis-scan-guides.md new file mode 100644 index 00000000000..269edaaec4a --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/cis-scan-guides.md @@ -0,0 +1,13 @@ +--- +title: CIS 扫描指南 +--- + +- [安装 rancher-cis-benchmark](../how-to-guides/advanced-user-guides/cis-scan-guides/install-rancher-cis-benchmark.md) +- [卸载 rancher-cis-benchmark](../how-to-guides/advanced-user-guides/cis-scan-guides/uninstall-rancher-cis-benchmark.md) +- [运行扫描](../how-to-guides/advanced-user-guides/cis-scan-guides/run-a-scan.md) +- [定期运行扫描](../how-to-guides/advanced-user-guides/cis-scan-guides/run-a-scan-periodically-on-a-schedule.md) +- [跳过测试](../how-to-guides/advanced-user-guides/cis-scan-guides/skip-tests.md) +- [查看报告](../how-to-guides/advanced-user-guides/cis-scan-guides/view-reports.md) +- [为 rancher-cis-benchmark 启用告警](../how-to-guides/advanced-user-guides/cis-scan-guides/enable-alerting-for-rancher-cis-benchmark.md) +- [为定时扫描配置告警](../how-to-guides/advanced-user-guides/cis-scan-guides/configure-alerts-for-periodic-scan-on-a-schedule.md) +- [创建要运行的自定义 Benchmark 版本](../how-to-guides/advanced-user-guides/cis-scan-guides/create-a-custom-benchmark-version-to-run.md) \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/cis-scans.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/cis-scans.md new file mode 100644 index 00000000000..86e5c5e64bd --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/cis-scans.md @@ -0,0 +1,109 @@ +--- +title: CIS 扫描 +weight: 17 +--- + +Rancher 可以通过运行安全扫描来检查 Kubernetes 是否按照 CIS Kubernetes Benchmark 中定义的安全最佳实践进行部署。CIS 扫描可以运行在任何 Kubernetes 集群,包括托管的 Kubernetes,例如 EKS、AKS 和 GKE。 + +`rancher-cis-benchmark` 应用使用了 kube-bench ,这是 Aqua Security 的开源工具,用于检查集群是否符合 CIS Kubernetes Benchmark。此外,为了生成集群级别的报告,此应用使用了 Sonobuoy 来聚合报告。 + + +## 关于 CIS Benchmark + +CIS(Center for Internet Security)是一个 501(c\)(3) 非营利组织,成立于 2000 年 10 月,其使命是识别、开发、验证、促进和维持网络防御的最佳实践方案,并建立和指导社区,以在网络空间中营造信任的环境。该组织总部位于纽约东格林布什,其成员包括大公司、政府机构和学术机构。 + +CIS Benchmark 是目标系统安全配置的最佳实践。CIS Benchmark 是由安全专家、技术供应商、公开和私人社区成员,以及 CIS Benchmark 开发团队共同志愿开发的。 + +你可以访问 CIS 网站获取官方的 Benchmark 文件。要通过注册来访问文件,请前往 +这里。 + +## 关于生成的报告 + +每次扫描都会生成一份报告,你可以在 Rancher UI 中查看该报告,并以 CSV 格式下载它。 + +默认情况下使用 CIS Benchmark v1.6。 + +Benchmark 版本包含在生成的报告中。 + +Benchmark 提供两种类型的建议,分别是自动(Automated)和手动(Manual)。Benchmark 中标记为 Manual 的建议不包含在生成的报告中。 + +一些测试会被标记为“不适用”。由于 Rancher 配置 RKE 集群的方式,这些测试不会在任何 CIS 扫描中运行。有关如何审核测试结果,以及为什么某些测试会被标记为不适用,请参阅 Rancher 的 Kubernetes 对应版本的[自测指南](./rancher-security.md#cis-benchmark-和自我评估)。 + +该报告包含以下信息: + +| 报告中的列 | 描述 | +|------------------|-------------| +| `id` | CIS Benchmark 的 ID 号。 | +| `description` | CIS Benchmark 测试的描述。 | +| `remediation` | 为了通过测试需要修复的内容。 | +| `state` | 测试的状态,可以是通过、失败、跳过或不适用。 | +| `node_type` | 节点角色,角色决定了在节点上运行的测试。主测试在 controlplane 节点上运行,etcd 测试在 etcd 节点上运行,节点测试在 Worker 节点上运行。 | +| `audit` | 这是 `kube-bench` 为此测试运行的审计检查。 | +| `audit_config` | 适用于审计脚本的任何配置。 | +| `test_info` | `kube-bench` 报告的测试相关信息(如果存在)。 | +| `commands` | `kube-bench` 报告的测试相关的命令(如果存在)。 | +| `config_commands` | `kube-bench` 报告的测试相关的配置数据(如果存在)。 | +| `actual_value` | 测试的实际值。如果由 `kube-bench` 报告,则会显示。 | +| `expected_result` | 测试的预期值。如果由 `kube-bench` 报告,则会显示。 | + +请参阅[集群加固指南中的表格](./rancher-security.md),以了解 Kubernetes、Benchmark、Rancher 以及我们的集群强化指南的版本对应关系。另外,请参阅强化指南,以获取符合 CIS 的集群的配置文件以及修复失败测试的信息。 + +## 测试配置文件 + +以下是可用的配置文件: + +- Generic CIS 1.5 +- Generic CIS 1.6 +- RKE permissive 1.5 +- RKE hardened 1.5 +- RKE permissive 1.6 +- RKE hardened 1.6 +- RKE2 permissive 1.5 +- RKE2 hardened 1.5 +- RKE2 permissive 1.6 +- RKE2 hardened 1.6 +- AKS +- EKS +- GKE + +你还可以通过保存一组要跳过的测试来自定义配置文件。 + +所有配置文件都会有一组不适用的测试,CIS 扫描会跳过这些测试。RKE 集群管理 Kubernetes 的方式导致这些测试被认为不适用。 + +RKE 集群扫描配置文件有两种类型: + +- **Permissive**:此配置文件有一组要跳过的测试,跳过的原因是这些测试会在默认的 RKE Kubernetes 集群上失败。除了跳过的测试列表之外,配置文件也不会运行不适用的测试。 +- **Hardened**:此配置文件不会跳过任何测试(不适用的测试除外)。 + +EKS 和 GKE 集群扫描的配置文件基于这些集群类型特定的 CIS Benchmark 版本。 + +要通过 “Hardened” 配置文件,你需要遵从[强化指南](./rancher-security.md#rancher-强化指南)并使用强化指南中定义的 `cluster.yml` 来配置一个强化集群。 + +默认配置文件和支持的 CIS Benchmark 版本取决于扫描的集群类型: + +`rancher-cis-benchmark` 支持 CIS 1.6 Benchmark 版本。 + +- RKE Kubernetes 集群默认使用 RKE Permissive 1.6 配置文件。 +- EKS 和 GKE 有自己的 CIS Benchmark,由 `kube-bench` 发布。这些集群默认使用相应的测试配置文件。 +- RKE2 Kubernetes 集群默认使用 RKE2 Permissive 1.6 配置文件。 +- RKE、RKE2、EKS 和 GKE 以外的集群类型默认使用 Generic CIS 1.5 配置文件。 + +## 跳过和不适用的测试 + +有关要跳过和不适用的测试列表,请参阅[此页面](../how-to-guides/advanced-user-guides/cis-scan-guides/skip-tests.md)。 + +目前,只有用户定义的跳过测试会在生成报告中标记为跳过。 + +如果某个默认配置文件将某个测试定义为跳过,则该测试也会标记为不适用。 + +## RBAC + +有关权限的详细信息,请参阅[此页面](../explanations/integrations-in-rancher/cis-scans/rbac-for-cis-scans.md)。 + +## 配置 + +有关为扫描、配置文件和 Benchmark 版本配置自定义资源的更多信息,请参阅[此页面](../explanations/integrations-in-rancher/cis-scans/configuration-reference.md)。 + +## 操作指南 + +请参阅[此处](../pages-for-subheaders/cis-scan-guides.md)了解 CIS 扫描的操作指南。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/cli-with-rancher.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/cli-with-rancher.md new file mode 100644 index 00000000000..f1e68727a8d --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/cli-with-rancher.md @@ -0,0 +1,5 @@ +--- +title: Rancher CLI +--- + +Rancher CLI 是一个命令行工具,用于在工作站中与 Rancher 进行交互。以下文档将描述 [Rancher CLI](../reference-guides/cli-with-rancher/rancher-cli.md) 和 [kubectl Utility](../reference-guides/cli-with-rancher/kubectl-utility.md)。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/cloud-marketplace.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/cloud-marketplace.md new file mode 100644 index 00000000000..5313188028b --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/cloud-marketplace.md @@ -0,0 +1,8 @@ +--- +title: 云市场集成 +weight: 6 +--- + +Rancher 提供与云市场的集成,让你能轻松购买云提供商上的安装支持。此外,该集成还支持生成 supportconfig bundle,你可以将该 bundle 提供给 Rancher。 + +从 Rancher 2.6.7 开始,此集成仅支持 AWS。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/cluster-configuration.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/cluster-configuration.md new file mode 100644 index 00000000000..1a06704a31a --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/cluster-configuration.md @@ -0,0 +1,30 @@ +--- +title: 集群配置 +weight: 2025 +--- + +使用 Rancher 配置 Kubernetes 集群后,你仍然可以编辑集群的选项和设置。 + +有关编辑集群成员资格的信息,请转至[此页面](../how-to-guides/advanced-user-guides/manage-clusters/access-clusters/add-users-to-clusters.md)。 + +### 集群配置参考 + +集群配置选项取决于 Kubernetes 集群的类型: + +- [RKE 集群配置](../reference-guides/cluster-configuration/rancher-server-configuration/rke1-cluster-configuration.md) +- [RKE2 集群配置](../reference-guides/cluster-configuration/rancher-server-configuration/rke2-cluster-configuration.md) +- [K3s 集群配置](../reference-guides/cluster-configuration/rancher-server-configuration/k3s-cluster-configuration.md) +- [EKS 集群配置](../reference-guides/cluster-configuration/rancher-server-configuration/eks-cluster-configuration.md) +- [GKE 集群配置](gke-cluster-configuration.md) +- [AKS 集群配置](../reference-guides/cluster-configuration/rancher-server-configuration/aks-cluster-configuration.md) + +### 不同类型集群的管理功能 + +对于已有集群而言,可提供的选项和设置取决于你配置集群的方法。 + +下表总结了每一种类型的集群和对应的可编辑的选项和设置: + +import ClusterCapabilitiesTable from '../shared-files/_cluster-capabilities-table.md'; + + + diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/configuration-options.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/configuration-options.md new file mode 100644 index 00000000000..fb6e61cea95 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/configuration-options.md @@ -0,0 +1,40 @@ +--- +title: 配置选项 +weight: 3 +--- + +### Egress 支持 + +默认情况下,Egress 网关是禁用的,但你可以在安装或升级时使用 values.yaml 或[覆盖文件](#覆盖文件)启用它。 + +### 启用自动 Sidecar 注入 + +默认情况下,自动 sidecar 注入是禁用的。要启用此功能,请在安装或升级时在 values.yaml 中设置 `sidecarInjectorWebhook.enableNamespacesByDefault=true`。这会自动将 Istio sidecar 注入到所有已部署的新命名空间。 + +### 覆盖文件 + +覆盖文件用于为 Istio 进行更广泛的配置。它允许你更改 [IstioOperator API](https://istio.io/latest/docs/reference/config/istio.operator.v1alpha1/) 中可用的任何值。你可以自定义默认安装以满足你的需求。 + +覆盖文件将在 Istio Chart 默认安装的基础上添加配置。换言之,你不需要为安装中已定义的组件进行重新定义。 + +有关覆盖文件的更多信息,请参阅 [Istio 文档](https://istio.io/latest/docs/setup/install/istioctl/#configure-component-settings)。 + +### 选择器和抓取配置 + +Monitoring 应用设置了 `prometheus.prometheusSpec.ignoreNamespaceSelectors=false`,即在默认情况下跨所有命名空间进行监控。这样,你可以查看部署在具有 `istio-injection=enabled` 标签的命名空间中的资源的流量、指标和图。 + +如果你想将 Prometheus 限制为特定的命名空间,请设置 `prometheus.prometheusSpec.ignoreNamespaceSelectors=true`。完成此操作后,你需要添加其他配置来继续监控你的资源。 + +详情请参阅[本节](../explanations/integrations-in-rancher/istio/configuration-options/selectors-and-scrape-configurations.md)。 + +### 在具有 Pod 安全策略的情况下启用 Istio + +详情请参阅[本节](../explanations/integrations-in-rancher/istio/configuration-options/pod-security-policies.md)。 + +### 在 RKE2 集群上安装 Istio 的其他步骤 + +详情请参阅[本节](../explanations/integrations-in-rancher/istio/configuration-options/install-istio-on-rke2-cluster.md)。 + +### 项目网络隔离的其他步骤 + +详情请参阅[本节](../explanations/integrations-in-rancher/istio/configuration-options/project-network-isolation.md)。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/configure-microsoft-ad-federation-service-saml.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/configure-microsoft-ad-federation-service-saml.md new file mode 100644 index 00000000000..0d8f2826a29 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/configure-microsoft-ad-federation-service-saml.md @@ -0,0 +1,39 @@ +--- +title: 配置 Microsoft AD FS (SAML) +weight: 1205 +--- + +如果你的组织使用 Microsoft 联合身份验证服务 (AD FS) 进行用户身份验证,你可以通过配置 Rancher 来允许用户使用 AD FS 凭证登录。 + +## 先决条件 + +已安装 Rancher。 + +- 获取你的 Rancher Server URL。配置 AD FS 时,请使用该 URL 替换 `` 占位符。 +- 你的 Rancher 必须具有全局管理员账号。 + +你必须配置 [Microsoft AD FS 服务器](https://docs.microsoft.com/en-us/windows-server/identity/active-directory-federation-services)。 + +- 获取你的 AD FS 服务器 IP/DNS 名称。配置 AD FS 时,请使用该 IP/DNS 名称替换 `` 占位符。 +- 你必须有在 AD FS 服务器上添加 [Relying Party Trusts](https://docs.microsoft.com/en-us/windows-server/identity/ad-fs/operations/create-a-relying-party-trust) 的权限。 + +## 配置概要 + +要让 Rancher Server 使用 Microsoft AD FS,你需要在 Active Directory 服务器上配置 AD FS,并将 Rancher 配置为使用 AD FS 服务器。如果需要获取在 Rancher 中设置 Microsoft AD FS 身份验证的指南,请参见: + +- [1. 在 Microsoft AD FS 中配置 Rancher](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/configure-microsoft-ad-federation-service-saml/configure-ms-adfs-for-rancher.md) +- [2. 在 Rancher 中配置 Microsoft AD FS](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/configure-microsoft-ad-federation-service-saml/configure-rancher-for-ms-adfs.md) + +:::note SAML 身份提供商注意事项 + +- SAML 协议不支持搜索或查找用户或组。因此,将用户或组添加到 Rancher 时不会对其进行验证。 +- 添加用户时,必须正确输入确切的用户 ID(即 `UID` 字段)。键入用户 ID 时,将不会搜索可能匹配的其他用户 ID。 +- 添加组时,必须从文本框旁边的下拉列表中选择组。Rancher 假定来自文本框的任何输入都是用户。 +- 用户组下拉列表仅显示你所属的用户组。如果你不是某个组的成员,你将无法添加该组。 + +::: + + +### 后续操作 + +[在 Microsoft AD FS 中配置 Rancher](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/configure-microsoft-ad-federation-service-saml/configure-ms-adfs-for-rancher.md) diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/configure-openldap.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/configure-openldap.md new file mode 100644 index 00000000000..0cbbda08bf9 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/configure-openldap.md @@ -0,0 +1,53 @@ +--- +title: 配置 OpenLDAP +weight: 1113 +--- + +如果你的组织使用 LDAP 进行用户身份验证,则可以配置 Rancher 与 OpenLDAP 服务器通信,从而对用户进行身份验证。这使 Rancher 管理员可以对外部用户系统中的用户和组进行集群和项目的访问控制,同时允许最终用户在登录 Rancher UI 时使用 LDAP 凭证进行身份验证。 + +## 先决条件 + +必须为 Rancher 配置 LDAP 绑定账号(即 ServiceAccount),来搜索和检索应该具有访问权限的用户和组的 LDAP 条目。建议不要使用管理员账号或个人账号,而应在 OpenLDAP 中创建一个专用账号,该账号对配置的搜索库下的用户和组需要具有只读权限(参见下文)。 + +> **使用 TLS?** +> +> 如果 OpenLDAP 服务器使用的证书是自签名的或不是来自认可的证书颁发机构,请确保手头有 PEM 格式的 CA 证书(包含所有中间证书)。你必须在配置期间粘贴此证书,以便 Rancher 能够验证证书链。 + +## 在 Rancher 中配置 OpenLDAP + +配置 OpenLDAP 服务器,组和用户的设置。有关填写每个字段的帮助,请参见[配置参考](../reference-guides/configure-openldap/openldap-config-reference.md)。 + +> 在开始之前,请熟悉[外部身份验证配置和主体用户](about-authentication.md#外部身份验证配置和用户主体)的概念。 + +1. 在左上角,单击 **☰ > 用户 & 认证**。 +1. 在左侧导航栏,单击**认证**。 +1. 单击 **OpenLDAP**。填写**配置 OpenLDAP 服务器**表单。 +1. 点击**启用**。 + +### 测试身份验证 + +完成配置后,请测试与 OpenLDAP 服务器的连接。如果测试成功,则表明 OpenLDAP 身份验证已启用。 + +:::note + +与此步骤中输入的凭证相关的 OpenLDAP 用户将映射到本地主体账号,并在 Rancher 中分配系统管理员权限。因此,你应该决定使用哪个 OpenLDAP 账号来执行此步骤。 + +::: + +1. 输入应映射到本地主体账号的 OpenLDAP 账号的**用户名**和**密码** 。 +2. 点击**启用 OpenLDAP 认证**来测试 OpenLDAP 的连接并完成设置。 + +**结果**: + +- OpenLDAP 验证配置成功。 +- 与输入凭证对应的 LDAP 用户被映射到本地主体(管理员)账号。 + +:::note + +如果 LDAP 服务中断,你仍然可以使用本地配置的 `admin` 账号和密码登录。 + +::: + +## 附录:故障排除 + +如果在测试与 OpenLDAP 服务器的连接时遇到问题,请首先仔细检查为 ServiceAccount 输入的凭证以及搜索库配置。你还可以检查 Rancher 日志来查明问题的原因。调试日志可能包含有关错误的更详细信息。详情请参见[如何启用调试日志](../faq/technical-items.md#如何启用调试日志记录?)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/configure-shibboleth-saml.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/configure-shibboleth-saml.md new file mode 100644 index 00000000000..67151f1a670 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/configure-shibboleth-saml.md @@ -0,0 +1,102 @@ +--- +title: 配置 Shibboleth (SAML) +weight: 1210 +--- + +如果你的组织使用 Shibboleth Identity Provider (IdP)) 进行用户身份验证,你可以通过配置 Rancher 来允许用户使用 Shibboleth 凭证登录。 + +在此配置中,当 Rancher 用户登录时,他们将被重定向到 Shibboleth IdP 来输入凭证。身份验证结束后,他们将被重定向回 Rancher UI。 + +如果你将 OpenLDAP 配置为 Shibboleth 的后端,SAML 断言会返回到 Rancher,其中包括用于引用组的用户属性。然后,通过身份验证的用户将能够访问其所在的组有权访问的 Rancher 资源。 + +> 本节假定你已了解 Rancher,Shibboleth 和 OpenLDAP 是如何协同工作的。有关工作原理的详细说明,请参见[本页](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/configure-shibboleth-saml/about-group-permissions.md)。 + + +# 在 Rancher 中设置 Shibboleth + +### Shibboleth 先决条件 +> +> - 你必须配置了 Shibboleth IdP 服务器。 +> - 以下是 Rancher Service Provider 配置所需的 URL: +> 元数据 URL:`https:///v1-saml/shibboleth/saml/metadata` +> 断言使用者服务 (ACS) URL:`https:///v1-saml/shibboleth/saml/acs` +> - 从 IdP 服务器导出 `metadata.xml` 文件。详情请参见 [Shibboleth 文档](https://wiki.shibboleth.net/confluence/display/SP3/Home)。 + +### 在 Rancher 中配置 Shibboleth + +如果你的组织使用 Shibboleth 进行用户身份验证,你可以通过配置 Rancher 来允许你的用户使用 IdP 凭证登录。 + +1. 在左上角,单击 **☰ > 用户 & 认证**。 +1. 在左侧导航栏,单击**认证**。 +1. 单击 **Shibboleth**。 +1. 填写**配置 Shibboleth 账号**表单。Shibboleth IdP 允许你指定要使用的数据存储。你可以添加数据库或使用现有的 ldap 服务器。例如,如果你选择 Active Directory (AD) 服务器,下面的示例将描述如何将 AD 属性映射到 Rancher 中的字段: + + 1. **显示名称字段**:包含用户显示名称的 AD 属性(例如:`displayName`)。 + + 1. **用户名字段**:包含用户名/给定名称的 AD 属性(例如:`givenName`)。 + + 1. **UID 字段**:每个用户唯一的 AD 属性(例如:`sAMAccountName`、`distinguishedName`)。 + + 1. **用户组字段**: 创建用于管理组成员关系的条目(例如:`memberOf`)。 + + 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` 文件。 + + +1. 完成**配置 Shibboleth 账号**表单后,单击**启用**。 + + Rancher 会将你重定向到 IdP 登录页面。输入使用 Shibboleth IdP 进行身份验证的凭证,来验证你的 Rancher Shibboleth 配置。 + + :::note + + 你可能需要禁用弹出窗口阻止程序才能看到 IdP 登录页面。 + + ::: + +**结果**:已将 Rancher 配置为使用 Shibboleth。你的用户现在可以使用 Shibboleth 登录名登录 Rancher。 + +### SAML 提供商注意事项 + +SAML 协议不支持用户或用户组的搜索或查找。因此,如果你没有为 Shibboleth 配置 OpenLDAP,则请留意以下警告。 + +- 在 Rancher 中为用户或组分配权限时,不会对用户或组进行验证。 +- 添加用户时,必须正确输入准确的用户 ID(即 UID 字段)。在你输入用户 ID 时,将不会搜索可能匹配的其他用户 ID。 +- 添加组时,必须从文本框旁边的下拉列表中选择组。Rancher 假定来自文本框的任何输入都是用户。 +- 用户组下拉列表仅显示你所属的用户组。如果你不是某个组的成员,你将无法添加该组。 + +要在 Rancher 中分配权限时启用搜索组,你需要为支持组的 SAML 身份验证提供商配置后端(例如 OpenLDAP)。 + +# 在 Rancher 中设置 OpenLDAP + +如果你将 OpenLDAP 配置为 Shibboleth 的后端,SAML 断言会返回到 Rancher,其中包括用于引用组的用户属性。然后,通过身份验证的用户将能够访问其所在的组有权访问的 Rancher 资源。 + +### OpenLDAP 先决条件 + +必须为 Rancher 配置 LDAP 绑定账号(即 ServiceAccount),来搜索和检索应该具有访问权限的用户和组的 LDAP 条目。建议不要使用管理员账号或个人账号,而应在 OpenLDAP 中创建一个专用账号,该账号对配置的搜索库下的用户和组需要具有只读权限(参见下文)。 + +> **使用 TLS?** +> +> 如果 OpenLDAP 服务器使用的证书是自签名的或不是来自认可的证书颁发机构,请确保手头有 PEM 格式的 CA 证书(包含所有中间证书)。你必须在配置期间粘贴此证书,以便 Rancher 能够验证证书链。 + +### 在 Rancher 中配置 OpenLDAP + +配置 OpenLDAP 服务器,组和用户的设置。有关填写每个字段的帮助,请参见[配置参考](../reference-guides/configure-openldap/openldap-config-reference.md)。请注意,嵌套组成员资格不适用于 Shibboleth。 + +> 在开始之前,请熟悉[外部身份验证配置和主体用户](about-authentication.md#外部身份验证配置和用户主体)的概念。 + +1. 使用初始的本地 `admin` 账号登录到 Rancher UI。 +1. 在左上角,单击 **☰ > 用户 & 认证**。 +1. 在左侧导航栏,单击**认证**。 +1. 单击 **OpenLDAP**。将显示**配置 OpenLDAP 服务器**表单。 + +# 故障排除 + +如果在测试与 OpenLDAP 服务器的连接时遇到问题,请首先仔细检查为 ServiceAccount 输入的凭证以及搜索库配置。你还可以检查 Rancher 日志来查明问题的原因。调试日志可能包含有关错误的更详细信息。详情请参见[如何启用调试日志](../faq/technical-items.md#如何启用调试日志记录?)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/create-kubernetes-persistent-storage.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/create-kubernetes-persistent-storage.md new file mode 100644 index 00000000000..59b4c31cdda --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/create-kubernetes-persistent-storage.md @@ -0,0 +1,74 @@ +--- +title: "Kubernetes 持久存储:卷和存储类" +description: "了解在 Kubernetes 中创建持久存储的两种方式:持久卷和存储类" +weight: 2031 +--- +在部署需要保​​留数据的应用时,你需要创建持久存储。持久存储允许你在运行应用的 pod 之外存储应用数据。即使运行应用的 pod 发生故障,这种存储方式也能让你保留应用数据。 + +本文假设你已了解 Kubernetes 的持久卷、持久卷声明和存储类的概念。如需更多信息,请参阅[存储的工作原理](../how-to-guides/advanced-user-guides/manage-clusters/create-kubernetes-persistent-storage/manage-persistent-storage/about-persistent-storage.md)。 + +### 先决条件 + +设置持久存储需要`管理卷`的[角色](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/cluster-and-project-roles.md#项目角色参考)。 + +如果你要为云集群配置存储,则存储和集群主机必须使用相同的云提供商。 + +要使用 Rancher 配置新存储,则必须启用云提供商。有关启用云提供商的详细信息,请参阅[此页面](set-up-cloud-providers.md)。 + +如果要将现有的持久存储连接到集群,则不需要启用云提供商。 + +### 设置现有存储 + +设置现有存储的总体流程如下: + +1. 设置你的持久存储。可以是云存储或你自己的存储。 +2. 添加引用持久存储的持久卷 (PV)。 +3. 添加引用 PV 的持久卷声明 (PVC)。 +4. 将 PVC 挂载为工作负载中的卷。 + +有关详细信息和先决条件,请参阅[此页面](../how-to-guides/advanced-user-guides/manage-clusters/create-kubernetes-persistent-storage/manage-persistent-storage/set-up-existing-storage.md)。 + +### 在 Rancher 中动态配置新存储 + +配置新存储的总体流程如下: + +1. 添加一个 StorageClass 并将它配置为使用你的存储提供商。StorageClass 可以引用云存储或你自己的存储。 +2. 添加引用存储类的持久卷声明 (PVC)。 +3. 将 PVC 挂载为工作负载的卷。 + +有关详细信息和先决条件,请参阅[此页面](../how-to-guides/advanced-user-guides/manage-clusters/create-kubernetes-persistent-storage/manage-persistent-storage/dynamically-provision-new-storage.md)。 + +### Longhorn 存储 + +[Longhorn](https://longhorn.io/) 是一个轻量级、可靠、易用的 Kubernetes 分布式块存储系统。 + +Longhorn 是免费的开源软件。Longhorn 最初由 Rancher Labs 开发,现在正在作为云原生计算基金会的沙盒项目进行开发。它可以通过 Helm、kubectl 或 Rancher UI 安装在任何 Kubernetes 集群上。 + +如果你有块存储池,Longhorn 可以帮助你为 Kubernetes 集群提供持久存储,而无需依赖云提供商。有关 Longhorn 功能的更多信息,请参阅[文档](https://longhorn.io/docs/latest/what-is-longhorn/)。 + +Rancher v2.5 简化了在 Rancher 管理的集群上安装 Longhorn 的过程。详情请参见[本页面](../explanations/integrations-in-rancher/longhorn.md)。 + +### 配置存储示例 + +我们提供了如何使用 [NFS、](../how-to-guides/advanced-user-guides/manage-clusters/create-kubernetes-persistent-storage/provisioning-storage-examples/nfs-storage.md) [vSphere](../how-to-guides/advanced-user-guides/manage-clusters/create-kubernetes-persistent-storage/provisioning-storage-examples/vsphere-storage.md) 和 [Amazon EBS](../how-to-guides/advanced-user-guides/manage-clusters/create-kubernetes-persistent-storage/provisioning-storage-examples/persistent-storage-in-amazon-ebs.md) 来配置存储的示例。 + +### GlusterFS 卷 + +在将数据存储在 GlusterFS 卷上的集群中,你可能会遇到重启 `kubelet` 后 pod 无法挂载卷的问题。有关避免此情况发生的详细信息,请参阅[此页面](../how-to-guides/advanced-user-guides/manage-clusters/create-kubernetes-persistent-storage/manage-persistent-storage/about-glusterfs-volumes.md)。 + +### iSCSI 卷 + +在将数据存储在 iSCSI 卷上的 [Rancher 启动的 Kubernetes 集群](launch-kubernetes-with-rancher.md)中,你可能会遇到 kubelet 无法自动连接 iSCSI 卷的问题。有关解决此问题的详细信息,请参阅[此页面](../how-to-guides/advanced-user-guides/manage-clusters/create-kubernetes-persistent-storage/manage-persistent-storage/install-iscsi-volumes.md)。 + +### hostPath 卷 +在创建 hostPath 卷之前,你需要在集群配置中设置 [extra_bind](https://rancher.com/docs/rke/latest/en/config-options/services/services-extras/#extra-binds/)。这会将路径作为卷安装在你的 kubelet 中,可用于工作负载中的 hostPath 卷。 + +### 将 vSphere Cloud Provider 从树内迁移到树外 + +Kubernetes 正在逐渐不在树内维护云提供商。vSphere 有一个树外云提供商,可通过安装 vSphere 云提供商和云存储插件来使用。 + +有关如何从树内 vSphere 云提供商迁移到树外,以及如何在迁移后管理现有虚拟机,请参阅[此页面](../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/set-up-cloud-providers/vsphere/configure-out-of-tree-vsphere.md)。 + +### 相关链接 + +- [Kubernetes 文档:存储](https://kubernetes.io/docs/concepts/storage/) diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/custom-resource-configuration.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/custom-resource-configuration.md new file mode 100644 index 00000000000..85e06fc2c90 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/custom-resource-configuration.md @@ -0,0 +1,9 @@ +--- +title: 自定义资源配置 +weight: 5 +--- + +以下自定义资源定义(Custom Resource Definition,CRD)用于配置 Logging: + +- [Flow 和 ClusterFlow](../explanations/integrations-in-rancher/logging/custom-resource-configuration/flows-and-clusterflows.md) +- [Output 和 ClusterOutput](../explanations/integrations-in-rancher/logging/custom-resource-configuration/outputs-and-clusteroutputs.md) \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/deploy-apps-across-clusters.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/deploy-apps-across-clusters.md new file mode 100644 index 00000000000..e5e0a00df5d --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/deploy-apps-across-clusters.md @@ -0,0 +1,15 @@ +--- +title: 跨集群部署应用 +weight: 12 +--- +### Fleet + +Rancher 2.5 引入了 Fleet,这是一种跨集群部署应用的新方式。 + +Fleet 是大规模的 GitOps。如需更多信息,请参阅 [Fleet](../how-to-guides/new-user-guides/deploy-apps-across-clusters/fleet.md)。 + +### 多集群应用 + +在 2.5 之前的 Rancher 版本中,多集群应用功能用于跨集群部署应用。我们已弃用多集群应用功能,但你仍然可以在 Rancher 2.5 中使用该功能。 + +详情请参阅[此文档](../how-to-guides/new-user-guides/deploy-apps-across-clusters/multi-cluster-apps.md)。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/deploy-rancher-manager.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/deploy-rancher-manager.md new file mode 100644 index 00000000000..9123cece7c6 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/deploy-rancher-manager.md @@ -0,0 +1,21 @@ +--- +title: 部署 Rancher Server +weight: 100 +--- + +你可使用以下指南之一,在你选择的提供商中部署和配置 Rancher 和 Kubernetes 集群。 + +- [AWS](../getting-started/quick-start-guides/deploy-rancher-manager/aws.md)(使用 Terraform) +- [AWS Marketplace](../getting-started/quick-start-guides/deploy-rancher-manager/aws-marketplace.md)(使用 Amazon EKS) +- [Azure](../getting-started/quick-start-guides/deploy-rancher-manager/azure.md)(使用 Terraform) +- [DigitalOcean](../getting-started/quick-start-guides/deploy-rancher-manager/digitalocean.md)(使用 Terraform) +- [GCP](../getting-started/quick-start-guides/deploy-rancher-manager/gcp.md)(使用 Terraform) +- [Hetzner Cloud](../getting-started/quick-start-guides/deploy-rancher-manager/hetzner-cloud.md)(使用 Terraform) +- [Vagrant](../getting-started/quick-start-guides/deploy-rancher-manager/vagrant.md) +- [Equinix Metal](../getting-started/quick-start-guides/deploy-rancher-manager/equinix-metal.md) +- [Outscale](../getting-started/quick-start-guides/deploy-rancher-manager/outscale-qs.md)(使用 Terraform) + + +如有需要,你可以查看以下指南以了解分步步骤。如果你需要在其他提供商中或本地运行 Rancher,或者你只是想看看它是多么容易上手,你可阅读以下指南。 + +- [手动安装](../getting-started/quick-start-guides/deploy-rancher-manager/helm-cli.md) diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/deploy-rancher-workloads.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/deploy-rancher-workloads.md new file mode 100644 index 00000000000..6750c06ed2a --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/deploy-rancher-workloads.md @@ -0,0 +1,9 @@ +--- +title: 部署工作负载 +weight: 200 +--- + +这些指南指导你完成一个应用的部署,包括如何将应用暴露在集群之外使用。 + +- [部署带有 Ingress 的工作负载](../getting-started/quick-start-guides/deploy-workloads/workload-ingress.md) +- [部署带有 NodePort 的工作负载](../getting-started/quick-start-guides/deploy-workloads/nodeports.md) diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/downstream-cluster-configuration.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/downstream-cluster-configuration.md new file mode 100644 index 00000000000..3d09efe4a8e --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/downstream-cluster-configuration.md @@ -0,0 +1,5 @@ +--- +title: 下游集群配置 +--- + +以下文档将讨论[节点模板配置](./node-template-configuration.md)和[主机配置](./machine-configuration.md)。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/enable-experimental-features.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/enable-experimental-features.md new file mode 100644 index 00000000000..ded10bb0ec4 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/enable-experimental-features.md @@ -0,0 +1,123 @@ +--- +title: 启用实验功能 +weight: 17 +--- +Rancher 包含一些默认关闭的实验功能。在某些情况下,例如当你认为使用[不支持的存储类型](../getting-started/installation-and-upgrade/advanced-options/enable-experimental-features/unsupported-storage-drivers.md)的好处大于使用未经测试的功能的风险时,你可能想要启用实验功能。为了让你能够试用这些默认关闭的功能,我们引入了功能开关(feature flag)。 + +实验功能可以通过以下三种方式启用: + +- [使用 CLI](#启动-rancher-时启用功能):在使用 CLI 安装 Rancher 时,使用功能开关默认启用某个功能。 +- [使用 Rancher UI](#使用-rancher-ui-启用功能):在**设置**页面启用功能。 +- [使用 Rancher API](#使用-rancher-api-启用功能):安装 Rancher 后启用功能。 + +每个功能均有以下两个值: + +- 默认值:可以通过在命令行使用标志或环境变量进行配置。 +- 设置值:可以通过 Rancher API 或 UI 进行配置。 + +如果没有设置值,Rancher 会使用默认值。 + +设置值是通过 API 设置的,而默认值是通过命令行设置。因此,如果你使用 API 或 UI 启用或禁用某个功能,命令行中设置的值将被覆盖。 + +如果你安装 Rancher 后使用 Rancher API 将功能开关设置为 true,然后在使用命令升级 Rancher 时将功能开关设置为 false,在这种情况下,虽然默认值会是 false,但是该功能依然会被启用,因为它是通过 API 设置的。如果你随后使用 Rancher API 删除设置值(true)并将它设置为 NULL,则默认值(false)将生效。有关详细信息,请参阅[功能开关页面](../reference-guides/installation-references/feature-flags.md)。 + +# 启动 Rancher 时启用功能 + +安装 Rancher 时,使用功能开关启用你所需的功能。通过单节点容器安装 Rancher,和在 Kubernetes 集群上安装 Rancher 对应的命令有所不同。 + +### Kubernetes 安装的情况下启用功能 + +:::note + +通过 Rancher API 设置的值会覆盖命令行传入的值。 + +::: + +使用 Helm Chart 安装 Rancher 时,使用 `--set` 选项。下面的示例通过传递功能开关名称(用逗号分隔)来启用两个功能: + +``` +helm install rancher rancher-latest/rancher \ + --namespace cattle-system \ + --set hostname=rancher.my.org \ + --set 'extraEnv[0].name=CATTLE_FEATURES' + --set 'extraEnv[0].value==true,=true' +``` + +:::note + +如果你安装的是 alpha 版本,Helm 要求你在命令中添加 `--devel` 选项。 + +::: + +### 离线安装的情况下渲染 Helm Chart + +如果你是在离线环境安装 Rancher 的,在使用 Helm 安装 Rancher 之前,你需要添加一个 Helm Chart 仓库并渲染一个 Helm 模板。详情请参见[离线安装文档](../getting-started/installation-and-upgrade/other-installation-methods/air-gapped-helm-cli-install/install-rancher-ha.md)。 + +以下是在渲染 Helm 模板时传入功能开关名称的命令示例。下面的示例通过传递功能开关名称(用逗号分隔)来启用两个功能。 + +Helm 命令如下: + +``` +helm template rancher ./rancher-.tgz --output-dir . \ + --no-hooks \ # 避免生成 Helm 钩子文件 + --namespace cattle-system \ + --set hostname= \ + --set rancherImage=/rancher/rancher \ + --set ingress.tls.source=secret \ + --set systemDefaultRegistry= \ # 设置在 Rancher 中使用的默认私有镜像仓库 + --set useBundledSystemChart=true # 使用打包的 Rancher System Chart + --set 'extraEnv[0].name=CATTLE_FEATURES' + --set 'extraEnv[0].value==true,=true' +``` + +### Docker 安装的情况下启用功能 + +如果 Rancher 是使用 Docker 安装的,请使用 `--features` 选项。下面的示例通过传递功能开关名称(用逗号分隔)来启用两个功能: + +``` +docker run -d -p 80:80 -p 443:443 \ + --restart=unless-stopped \ + rancher/rancher:rancher-latest \ + --features==true,=true +``` + + +# 使用 Rancher UI 启用功能 + +1. 在左上角,单击 **☰ > 全局设置**。 +1. 单击**功能开关**。 +1. 如需启用某个功能,找到该已禁用的功能,并点击**⋮ > 激活**。 + +**结果**:该功能已启用。 + +### 使用 Rancher UI 禁用功能 + +1. 在左上角,单击 **☰ > 全局设置**。 +1. 单击**功能开关**。你将看到实验功能列表。 +1. 如需禁用某个功能,找到该已启用的功能,并点击**⋮ > 停用**。 + +**结果**:该功能已禁用。 + +# 使用 Rancher API 启用功能 + +1. 前往 `/v3/features`。 +1. 在 `data` 中,你会看到一个数组,该数组包含所有能通过功能开关启用的功能。功能的名称在 `id` 字段中。单击要启用的功能的名称。 +1. 在左上角的 **Operations** 下,点击 **Edit**。 +1. 在 **Value** 下拉菜单中,单击 **True**。 +1. 单击 **Show Request**。 +1. 单击 **Send Request**。 +1. 点击 **Close**。 + +**结果**:该功能已启用。 + +### 使用 Rancher API 禁用功能 + +1. 前往 `/v3/features`。 +1. 在 `data` 中,你会看到一个数组,该数组包含所有能通过功能开关启用的功能。功能的名称在 `id` 字段中。单击要启用的功能的名称。 +1. 在左上角的 **Operations** 下,点击 **Edit**。 +1. 在 **Value** 下拉菜单中,单击 **False**。 +1. 单击 **Show Request**。 +1. 单击 **Send Request**。 +1. 点击 **Close**。 + +**结果**:该功能已禁用。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/fleet-gitops-at-scale.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/fleet-gitops-at-scale.md new file mode 100644 index 00000000000..fcc32cc5723 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/fleet-gitops-at-scale.md @@ -0,0 +1,64 @@ +--- +title: Fleet - 大规模的 GitOps +--- + +Fleet 是大规模的 GitOps。你可以使用 Fleet 管理多达一百万个集群。此外,它非常轻量,因此也非常适用于[单个集群](https://fleet.rancher.io/single-cluster-install/)。但是,它在[大规模](https://fleet.rancher.io/multi-cluster-install/)场景下的功能更加强大。大规模指的是大量集群、大量部署或大量团队。 + +Fleet 是一个独立于 Rancher 的项目,你可以使用 Helm 将它安装在任何 Kubernetes 集群上。 + + +## 架构 + +有关 Fleet 工作原理的信息,请参阅[此处](../explanations/integrations-in-rancher/fleet-gitops-at-scale/architecture.md)。 + +## 在 Rancher UI 中访问 Fleet + +Fleet 预装在 Rancher 中,可以通过 Rancher UI 中的**持续交付**选项进行管理。有关持续交付和 Fleet 故障排除技巧的更多信息,请参阅[此处](https://fleet.rancher.io/troubleshooting/)。 + +用户可以通过遵循 **gitops** 的实践,利用持续交付将应用部署到 git 仓库中的 Kubernetes 集群,而无需任何手动操作。 + +按照以下步骤在 Rancher UI 中访问持续交付: + +1. 单击 **☰ > 持续交付**。 + +1. 在菜单顶部选择你的命名空间,注意以下几点: + + - 默认情况下会选中 **fleet-default**,其中包括注册到 Rancher 的所有下游集群。 + + - 你可以切换到仅包含 **local** 集群的 **fleet-local**,或者创建自己的工作空间,并将集群分配和移动到该工作空间。 + + - 然后,你可以单击左侧导航栏上的**集群**来管理集群。 + +1. 单击左侧导航栏上的 **Git 仓库**将 git 仓库部署到当前工作空间中的集群中。 + +1. 选择你的 [git 仓库](https://fleet.rancher.io/gitrepo-add/)和[目标集群/集群组](https://fleet.rancher.io/gitrepo-structure/)。你还可以单击左侧导航栏中的**集群组**在 UI 中创建集群组。 + +1. 部署 git 仓库后,你可以通过 Rancher UI 监控应用。 + +## Windows 支持 + +有关对具有 Windows 节点的集群的支持,请参阅[此页面](../explanations/integrations-in-rancher/fleet-gitops-at-scale/windows-support.md)。 + +## GitHub 仓库 + +你可以单击此处获取 [Fleet Helm Chart](https://github.com/rancher/fleet/releases/tag/v0.3.10)。 + +## 在代理后使用 Fleet + +有关在代理后使用 Fleet 的详细信息,请参阅[此页面](../explanations/integrations-in-rancher/fleet-gitops-at-scale/use-fleet-behind-a-proxy.md)。 + +## Helm Chart 依赖 + +由于用户需要完成依赖列表,因此为了成功部署具有依赖项的 Helm Chart,你必须手动运行命令(如下所列)。如果你不这样做,并继续克隆仓库并运行 `helm install`,由于依赖项将丢失,因此你的安装将失败。 + +git 仓库中的 Helm Chart 必须在 Chart 子目录中包含其依赖项。你必须手动运行 `helm dependencies update $chart`,或在本地运行 `helm dependencies build $chart`,然后将完整的 Chart 目录提交到你的 git 仓库。请注意,你需要使用适当的参数来修改命令。 + +## 故障排除 + +- **已知问题**:Fleet git 仓库的 clientSecretName 和 helmSecretName 密文不包含在由 [backup-restore-operator](../how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/back-up-rancher#1-安装-rancher-backup-operator) 创建的备份或恢复中。如果我们有了永久的解决方案,我们将通知社区。 + +- **临时解决方法**:默认情况下,用户定义的密文不会在 Fleet 中备份。如果执行灾难恢复或将 Rancher 迁移到新集群,则需要重新创建密文。要修改 resourceSet 以包含需要备份的其他资源,请参阅[此文档](https://github.com/rancher/backup-restore-operator#user-flow)。 + +## 文档 + +Fleet 文档链接:https://fleet.rancher.io/ \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/gke-cluster-configuration.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/gke-cluster-configuration.md new file mode 100644 index 00000000000..5853b741cd2 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/gke-cluster-configuration.md @@ -0,0 +1,323 @@ +--- +title: GKE 集群配置参考 +shortTitle: GKE 集群配置 +weight: 3 +--- + +## Rancher 2.6 变更 + +- 支持额外的配置选项: + - 项目网络隔离 + - 网络标签 + +## 集群位置 + +| 值 | 描述 | +|--------|--------------| +| 位置类型 | 地区 (zone) 或区域 (region)。借助 GKE,你可以根据工作负载的可用性要求和预算创建一个量身定制的集群。默认情况下,集群的节点在单个计算区域中运行。选择多个区域时,集群的节点将跨越多个计算区域,而 controlplane 则只位于单个区域中。区域集群也增加了 controlplane 的可用性。有关选择集群可用性类型的帮助,请参阅[这些文档](https://cloud.google.com/kubernetes-engine/docs/best-practices/scalability#choosing_a_regional_or_zonal_control_plane)。 | +| 地区 | 计算引擎中的每个区域都包含多地区。有关可用区域和可用区的更多信息,请参阅[这些文档](https://cloud.google.com/compute/docs/regions-zones#available)。 | +| 其他地区 | 对于地区性集群,你可以选择其他地区来创建[多地区集群](https://cloud.google.com/kubernetes-engine/docs/concepts/types-of-clusters#multi-zonal_clusters)。 | +| 区域 | 对于[区域性集群](https://cloud.google.com/kubernetes-engine/docs/concepts/types-of-clusters#regional_clusters),你可以选择一个区域。有关可用区域和可用区的更多信息,请参阅[本节](https://cloud.google.com/compute/docs/regions-zones#available)。地区名称的前面部分是区域的名称。 | + +## 集群选项 + +### Kubernetes 版本 + +_可变:是_ + +有关 GKE Kubernetes 版本的更多信息,请参阅[这些文档](https://cloud.google.com/kubernetes-engine/versioning)。 + +### 容器地址范围 + +_可变:否_ + +集群中 Pod 的 IP 地址范围。必须是有效的 CIDR 范围,例如 10.42.0.0/16。如果未指定,则会自动从 10.0.0.0/8 中选择一个随机范围,并排除已分配给 VM、其他集群或路由的范围。自动选择的范围可能与预留的 IP 地址、动态路由或与集群对等的 VPC 中的路由发生冲突。 + +### 网络 + +_可变:否_ + +集群连接的 Compute Engine 网络。将使用此网络创建路由和防火墙。如果使用[共享 VPC](https://cloud.google.com/vpc/docs/shared-vpc),与你的项目共享的 VPC 网络将显示在此处。你将可以在此字段中进行选择。有关详细信息,请参阅[此页面](https://cloud.google.com/vpc/docs/vpc#vpc_networks_and_subnets)。 + +### 节点子网/子网 + +_可变:否_ + +集群连接到的 Compute Engine 子网。该子网必须属于**网络**字段中指定的网络。选择一个现有的子网,或选择“自动创建子网”来自动创建一个子网。如果不使用现有网络,则需要使用**子网名称**来生成一个。如果使用[共享 VPC](https://cloud.google.com/vpc/docs/shared-vpc),与你的项目共享的 VPC 子网将显示在此处。如果使用共享 VPC 网络,则无法选择“自动创建子网”。如需更多信息,请参阅[此页面](https://cloud.google.com/vpc/docs/vpc#vpc_networks_and_subnets)。 + +### 子网名称 + +_可变:否_ + +使用提供的名称自动创建子网。如果为**节点子网**或**子网**选择了“自动创建子网”,则为必填。有关子网的更多信息,请参阅[此页面](https://cloud.google.com/vpc/docs/vpc#vpc_networks_and_subnets)。 + +### IP 别名 + +_可变:否_ + +启用[别名 IP](https://cloud.google.com/vpc/docs/alias-ip)。这将启用 VPC 原生流量路由。如果使用[共享 VPC](https://cloud.google.com/vpc/docs/shared-vpc),则为必填。 + +### 网络策略 + +_可变:是_ + +在集群上启用的网络策略。网络策略定义了集群中 pod 和 service 之间可以发生的通信级别。有关详细信息,请参阅[此页面](https://cloud.google.com/kubernetes-engine/docs/how-to/network-policy)。 + +### 项目网络隔离 + +_可变:是_ + +选择启用或禁用项目间通信。请注意,如果启用**项目网络隔离**,则将自动启用**网络策略**和**网络策略配置**,反之则不然。 + +### 节点 IPv4 CIDR 块 + +_可变:否_ + +此集群中实例 IP 的 IP 地址范围。如果为**节点子网**或**子网**选择了“自动创建子网”,则可以进行设置。必须是有效的 CIDR 范围,例如 10.96.0.0/14。有关如何确定 IP 地址范围的详细信息,请参阅[此页面](https://cloud.google.com/kubernetes-engine/docs/concepts/alias-ips#cluster_sizing)。 + +### 集群次要范围名称 + +_可变:否_ + +Pod IP 地址的现有次要范围的名称。如果选中,将自动填充**集群 Pod 地址范围**。如果使用共享 VPC 网络,则为必填。 + +### 集群 Pod 地址范围 + +_可变:否_ + +分配给集群中 pod 的 IP 地址范围。必须是有效的 CIDR 范围,例如 10.96.0.0/11。如果未提供,将自动创建。如果使用共享 VPC 网络,则必须提供。有关如何确定 pod 的 IP 地址范围的更多信息,请参阅[本节](https://cloud.google.com/kubernetes-engine/docs/concepts/alias-ips#cluster_sizing_secondary_range_pods)。 + +### Service 次要范围名称 + +_可变:否_ + +Service IP 地址的现有次要范围的名称。如果选中,将自动填充 **Service 地址范围**。如果使用共享 VPC 网络,则为必填。 + +### Service 地址范围 + +_可变:否_ + +分配给集群中 Service 的地址范围。必须是有效的 CIDR 范围,例如 10.94.0.0/18。如果未提供,将自动创建。如果使用共享 VPC 网络,则必须提供。有关如何确定 Service 的 IP 地址范围的详细信息,请参阅[本节](https://cloud.google.com/kubernetes-engine/docs/concepts/alias-ips#cluster_sizing_secondary_range_svcs)。 + +### 私有集群 + +_可变:否_ + +:::caution + +私有集群需要在 Rancher 之外进行额外的规划和配置。请参阅[私有集群指南](../reference-guides/cluster-configuration/rancher-server-configuration/gke-cluster-configuration/gke-private-clusters.md)。 + +::: + +仅分配节点内部 IP 地址。除非在 GCP 中执行了额外的联网步骤,否则私有集群节点无法访问公共互联网。 + +### 启用私有端点 + +:::caution + +私有集群需要在 Rancher 之外进行额外的规划和配置。请参阅[私有集群指南](../reference-guides/cluster-configuration/rancher-server-configuration/gke-cluster-configuration/gke-private-clusters.md)。 + +::: + +_可变:否_ + +锁定对 controlplane 端点的外部访问。仅当**私有集群**也被选中时可用。如果选中,并且 Rancher 无法直接访问集群所在的虚拟私有云网络,Rancher 将提供在集群上运行的注册命令,以使 Rancher 能够连接到集群。 + +### 主 IPV4 CIDR 块 + +_可变:否_ + +controlplane VPC 的 IP 范围。 + +### 主授权网络 + +_可变:是_ + +启用 controlplane 授权网络,以阻止不受信任的非 GCP 源 IP 通过 HTTPS 访问 Kubernetes master。如果选择,则可以添加额外的授权网络。如果集群是使用公共端点创建的,则此选项可用于将公共端点的访问锁定到特定网络(例如运行 Rancher 服务的网络)。如果集群只有一个私有端点,则需要此设置。 + +# 其他选项 + +### 集群插件 + +其他 Kubernetes 集群组件。有关详细信息,请参阅[此页面](https://cloud.google.com/kubernetes-engine/docs/reference/rest/v1/projects.locations.clusters#Cluster.AddonsConfig)。 + +#### 水平 Pod 自动缩放 + +_可变:是_ + +Horizo​​ntal Pod Autoscaler 通过自动增加或减少 Pod 的数量来调整 Kubernetes 工作负载,从而响应工作负载的 CPU 或内存消耗,以及 Kubernetes 内部报告的自定义指标或集群外部设置的指标。详情请参见[本页面](https://cloud.google.com/kubernetes-engine/docs/concepts/horizontalpodautoscaler)。 + +#### HTTP (L7) 负载均衡 + +_可变:是_ + +HTTP (L7) 负载均衡将 HTTP 和 HTTPS 流量分配到托管在 GKE 上的后端。有关详细信息,请参阅[此页面](https://cloud.google.com/kubernetes-engine/docs/tutorials/http-balancer)。 + +#### 网络策略配置(仅限 master) + +_可变:是_ + +NetworkPolicy 的配置。仅跟踪 master 节点上是否启用了插件,不跟踪是否为节点启用了网络策略。 + +### 集群特征(Alpha 功能) + +_可变:否_ + +打开集群的所有 Kubernetes alpha API 组和功能。启用后,集群无法升级,并且会在 30 天后自动删除。由于 GKE SLA 未支持 alpha 集群,因此不建议将 Alpha 集群用于生产环境。有关详细信息,请参阅[此页面](https://cloud.google.com/kubernetes-engine/docs/concepts/alpha-clusters)。 + +### Logging 服务 + +_可变:是_ + +集群用于写入日志的日志管理服务。要么使用 [Cloud Logging](https://cloud.google.com/logging),要么不使用日志管理服务(不会从集群中导出日志)。 + +### 监控服务 + +_可变:是_ + +集群用于写入指标的监控服务。要么使用 [Cloud Monitoring](https://cloud.google.com/monitoring),要么不使用集群监控服务(不会从集群中导出指标)。 + + +### 维护窗口 + +_可变:是_ + +设置时长 4 小时的维护窗口的开始时间。使用 HH:MM 格式在 UTC 时区中指定时间。有关详细信息,请参阅[此页面](https://cloud.google.com/kubernetes-engine/docs/concepts/maintenance-windows-and-exclusions)。 + +# 节点池 + +在此部分中,输入描述节点池中每个节点的配置的详细信息。 + +### Kubernetes 版本 + +_可变:是_ + +节点池中每个节点的 Kubernetes 版本。有关 GKE Kubernetes 版本的更多信息,请参阅[这些文档](https://cloud.google.com/kubernetes-engine/versioning)。 + +### 镜像类型 + +_可变:是_ + +节点操作系统镜像。有关 GKE 为每个操作系统提供的节点镜像选项,请参阅[此页面](https://cloud.google.com/kubernetes-engine/docs/concepts/node-images#available_node_images)。 + +:::note + +默认选项是 “Container-Optimized OS with Docker”。GCP Container-Optimized OS 上的只读文件系统与 Rancher 中的 [legacy logging](../../versioned_docs/version-2.0-2.4/pages-for-subheaders/cluster-logging.md) 实现不兼容。如果你需要使用旧版日志管理功能,请选择 “Ubuntu with Docker” 或 “Ubuntu with Containerd”。[current logging feature](logging.md) 与 Container-Optimized OS 镜像兼容。 + +::: + +:::note + +如果节点池镜像类型选择 “Windows Long Term Service Channel” 或 “Windows Semi-Annual Channel”,还必须至少添加一个 Container-Optimized OS 或 Ubuntu 节点池。 + +::: + +### 主机类型 + +_可变:否_ + +节点实例可用的虚拟化硬件资源。有关 Google Cloud 主机类型的详细信息,请参阅[此页面](https://cloud.google.com/compute/docs/machine-types#machine_types)。 + +### 根磁盘类型 + +_可变:否_ + +标准永久性磁盘由标准磁盘驱动器 (HDD) 支持,而 SSD 永久性磁盘由固态硬盘 (SSD) 支持。有关详细信息,请参阅[本节](https://cloud.google.com/compute/docs/disks)。 + +### 本地 SSD 磁盘 + +_可变:否_ + +配置每个节点的本地 SSD 磁盘存储(以 GB 为单位)。本地 SSD 物理连接到托管你的 VM 实例的服务器。与标准永久性磁盘或 SSD 永久性磁盘相比,本地 SSD 具有更高的吞吐量和更低的延迟。存储在本地 SSD 上的数据只会保留到实例停止或删除。有关详细信息,请参阅[本节](https://cloud.google.com/compute/docs/disks#localssds)。 + +### 抢占式节点(beta) + +_可变:否_ + +抢占式节点也称为抢占式虚拟机。通常是最长持续 24 小时的 Compute Engine 虚拟机实例,不提供可用性保证。详情请参见[本页面](https://cloud.google.com/kubernetes-engine/docs/how-to/preemptible-vms)。 + +### 污点 + +_可变:否_ + +将污点应用于节点时,仅允许容忍该污点的 Pod 在该节点上运行。在 GKE 集群中,你可以将污点应用到节点池,这会将污点应用到池中的所有节点。 + +### 节点标签 + +_可变:否_ + +你可以将标签应用到节点池,这会将标签应用到池中的所有节点。 + +无效标签会阻止升级,或阻止 Rancher 启动。有关标签语法的详细信息,请参阅 [Kubernetes 文档](https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#syntax-and-character-set)。 + +### 网络标签 + +_可变:否_ + +你可以将网络标签添加到节点池以制定防火墙规则和子网之间的路由。标签将应用于池中的所有节点。 + +有关标签语法和要求的详细信息,请参阅 [Kubernetes 文档](https://cloud.google.com/vpc/docs/add-remove-network-tags)。 + +# 组详细信息 + +在此部分中,输入描述节点池的详细信息。 + +### 名称 + +_可变:否_ + +输入节点池的名称。 + +### 初始节点数 + +_可变:是_ + +节点池中初始节点数的整数。 + +### 每个节点的最大 Pod 数量 + +_可变:否_ + +GKE 的硬性限制是每个节点 110 个 Pod。有关 Kubernetes 限制的更多信息,请参阅[本节](https://cloud.google.com/kubernetes-engine/docs/best-practices/scalability#dimension_limits)。 + +### 自动缩放 + +_可变:是_ + +节点池自动缩放会根据工作负载的需求动态创建或删除节点。详情请参见[本页面](https://cloud.google.com/kubernetes-engine/docs/concepts/cluster-autoscaler)。 + +### 自动修复 + +_可变:是_ + +GKE 的节点自动修复功能可帮助你将集群中的节点保持在健康的运行状态。启用后,GKE 会定期检查集群中每个节点的运行状况。如果某个节点在较长时间段内连续未通过健康检查,GKE 会为该节点启动修复过程。有关详细信息,请参阅[自动修复节点](https://cloud.google.com/kubernetes-engine/docs/how-to/node-auto-repair)。 + +### 自动升级 + +_可变:是_ + +启用后,当你的 controlplane [按照你的需求更新](https://cloud.google.com/kubernetes-engine/upgrades#automatic_cp_upgrades)时,自动升级功能会使集群中的节点与集群 controlplane(master)版本保持同步。有关自动升级节点的更多信息,参见[此页面。](https://cloud.google.com/kubernetes-engine/docs/how-to/node-auto-upgrades) + +### 访问范围 + +_可变:否_ + +设置访问范围是为你的节点指定权限的旧版方法。 + +- **允许默认访问**:新集群的默认访问是 [Compute Engine 默认 ServiceAccount](https://cloud.google.com/compute/docs/access/service-accounts?hl=en_US#default_service_account)。 +- **允许完全访问所有 Cloud API**:通常,你只需设置云平台访问范围来允许完全访问所有 Cloud API,然后仅授予 ServiceAccount 相关的 IAM 角色。授予虚拟机实例的访问范围和授予 ServiceAccount 的 IAM 角色的组合决定了 ServiceAccount 对该实例的访问量。 +- **为每个 API 设置访问权限**:或者,你可以设置服务将调用的特定 API 方法的访问范围。 + +有关详细信息,请参阅[为 VM 启用 ServiceAccount](https://cloud.google.com/compute/docs/access/create-enable-service-accounts-for-instances)。 + + +### 配置刷新间隔 + +刷新间隔可以通过 “gke-refresh” 来配置,它是一个代表秒的整数。 + +默认值为 300 秒。 + +你可以通过运行 `kubectl edit setting gke-refresh` 来更改同步间隔。 + +刷新窗口越短,争用条件发生的可能性就越小。但这确实增加了遇到 GCP API 可能存在的请求限制的可能性。 + diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/helm-charts-in-rancher.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/helm-charts-in-rancher.md new file mode 100644 index 00000000000..0e1e53149c2 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/helm-charts-in-rancher.md @@ -0,0 +1,154 @@ +--- +title: Rancher 中的 Helm Chart +weight: 11 +--- + +在本节中,你将学习如何在 Rancher 中管理 Helm Chart 仓库和应用。你可以在**应用 & 应用市场**中管理 Helm Chart 仓库。它使用类似目录的系统从仓库中导入 Chart 包,然后使用这些 Chart 来部署自定义 Helm 应用或 Rancher 工具(例如监控和 Istio)。Rancher 工具以预加载仓库的方式提供,并能部署为独立的 Helm Chart 。其他仓库只会添加到当前集群。 + +### Rancher 2.6 变更 + +Rancher 2.6.0 实现了功能 Chart 的新版本控制方案。变更主要是 Chart 的主要版本和上游 Chart 的 +up 注释(如果适用)。 + +**主要版本**:Chart 的主要版本与 Rancher 次要版本相关联。当你升级到新的 Rancher 次要版本时,你应该确保你的所有**应用 & 应用市场** Chart 也升级到 Chart 的正确发行版本。 + +:::note + +如果你的主要版本低于下表中提到的版本,则请使用 2.5 及以下版本。例如,建议你不要在 2.6.x+ 中使用 <100.x.x 版本的 Monitoring。 + +::: + +**功能 Chart**: + +| **Name** | **支持的最低版本** | **支持的最高版本** | +| ---------------- | ------------ | ------------ | +| external-ip-webhook | 100.0.0+up1.0.0 | 100.0.1+up1.0.1 | +| harvester-cloud-provider | 100.0.2+up0.1.12 | 100.0.2+up0.1.12 | +| harvester-csi-driver | 100.0.2+up0.1.11 | 100.0.2+up0.1.11 | +| neuvector | 100.0.0+up2.2.0 | 100.0.0+up2.2.0 | +| rancher-alerting-drivers | 100.0.0 | 100.0.2 | +| rancher-backup | 2.0.1 | 2.1.2 | +| rancher-cis-benchmark | 2.0.1 | 2.0.4 | +| rancher-gatekeeper | 100.0.0+up3.6.0 | 100.1.0+up3.7.1 | +| rancher-istio | 100.0.0+up1.10.4 | 100.3.0+up1.13.3 | +| rancher-logging | 100.0.0+up3.12.0 | 100.1.2+up3.17.4 | +| rancher-longhorn | 100.0.0+up1.1.2 | 100.1.2+up1.2.4 | +| rancher-monitoring | 100.0.0+up16.6.0 | 100.1.2+up19.0.3 | +| rancher-sriov (experimental) | 100.0.0+up0.1.0 | 100.0.3+up0.1.0 | +| rancher-vsphere-cpi | 100.3.0+up1.2.1 | 100.3.0+up1.2.1 | +| rancher-vsphere-csi | 100.3.0+up2.5.1-rancher1 | 100.3.0+up2.5.1-rancher1 | +| rancher-wins-upgrader | 0.0.100 | 100.0.1+up0.0.1 | + +
+ +**基于上游的 Chart**:对于基于上游的 Chart ,+up 注释用于表示 Rancher Chart 正在跟踪的上游版本。在升级时,请检查上游版本与 Rancher 的兼容性。 + +- 例如,用于 Monitoring 的 `100.x.x+up16.6.0` 跟踪上游 kube-prometheus-stack `16.6.0` 并添加了一些 Rancher 补丁。 + +- 在升级时,请确保你没有降级你正在使用的 Chart 版本。例如,如果你在 Rancher 2.5 中使用 Monitoring > `16.6.0` 版本,则不应升级到 `100.x.x+up16.6.0`。相反,你应该在下一个发行版中升级到适当的版本。 + + +### Charts + +从左上角的菜单中选择 _应用 & 应用市场_,然后你会转到 Chart 页面。 + +Chart 页面包含所有 Rancher、Partner 和自定义 Chart 。 + +* Rancher 工具(例如 Logging 或 Monitoring)包含在 Rancher 标签下 +* Partner Chart 位于 Partner 标签下 +* 自定义 Chart 将显示在仓库的名称下 + +所有这三种类型都以相同的方式部署和管理。 + +:::note + +由 Cluster Manager (旧版 Rancher UI 中的全局视图)管理的应用应继续仅由 Cluster Manager 管理,而在新 UI 中使用应用 & 应用市场管理的应用则仅能由应用 & 应用市场管理。 + +::: + +### 仓库 + +从左侧边栏中选择 _仓库_。 + +这些项目代表 helm 仓库,可以是具有 index.yaml 的传统 helm 端点,也可以是被克隆并指向特定分支的 git 仓库。要使用自定义 Chart ,只需在此处添加你的仓库即可,它们将在仓库名称下的 Chart 选项卡中可用。 + +为 Helm Chart 仓库添加私有 CA: + +- **基于 HTTP 的 Chart 仓库**:你必须将 DER 格式的 CA 证书的 base64 编码副本添加到 Chart 仓库的 spec.caBundle 字段,例如 `openssl x509 -outform der -in ca.pem | base64 -w0`。点击 Chart 仓库的**编辑 YAML** 并进行设置,如下所示:
+ ``` + [...] + spec: + caBundle: + MIIFXzCCA0egAwIBAgIUWNy8WrvSkgNzV0zdWRP79j9cVcEwDQYJKoZIhvcNAQELBQAwPzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQKDAtNeU9yZywgSW5jLjENMAsGA1UEAwwEcm9vdDAeFw0yMTEyMTQwODMyMTdaFw0yNDEwMDMwODMyMT + ... + nDxZ/tNXt/WPJr/PgEB3hQdInDWYMg7vGO0Oz00G5kWg0sJ0ZTSoA10ZwdjIdGEeKlj1NlPyAqpQ+uDnmx6DW+zqfYtLnc/g6GuLLVPamraqN+gyU8CHwAWPNjZonFN9Vpg0PIk1I2zuOc4EHifoTAXSpnjfzfyAxCaZsnTptimlPFJJqAMj+FfDArGmr4= + [...] + ``` + + +- **基于 Git 的 Chart 仓库**:你必须将 DER 格式的 CA 证书的 base64 编码副本添加到 Chart 仓库的 spec.caBundle 字段,例如 `openssl x509 -outform der -in ca.pem | base64 -w0`。点击 Chart 仓库的**编辑 YAML** 并进行设置,如下所示:
+ ``` + [...] + spec: + caBundle: + MIIFXzCCA0egAwIBAgIUWNy8WrvSkgNzV0zdWRP79j9cVcEwDQYJKoZIhvcNAQELBQAwPzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQKDAtNeU9yZywgSW5jLjENMAsGA1UEAwwEcm9vdDAeFw0yMTEyMTQwODMyMTdaFw0yNDEwMDMwODMyMT + ... + nDxZ/tNXt/WPJr/PgEB3hQdInDWYMg7vGO0Oz00G5kWg0sJ0ZTSoA10ZwdjIdGEeKlj1NlPyAqpQ+uDnmx6DW+zqfYtLnc/g6GuLLVPamraqN+gyU8CHwAWPNjZonFN9Vpg0PIk1I2zuOc4EHifoTAXSpnjfzfyAxCaZsnTptimlPFJJqAMj+FfDArGmr4= + [...] + ``` + + +:::note + +带有身份验证的 Helm Chart 仓库 + +从 Rancher 2.6.3 开始,Repo.Spec 中添加了一个新值 `disableSameOriginCheck`。它允许用户绕过相同源的检查,将仓库身份验证信息作为基本 Auth 标头与所有 API 调用一起发送。不建议采用这种做法,但这可以用作非标准 Helm Chart 仓库(例如重定向到不同源 URL 的仓库)的临时解决方案。 + +要将此功能用于现有 Helm Chart 仓库,请单击 ⋮ > 编辑 YAML。在 YAML 文件的 `spec` 部分,添加 `disableSameOriginCheck` 并将其设置为 `true`: + +```yaml +[...] +spec: + disableSameOriginCheck: true +[...] +``` + +::: + +### Helm 兼容性 + +仅支持 Helm 3 兼容 Chart 。 + + +### 部署和升级 + +从 _Chart_ 选项卡中选择要安装的 Chart 。Rancher 和 Partner Chart 可能通过自定义页面或 questions.yaml 文件进行额外的配置,但所有 Chart 安装都可以修改 values.yaml 和其他基本设置。单击安装后,将部署一个 Helm 操作作业,并显示该作业的控制台。 + +要查看所有最近的更改,请转到 _最近的操作_ 选项卡。你可以查看已进行的调用、条件、事件和日志。 + +安装 Chart 后,你可以在 _已安装的应用_ 选项卡中找到该 Chart。在本节中,你可以升级或删除安装,并查看更多详细信息。选择升级时,呈现的形式和数值与安装相同。 + +大多数 Rancher 工具在 _应用 & 应用市场_ 下方的工具栏中都有额外的页面,以帮助你管理和使用这些功能。这些页面包括指向仪表板的链接、可轻松添加自定义资源的表单以及其他信息。 + +:::caution + +如果你使用 _在升级前自定义 Helm 选项_ 来升级 Chart,如果你的 Chart 有不可更改的字段,使用 _--force_ 选项可能会导致错误。这是因为 Kubernetes 中的某些对象一旦创建就无法更改。要避免该错误,你可以: + +* 使用默认升级选项(即不要使用 _--force_ 选项) +* 卸载现有 Chart 并安装升级后的 Chart +* 在执行 _--force_ 升级之前删除集群中具有不可更改字段的资源 + +::: + +#### Rancher 2.6.3 变更 + +**应用 & 应用市场 > 已安装的应用**页面中,旧版应用的升级按钮已被移除。 + +如果你安装了旧版应用并想要升级它: + +- 必须开启旧版[功能开关](enable-experimental-features.md)(如果在升级前有旧版应用导致该开关未自动开启) +- 你可以从 cluster explorer 升级应用,从左侧导航部分选择**旧版 > 项目 > 应用** +- 对于多集群应用,你可以转到 **≡ > 多集群应用**并在那里升级应用 + +### 限制 + +Rancher CLI **不能**用于安装[仪表板应用程序或 Rancher 功能 Chart](helm-charts-in-rancher.md)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/horizontal-pod-autoscaler.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/horizontal-pod-autoscaler.md new file mode 100644 index 00000000000..fa42a3bae89 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/horizontal-pod-autoscaler.md @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/infrastructure-setup.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/infrastructure-setup.md new file mode 100644 index 00000000000..a54d98cf5ac --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/infrastructure-setup.md @@ -0,0 +1,10 @@ +--- +title: Kubernetes 集群基础设施 +shortTitle: 基础设施教程 +weight: 5 +--- + +要为具有外部数据库的高可用 K3s Kubernetes 集群设置基础设施,请参见[本页面](../how-to-guides/new-user-guides/infrastructure-setup/ha-k3s-kubernetes-cluster.md)。 + + +要为高可用 RKE Kubernetes 集群设置基础设施,请参见[本页面](../how-to-guides/new-user-guides/infrastructure-setup/ha-rke1-kubernetes-cluster.md)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/install-cluster-autoscaler.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/install-cluster-autoscaler.md new file mode 100644 index 00000000000..bd4e74ab3a5 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/install-cluster-autoscaler.md @@ -0,0 +1,25 @@ +--- +title: Cluster Autoscaler +weight: 1 +--- + +在本文中,你将学习如何使用 AWS EC2 Auto Scaling 组在 Rancher 自定义集群上安装和使用 [Kubernetes cluster-autoscaler](https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/)。 + +Cluster Autoscaler 是一个自动调整 Kubernetes 集群大小的工具。该工具在满足以下条件之一时能自动调整集群大小: + +* 集群中有 Pod 因资源不足而无法运行。 +* 集群中有一些节点长时间未得到充分利用,而且它们的 Pod 可以放到其他现有节点上。 + +为防止你的 pod 被驱逐,请在你的 pod 规范中设置 `priorityClassName: system-cluster-critical` 属性。 + +Cluster Autoscaler 运行在 Kubernetes master 节点上。它可以在 `kube-system` 命名空间中运行。Cluster Autoscaler 不会缩减运行非镜像 `kube-system` pod 的节点。 + +你可以在 worker 节点上运行 Cluster Autoscaler 的自定义 deployment,但需要小心以保证 Cluster Autoscaler 能正常运行。 + +# 云提供商 + +Cluster Autoscaler 为不同的云提供商提供支持。有关详细信息,请参见 [Cluster Autoscaler 支持的云提供商](https://github.com/kubernetes/autoscaler/tree/master/cluster-autoscaler#deployment)。 + +### 在 Amazon 上设置 Cluster Autoscaler + +有关在 Amazon 上运行 Cluster Autoscaler 的详细信息,请参阅[此页面](../how-to-guides/advanced-user-guides/manage-clusters/install-cluster-autoscaler/use-aws-ec2-auto-scaling-groups.md)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/install-upgrade-on-a-kubernetes-cluster.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/install-upgrade-on-a-kubernetes-cluster.md new file mode 100644 index 00000000000..0be7994bda5 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/install-upgrade-on-a-kubernetes-cluster.md @@ -0,0 +1,338 @@ +--- +title: 在 Kubernetes 集群上安装/升级 Rancher +description: 了解如何在开发和生产环境中安装 Rancher。了解单节点和高可用安装 +weight: 2 +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +在本节中,你将学习如何使用 Helm CLI 在 Kubernetes 集群上部署 Rancher。 + + +# 先决条件 + +- [Kubernetes 集群](#kubernetes-集群) +- [Ingress Controller](#ingress-controller) +- [CLI 工具](#cli-工具) + +### Kubernetes 集群 + +设置 Rancher Server 的本地 Kubernetes 集群。 + +Rancher 可以安装在任何 Kubernetes 集群上。这个集群可以使用上游 Kubernetes,也可以使用 Rancher 的 Kubernetes 发行版之一,也可以是来自 Amazon EKS 等提供商的托管 Kubernetes 集群。 + +你可参考以下教程,以获得设置 Kubernetes 集群的帮助: + +- **RKE**:[安装 RKE Kubernetes 集群的教程](../how-to-guides/new-user-guides/kubernetes-cluster-setup/rke1-for-rancher.md);[为高可用 RKE 集群设置基础设施的教程](../how-to-guides/new-user-guides/infrastructure-setup/ha-rke1-kubernetes-cluster.md)。 +- **K3s**:[安装 K3s Kubernetes 集群的教程](../how-to-guides/new-user-guides/kubernetes-cluster-setup/k3s-for-rancher.md);[设置高可用 K3s 集群的基础设施的教程](../how-to-guides/new-user-guides/infrastructure-setup/ha-k3s-kubernetes-cluster.md)。 +- **RKE2:** :[安装 RKE2 Kubernetes 集群的教程](../how-to-guides/new-user-guides/kubernetes-cluster-setup/rke2-for-rancher.md);[设置高可用 RKE2 集群的基础设施的教程](../how-to-guides/new-user-guides/infrastructure-setup/ha-rke2-kubernetes-cluster.md)。 +- **Amazon EKS**:[在 Amazon EKS 上安装 Rancher 以及如何安装 Ingress Controller 以访问 Rancher Server](../getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/rancher-on-amazon-eks.md)。 +- **AKS**:[使用 Azure Kubernetes 服务安装 Rancher 以及如何安装 Ingress Controller 以访问 Rancher Server](../getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/rancher-on-aks.md)。 +- **GKE**:[使用 GKE 安装 Rancher 以及如何安装 Ingress Controller 以访问 Rancher Server](../getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/rancher-on-gke.md)。 + +### Ingress Controller + +Rancher UI 和 API 通过 Ingress 公开。换言之,安装 Rancher 的 Kubernetes 集群必须包含一个 Ingress Controller。 + +对于 RKE、RKE2 和 K3s,你不需要手动安装 Ingress Controller,因为它是默认安装的。 + +对于默认不包含 Ingress Controller 的发行版(例如 EKS、GKE 或 AKS 等托管 Kubernetes 集群),你必须先部署 Ingress Controller。请注意,Rancher Helm Chart 默认情况下不会在 Ingress 上设置 `ingressClassName`。因此,你必须将 Ingress Controller 配置为在没有 `ingressClassName` 的情况下也可以监视 Ingress。 + +上面的 **Amazon EKS**、**AKS** 和 **GKE** 教程中包含了示例。 + +### CLI 工具 + +设置 Kubernetes 集群需要以下 CLI 工具。请确保这些工具已安装并在你的 `$PATH` 中可用。 + +- [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl) - Kubernetes 命令行工具。 +- [Helm](https://docs.helm.sh/using_helm/#installing-helm) - Kubernetes 的包管理器。请参见 [Helm 版本要求](../getting-started/installation-and-upgrade/resources/helm-version-requirements.md)选择 Helm 版本来安装 Rancher。请为你的具体平台参见 [Helm 项目提供的说明](https://helm.sh/docs/intro/install/)。 + +# 安装 Rancher Helm Chart + +Rancher 是使用 Kubernetes 的 [Helm](https://helm.sh/) 包管理器安装的。Helm Chart 为 Kubernetes YAML 清单文件提供了模板语法。通过 Helm,用户可以创建可配置的 deployment,而不仅仅只能使用静态文件。 + +如果系统无法直接访问互联网,请参见[离线环境:Kubernetes 安装](../getting-started/installation-and-upgrade/other-installation-methods/air-gapped-helm-cli-install/install-rancher-ha.md)。 + +如果要指定安装的 Rancher 版本,请参见[选择 Rancher 版本](../getting-started/installation-and-upgrade/resources/choose-a-rancher-version.md)。 + +如果要指定用于安装 Rancher 的 Helm 版本,请参见[Helm 版本要求](../getting-started/installation-and-upgrade/resources/helm-version-requirements.md)。 + +:::note + +本安装指南假定你使用的是 Helm 3。 + +::: + +要设置 Rancher: + +1. [添加 Helm Chart 仓库](#1-添加-helm-chart-仓库) +2. [为 Rancher 创建命名空间](#2-为-rancher-创建命名空间) +3. [选择 SSL 配置](#3-选择-ssl-配置) +4. [安装 cert-manager](#4-安装-cert-manager)(除非你自带证书,否则 TLS 将在负载均衡器上终止) +5. [使用 Helm 和你选择的证书选项安装 Rancher](#5-根据你选择的证书选项,通过-helm-安装-rancher) +6. [验证 Rancher Server 是否部署成功](#6-验证-rancher-server-是否部署成功) +7. [保存选项](#7-保存选项) + +### 1. 添加 Helm Chart 仓库 + +执行 `helm repo add` 命令,以添加包含安装 Rancher 的 Chart 的 Helm Chart 仓库。有关如何选择仓库,以及哪个仓库最适合你的用例,请参见[选择 Rancher 版本](../reference-guides/installation-references/helm-chart-options.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-stable https://releases.rancher.com/server-charts/stable + ``` + 注意:不支持升级到 Alpha 版、从 Alpha 版升级或在 Alpha 版之间升级。 + +### 2. 为 Rancher 创建命名空间 + +你需要定义一个 Kubernetes 命名空间,用于安装由 Chart 创建的资源。这个命名空间的名称为 `cattle-system`: + +``` +kubectl create namespace cattle-system +``` + +### 3. 选择 SSL 配置 + +Rancher Management Server 默认需要 SSL/TLS 配置来保证访问的安全性。 + +:::note + +如果你想在外部终止 SSL/TLS,请参见[外部负载均衡器的 TLS 终止](../reference-guides/installation-references/helm-chart-options.md#外部-tls-终止)。 + +::: + +你可以从以下三种证书来源中选择一种,用于在 Rancher Server 中终止 TLS: + +- **Rancher 生成的 TLS 证书**:要求你在集群中安装 `cert-manager`。Rancher 使用 `cert-manager` 签发并维护证书。Rancher 会生成自己的 CA 证书,并使用该 CA 签署证书。然后 `cert-manager`负责管理该证书。 +- **Let's Encrypt**:Let's Encrypt 选项也需要使用 `cert-manager`。但是,在这种情况下,cert-manager 与 Let's Encrypt 的特殊颁发者相结合,该颁发者执行获取 Let's Encrypt 颁发的证书所需的所有操作(包括请求和验证)。此配置使用 HTTP 验证(`HTTP-01`),因此负载均衡器必须具有可以从互联网访问的公共 DNS 记录。 +- **你已有的证书**:使用已有的 CA 颁发的公有或私有证书。Rancher 将使用该证书来保护 WebSocket 和 HTTPS 流量。在这种情况下,你必须上传名称分别为 `tls.crt` 和 `tls.key`的 PEM 格式的证书以及相关的密钥。如果你使用私有 CA,则还必须上传该 CA 证书。这是由于你的节点可能不信任此私有 CA。Rancher 将获取该 CA 证书,并从中生成一个校验和,各种 Rancher 组件将使用该校验和来验证其与 Rancher 的连接。 + + +| 配置 | Helm Chart 选项 | 是否需要 cert-manager | +| ------------------------------ | ----------------------- | ------------------------------------- | +| Rancher 生成的证书(默认) | `ingress.tls.source=rancher` | [是](#4-安装-cert-manager) | +| Let’s Encrypt | `ingress.tls.source=letsEncrypt` | [是](#4-安装-cert-manager) | +| 你已有的证书 | `ingress.tls.source=secret` | 否 | + +### 4. 安装 cert-manager + +:::note + +v2.6.4 兼容 cert-manager 版本 1.6.2 和 1.7.1。推荐使用 v1.7.x,因为 v 1.6.x 将在 2022 年 3 月 30 日结束生命周期。 + +::: + +> 如果你使用自己的证书文件(`ingress.tls.source=secret`)或使用[外部负载均衡器的 TLS 终止](../reference-guides/installation-references/helm-chart-options.md#外部-tls-终止),你可以跳过此步骤。 + +仅在使用 Rancher 生成的证书(`ingress.tls.source=rancher`)或 Let's Encrypt 颁发的证书(`ingress.tls.source=letsEncrypt`)时,才需要安装 cert-manager。 + +
+ 单击展开 + +:::note 重要提示: + +由于 cert-manager 的最新改动,你需要升级 cert-manager 版本。如果你需要升级 Rancher 并使用低于 0.11.0 的 cert-manager 版本,请参见[升级文档](../getting-started/installation-and-upgrade/resources/upgrade-cert-manager.md)。 + +::: + +这些说明来自 [cert-manager 官方文档](https://cert-manager.io/docs/installation/kubernetes/#installing-with-helm)。 + +``` +# 如果你手动安装了CRD,而不是在 Helm 安装命令中添加了 `--set installCRDs=true` 选项,你应该在升级 Helm Chart 之前升级 CRD 资源。 +kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.7.1/cert-manager.crds.yaml + +# 添加 Jetstack Helm 仓库 +helm repo add jetstack https://charts.jetstack.io + +# 更新本地 Helm Chart 仓库缓存 +helm repo update + +# 安装 cert-manager Helm Chart +helm install cert-manager jetstack/cert-manager \ + --namespace cert-manager \ + --create-namespace \ + --version v1.7.1 +``` + +安装完 cert-manager 后,你可以通过检查 cert-manager 命名空间中正在运行的 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 +``` + +
+ +### 5. 根据你选择的证书选项,通过 Helm 安装 Rancher + +不同的证书配置需要使用不同的 Rancher 安装命令。 + +但是,无论证书如何配置,Rancher 在 `cattle-system` 命名空间中的安装名称应该总是 `rancher`。 + +:::tip 测试和开发: + +这个安装 Rancher 的最终命令需要一个将流量转发到 Rancher 的域名。如果你使用 Helm CLI 设置概念证明,则可以在传入 `hostname` 选项时使用伪域名。伪域名的一个例子是 `.sslip.io`,这会把 Rancher 暴露在它运行的 IP 上。生产安装中要求填写真实的域名。 + +::: + + + + +默认情况是使用 Rancher 生成 CA,并使用 `cert-manager` 颁发用于访问 Rancher Server 接口的证书。 + +由于 `rancher` 是 `ingress.tls.source` 的默认选项,因此在执行 `helm install` 命令时,我们不需要指定 `ingress.tls.source`。 + +- 将 `hostname` 设置为解析到你的负载均衡器的 DNS 名称。 +- 将 `bootstrapPassword` 设置为 `admin` 用户独有的值。 +- 如果你安装的是 alpha 版本,Helm 要求你在命令中添加 `--devel` 选项。 +- 如果你需要安装指定的 Rancher 版本,使用 `--version` 标志,例如 `--version 2.3.6`。 + +``` +helm install rancher rancher-/rancher \ + --namespace cattle-system \ + --set hostname=rancher.my.org \ + --set bootstrapPassword=admin +``` + +等待 Rancher 运行: + +``` +kubectl -n cattle-system rollout status deploy/rancher +Waiting for deployment "rancher" rollout to finish: 0 of 3 updated replicas are available... +deployment "rancher" successfully rolled out +``` + + + + +此选项使用 `cert-manager` 来自动请求和续订 [Let's Encrypt](https://letsencrypt.org/) 证书。Let's Encrypt 是免费的,而且是受信的 CA,因此可以为你提供有效的证书。 + +:::note + +由于 HTTP-01 质询只能在端口 80 上完成,因此你需要打开端口 80。 + +::: + +在以下命令中, + +- 将 `hostname` 设置为公有 DNS 记录。 +- 将 `bootstrapPassword` 设置为 `admin` 用户独有的值。 +- 将 `ingress.tls.source` 设置为 `letsEncrypt`。 +- 将 `letsEncrypt.email` 设置为可通讯的电子邮件地址,用于发送通知(例如证书到期的通知)。 +- 将 `letsEncrypt.ingress.class` 设为你的 Ingress Controller(例如 `traefik`,`nginx`,`haproxy`) +- 如果你安装的是 alpha 版本,Helm 要求你在命令中添加 `--devel` 选项。 + +``` +helm install rancher rancher-/rancher \ + --namespace cattle-system \ + --set hostname=rancher.my.org \ + --set bootstrapPassword=admin \ + --set ingress.tls.source=letsEncrypt \ + --set letsEncrypt.email=me@example.org \ + --set letsEncrypt.ingress.class=nginx +``` + +等待 Rancher 运行: + +``` +kubectl -n cattle-system rollout status deploy/rancher +Waiting for deployment "rancher" rollout to finish: 0 of 3 updated replicas are available... +deployment "rancher" successfully rolled out +``` + + + +在此选项中,你使用你自己的证书来创建 Kubernetes 密文,以供 Rancher 使用。 + +运行这个命令时,`hostname` 选项必须与服务器证书中的 `Common Name` 或 `Subject Alternative Names` 条目匹配,否则 Ingress controller 将无法正确配置。 + +虽然技术上仅需要 `Subject Alternative Names` 中有一个条目,但是拥有一个匹配的 `Common Name` 可以最大程度地提高与旧版浏览器/应用的兼容性。 + +:::note + +如果你想检查证书是否正确,请查看[如何在服务器证书中检查 Common Name 和 Subject Alternative Names](../faq/technical-items.md#如何在服务器证书中检查-common-name-和-subject-alternative-names)。 + +::: + +- 设置 `hostname`。 +- 将 `bootstrapPassword` 设置为 `admin` 用户独有的值。 +- 将 `ingress.tls.source` 设置为 `secret`。 +- 如果你安装的是 alpha 版本,Helm 要求你在命令中添加 `--devel` 选项。 + +``` +helm install rancher rancher-/rancher \ + --namespace cattle-system \ + --set hostname=rancher.my.org \ + --set bootstrapPassword=admin \ + --set ingress.tls.source=secret +``` + +如果你使用的是私有 CA 证书,请在命令中增加 `--set privateCA=true`。 + +``` +helm install rancher rancher-/rancher \ + --namespace cattle-system \ + --set hostname=rancher.my.org \ + --set bootstrapPassword=admin \ + --set ingress.tls.source=secret \ + --set privateCA=true +``` + +**添加 TLS 密文(千万不要遗漏此步骤)**:现在 Rancher 已经完成部署,你还需要参考[添加 TLS 密文](../getting-started/installation-and-upgrade/resources/add-tls-secrets.md)发布证书文件,以便 Rancher 和 Ingress Controller 可以使用它们。 + + + + +Rancher Chart 有许多选项,用于为你的具体环境自定义安装。以下是一些常见的高级方案: + +- [HTTP 代理](../reference-guides/installation-references/helm-chart-options.md#http-代理) +- [私有容器镜像仓库](../reference-guides/installation-references/helm-chart-options.md#私有仓库和离线安装) +- [外部负载均衡器上的 TLS 终止](../reference-guides/installation-references/helm-chart-options.md#外部-tls-终止) + +如需获取完整的选项列表,请参见 [Chart 选项](../reference-guides/installation-references/helm-chart-options.md)。 + + +### 6. 验证 Rancher Server 是否部署成功 + +添加密文后,检查 Rancher 是否已成功运行: + +``` +kubectl -n cattle-system rollout status deploy/rancher +Waiting for deployment "rancher" rollout to finish: 0 of 3 updated replicas are available... +deployment "rancher" successfully rolled out +``` + +如果你看到 `error: deployment "rancher" exceeded its progress deadline` 这个错误,可运行以下命令来检查 deployment 的状态: + +``` +kubectl -n cattle-system get deploy rancher +NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE +rancher 3 3 3 3 3m +``` + +`DESIRED` 和 `AVAILABLE`的个数应该相同。 + +### 7. 保存选项 + +请保存你使用的 `--set` 选项。使用 Helm 升级 Rancher 到新版本时,你将需要使用相同的选项。 + +### 安装完成 + +安装已完成。现在 Rancher Server 应该已经可以正常运行了。 + +使用浏览器打开把流量转发到你的负载均衡器的 DNS 域名。然后,你就会看到一个漂亮的登录页面了。 + +如果遇到任何问题,请参见[故障排除](../getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/troubleshooting.md)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/installation-and-upgrade.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/installation-and-upgrade.md new file mode 100644 index 00000000000..9bbff8682fd --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/installation-and-upgrade.md @@ -0,0 +1,94 @@ +--- +title: 安装/升级 Rancher +description: 了解如何在开发和生产环境中安装 Rancher。了解单节点和高可用安装 +weight: 3 +--- + +本节介绍了 Rancher 各种安装方式以及每个安装方式的优点。 + +# 名词解释 + +本章节涉及以下名词: + +- **Rancher Server**:用于管理和配置 Kubernetes 集群。你可以通过 Rancher Server 的 UI 与下游 Kubernetes 集群进行交互。Rancher Management Server 可以安装到任意 Kubernetes 集群上,包括托管的集群,如 Amazon EKS 集群。 +- **RKE(Rancher Kubernetes Engine)**:是经过认证的 Kubernetes 发行版,也是用于创建和管理 Kubernetes 集群的 CLI 工具和库。 +- **K3s(轻量级 Kubernetes)**:也是经过认证的 Kubernetes 发行版。它比 RKE 更新,更易用且更轻量,其所有组件都在一个小于 100 MB 的二进制文件中。 +- **RKE2**:一个完全合规的 Kubernetes 发行版,专注于安全和合规性。 + +`restrictedAdmin` Helm Chart 选项在 **Rancher Server** 可用。如果该选项设置为 true,初始的 Rancher 用户访问本地 Kubernetes 集群会受到限制,以避免权限升级。详情请参见 [restricted-admin 角色](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/global-permissions.md#受限管理员)。 + +# 安装方式概述 + +Rancher 可以安装在以下主要架构上: + +### 使用 Helm CLI 安装的高可用 Kubernetes + +我们建议使用 Kubernetes 包管理器 Helm 在专用的 Kubernetes 集群上安装 Rancher。在 RKE 集群中,需要使用三个节点才能实现高可用集群。在 K3s 集群中,只需要两个节点即可。 + +### 在 Amazon EKS 上部署 Rancher 的快速入门 + +Rancher 和 Amazon Web Services 合作编写了一份快速入门指南,用于按照 AWS 的最佳实践,在 EKS Kubernetes 集群上部署 Rancher。详情请参见[部署指南](https://aws-quickstart.github.io/quickstart-eks-rancher/)。 + +### 单节点 Kubernetes 安装 + +Rancher 可以安装在单节点 Kubernetes 集群上。但是,在单节点安装的情况下,Rancher Server 没有高可用性。而高可用性对在生产环境中运行 Rancher 非常重要。 + +但是,如果你想要短期内使用单节点节省资源,同时又保留高可用性迁移路径,那么单节点 Kubernetes 安装也是合适的。你也可以之后向集群中添加节点,获得高可用的 Rancher Server。 + +### Docker 安装 + +如果你的目的是测试或演示,你可以使用 Docker 把 Rancher 安装到单个节点中。本地 Kubernetes 集群是安装到单个 Docker 容器中的,而 Rancher 是安装到本地集群中的。 + +Rancher backup operator 可将 Rancher 从单个 Docker 容器迁移到高可用 Kubernetes 集群上。详情请参见[把 Rancher 迁移到新集群](../how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/migrate-rancher-to-new-cluster.md)。 + +### 其他方式 + +如果你需要在离线环境中或使用 HTTP 代理安装 Rancher,请参见以下独立的说明文档: + +| 网络访问方式 | 基于 Kubernetes 安装(推荐) | 基于 Docker 安装 | +| ---------------------------------- | ------------------------------ | ---------- | +| 可直接访问互联网 | [文档](install-upgrade-on-a-kubernetes-cluster.md) | [文档](rancher-on-a-single-node-with-docker.md) | +| 使用 HTTP 代理 | [文档](rancher-behind-an-http-proxy.md) | [文档](rancher-on-a-single-node-with-docker.md)及[配置](../reference-guides/single-node-rancher-in-docker/http-proxy-configuration.md) | +| 离线环境 | [文档](air-gapped-helm-cli-install.md) | [文档](air-gapped-helm-cli-install.md) | + +我们建议在 Kubernetes 集群上安装 Rancher,因为在多节点集群中,Rancher Server 可以实现高可用。高可用配置可以提升 Rancher 访问其管理的下游 Kubernetes 集群的稳定性。 + +因此,我们建议在生产级别的架构中,设置一个高可用的 Kubernetes 集群,然后在这个集群上安装 Rancher。安装 Rancher 后,你可以使用 Rancher 部署和管理 Kubernetes 集群。 + +如果你的目的是测试或演示,你可以将 Rancher 安装到单个 Docker 容器中。Docker 安装可以让你实现开箱即用,以使用 Rancher 设置 Kubernetes 集群。Docker 安装主要是用于探索 Rancher Server 的功能,只适用于开发和测试。 + +[在 Kubernetes 上安装 Rancher 的说明](install-upgrade-on-a-kubernetes-cluster.md)介绍了如何首先使用 K3s 或 RKE 创建和管理 Kubernetes 集群,然后再将 Rancher 安装到该集群上。 + +如果 Kubernetes 集群中的节点正在运行且满足[节点要求](installation-requirements.md),你可以使用 Helm 将 Rancher 部署到 Kubernetes 上。Helm 使用 Rancher 的 Helm Chart 在 Kubernetes 集群的每个节点上安装 Rancher 的副本。我们建议使用负载均衡器将流量定向到集群中的每个 Rancher 副本上。 + +如需进一步了解 Rancher 架构,请参见[架构概述](rancher-manager-architecture.md),[生产级别架构推荐](../reference-guides/rancher-manager-architecture/architecture-recommendations.md)或[最佳实践指南](../reference-guides/best-practices/rancher-server/tips-for-running-rancher.md)。 + +# 先决条件 +安装 Rancher 之前,请确保你的节点满足所有[安装要求](installation-requirements.md)。 + +# 架构建议 + +为了达到最佳性能和安全性,我们建议你为 Rancher Management Server 使用单独的专用 Kubernetes 集群。不建议在此集群上运行用户工作负载。部署 Rancher 后,你可以[创建或导入集群](kubernetes-clusters-in-rancher-setup.md)来运行你的工作负载。 + +详情请参见[架构推荐](../reference-guides/rancher-manager-architecture/architecture-recommendations.md)。 + +### 在 Kubernetes 上安装 Rancher 的更多选项 + +参见 [Helm Chart 选项](../reference-guides/installation-references/helm-chart-options.md)以了解在 Kubernetes 集群上安装 Rancher 的其他配置,包括: + +- [开启 API 审计日志来记录所有事务](../reference-guides/installation-references/helm-chart-options.md#api-审计日志) +- [负载均衡器上的 TLS 终止](../reference-guides/installation-references/helm-chart-options.md#外部-tls-终止) +- [自定义 Ingress](../reference-guides/installation-references/helm-chart-options.md#自定义-ingress) + +在 Rancher 的安装指南中,我们推荐使用 K3s 或 RKE 来配置 Kubernetes 集群,然后再在这个集群中安装 Rancher。K3s 和 RKE 均提供许多配置选项,用于为你的具体环境自定义 Kubernetes 集群。有关选项和功能的完整列表,请参见: + +- [RKE 配置选项](https://rancher.com/docs/rke/latest/en/config-options/) +- [K3s 配置选项](https://rancher.com/docs/k3s/latest/en/installation/install-options/) + +### 在 Docker 上安装 Rancher 的更多选项 + +参见 [Docker 安装选项](rancher-on-a-single-node-with-docker.md)了解其他配置,包括: + +- [开启 API 审计日志来记录所有事务](../reference-guides/single-node-rancher-in-docker/advanced-options.md#api-审计日志) +- [外部负载均衡器](../getting-started/installation-and-upgrade/advanced-options/advanced-use-cases/configure-layer-7-nginx-load-balancer.md) +- [持久化数据存储](../reference-guides/single-node-rancher-in-docker/advanced-options.md#持久化数据) diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/installation-references.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/installation-references.md new file mode 100644 index 00000000000..d4b16242f33 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/installation-references.md @@ -0,0 +1,5 @@ +--- +title: 安装参考 +--- + +有关其他安装资源,请参阅以下参考指南:[Rancher Helm Chart 选项](../reference-guides/installation-references/helm-chart-options.md)、[TLS 设置](../reference-guides/installation-references/tls-settings.md)和[功能开关](../reference-guides/installation-references/feature-flags.md)。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/installation-requirements.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/installation-requirements.md new file mode 100644 index 00000000000..d7b0640c8c2 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/installation-requirements.md @@ -0,0 +1,186 @@ +--- +title: 安装要求 +description: 如果 Rancher 配置在 Docker 或 Kubernetes 中运行时,了解运行 Rancher Server 的每个节点的节点要求 +weight: 1 +--- + +本文描述了对需要安装 Rancher Server 的节点的软件、硬件和网络要求。Rancher Server 可以安装在单个节点或高可用的 Kubernetes 集群上。 + +:::note 重要提示: + +如果你需要在 Kubernetes 集群上安装 Rancher,该节点的要求与用于运行应用和服务的[下游集群的节点要求](../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/node-requirements-for-rancher-managed-clusters.md)不同。 + +::: + +请确保安装 Rancher Server 的节点满足以下要求: + +- [操作系统和容器运行时要求](#操作系统和容器运行时要求) + - [RKE 要求](#rke-要求) + - [K3s 要求](#k3s-要求) + - [RKE2 要求](#rke2-要求) + - [安装 Docker](#安装-docker) +- [硬件要求](#硬件要求) +- [CPU 和内存](#cpu-和内存) + - [RKE 和托管 Kubernetes](#rke-和托管-kubernetes) + - [K3s Kubernetes](#k3s-kubernetes) + - [RKE2 Kubernetes](#rke2-kubernetes) + - [Docker](#docker) +- [Ingress](#ingress) +- [磁盘](#磁盘) +- [网络要求](#网络要求) + - [节点 IP 地址](#节点-ip-地址) + - [端口要求](#端口要求) +- [Dockershim 支持](#dockershim-支持) + +如需获取在生产环境中运行 Rancher Server 的最佳实践列表,请参见[最佳实践](../reference-guides/best-practices/rancher-server/tips-for-running-rancher.md)。 + +Rancher UI 在 Firefox 或 Chrome 中效果更佳。 + +# 操作系统和容器运行时要求 + +Rancher 兼容当前所有的主流 Linux 发行版。 + +运行 RKE Kubernetes 集群的节点需要安装 Docker。Kubernetes 安装不需要 Docker。 + +Rancher 需要安装在支持的 Kubernetes 版本上。如需了解你使用的 Rancher 版本支持哪些 Kubernetes 版本,请参见[支持维护条款](https://rancher.com/support-maintenance-terms/)。 + +如需了解各个 Rancher 版本通过了哪些操作系统和 Docker 版本测试,请参见[支持和维护条款](https://rancher.com/support-maintenance-terms/)。 + +所有支持的操作系统都使用 64-bit x86 架构。 + +请安装 `ntp`(Network Time Protocol),以防止在客户端和服务器之间由于时间不同步造成的证书验证错误。 + +某些 Linux 发行版的默认防火墙规则可能会阻止与 Helm 的通信。我们建议禁用 firewalld。如果使用的是 Kubernetes 1.19,1.20 或 1.21,则必须关闭 firewalld。 + +如果你不太想这样做的话,你可以查看[相关问题](https://github.com/rancher/rancher/issues/28840)中的建议。某些用户已能成功[使用 ACCEPT 策略 为 Pod CIDR 创建一个独立的 firewalld 区域](https://github.com/rancher/rancher/issues/28840#issuecomment-787404822)。 + +如果你需要在 ARM64 上使用 Rancher,请参见[在 ARM64(实验功能)上运行 Rancher](../getting-started/installation-and-upgrade/advanced-options/enable-experimental-features/rancher-on-arm64.md)。 + +### RKE 要求 + +容器运行时方面,RKE 可以兼容当前的所有 Docker 版本。 + +请注意,必须应用以下 sysctl 设置: + +``` +net.bridge.bridge-nf-call-iptables=1 +``` + +### K3s 要求 + +容器运行时方面,K3s 可以兼容当前的所有 Docker 版本。 + +Rancher 需要安装在支持的 Kubernetes 版本上。如需了解你使用的 Rancher 版本支持哪些 Kubernetes 版本,请参见[支持维护条款](https://rancher.com/support-maintenance-terms/)。如需指定 K3s 版本,请在运行 K3s 安装脚本时,使用 `INSTALL_K3S_VERSION` 环境变量。 + +如果你使用 **Raspbian Buster** 在 K3s 集群上安装 Rancher,请按照[这些步骤](https://rancher.com/docs/k3s/latest/en/advanced/#enabling-legacy-iptables-on-raspbian-buster)切换到旧版 iptables。 + +如果你使用 Alpine Linux 的 K3s 集群上安装 Rancher,请按照[这些步骤](https://rancher.com/docs/k3s/latest/en/advanced/#additional-preparation-for-alpine-linux-setup) 进行其他设置。 + + + +### RKE2 要求 + +如需了解 RKE2 通过了哪些操作系统版本的测试,请参见[支持和维护条款](https://rancher.com/support-maintenance-terms/)。 + +RKE2 安装不需要 Docker。 + +### 安装 Docker + +Docker 是 Helm Chart 安装所必须的。你可以参见 [Docker 官方文档](https://docs.docker.com/)中的步骤进行安装。Rancher 也提供使用单条命令安装 Docker 的[脚本](../getting-started/installation-and-upgrade/installation-requirements/install-docker.md)。 + +# 硬件要求 + +本节描述安装 Rancher Server 的节点的 CPU、内存和磁盘要求。 + +# CPU 和内存 + +硬件要求根据你的 Rancher 部署规模而定。请根据要求配置每个节点。通过单节点容器安装 Rancher,和在 Kubernetes 集群上安装 Rancher 的要求有所不同。 + +### RKE 和托管 Kubernetes + +这些 CPU 和内存要求适用于每个安装 Rancher Server 的 Kubernetes 集群中的主机。 + +这些要求适用于 RKE Kubernetes 集群以及托管的 Kubernetes 集群,例如 EKS。 + +| 部署规模 | 集群 | 节点 | vCPUs | 内存 | +| --------------- | ---------- | ------------ | -------| ------- | +| 小 | 最多 150 个 | 最多 1500 个 | 2 | 8 GB | +| 中 | 最多 300 个 | 最多 3,000 个 | 4 | 16 GB | +| 大 | 最多 500 个 | 最多 5,000 个 | 8 | 32 GB | +| 特大 | 最多 1,000 个 | 最多 10,000 个 | 16 | 64 GB | +| 超大 | 最多 2,000 个 | 最多 20,000 个 | 32 | 128 GB | + +每个用例和环境都是不同的。请[联系 Rancher](https://rancher.com/contact/) 来审核你的情况。 + +### K3s Kubernetes + +这些 CPU 和内存要求适用于每个[安装 Rancher Server 的 Kubernetes 集群](install-upgrade-on-a-kubernetes-cluster.md)中的主机。 + +| 部署规模 | 集群 | 节点 | vCPUs | 内存 | 数据库大小 | +| --------------- | ---------- | ------------ | -------| ---------| ------------------------- | +| 小 | 最多 150 个 | 最多 1500 个 | 2 | 8 GB | 2 核,4 GB + 1,000 IOPS | +| 中 | 最多 300 个 | 最多 3,000 个 | 4 | 16 GB | 2 核,4 GB + 1,000 IOPS | +| 大 | 最多 500 个 | 最多 5,000 个 | 8 | 32 GB | 2 核,4 GB + 1,000 IOPS | +| 特大 | 最多 1,000 个 | 最多 10,000 个 | 16 | 64 GB | 2 核,4 GB + 1,000 IOPS | +| 超大 | 最多 2,000 个 | 最多 20,000 个 | 32 | 128 GB | 2 核,4 GB + 1,000 IOPS | + +每个用例和环境都是不同的。请[联系 Rancher](https://rancher.com/contact/) 来审核你的情况。 + + +### RKE2 Kubernetes + +这些 CPU 和内存要求适用于安装了 RKE2 的每个实例。最低配置要求如下: + +| 部署规模 | 集群 | 节点 | vCPUs | 内存 | +| --------------- | -------- | --------- | ----- | ---- | +| 小 | 最多 5 个 | 最多 50 个 | 2 | 5 GB | +| 中 | 最多 15 个 | 最多 200 个 | 3 | 9 GB | + +### Docker + +这些 CPU 和内存要求适用于[单节点](rancher-on-a-single-node-with-docker.md)安装 Rancher 的主机。 + +| 部署规模 | 集群 | 节点 | vCPUs | 内存 | +| --------------- | -------- | --------- | ----- | ---- | +| 小 | 最多 5 个 | 最多 50 个 | 1 | 4 GB | +| 中 | 最多 15 个 | 最多 200 个 | 2 | 8 GB | + +# Ingress + +安装 Rancher 的 Kubernetes 集群中的每个节点都应该运行一个 Ingress。 + +Ingress 需要部署为 DaemonSet 以确保负载均衡器能成功把流量转发到各个节点。 + +如果是 RKE 和 K3s 安装,你不需要手动安装 Ingress,因为它是默认安装的。 + +如果是托管 Kubernetes 集群(EKS、GKE、AKS)和 RKE2 Kubernetes 安装,你需要设置 Ingress。 + +- **Amazon EKS**:[在 Amazon EKS 上安装 Rancher 以及如何安装 Ingress 以访问 Rancher Server](../getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/rancher-on-amazon-eks.md)。 +- **AKS**:[使用 Azure Kubernetes 服务安装 Rancher 以及如何安装 Ingress 以访问 Rancher Server](../getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/rancher-on-aks.md)。 +- **GKE**:[使用 GKE 安装 Rancher 以及如何安装 Ingress 以访问 Rancher Server](../getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/rancher-on-gke.md)。 + +# 磁盘 + +etcd 在集群中的性能决定了 Rancher 的性能。因此,为了获得最佳速度,我们建议使用 SSD 磁盘来支持 Rancher 管理的 Kubernetes 集群。在云提供商上,你还需使用能获得最大 IOPS 的最小大小。在较大的集群中,请考虑使用专用存储设备存储 etcd 数据和 wal 目录。 + +# 网络要求 + +本节描述了安装 Rancher Server 的节点的网络要求。 + +:::caution + +如果包含 Rancher 的服务器带有 `X-Frame-Options=DENY` 标头,在升级旧版 UI 之后,Rancher UI 中的某些页面可能无法渲染。这是因为某些旧版页面在新 UI 中是以 iFrames 模式嵌入的。 + +::: + +### 节点 IP 地址 + +无论你是在单个节点还是高可用集群上安装 Rancher,每个节点都应配置一个静态 IP。如果使用 DHCP,则每个节点都应该有一个 DHCP 预留,以确保节点分配到相同的 IP 地址。 + +### 端口要求 + +为了确保能正常运行,Rancher 需要在 Rancher 节点和下游 Kubernetes 集群节点上开放一些端口。不同集群类型的 Rancher 和下游集群的所有必要端口,请参见[端口要求](../getting-started/installation-and-upgrade/installation-requirements/port-requirements.md)。 + +# Dockershim 支持 + +有关 Dockershim 支持的详情,请参见[此页面](../getting-started/installation-and-upgrade/installation-requirements/dockershim.md)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/integrations-in-rancher.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/integrations-in-rancher.md new file mode 100644 index 00000000000..51c76a870ce --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/integrations-in-rancher.md @@ -0,0 +1,7 @@ +--- +title: Rancher 中的集成 +--- + +Rancher 已经积累了多个产品和项目,而且已将它们集成到 Rancher UI 中。 + +集成示例:[Harvester](../explanations/integrations-in-rancher/harvester.md) 和 [NeuVector](../explanations/integrations-in-rancher/neuvector.md) \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/introduction.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/introduction.md new file mode 100644 index 00000000000..f6139d48160 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/introduction.md @@ -0,0 +1,5 @@ +--- +title: 介绍 +--- + +[概述](../getting-started/introduction/overview.md)部分将讨论 Rancher 的特性、功能以及它如何简化 Kubernetes 的运行。新的 Rancher Manager 文档采用了 Divio 文档结构,[Divio 文档介绍](../getting-started/introduction/what-are-divio-docs.md)将详细说明我们文档的外观和功能更新。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/istio-setup-guide.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/istio-setup-guide.md new file mode 100644 index 00000000000..4bab3f3f944 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/istio-setup-guide.md @@ -0,0 +1,32 @@ +--- +title: 设置指南 +weight: 2 +--- + +本文介绍如何启用 Istio 并在你的项目中使用它。 + +如果你使用 Istio 进行流量管理,则需要允许外部流量进入集群。在这种情况下,你将需要执行以下所有步骤。 + +# 先决条件 + +本指南假设你已经[安装 Rancher](installation-and-upgrade.md),且已经[配置了一个单独的 Kubernetes 集群](kubernetes-clusters-in-rancher-setup.md)并要在该集群上安装 Istio。 + +集群中的节点必须满足 [CPU 和内存要求](../explanations/integrations-in-rancher/istio/cpu-and-memory-allocations.md)。 + +Istio 控制的工作负载和服务必须满足 [Istio 要求](https://istio.io/docs/setup/additional-setup/requirements/)。 + + +# 安装 + +:::tip 快速设置提示: + +如果你不需要外部流量到达 Istio,而只想设置 Istio 以监控和跟踪集群内的流量,请跳过[设置 Istio Gateway](../how-to-guides/advanced-user-guides/istio-setup-guide/set-up-istio-gateway.md) 和[设置 Istio 的流量管理组件](../how-to-guides/advanced-user-guides/istio-setup-guide/set-up-traffic-management.md)步骤。 + +::: + +1. [在集群中启用 Istio](../how-to-guides/advanced-user-guides/istio-setup-guide/enable-istio-in-cluster.md) +1. [在要使用 Istio 的所有命名空间中启用 Istio](../how-to-guides/advanced-user-guides/istio-setup-guide/enable-istio-in-namespace.md) +1. [添加注入了 Istio sidecar 的部署和服务](../how-to-guides/advanced-user-guides/istio-setup-guide/use-istio-sidecar.md) +1. [设置 Istio Gateway](../how-to-guides/advanced-user-guides/istio-setup-guide/set-up-istio-gateway.md) +1. [设置 Istio 的流量管理组件](../how-to-guides/advanced-user-guides/istio-setup-guide/set-up-traffic-management.md) +1. [生成流量并查看 Istio 的运行情况](../how-to-guides/advanced-user-guides/istio-setup-guide/generate-and-view-traffic.md) diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/istio.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/istio.md new file mode 100644 index 00000000000..601ca472e27 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/istio.md @@ -0,0 +1,125 @@ +--- +title: Istio +weight: 14 +--- + +[Istio](https://istio.io/) 是一种开源工具,可以让 DevOps 团队更轻松地观察、控制、排查并保护复杂的微服务网络中的流量。 + +随着微服务网络的变化和增长,微服务网络之间的交互变得越来越难以管理和理解。在这种情况下,将服务网格作为单独的基础设施层是非常有用的。Istio 的服务网格可以让你在不直接更改微服务的情况下控制微服务之间的流量。 + +Rancher 与 Istio 集成,使得管理员或集群所有者可以将 Istio 交给开发者团队,然后开发者使用 Istio 执行安全策略,排查问题,或为蓝绿部署,金丝雀部署,和 A/B 测试进行流量管理。 + +此核心服务网格支持但不限于以下功能: + +- **管理流量**:例如入口和出口路由、断路、镜像。 +- **安全**:具有用于验证和授权流量和用户的资源,包括 mTLS。 +- **可观察性**:观察日志、指标和分布式流量。 + +[设置 Istio](istio-setup-guide.md) 后,你可以通过 Rancher UI、`kubectl` 或 ` Istioctl` 来使用 Istio 的 controlplane 功能。 + +Istio 需要由 `cluster-admin` 设置后才能在项目中使用。 + + +## Rancher 2.5 的新功能 + +Istio 已简化了整体架构。结合 Pilot、Citadel、Galley 和 sidecar injector 创建了一个单独的组件 Istiod。Node Agent 功能也已合并到 istio-agent 中。 + +以前由 Istio 安装的插件(cert-manager、Grafana、Jaeger、Kiali、Prometheus、Zipkin)现在需要单独安装。Istio 支持安装来自 Istio 项目的集成,并保持与非 Istio 项目的兼容性。 + +你仍然可以通过安装 [Rancher Monitoring](monitoring-and-alerting.md) 或安装你自己的 Prometheus operator 来使用 Prometheus 集成。Rancher 的 Istio chart 还默认安装 Kiali,确保你可以开箱即用地全面了解微服务。 + +Istio 已经脱离了使用 Helm 安装的方式,现在通过 Istioctl 二进制文件或 Istio Operator 进行安装。为了使用最简单的方式与 Istio 交互,Rancher 的 Istio 会维护一个 Helm Chart,该 Chart 使用 Istioctl 二进制文件来管理你的 Istio 安装。 + +此 Helm Chart 将在 UI 的**应用 & 市场市场**中提供。有权访问 Rancher Chart 应用商店的用户需要先设置 Istio,然后才能在项目中使用它。 + +## Istio 附带的工具 + +我们的 [Istio](https://istio.io/) 安装程序将 istioctl 二进制命令包装在一个 Helm chart 中,其中包括一个覆盖文件的选项,用来支持复杂的自定义配置。 + +它还包括以下内容。 + +### Kiali + +Kiali 是一个全面的可视化辅助工具,用于绘制整个服务网格中的流量图。它允许你查看它们的连接方式,包括它们之间的流量速率和延迟。 + +你可以检查服务网格的运行状况,或深入查看单个组件的传入和传出请求。 + +### Jaeger + +Jaeger 是用于跟踪分布式系统的工具。我们的 Istio 安装程序包括能快速启动的一体化 [Jaeger](https://www.jaegertracing.io/) 安装。 + +请注意,这不是符合 Jaeger 生产要求的部署。此部署使用在内存中的存储组件,而 Jaeger 推荐在生产环境中使用持久存储组件。有关你所需的部署策略的更多信息,请参阅 [Jaeger 文档](https://www.jaegertracing.io/docs/latest/operator/#production-strategy)。 + +## 先决条件 + +在启用 Istio 之前,建议你先确认你的 Rancher worker 节点是否有足够的 [CPU 和内存](../explanations/integrations-in-rancher/istio/cpu-and-memory-allocations.md)来运行 Istio 的所有组件。 + +如果要在 RKE2 集群上安装 Istio,则需要执行一些额外的步骤。有关详细信息,请参阅[本节](#在-rke2-集群上安装-istio-的其他步骤)。 + +请注意,Istio v2(上游 Istio v1.7+)无法在离线环境中升级。 + +## 设置指南 + +如需了解如何设置 Istio 并在项目中使用它,请参阅[设置指南](istio-setup-guide.md)。 + +## 卸载 Istio + +要从集群、命名空间或工作负载中删除 Istio 组件,请参阅[卸载 Istio](../explanations/integrations-in-rancher/istio/disable-istio.md)。 + +## 迁移旧 Istio 版本 + +如果你的 Istio 版本低于 1.7.x,则没有升级路径。要在**应用 & 应用市场**页面安装 Istio,你需要在旧版 Rancher UI 的全局视图中禁用现有的 Istio。 + +如果你有大量其他的 Istio CRD,你可能需要手动迁移两个 Istio 版本都支持的 CRD。为此,你可以运行 `kubectl get -n istio-system -o yaml`,保存输出的 yaml,并在新版本中重新应用。 + +另一种选择是一次手动卸载一个 Istio 资源,但保留两个 Istio 版本都支持且最新版本不会安装的资源。此方法有可能导致安装新版本时出现问题。你可以根据你的实际情况选择是否采用该方法。 + +## 访问可视化 + +> 默认情况下,只有 cluster-admin 可以访问 Kiali。有关如何允许具有管理员、编辑或查看权限的角色访问它们的说明,请参阅[本节](../explanations/integrations-in-rancher/istio/rbac-for-istio.md)。 + +在集群中设置 Istio 后,你可以在 Rancher UI 中使用 Grafana、Prometheus 和 Kiali。 + +要访问 Grafana 和 Prometheus 可视化: + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 在**集群**页面上,转到要可视化的集群,然后单击 **Explore**。 +1. 在左侧导航栏中,单击**监控**。 +1. 点击 **Grafana** 或任何其他仪表板。 + +要访问 Kiali 可视化: + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 在**集群**页面上,转到要查看 Kiali 的集群,然后单击 **Explore**。 +1. 在左侧导航栏中,单击 **Istio**。 +1. 单击 **Kiali**。从这里,你可以访问**流量图**或**流量指标**选项卡,从而可视化网络指标。 + +默认情况下,prometheus 会拾取所有命名空间,并将数据用于 Kiali 图。如果你想使用不同的配置进行 prometheus 数据抓取,请参阅[选择器/抓取配置](../explanations/integrations-in-rancher/istio/configuration-options/selectors-and-scrape-configurations.md)。 + +你的角色决定了你对可视化的访问。只有 `cluster-admin` 角色可以使用 Grafana 和 Prometheus。默认情况下,只有 `cluster-admin` 可以使用 Kiali UI,但是 `cluster-admin` 可以通过编辑 Istio values.yaml 来允许其他角色进行访问。 + +## 架构 + +Istio 安装了一个服务网格,它使用 [Envoy](https://www.envoyproxy.io/learn/service-mesh) Sidecar 代理来拦截到每个工作负载的流量。这些 sidecar 拦截并管理服务之间的通信,从而实现精细化观察并控制集群内的流量。 + +只有注入了 Istio sidecar 的工作负载可以通过 Istio 进行跟踪和控制。 + +如果命名空间启用了 Istio,部署到命名空间的新工作负载会自动具有 Istio sidecar。你需要为之前的工作负载手动启用 Istio。 + +有关 Istio sidecar 的更多信息,请参阅 [Istio sidecare-injection 文档](https://istio.io/docs/setup/kubernetes/additional-setup/sidecar-injection/)。有关 Istio 架构的更多信息,请参阅 [Istio 架构文档](https://istio.io/latest/docs/ops/deployment/architecture/)。 + +### 多个 Ingress + +默认情况下,每个 Rancher 配置的集群都有一个 NGINX Ingress Controller 来允许流量进入集群。Istio 还在 `istio-system` 命名空间中默认安装一个 Ingress Gateway。因此,你的集群将有两个 ingress。 + +![启用 Istio 的集群可以有两个 ingress,分别是默认的 Nginx ingress 和默认的 Istio controller](/img/istio-ingress.svg) + +可以通过[覆盖文件](configuration-options.md#覆盖文件)来启用其他 Istio Ingress Gateway。 + +### Egress 支持 + +默认情况下,Egress 网关是禁用的,但你可以在安装或升级时使用 values.yaml 或[覆盖文件](configuration-options.md#覆盖文件)启用它。 + +## 在 RKE2 集群上安装 Istio 的其他步骤 + +要在 RKE2 集群上安装 Istio,请按照[步骤](../explanations/integrations-in-rancher/istio/configuration-options/install-istio-on-rke2-cluster.md)进行操作。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/kubernetes-cluster-setup.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/kubernetes-cluster-setup.md new file mode 100644 index 00000000000..cc2c873e4a3 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/kubernetes-cluster-setup.md @@ -0,0 +1,8 @@ +--- +title: "Kubernetes 使用教程 " +weight: 4 +--- + +本章节介绍如何安装 Kubernetes 集群,使得 Rancher Server 可以安装在该集群上。 + +Rancher 可以在任何 Kubernetes 集群上运行。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/kubernetes-clusters-in-rancher-setup.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/kubernetes-clusters-in-rancher-setup.md new file mode 100644 index 00000000000..07b250fbf47 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/kubernetes-clusters-in-rancher-setup.md @@ -0,0 +1,77 @@ +--- +title: 在 Rancher 中设置 Kubernetes 集群 +description: 配置 Kubernetes 集群 +weight: 7 +--- + +Rancher 允许你通过 Rancher UI 来创建集群,从而简化了集群的创建流程。Rancher 提供了多种启动集群的选项。你可以选择最适合你的用例的选项。 + +本节默认你已对 Docker 和 Kubernetes 有一定的了解。如果你需要了解 Kubernetes 组件如何协作,请参见 [Kubernetes 概念](../reference-guides/kubernetes-concepts.md)。 + +有关 Rancher Server 配置集群的方式,以及使用什么工具来创建集群的详细信息,请参阅[产品架构](rancher-manager-architecture.md)。 + + + +### 不同类型集群的管理功能 + +下表总结了每一种类型的集群和对应的可编辑的选项和设置: + +import ClusterCapabilitiesTable from '../shared-files/_cluster-capabilities-table.md'; + + + +## 在托管的 Kubernetes 提供商中设置集群 + +在这种情况下,Rancher 不会配置 Kubernetes,因为它是由 Google Kubernetes Engine (GKE)、Amazon Elastic Container Service for Kubernetes 或 Azure Kubernetes Service 等提供商安装的。 + +如果你使用 Kubernetes 提供商,例如 Google GKE,Rancher 将与对应的云 API 集成,允许你从 Rancher UI 为托管集群创建和管理 RBAC。 + +详情请参阅[托管 Kubernetes 集群](set-up-clusters-from-hosted-kubernetes-providers.md)。 + +## 使用 Rancher 启动 Kubernetes + +在你自己的节点上配置 Kubernetes 时,Rancher 使用 [Rancher Kubernetes Engine (RKE)](https://rancher.com/docs/rke/latest/en/) 作为库。RKE 是 Rancher 自己的轻量级 Kubernetes 安装程序。 + +在 RKE 集群中,Rancher 管理 Kubernetes 的部署。这些集群可以部署在任何裸机服务器、云提供商或虚拟化平台上。 + +这些节点可以通过 Rancher 的 UI 动态配置,该 UI 调用 [Docker Machine](https://docs.docker.com/machine/) 在各种云提供商上启动节点。 + +如果你已经有一个想要添加到 RKE 集群的节点,你可以通过在节点上运行 Rancher Agent 容器将节点添加到集群中。 + +有关详细信息,请参阅 [RKE 集群](launch-kubernetes-with-rancher.md)。 + +### 在基础设施提供商中启动 Kubernetes 并配置节点 + +Rancher 可以在 Amazon EC2、DigitalOcean、Azure 或 vSphere 等基础设施提供商中动态配置节点,然后在节点上安装 Kubernetes。 + +使用 Rancher,你可以基于[节点模板](use-new-nodes-in-an-infra-provider.md#节点模板)创建节点池。此模板定义了要在云提供商中启动的节点的参数。 + +使用由基础设施提供商托管的节点的一个好处是,如果一个节点与集群失去连接,Rancher 可以自动替换它,从而维护集群配置。 + +Rancher UI 中状态为 Active 的[主机驱动](use-new-nodes-in-an-infra-provider.md#主机驱动)决定了可用于创建节点模板的云提供商。 + +如需更多信息,请参阅[基础设施提供商托管的节点](use-new-nodes-in-an-infra-provider.md)。 + +### 在现有自定义节点上启动 Kubernetes + +在设置这种类型的集群时,Rancher 会在现有的[自定义节点](use-existing-nodes.md)上安装 Kubernetes,从而创建一个自定义集群。 + +你可以使用任何节点,在 Rancher 中创建一个集群。 + +这些节点包括本地裸机服务器、云托管虚拟机或本地虚拟机。 + +## 注册现有集群 + +集群注册功能取代了导入集群的功能。 + +注册 EKS 集群的优点更多。在大多数情况下,注册的 EKS 集群和在 Rancher 中创建的 EKS 集群在 Rancher UI 中的处理方式相同(除了删除)。 + +删除在 Rancher 中创建的 EKS 集群后,该集群将被销毁。删除在 Rancher 中注册的 EKS 集群时,它与 Rancher Server 会断开连接,但它仍然存在。你仍然可以像在 Rancher 中注册之前一样访问它。 + +详情请参见[本页面](../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/register-existing-clusters.md)。 + +## 以编程方式创建集群 + +通过 Rancher 以编程方式部署 Kubernetes 集群的最常见方法是使用 Rancher 2 Terraform Provider。详情请参见[使用 Terraform 创建集群](https://registry.terraform.io/providers/rancher/rancher2/latest/docs/resources/cluster)。 + +你可以使用 Terraform 创建或导入 EKS、GKE、AKS 集群和 RKE 集群。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/kubernetes-components.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/kubernetes-components.md new file mode 100644 index 00000000000..470e39beb73 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/kubernetes-components.md @@ -0,0 +1,18 @@ +--- +title: Kubernetes 组件 +weight: 100 +--- + +本文列出的命令和步骤适用于 [Rancher 启动的 Kubernetes](launch-kubernetes-with-rancher.md) 集群上的核心 Kubernetes 组件。 + +本文包括以下类别的故障排除提示: + +- [etcd 节点故障排除](../troubleshooting/kubernetes-components/troubleshooting-etcd-nodes.md) +- [Controlplane 节点故障排除](../troubleshooting/kubernetes-components/troubleshooting-controlplane-nodes.md) +- [nginx-proxy 节点故障排除](../troubleshooting/kubernetes-components/troubleshooting-nginx-proxy.md) +- [Worker 节点和通用组件故障排除](../troubleshooting/kubernetes-components/troubleshooting-worker-nodes-and-generic-components.md) + +# Kubernetes 组件图 + +![集群图](/img/clusterdiagram.svg)
+线条表示组件之间的通信。而颜色纯粹用于视觉辅助。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/kubernetes-resources-setup.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/kubernetes-resources-setup.md new file mode 100644 index 00000000000..5ca2c61a3b0 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/kubernetes-resources-setup.md @@ -0,0 +1,70 @@ +--- +title: Kubernetes 资源 +weight: 18 +--- + +你可以在 Rancher UI 中查看和操作 Kubernetes 集群中的所有自定义资源和 CRD。 + +## 工作负载 + +使用[工作负载](workloads-and-pods.md)将应用部署到集群节点,工作负载是包含用于运行应用的 pod 的对象,以及为部署行为设置规则的元数据。工作负载可以部署在集群范围内,也可以部署在一个命名空间内。 + +部署工作负载时,你可以使用任何镜像进行部署。可供选择的[工作负载类型](workloads-and-pods.md#工作负载类型)有多种,工作负载类型决定了你的应用程序的运行方式。 + +在工作负载部署之后,你可以继续使用它。你可以: + +- 将工作负载[升级](../how-to-guides/new-user-guides/kubernetes-resources-setup/workloads-and-pods/upgrade-workloads.md)到它运行的应用的更新版本。 +- 如果升级出现问题,将工作负载[回滚](../how-to-guides/new-user-guides/kubernetes-resources-setup/workloads-and-pods/roll-back-workloads.md)到以前的版本。 +- [添加一个 sidecar](../how-to-guides/new-user-guides/kubernetes-resources-setup/workloads-and-pods/add-a-sidecar.md),这是一个支持主要工作负载的工作负载。 + +## 负载均衡和 Ingress + +### 负载均衡器 + +启动应用程序后,它仅在集群中可用。无法从外部访问它。 + +如果你希望你的应用程序可以从外部访问,则必须向集群添加负载均衡器。如果用户知道负载均衡器的 IP 地址和应用的端口号,负载均衡器可以为外部连接创建一个访问集群的网关。 + +Rancher 支持两种类型的负载均衡器: + +- [Layer-4 负载均衡器](../how-to-guides/new-user-guides/kubernetes-resources-setup/load-balancer-and-ingress-controller/layer-4-and-layer-7-load-balancing.md#四层负载均衡器) +- [Layer-7 负载均衡器](../how-to-guides/new-user-guides/kubernetes-resources-setup/load-balancer-and-ingress-controller/layer-4-and-layer-7-load-balancing.md#七层负载均衡器) + +有关详细信息,请参阅[负载均衡器](../how-to-guides/new-user-guides/kubernetes-resources-setup/load-balancer-and-ingress-controller/layer-4-and-layer-7-load-balancing.md)。 + +#### Ingress + +负载均衡器只能处理每个 service 的一个 IP 地址。换言之,如果你在集群中运行了多个 service,则必须为每个 service 配备一个负载均衡器。运行多个负载均衡器的花费可能非常高昂。因此,你可以使用 Ingress 来解决此问题。 + +Ingress 是一组充当负载均衡器的规则。Ingress 与一个或多个 Ingress Controller 一起动态路由 service 的请求。Ingress 收到请求时,集群中的 Ingress Controller 会对负载均衡器进行配置,从而根据你配置的 service 子域或路径规则将请求定向到正确的 service。 + +有关详细信息,请参阅 [Ingress](../how-to-guides/new-user-guides/kubernetes-resources-setup/load-balancer-and-ingress-controller/add-ingresses.md)。 + +在项目中使用 Ingress 时,你可以通过设置全局 DNS 条目来将 Ingress 主机名编程到外部 DNS。 + +## 服务发现 + +使用负载均衡器和/或 Ingress 将集群公开给外部请求后,你只能通过 IP 地址访问集群。要创建可解析的主机名,你必须创建服务记录,该记录将 IP 地址、外部主机名、DNS 记录别名、工作负载或标记的 pod 映射到特定主机名。 + +有关详细信息,请参阅[服务发现](../how-to-guides/new-user-guides/kubernetes-resources-setup/create-services.md)。 + +## 流水线 + +在你的项目中[配置版本控制提供程序](../how-to-guides/advanced-user-guides/manage-projects/ci-cd-pipelines.md#1-配置版本控制提供商)后,你可以添加仓库并开始为每个仓库配置流水线。 + +有关详细信息,请参阅[流水线](pipelines.md)。 + +## 应用程序 + +除了启动应用程序的各个组件外,你还可以使用 Rancher 应用商店来启动应用,即 Helm Chart。 + +## Kubernetes 资源 + +在 Rancher 项目或命名空间的上下文中,_资源_ 是支持 Pod 操作的文件和数据。在 Rancher 中,证书、镜像仓库和密文都被视为资源。但是,Kubernetes 将资源划分为不同类型的[密文(secret)](https://kubernetes.io/docs/concepts/configuration/secret/)。因此,在单个项目或命名空间中,各个资源必须具有唯一的名称以避免冲突。资源主要用于承载敏感信息,但也有其他用途。 + +资源包括: + +- [证书](../how-to-guides/new-user-guides/kubernetes-resources-setup/encrypt-http-communication.md):用于加密/解密进入或离开集群的数据的文件。 +- [ConfigMap](../how-to-guides/new-user-guides/kubernetes-resources-setup/configmaps.md):存储一般配置信息的文件,例如一组配置文件。 +- [密文](../how-to-guides/new-user-guides/kubernetes-resources-setup/secrets.md):存储密码、token 或密钥等敏感数据的文件。 +- [镜像仓库](../how-to-guides/new-user-guides/kubernetes-resources-setup/kubernetes-and-docker-registries.md):携带用于验证私有镜像仓库的凭证的文件。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/launch-kubernetes-with-rancher.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/launch-kubernetes-with-rancher.md new file mode 100644 index 00000000000..257b835b96a --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/launch-kubernetes-with-rancher.md @@ -0,0 +1,81 @@ +--- +title: 使用 Rancher 启动 Kubernetes +weight: 4 +--- + +Rancher 可以使用任意节点启动 Kubernetes 集群。在 Rancher 中将 Kubernetes 部署到这些节点上时,你可以选择 [Rancher Kubernetes Engine](https://rancher.com/docs/rke/latest/en/) (RKE) 或 [RKE2](https://docs.rke2.io) 发行版。Rancher 可以在任何计算机上启动 Kubernetes,包括: + +- 裸金属服务器 +- 本地虚拟机 +- 由云厂商托管的虚拟机 + +Rancher 可以在现有节点上安装 Kubernetes,也可以在云厂商中动态配置节点并安装 Kubernetes。 + +Rancher 还可以创建节点池。在托管在云厂商的节点池上安装 Kubernetes 的一个好处是,如果一个节点与集群断开连接,Rancher 可以自动创建另一个节点并将其加入集群,从而确保节点池的数量符合要求。 + +## RKE + +### 要求 + +如果你使用 RKE 建立集群,节点必须满足下游集群的[节点要求](../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/node-requirements-for-rancher-managed-clusters.md)。 + +### 在云厂商的新节点上启动 Kubernetes + +使用 Rancher,你可以基于[节点模板](use-new-nodes-in-an-infra-provider.md#节点模板)创建节点池。此节点模板定义了要用于在云厂商中启动节点的参数。 + +在托管在云厂商的节点池上安装 Kubernetes 的一个好处是,如果一个节点与集群断开连接,Rancher 可以自动创建另一个节点并将其加入集群,从而确保节点池的数量符合要求。 + +有关详细信息,请参阅[在新节点上启动 Kubernetes](use-new-nodes-in-an-infra-provider.md)。 + +### 在现有自定义节点上启动 Kubernetes + +在这种情况下,你希望将 Kubernetes 安装到裸机服务器、本地虚拟机或云厂商中已存在的虚拟机上。使用此选项,你将在主机上运行 Rancher Agent Docker 容器。 + +如果要重复使用之前的自定义集群中的节点,请在复用之前[清理节点](../how-to-guides/advanced-user-guides/manage-clusters/clean-cluster-nodes.md)。如果你重复使用尚未清理的节点,则集群配置可能会失败。 + +有关详细信息,请参阅[自定义节点](use-existing-nodes.md)。 + +# 以编程方式创建 RKE 集群 + +通过 Rancher 以编程方式部署 RKE 集群的最常见方法是使用 Rancher 2 Terraform Provider。详情请参见[使用 Terraform 创建集群](https://registry.terraform.io/providers/rancher/rancher2/latest/docs/resources/cluster)。 + +## RKE2 + +Rancher 2.6 支持直接使用 Rancher UI 配置 [RKE2](https://docs.rke2.io/) 集群。RKE2,也称为 RKE Government,是一个完全符合标准的 Kubernetes 发行版,它专注于安全性和合规性。在 Rancher 2.6.4 及更早版本中,RKE2 配置还处于技术预览阶段。 + +在 Rancher 2.6.5 中,RKE2 已经 GA。 + +### 要求 + +如果你使用 RKE2 建立集群,节点必须满足下游集群的[节点要求](https://docs.rke2.io/install/requirements/)。 + +### 在云厂商的新节点上启动 Kubernetes + +RKE2 基于使用上游[集群 API](https://github.com/kubernetes-sigs/cluster-api) 项目的新配置框架。这个新配置框架支持: + +- 将 RKE2 集群配置到 Rancher 具有主机驱动的任何提供商上 +- 完全在 Rancher 中配置 RKE2 集群 +- 除了 Canal 之外,还可以选择 CNI 选项, Calico、Cilium 和 Multus + +RKE2 配置还包括在具有 Windows 节点的集群上安装 RKE2。 + +RKE2 的 Windows 功能包括: + +- Windows 支持 vSphere 主机驱动 +- 用于 Windows RKE2 自定义集群的 Calico CNI +- Calico 的项目网络隔离 (PNI) +- 由 containerd 提供支持的使用 RKE2 的 Windows 容器 +- 通过 Terraform 配置 Windows RKE2 集群 +- 直接从 Rancher UI 配置 Windows RKE2 自定义集群 + +要使 Windows 支持 RKE2 自定义集群,请选择 Calico 作为 CNI。 + +### 在现有自定义节点上启动 Kubernetes + +RKE2 还支持在预配置的虚拟机或裸机节点上安装自定义集群。 + +如果要重复使用之前的自定义集群中的节点,请在复用之前清理节点。如果你重复使用尚未清理的节点,则集群配置可能会失败。 + +# 以编程方式创建 RKE2 集群 + +通过 Rancher 以编程方式部署 RKE2 集群的最常见方法是使用 Rancher 2 Terraform Provider。详情请参见[使用 Terraform 创建集群](https://registry.terraform.io/providers/rancher/rancher2/latest/docs/resources/cluster_v2)。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/load-balancer-and-ingress-controller.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/load-balancer-and-ingress-controller.md new file mode 100644 index 00000000000..97b093fb923 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/load-balancer-and-ingress-controller.md @@ -0,0 +1,62 @@ +--- +title: 在 Rancher 中设置负载均衡器和 Ingress Controller +description: 了解如何设置负载均衡器和 Ingress Controller 以在 Rancher 中重定向服务请求,并了解负载均衡器的限制 +weight: 3040 +--- + +在 Rancher 中,你可以通过设置负载均衡器和 Ingress Controller 来重定向服务请求。 + +## 负载均衡器 + +启动应用程序后,该应用程序仅在集群内可用。你无法从集群外部访问它。 + +如果你希望从外部访问应用程序,则必须向集群添加负载均衡器或 Ingress。如果用户知道负载均衡器的 IP 地址和应用的端口号,负载均衡器可以为外部连接创建一个访问集群的网关。 + +Rancher 支持两种类型的负载均衡器: + +- [Layer-4 负载均衡器](../how-to-guides/new-user-guides/kubernetes-resources-setup/load-balancer-and-ingress-controller/layer-4-and-layer-7-load-balancing.md#四层负载均衡器) +- [Layer-7 负载均衡器](../how-to-guides/new-user-guides/kubernetes-resources-setup/load-balancer-and-ingress-controller/layer-4-and-layer-7-load-balancing.md#七层负载均衡器) + +有关详细信息,请参阅[负载均衡器](../how-to-guides/new-user-guides/kubernetes-resources-setup/load-balancer-and-ingress-controller/layer-4-and-layer-7-load-balancing.md)。 + +### 负载均衡器限制 + +负载均衡器有几个需要注意的限制: + +- 负载均衡器只能处理每个 service 的一个 IP 地址。换言之,如果你在集群中运行了多个 service,则必须为每个 service 配备一个负载均衡器。运行多个负载均衡器的花费可能非常高昂。 + +- 如果你想将负载均衡器与托管的 Kubernetes 集群(即托管在 GKE、EKS 或 AKS 中的集群)一起使用,则负载均衡器必须运行在该云提供商的基础设施上。请根据你配置集群的方式查看负载均衡器的兼容列表: + +- [支持 Layer-4 负载均衡](../how-to-guides/new-user-guides/kubernetes-resources-setup/load-balancer-and-ingress-controller/layer-4-and-layer-7-load-balancing.md#四层负载均衡支持) + +- [支持 Layer-7 负载均衡](../how-to-guides/new-user-guides/kubernetes-resources-setup/load-balancer-and-ingress-controller/layer-4-and-layer-7-load-balancing.md#七层负载均衡支持) + +## Ingress + +如上所述,使用负载均衡器的缺点是: + +- 每个服务负载均衡器只能处理一个 IP 地址。 +- 如果你在集群中运行多个服务,则每个服务都必须配备一个负载均衡器。 +- 为每个服务配备负载均衡器的花费可能非常高昂。 + +相反,如果将某个 Ingress 用作集群的入口点,Ingress 可以更灵活地将流量路由到多个 service。它可以将多个 HTTP 请求映射到 service,而无需为每个 service 提供单独的 IP 地址。 + +因此,如果你需要使用相同的 IP 地址、Layer 7 协议或特权节点端口(80 和 443)来公开多个 service,你可以使用一个 Ingress。 + +Ingress 与一个或多个 Ingress Controller 一起动态路由 service 的请求。Ingress 收到请求时,集群中的 Ingress Controller 会根据你配置的 service 子域或路径规则将请求定向到正确的 service。 + +每个 Kubernetes Ingress 资源都对应一个 `/etc/nginx/sites-available/` 中的文件,其中包含一个配置对特定文件和文件夹的请求的 `server{}` 配置块。 + +Ingress 能为你的集群创建一个入口端口(与负载均衡器类似),可以位于集群的内部或外部。RKE 启动的集群中的 Ingress 和 Ingress Controller 由 [Nginx](https://www.nginx.com/) 提供支持。 + +Ingress 还支持其他功能,例如 SSL 终止、基于名称的虚拟主机等。 + +:::note 在高可用性配置中使用 Rancher: + +请避免将 Ingress 添加到 `local` 集群。Rancher 将 Nginx Ingress Controller 作为 Rancher 管理的 _所有_ 集群的全局入口点,其中包括 `local` 集群。因此,当用户尝试访问应用程序时,Rancher 可能会由于重新加载 Nginx 配置而断开连接。要解决这个问题,我们建议你仅在通过 Rancher 启动的集群中部署应用程序。 + +::: + +- 有关如何在 Rancher 中设置 Ingress 的更多信息,请参阅 [Ingress](../how-to-guides/new-user-guides/kubernetes-resources-setup/load-balancer-and-ingress-controller/add-ingresses.md)。 +- 有关 Ingress 和 Ingress Controller 的完整信息,请参阅 [Kubernetes Ingress 文档](https://kubernetes.io/docs/concepts/services-networking/ingress/)。 +- 在项目中使用 Ingress 时,你可以通过设置全局 DNS 条目来将 Ingress 主机名编程到外部 DNS。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/logging.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/logging.md new file mode 100644 index 00000000000..0c3d1084176 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/logging.md @@ -0,0 +1,118 @@ +--- +title: Rancher Logging 集成 +shortTitle: Logging +description: Rancher 集成了主流的日志服务。了解集成日志服务的要求和优势,并在你的集群上启用 Logging。 +metaDescription: "Rancher 集成了主流的日志服务。了解集成日志服务的要求和优势,并在你的集群上启用 Logging。" +weight: 15 +--- + +现在,Rancher 的日志管理由 [Banzai Cloud Logging operator](https://banzaicloud.com/docs/one-eye/logging-operator/) 提供支持,它取代了以前的内部解决方案。 + +有关 Rancher 2.5 更改的概述,请参阅[本节](../explanations/integrations-in-rancher/logging/logging-architecture.md#rancher-2-5-变更)。有关迁移 Logging V1 的更多信息,请参阅[本页](../explanations/integrations-in-rancher/logging/migrate-to-rancher-v2.5+-logging.md)。 + + +## 启用 Logging + +你可以转到**应用**页面并安装 Logging 应用程序,从而为 Rancher 管理的集群启用 Logging: + +1. 转到要安装 Logging 的集群,然后单击**应用 & 应用市场**。 +1. 点击 **Logging** 应用。 +1. 滚动到 Helm Chart README 的底部,然后单击**安装**。 + +**结果**:Logging 应用已部署到 `cattle-logging-system` 命名空间中。 + +## 卸载 Logging + +1. 转到要安装 Logging 的集群,然后单击**应用 & 应用市场**。 +1. 点击**已安装的应用**。 +1. 转到 `cattle-logging-system` 命名空间并选中 `rancher-logging` 和 `rancher-logging-crd` 框。 +1. 单击**删除**。 +1. 确认**删除**。 + +**结果**:已卸载 `rancher-logging`。 + +## 架构 + +有关 Logging 应用程序工作原理的更多信息,请参阅[本节](../explanations/integrations-in-rancher/logging/logging-architecture.md)。 + + + +## RBAC + +Rancher Logging 有两个角色,分别是 `logging-admin` 和 `logging-view`。有关如何以及何时使用这些角色的更多信息,请参阅[此页面](../explanations/integrations-in-rancher/logging/rbac-for-logging.md)。 + +## 配置 Logging 自定义资源 + +要管理 `Flows`、`ClusterFlows`、`Outputs` 和 `ClusterOutputs`: + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 在**集群**页面上,转到要配置 Logging 自定义资源的集群,然后单击 **Explore**。 +1. 在左侧导航栏中,单击 **Logging**。 + +### Flows 和 ClusterFlows + +有关配置 `Flows` 和 `ClusterFlows` 的帮助,请参阅[此页面](../explanations/integrations-in-rancher/logging/custom-resource-configuration/flows-and-clusterflows.md)。 + +### Outputs 和 ClusterOutputs + +有关配置 `Outputs` 和 `ClusterOutputs` 的帮助,请参阅[此页面](../explanations/integrations-in-rancher/logging/custom-resource-configuration/outputs-and-clusteroutputs.md)。 + +## 配置 Logging Helm Chart + +有关在安装或升级 Logging 应用程序时可配置的选项,请参阅[此页面](../explanations/integrations-in-rancher/logging/logging-helm-chart-options.md)。 + +### Windows 支持 + +Windows 集群支持 Logging,你可以收集 Windows 节点的日志。 + +有关如何在 Windows 节点上启用或禁用 Logging 的详细信息,请参阅[本节](../explanations/integrations-in-rancher/logging/logging-helm-chart-options.md#启用/禁用-windows-节点-logging)。 + +### 使用自定义 Docker 根目录 + +有关使用自定义 Docker 根目录的详细信息,请参阅[本节](../explanations/integrations-in-rancher/logging/logging-helm-chart-options.md#使用自定义-docker-根目录)。 + + +### 处理污点和容忍度 + +有关如何在 Logging 应用程序中使用污点和容忍度的信息,请参阅[此页面](../explanations/integrations-in-rancher/logging/taints-and-tolerations.md)。 + + +### 在 SELinux 上使用 Logging V2 + +有关在启用了 SELinux 的节点上使用 Logging 应用程序的信息,请参阅[本节](../explanations/integrations-in-rancher/logging/logging-helm-chart-options.md#启用-logging-应用程序以使用-selinux)。 + +### 其他日志来源 + +默认情况下,Rancher 会收集所有类型集群的 controlplane 组件和节点组件的日志。在某些情况下,也会收集其他日志。有关详细信息,请参阅[本节](../explanations/integrations-in-rancher/logging/logging-helm-chart-options.md#其他日志来源)。 + + +## 故障排除 + +### `cattle-logging` 命名空间正在重新创建 + +如果你的集群之前在旧版 Rancher UI 的全局视图中部署了 Logging,`cattle-logging` 命名空间可能会不断被重新创建。 + +要解决这个问题,你可以将所有 `clusterloggings.management.cattle.io` 和 `projectloggings.management.cattle.io` 自定义资源从管理集群中针对该集群的命名空间中删除。 +这些自定义资源会导致 Rancher 在下游集群中创建 `cattle-logging` 命名空间(如果不存在)。 + +集群命名空间与集群 ID 匹配,因此我们需要找到每个集群的集群 ID。 + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 在**集群**页面上,转到要获取 ID 的集群,然后单击 **Explore**。 +2. 从以下其中一个 URL 中复制 `` 的内容。`` 是集群命名空间名称。 + +```bash +# Cluster Management UI +https:///c// + +# Cluster Dashboard +https:///dashboard/c// +``` + +现在我们有了 `` 命名空间,我们可以删除导致 `cattle-logging` 不断重新创建的自定义资源。 +*警告*:请当前未使用确保 Logging(从旧版 Rancher UI 全局视图中安装的版本)。 + +```bash +kubectl delete clusterloggings.management.cattle.io -n +kubectl delete projectloggings.management.cattle.io -n +``` diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/machine-configuration.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/machine-configuration.md new file mode 100644 index 00000000000..8b2b28996dc --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/machine-configuration.md @@ -0,0 +1,5 @@ +--- +title: 主机配置 +--- + +主机配置指的是如何将资源分配给虚拟机。请参阅 [Amazon EC2](../reference-guides/cluster-configuration/downstream-cluster-configuration/machine-configuration/amazon-ec2)、[DigitalOcean](../reference-guides/cluster-configuration/downstream-cluster-configuration/machine-configuration/digitalocean) 和 [Azure](../reference-guides/cluster-configuration/downstream-cluster-configuration/machine-configuration/azure) 的文档以了解更多信息。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/manage-clusters.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/manage-clusters.md new file mode 100644 index 00000000000..01d557294a5 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/manage-clusters.md @@ -0,0 +1,39 @@ +--- +title: 集群管理 +weight: 8 +--- + +在 Rancher 中配置集群后,你可以开始使用强大的 Kubernetes 功能在开发、测试或生产环境中部署和扩展容器化应用。 + +本文涵盖以下主题: + +- [在集群之间切换](#在集群之间切换) +- [在 Rancher 中管理集群](#在-rancher-中管理集群) +- [配置工具](#配置工具) + +:::note + +本节默认你已对 Docker 和 Kubernetes 有一定的了解。如果你需要了解 Kubernetes 组件如何协作,请参见 [Kubernetes 概念](../reference-guides/kubernetes-concepts.md)。 + +::: + +## 在 Rancher 中管理集群 + +将集群[配置到 Rancher](kubernetes-clusters-in-rancher-setup.md) 之后,[集群所有者](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/cluster-and-project-roles.md#集群角色)需要管理这些集群。管理集群的选项如下: + +import ClusterCapabilitiesTable from '../shared-files/_cluster-capabilities-table.md'; + + + +## 配置工具 + +Rancher 包含 Kubernetes 中未包含的各种工具来协助你进行 DevOps 操作。Rancher 可以与外部服务集成,让你的集群更高效地运行。工具分为以下几类: + +- 告警 +- Notifiers +- Logging +- Monitoring +- Istio 服务网格 +- OPA Gatekeeper + +你可以通过**应用 & 应用市场**来安装工具。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/manage-persistent-storage.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/manage-persistent-storage.md new file mode 100644 index 00000000000..80c01b62562 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/manage-persistent-storage.md @@ -0,0 +1,12 @@ +--- +title: 管理持久存储 +--- + +以下章节介绍了如何管理持久存储: + +- [持久存储的工作原理](../how-to-guides/advanced-user-guides/manage-clusters/create-kubernetes-persistent-storage/manage-persistent-storage/about-persistent-storage.md) +- [设置现有存储](../how-to-guides/advanced-user-guides/manage-clusters/create-kubernetes-persistent-storage/manage-persistent-storage/set-up-existing-storage.md) +- [在 Rancher 中动态配置新存储](../how-to-guides/advanced-user-guides/manage-clusters/create-kubernetes-persistent-storage/manage-persistent-storage/dynamically-provision-new-storage.md) +- [使用外部 Ceph 驱动](../how-to-guides/advanced-user-guides/manage-clusters/create-kubernetes-persistent-storage/manage-persistent-storage/use-external-ceph-driver.md) +- [GlusterFS 卷](../how-to-guides/advanced-user-guides/manage-clusters/create-kubernetes-persistent-storage/manage-persistent-storage/about-glusterfs-volumes.md) +- [iSCSI 卷](../how-to-guides/advanced-user-guides/manage-clusters/create-kubernetes-persistent-storage/manage-persistent-storage/install-iscsi-volumes.md) \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/manage-project-resource-quotas.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/manage-project-resource-quotas.md new file mode 100644 index 00000000000..607c1efaa9b --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/manage-project-resource-quotas.md @@ -0,0 +1,41 @@ +--- +title: 项目资源配额 +weight: 2515 +--- + +如果多个团队共享一个集群,某个团队可能会使用过多的可用资源,例如 CPU、内存、存储、服务、Kubernetes 对象(如 Pod 或 Secret)等。你可以应用 _资源配额_ 来防止过度消耗资源。资源配额是 Rancher 用来限制项目或命名空间可用资源的功能。 + +本文介绍如何在现有项目中创建资源配额。 + +你也可以在创建新项目时设置资源配额。有关详细信息,请参阅[创建新项目](../how-to-guides/advanced-user-guides/manage-clusters/projects-and-namespaces.md#创建项目)。 + +Rancher 中的资源配额包含与 [Kubernetes 原生版本](https://kubernetes.io/docs/concepts/policy/resource-quotas/)相同的功能。Rancher 还扩展了资源配额的功能,从而让你将资源配额应用于项目。有关资源配额如何与 Rancher 中的项目一起使用的详细信息,请参阅[此页面](../how-to-guides/advanced-user-guides/manage-projects/manage-project-resource-quotas/about-project-resource-quotas.md)。 + +### 将资源配额应用于现有项目 + +修改资源配额的使用场景如下: + +- 限制某个项目和项目下的命名空间能使用的资源 +- 在资源配额已生效的情况下,对项目可用的资源进行扩容或缩容 + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 在**集群**页面,进入要应用资源配额的集群,然后单击 **Explore**。 +1. 单击**集群 > 项目/命名空间**。 +1. 找到要添加资源配额的项目。在该项目中选择 **⋮ > 编辑配置**。 + +1. 展开**资源限额**并单击**添加资源**。你也可以编辑现有配额。 + +1. 选择资源类型。有关类型的更多信息,请参阅[配额类型参考](../how-to-guides/advanced-user-guides/manage-projects/manage-project-resource-quotas/resource-quota-types.md)。 + +1. 输入**项目限制**和**命名空间默认限制**的值。 + + | 字段 | 描述 | + | ----------------------- | -------------------------------------------------------------------------------------------------------- | + | 项目限制 | 项目的总资源限制。 | + | 命名空间默认限制 | 每个命名空间的默认资源限制。此限制会沿用到项目中的每个命名空间。项目中所有命名空间的限制之和不应超过项目限制。 | + +1. **可选**:添加更多配额。 + +1. 单击**创建**。 + +**结果**:资源配额已应用到你的项目和命名空间。如果你后续需要添加更多命名空间,Rancher 会验证项目是否可以容纳该命名空间。如果项目无法分配资源,你仍然可以创建命名空间,但命名空间将获得的资源配额为 0。然后 Rancher 将不允许你创建任何受此配额限制的资源。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/manage-projects.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/manage-projects.md new file mode 100644 index 00000000000..be6bdf4b397 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/manage-projects.md @@ -0,0 +1,39 @@ +--- +title: 项目管理 +weight: 9 +--- + +_项目_ 是 Rancher 中引入的对象,可帮助你更有组织地管理 Kubernetes 集群中的命名空间。你可以使用项目创建多租户集群,这种集群允许一组用户共享相同的底层资源来创建应用,而应用之间不会相互影响。 + +在层次结构方面: + +- 集群包含项目 +- 项目包含命名空间 + +在 Rancher 中,你可以使用项目将多个命名空间作为一个实体进行管理。在原生 Kubernetes(没有项目这个概念)中,RBAC 或集群资源等功能被分配给了各个命名空间。如果集群中的多个命名空间需要分配同样的访问权限,分配权限会变得非常繁琐。即使所有命名空间都需要相同的权限,但也无法使用一个操作中将这些权限应用于所有命名空间。你必须重复地将这些权限分配给每个命名空间。 + +而 Rancher 通过引入项目的概念,通过允许你在项目级别应用资源和访问权限。然后,项目中的每个命名空间都会继承这些资源和策略。因此你只需将资源和策略分配给项目即可,不需要将它们分配给每个单独的命名空间。 + +你可以使用项目执行以下操作: + +- [为用户分配一组命名空间的访问权限](../how-to-guides/advanced-user-guides/manage-projects/add-users-to-projects.md) +- 为用户分配[项目中的特定角色](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/cluster-and-project-roles.md#项目角色)。角色可以是所有者、成员、只读或[自定义](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/custom-roles.md) +- [设置资源配额](manage-project-resource-quotas.md) +- [管理命名空间](../how-to-guides/advanced-user-guides/manage-projects/manage-namespaces.md) +- [配置工具](../reference-guides/rancher-project-tools.md) +- [为持续集成和 deployment 设置流水线](../how-to-guides/advanced-user-guides/manage-projects/ci-cd-pipelines.md) +- [配置 Pod 安全策略](../how-to-guides/advanced-user-guides/manage-projects/manage-pod-security-policies.md) + +### 授权 + +非管理者用户只有在[管理员](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/global-permissions.md)、[集群所有者或成员](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/cluster-and-project-roles.md#集群角色)或[项目所有者](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/cluster-and-project-roles.md#项目角色)将非管理员用户添加到项目的**成员**选项卡后,才能获取项目的访问权限。 + +创建项目的人自动成为[项目所有者](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/cluster-and-project-roles.md#项目角色)。 + +## 在项目之间切换 + +要在项目之间切换,请使用导航栏中的下拉菜单。你也可以直接在导航栏中切换项目: + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 在**集群**页面,进入要切换项目的集群然后点击 **Explore**。 +1. 在顶部导航栏中,选择要打开的项目。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/manage-role-based-access-control-rbac.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/manage-role-based-access-control-rbac.md new file mode 100644 index 00000000000..5559ffd1b05 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/manage-role-based-access-control-rbac.md @@ -0,0 +1,26 @@ +--- +title: RBAC +weight: 20 +--- + +Rancher 通过 _用户_ 进行授权管理。如[身份验证](about-authentication.md)中所述,用户可以是本地用户,也可以是外部用户。 + +配置外部身份验证后,**用户**页面上显示的用户会发生变化。 + +- 如果你以本地用户身份登录,则仅显示本地用户。 + +- 如果你以外部用户身份登录,则会同时显示外部用户和本地用户。 + +## 用户和角色 + +一旦用户登录到 Rancher,他们的 _授权_,也就是他们在系统中的访问权限,将由 _全局权限_ 和 _集群和项目角色_ 决定。 + +- [全局权限](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/global-permissions.md): + + 定义用户在任何特定集群之外的授权。 + +- [集群和项目角色](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/cluster-and-project-roles.md): + + 定义用户在分配了角色的特定集群或项目中的授权。 + +全局权限以及集群和项目角色都是基于 [Kubernetes RBAC](https://kubernetes.io/docs/reference/access-authn-authz/rbac/) 实现的。因此,权限和角色的底层实现是由 Kubernetes 完成的。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/monitoring-alerting-guides.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/monitoring-alerting-guides.md new file mode 100644 index 00000000000..f757e5e1aa5 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/monitoring-alerting-guides.md @@ -0,0 +1,13 @@ +--- +title: Monitoring 指南 +shortTitle: 指南 +weight: 4 +--- + +- [启用 monitoring](../how-to-guides/advanced-user-guides/monitoring-alerting-guides/enable-monitoring.md) +- [卸载 monitoring](../how-to-guides/advanced-user-guides/monitoring-alerting-guides/uninstall-monitoring.md) +- [Monitoring 工作负载](../how-to-guides/advanced-user-guides/monitoring-alerting-guides/set-up-monitoring-for-workloads.md) +- [自定义 Grafana 仪表板](../how-to-guides/advanced-user-guides/monitoring-alerting-guides/customize-grafana-dashboard.md) +- [持久化 Grafana 仪表板](../how-to-guides/advanced-user-guides/monitoring-alerting-guides/create-persistent-grafana-dashboard.md) +- [调试高内存使用率](../how-to-guides/advanced-user-guides/monitoring-alerting-guides/debug-high-memory-usage.md) +- [从 Monitoring V1 迁移到 V2](../how-to-guides/advanced-user-guides/monitoring-alerting-guides/migrate-to-rancher-v2.5+-monitoring.md) \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/monitoring-and-alerting.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/monitoring-and-alerting.md new file mode 100644 index 00000000000..65804397ede --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/monitoring-and-alerting.md @@ -0,0 +1,98 @@ +--- +title: 监控和告警 +shortTitle: 监控/告警 +description: Prometheus 允许你查看来自不同 Rancher 和 Kubernetes 对象的指标。了解监控范围以及如何启用集群监控 +weight: 13 +--- + +你可以使用 `rancher-monitoring` 应用,将业界领先的开源监控和告警解决方案快速部署到你的集群中。 + + +### 功能 + +Prometheus 支持查看 Rancher 和 Kubernetes 对象的指标。通过使用时间戳,Prometheus 能让你通过 Rancher UI 或 Grafana(与 Prometheus 一起部署的分析查看平台)以更容易阅读的图表和视觉形式来查询和查看这些指标。 + +通过查看 Prometheus 从集群的 controlplane、节点和 deployment 中抓取的数据,你可以随时了解集群中发生的所有事件。然后,你可以使用这些分析来更好地运行你的环境,例如在系统紧急情况发生之前阻止它们、制定维护策略,或恢复崩溃的服务器。 + +在 Rancher v2.5 中引入的 `rancher-monitoring` operator 由 [Prometheus](https://prometheus.io/)、[Grafana](https://grafana.com/grafana/)、[Alertmanager](https://prometheus.io/docs/alerting/latest/alertmanager/), [Prometheus Operator](https://github.com/prometheus-operator/prometheus-operator) 和 [Prometheus adapter](https://github.com/DirectXMan12/k8s-prometheus-adapter) 提供支持。 + +Monitoring 应用允许你: + +- 监控集群节点、Kubernetes 组件和软件部署的状态和进程 +- 根据 Prometheus 收集的指标定义告警 +- 创建自定义 Grafana 仪表板 +- 使用 Prometheus Alertmanager 通过电子邮件、Slack、PagerDuty 等配置告警通知 +- 根据 Prometheus 收集的指标,将预先计算的、经常需要的,或计算成本高的表达式定义为新的时间序列 +- 通过 Prometheus Adapter,将从 Prometheus 收集的指标公开给 Kubernetes Custom Metrics API,以便在 HPA 中使用 + +# Monitoring 的工作原理 + +有关 monitoring 组件如何协同工作的说明,请参阅[此页面](../explanations/integrations-in-rancher/monitoring-and-alerting/how-monitoring-works.md)。 + +# 默认组件和部署 + +### 内置仪表板 + +默认情况下,监控应用将 Grafana 仪表板(由 [kube-prometheus](https://github.com/prometheus-operator/kube-prometheus) 项目策划)部署到集群上。 + +它害部署一个 Alertmanager UI 和一个 Prometheus UI。有关这些工具的更多信息,请参见[内置仪表板](../explanations/integrations-in-rancher/monitoring-and-alerting/built-in-dashboards.md)。 +### 默认指标 Exporter + +默认情况下,Rancher Monitoring 会部署 Exporter(例如 [node-exporter](https://github.com/prometheus/node_exporter) 和 [kube-state-metrics](https://github.com/kubernetes/kube-state-metrics))。 + +这些默认 Exporter 会自动从 Kubernetes 集群的所有组件(包括工作负载)中抓取 CPU 和内存的指标。 + +### 默认告警 + +Monitoring 应用会默认部署一些告警。要查看默认告警,请转到 [Alertmanager UI](../explanations/integrations-in-rancher/monitoring-and-alerting/built-in-dashboards.md#alertmanager-ui) 并单击**展开所有组**。 + +### Rancher UI 中公开的组件 + +有关 Rancher UI 中公开的监控组件列表,以及编辑它们的常见用例,请参阅[本节](../explanations/integrations-in-rancher/monitoring-and-alerting/how-monitoring-works.md#rancher-ui-中公开的组件)。 + +# RBAC + +有关配置 monitoring 访问权限的信息,请参阅[此页面](../explanations/integrations-in-rancher/monitoring-and-alerting/rbac-for-monitoring.md)。 + +# 指南 + +- [启用 monitoring](../how-to-guides/advanced-user-guides/monitoring-alerting-guides/enable-monitoring.md) +- [卸载 monitoring](../how-to-guides/advanced-user-guides/monitoring-alerting-guides/uninstall-monitoring.md) +- [Monitoring 工作负载](../how-to-guides/advanced-user-guides/monitoring-alerting-guides/set-up-monitoring-for-workloads.md) +- [自定义 Grafana 仪表板](../how-to-guides/advanced-user-guides/monitoring-alerting-guides/customize-grafana-dashboard.md) +- [持久化 Grafana 仪表板](../how-to-guides/advanced-user-guides/monitoring-alerting-guides/create-persistent-grafana-dashboard.md) +- [调试高内存使用率](../how-to-guides/advanced-user-guides/monitoring-alerting-guides/debug-high-memory-usage.md) +- [从 Monitoring V1 迁移到 V2](../how-to-guides/advanced-user-guides/monitoring-alerting-guides/migrate-to-rancher-v2.5+-monitoring.md) + +# 配置 + +### 在 Rancher 中配置 Monitoring 资源 + +> 此处的配置参考假设你已经熟悉 monitoring 组件的协同工作方式。如需更多信息,请参阅 [monitoring 的工作原理](../explanations/integrations-in-rancher/monitoring-and-alerting/how-monitoring-works.md)。 + +- [ServiceMonitor 和 PodMonitor](../reference-guides/monitoring-v2-configuration/servicemonitors-and-podmonitors.md) +- [接收器](../reference-guides/monitoring-v2-configuration/receivers.md) +- [路由](../reference-guides/monitoring-v2-configuration/routes.md) +- [PrometheusRule](../how-to-guides/advanced-user-guides/monitoring-v2-configuration-guides/advanced-configuration/prometheusrules.md) +- [Prometheus](../how-to-guides/advanced-user-guides/monitoring-v2-configuration-guides/advanced-configuration/prometheus.md) +- [Alertmanager](../how-to-guides/advanced-user-guides/monitoring-v2-configuration-guides/advanced-configuration/alertmanager.md) + +### 配置 Helm Chart 选项 + +有关 `rancher-monitoring` Chart 选项的更多信息,包括设置资源限制和请求的选项,请参阅[此页面](../reference-guides/monitoring-v2-configuration/helm-chart-options.md)。 + +# Windows 集群支持 + +如果 Monitoring 部署到 RKE1 Windows 集群,Monitoring V2 将自动部署 [windows-exporter](https://github.com/prometheus-community/windows_exporter) DaemonSet 并设置 ServiceMonitor,以从每个部署的 Pod 中收集指标。这将使用 `windows_` 指标填充 Prometheus,这些指标与 [node_exporter](https://github.com/prometheus/node_exporter) 为 Linux 主机导出的 `node_` 指标类似。 + +为了能够为 Windows 完全部署 Monitoring V2,你的所有 Windows 主机都必须至少具有 v0.1.0 的 [wins](https://github.com/rancher/wins) 版本。 + +有关如何在现有 Windows 主机上升级 wins 版本的更多详细信息,请参阅 [Windows 集群对 Monitoring V2 的支持](../explanations/integrations-in-rancher/monitoring-and-alerting/windows-support.md)。 + + + +# 已知问题 + +有一个[已知问题](https://github.com/rancher/rancher/issues/28787#issuecomment-693611821),即 K3s 集群需要更多的默认内存。如果你在 K3s 集群上启用 monitoring,我们建议将 `prometheus.prometheusSpec.resources.memory.limit` 设置为 2500 Mi,并将 `prometheus.prometheusSpec.resources.memory.request` 设置为 1750 Mi。 + +有关调试高内存用量的提示,请参阅[此页面](../how-to-guides/advanced-user-guides/monitoring-alerting-guides/debug-high-memory-usage.md)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/monitoring-v2-configuration-guides.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/monitoring-v2-configuration-guides.md new file mode 100644 index 00000000000..f137ab076d8 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/monitoring-v2-configuration-guides.md @@ -0,0 +1,52 @@ +--- +title: 配置 +weight: 5 +--- + +本文介绍在 Rancher UI 中配置 Monitoring V2 的一些最重要选项。 + +有关为 Prometheus 配置自定义抓取目标和规则的信息,请参阅 [Prometheus Operator](https://github.com/prometheus-operator/prometheus-operator) 的上游文档。Prometheus Operator [设计文档](https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/design.md)中解释了一些最重要的自定义资源。Prometheus Operator 文档还可以帮助你设置 RBAC、Thanos 或进行自定义配置。 + +# 设置资源限制和请求 + +安装 `rancher-monitoring` 时可以配置 Monitoring 应用的资源请求和限制。有关默认限制的更多信息,请参阅[此页面](../reference-guides/monitoring-v2-configuration/helm-chart-options.md#配置资源限制和请求)。 + +:::note + +在空闲集群上,Monitoring V2 的 CPU 使用率(高达 70%)比 Monitoring V1 显著更高。要提高性能并获得与 Monitoring V1 类似的结果,请关闭 Prometheus Adapter。 + +::: + +# Prometheus 配置 + +通常不需要直接编辑 Prometheus 自定义资源。 + +相反,要让 Prometheus 抓取自定义指标,你只需创建一个新的 ServiceMonitor 或 PodMonitor 来将 Prometheus 配置为抓取其他指标。 + + +### ServiceMonitor 和 PodMonitor 配置 + +有关详细信息,请参阅[此页面](../reference-guides/monitoring-v2-configuration/servicemonitors-and-podmonitors.md)。 + +### 高级 Prometheus 配置 + +有关直接编辑 Prometheus 自定义资源(对高级用例可能有帮助)的更多信息,请参阅[此页面](../how-to-guides/advanced-user-guides/monitoring-v2-configuration-guides/advanced-configuration/prometheus.md)。 + +# Alertmanager 配置 + +Alertmanager 自定义资源通常不需要直接编辑。在常见用例中,你可以通过更新路由和接收器来管理告警。 + +路由和接收器是 Alertmanager 自定义资源配置的一部分。在 Rancher UI 中,路由(Route)和接收器(Receiver)并不是真正的自定义资源,而是 Prometheus Operator 用来将你的配置与 Alertmanager 自定义资源同步的伪自定义资源。当路由和接收器更新时,Monitoring 应用将自动更新 Alertmanager 来反映这些更改。 + +对于一些高级用例,你可能需要直接配置 Alertmanager。有关详细信息,请参阅[此页面](../how-to-guides/advanced-user-guides/monitoring-v2-configuration-guides/advanced-configuration/alertmanager.md)。 + +### 接收器 + +接收器(Receiver)用于设置通知。有关如何配置接收器的详细信息,请参阅[此页面](../reference-guides/monitoring-v2-configuration/receivers.md)。 +### 路由 + +路由(Route)在通知到达接收器之前过滤它们。每条路由都需要引用一个已经配置好的接收器。有关如何配置路由的详细信息,请参阅[此页面](../reference-guides/monitoring-v2-configuration/routes.md)。 + +### 高级配置 + +有关直接编辑 Alertmanager 自定义资源(对高级用例可能有帮助)的更多信息,请参阅[此页面](../how-to-guides/advanced-user-guides/monitoring-v2-configuration-guides/advanced-configuration/alertmanager.md)。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/monitoring-v2-configuration.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/monitoring-v2-configuration.md new file mode 100644 index 00000000000..6cd47ac5d10 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/monitoring-v2-configuration.md @@ -0,0 +1,11 @@ +--- +title: Monitoring V2 配置 +--- + +本文介绍了在 Rancher 中配置 Monitoring V2 的必要选项: + +- [接收器配置](../reference-guides/monitoring-v2-configuration/receivers.md) +- [路由配置](../reference-guides/monitoring-v2-configuration/routes.md) +- [ServiceMonitor 和 PodMonitor 配置](../reference-guides/monitoring-v2-configuration/servicemonitors-and-podmonitors.md) +- [Helm Chart 选项](../reference-guides/monitoring-v2-configuration/helm-chart-options.md) +- [示例](../reference-guides/monitoring-v2-configuration/examples.md) \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/new-user-guides.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/new-user-guides.md new file mode 100644 index 00000000000..7e46d5b69a8 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/new-user-guides.md @@ -0,0 +1,9 @@ +--- +title: 新用户指南 +--- + +新用户指南(也称为**教程**)描述了某些操作的实际步骤。这些文档是“学习导向”的,也就是说用户通过“操作”来学习。 + +新用户指南旨在引导初学者或 Rancher 的日常用户通过一系列步骤来学习如何进行某些操作。这些文档旨在帮助用户通过使用易于遵循、有意义且可重复的操作来了解如何完成任务。这些指南将帮助用户完成工作,并能立刻看到效果。 + +正常来说,普通 Rancher 用户的技术水平高于“初学者”,但是,我们的新用户指南为初学者以及经验丰富的 Rancher 用户提供相同的指导。我们结合使用了高级语言和技术语言来介绍各个主题,并指导用户完成 Rancher 用户需要了解的通用任务。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/node-template-configuration.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/node-template-configuration.md new file mode 100644 index 00000000000..fb2a50802d7 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/node-template-configuration.md @@ -0,0 +1,5 @@ +--- +title: 节点模板配置 +--- + +要了解节点模板配置,请参阅[EC2 节点模板配置](../reference-guides/cluster-configuration/downstream-cluster-configuration/node-template-configuration/amazon-ec2)、[DigitalOcean 节点模板配置](../reference-guides/cluster-configuration/downstream-cluster-configuration/node-template-configuration/digitalocean)、[Azure 节点模板配置](../reference-guides/cluster-configuration/downstream-cluster-configuration/node-template-configuration/azure)、[vSphere 节点模板配置](../reference-guides/cluster-configuration/downstream-cluster-configuration/node-template-configuration/vsphere)和 [Nutanix 节点模板配置](../reference-guides/cluster-configuration/downstream-cluster-configuration/node-template-configuration/nutanix)。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/nutanix.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/nutanix.md new file mode 100644 index 00000000000..00867300e35 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/nutanix.md @@ -0,0 +1,20 @@ +--- +title: 创建 Nutanix AOS 集群 +shortTitle: Nutanix +description: 使用 Rancher 创建 Nutanix AOS (AHV) 集群。集群可能包括具有不同属性的 VM 组,这些属性可用于细粒度控制节点的大小。 +metaDescription: 使用 Rancher 创建 Nutanix AOS (AHV) 集群。集群可能包括具有不同属性的 VM 组,这些属性可用于细粒度控制节点的大小。 +weight: 2225 +--- + +[Nutanix Acropolis 操作系统](https://www.nutanix.com/products/acropolis) (Nutanix AOS) 是适用于 Nutanix 超融合基础架构平台的操作系统。AOS 带有一个名为 [Acropolis Hypervisor(AHV)](https://www.nutanix.com/products/ahv)的内置虚拟机监控程序。你可以结合使用 Rancher 与 Nutanix AOS (AHV),从而在本地体验云环境的操作。 + +Rancher 可以在 AOS (AHV) 中配置节点并在其上安装 Kubernetes。在 AOS 中创建 Kubernetes 集群时,Rancher 首先与 Prism Central API 通信来配置指定数量的虚拟机。然后在虚拟机上安装 Kubernetes。 + +Nutanix 集群可能由多组具有不同属性(例如内存或 vCPU 数量)的 VM 组成。这种分组允许对每个 Kubernetes 角色的节点大小进行细粒度控制。 + +- [创建 Nutanix 集群](../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/use-new-nodes-in-an-infra-provider/nutanix/provision-kubernetes-clusters-in-aos.md#创建-nutanix-aos-集群) +- [配置存储](../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/use-new-nodes-in-an-infra-provider/nutanix/provision-kubernetes-clusters-in-aos) + +# 创建 Nutanix 集群 + +在[本节](../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/use-new-nodes-in-an-infra-provider/nutanix/provision-kubernetes-clusters-in-aos.md)中,你将学习如何使用 Rancher 在 Nutanix AOS 中安装 [RKE](https://rancher.com/docs/rke/latest/en/) Kubernetes 集群。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/other-cloud-providers.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/other-cloud-providers.md new file mode 100644 index 00000000000..0256a4f9585 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/other-cloud-providers.md @@ -0,0 +1,9 @@ +--- +title: 其他云提供商 +--- + +本文介绍了如何设置以下云提供商: + +- [Amazon 云提供商](../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/set-up-cloud-providers/other-cloud-providers/amazon.md) +- [Azure 云提供商](../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/set-up-cloud-providers/other-cloud-providers/azure.md) +- [谷歌 GCE 云提供商](../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/set-up-cloud-providers/other-cloud-providers/google-compute-engine.md) \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/other-installation-methods.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/other-installation-methods.md new file mode 100644 index 00000000000..bfedad1bece --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/other-installation-methods.md @@ -0,0 +1,20 @@ +--- +title: 其他安装方式 +weight: 3 +--- + +### 离线安装 + +按照[以下步骤](air-gapped-helm-cli-install.md)在离线环境中安装 Rancher Server。 + +离线环境可以是 Rancher Server 离线安装、防火墙后面或代理后面。 + +### Docker 安装 + +[单节点 Docker 安装](rancher-on-a-single-node-with-docker.md)适用于想要测试 Rancher 的用户。你无需使用 Helm 在 Kubernetes 集群上运行 Rancher,你可以使用 `docker run` 命令,把 Rancher Server 组件安装到单个节点上。 + +Docker 安装仅用于开发和测试环境。 + +由于只有一个节点和一个 Docker 容器,因此,如果该节点发生故障,由于其他节点上没有可用的 etcd 数据副本,你将丢失 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)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/other-troubleshooting-tips.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/other-troubleshooting-tips.md new file mode 100644 index 00000000000..926b9f10081 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/other-troubleshooting-tips.md @@ -0,0 +1,12 @@ +--- +title: 其他故障排除提示 +--- + +- [Kubernetes 资源](../troubleshooting/other-troubleshooting-tips/kubernetes-resources.md) +- [网络](../troubleshooting/other-troubleshooting-tips/networking.md) +- [DNS](../troubleshooting/other-troubleshooting-tips/dns.md) +- [Rancher HA](../troubleshooting/other-troubleshooting-tips/rancher-ha.md) +- [注册集群](../troubleshooting/other-troubleshooting-tips/registered-clusters.md) +- [Logging](../troubleshooting/other-troubleshooting-tips/logging.md) +- [审计日志中的用户 ID 跟踪](../troubleshooting/other-troubleshooting-tips/user-id-tracking-in-audit-logs.md) +- [轮换过期的 Webhook 证书](../troubleshooting/other-troubleshooting-tips/expired-webhook-certificate-rotation.md) \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/pipelines.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/pipelines.md new file mode 100644 index 00000000000..d055af0cfb0 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/pipelines.md @@ -0,0 +1,287 @@ +--- +title: 流水线 +weight: 10 +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +:::note 注意事项 + +- Rancher 2.5 开始已弃用基于 Git 的部署流水线。我们建议使用由 [Fleet](../how-to-guides/new-user-guides/deploy-apps-across-clusters/fleet.md) 提供支持的 Rancher Continuous Delivery (CD) 来处理流水线。如需在 Rancher 中访问 Fleet,请单击 ☰ > 持续交付。 + +- 不再支持 Kubernetes 1.21+ 中的流水线。 + +- Fleet 不会取代 Rancher 流水线,只是 Rancher 流水线现在由 Fleet 提供支持。 + +::: + +Rancher 的流水线提供了简单的 CI/CD 体验。你可以使用流水线来自动签出代码、运行构建或脚本、发布 Docker 镜像或商店应用,以及将更新的软件部署给用户。 + +设置流水线可以帮助开发者快速高效地上线新软件。你可以使用 Rancher 与 GitHub 仓库集成,从而设置持续集成(CI)流水线。 + +配置 Rancher 和 GitHub 后,你可以部署运行 Jenkins 的容器来自动化执行流水线: + +- 将应用代码构建为镜像。 +- 验证构建。 +- 将构建的镜像部署到集群。 +- 运行单元测试。 +- 运行回归测试。 + +:::note + +Rancher 的流水线提供简单的 CI/CD 体验,但不提供完整的功能和灵活性,也不能替代你团队正在使用的企业级 Jenkins 或其他 CI 工具。 + +::: + + +## 概念 + +有关本节中使用的概念和术语说明,请参阅[此页面](../reference-guides/pipelines/concepts.md)。 + +## 流水线的工作原理 + +为项目中启用流水线功能后,你可以在每个项目中配置多个流水线。每个流水线都是独一无二的,可以独立配置。 + +流水线是由一组签入源代码仓库的文件配置的。用户可以通过 Rancher UI 或通过将 `.rancher-pipeline.yml` 添加到仓库来配置流水线。 + +在配置流水线之前,你需要为版本控制提供商(例如 GitHub、GitLab 或 Bitbucket)配置身份验证。如果你还没有配置版本控制提供商,你可以随时使用 [Rancher 的示例仓库](../reference-guides/pipelines/example-repositories.md)来查看​​常见的流水线部署。 + +在项目中配置流水线时,会自动创建一个专门用于该流水线的命名空间。以下组件部署到它: + +- **Jenkins**: + + 流水线的构建引擎。由于项目用户不直接与 Jenkins 交互,因此 Jenkins 是被托管和锁定的。 + + :::note + + 没有使用现有 Jenkins deployment 作为流水线引擎的选项。 + + ::: + +- **Docker 镜像仓库**: + + 内部 Docker 镜像仓库是开箱即用,用于构建到发布步骤的默认目标。你也可以进行配置以推送到远程镜像仓库。内部 Docker 镜像仓库只能从集群节点访问,用户不能直接访问它。镜像不会在流水线的生命周期之外被持久化,并且只能在流水线运行使用。如果你需要在流水线运行之外访问镜像,请将镜像推送到外部镜像仓库。 + +- **Minio**: + + Minio 存储用于存储流水线执行的日志。 + +:::note + +托管的 Jenkins 实例是无状态工作的,因此你不用担心它的数据持久性。Docker 镜像仓库和 Minio 实例默认使用临时卷,这种做法适用于大多数用例。如果你想确保流水线日志能够在节点故障的情况下也能保存,你可以为它们配置持久卷(参见[流水线组件的数据持久性](../reference-guides/pipelines/configure-persistent-data.md))。 + +::: + +## 流水线的 RBAC + +如果你可以访问项目,则可以启用仓库来开始构建流水线。 + +只有[管理员](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/global-permissions.md)、[集群所有者或成员](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/cluster-and-project-roles.md#集群角色)或[项目所有者](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/cluster-and-project-roles.md#项目角色)可以配置版本控制提供商和管理全局流水线的执行设置。 + +项目成员只能配置仓库和流水线。 + +## 设置流水线 + +### 先决条件 + +:::note 旧版功能开关: + +由于流水线应用已被弃用并替换为 Fleet,因此在使用流水线之前,你需要打开旧版功能的功能开关。请注意,我们不再支持 Kubernetes 1.21+ 中的流水线。 + +1. 在左上角,单击 **☰ > 全局设置**。 +1. 单击**功能开关**。 +1. 转到`旧版应用 `功能开关并单击 **⋮ > 激活**。 + +::: + +1. [配置版本控制提供商](#1-配置版本控制提供商) +2. [配置仓库](#2-配置仓库) +3. [配置流水线](#3-配置流水线) + +### 1. 配置版本控制提供商 + +在为仓库配置流水线之前,你必须配置和授权版本控制提供商: + +- GitHub +- GitLab +- Bitbucket + +在下方选择你的提供商对应的选项卡,然后按照说明进行操作。 + + + + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 转到要配置流水线的集群,然后单击 **Explore**。 +1. 在顶部导航栏的下拉菜单中,选择要配置流水线的项目。 +1. 在左侧导航栏中,单击**旧版应用 > 项目 > 流水线**。 +1. 单击**配置**选项卡。 +1. 按照说明**设置 Github 应用**。Rancher 会将你重定向到 GitHub 以在 GitHub 中设置 OAuth 应用。 +1. 从 GitHub 复制 **Client ID** 和 **Client Secret**。将它们粘贴到 Rancher 中。 +1. 如果你使用的是企业版 GitHub,请选择**使用私有 GitHub 企业版安装**。输入 GitHub 安装的主机地址。 +1. 单击**验证**。 + + + + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 转到要配置流水线的集群,然后单击 **Explore**。 +1. 在顶部导航栏的下拉菜单中,选择要配置流水线的项目。 +1. 在左侧导航栏中,单击**旧版应用 > 项目 > 流水线**。 +1. 单击**配置**选项卡。 +1. 单击 **GitLab**。 +1. 按照说明**设置 GitLab 应用**。Rancher 会将你重定向到 GitLab。 +1. 从 GitLab 复制 **Application ID** 和 **Secret**。将它们粘贴到 Rancher 中。 +1. 如果你使用的是企业版 GitLab,请选择**使用私有 GitLab 企业版安装**。输入 GitLab 安装的主机地址。 +1. 单击**验证**。 + +:::note 注意事项: + +1. 流水线使用 GitLab [v4 API](https://docs.gitlab.com/ee/api/v3_to_v4.html),支持的 GitLab 版本为 9.0+。 +2. 如果你使用 GitLab 10.7+ 并且你的 Rancher 设置位于本地网络中,请在 GitLab 管理设置中启用 **Allow requests to the local network from hooks and services** 选项。 + + +::: + + + + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 转到要配置流水线的集群,然后单击 **Explore**。 +1. 在顶部导航栏的下拉菜单中,选择要配置流水线的项目。 +1. 在左侧导航栏中,单击**旧版应用 > 项目 > 流水线**。 +1. 单击**配置**选项卡。 +1. 单击 **Bitbucket** 并保留默认选中的**使用 Bitbucket Cloud**。 +1. 按照说明**设置 Bitbucket Cloud 应用**。Rancher 会将你重定向到 Bitbucket 以在 Bitbucket 中设置 OAuth 使用者。 +1. 从 Bitbucket 复制使用者 **Key** 和 **Secret**。将它们粘贴到 Rancher 中。 +1. 单击**验证**。 + + + + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 转到要配置流水线的集群,然后单击 **Explore**。 +1. 在顶部导航栏的下拉菜单中,选择要配置流水线的项目。 +1. 在左侧导航栏中,单击**旧版应用 > 项目 > 流水线**。 +1. 单击**配置**选项卡。 +1. 点击 **Bitbucket** 并选择**使用私有 Bitbucket Server 设置**选项。 +1. 按照说明**设置 Bitbucket Server 应用**。 +1. 输入 Bitbucket Server 安装的主机地址。 +1. 单击**验证**。 + +:::note + +Bitbucket server 在向 Rancher 发送 webhook 时需要进行 SSL 验证。请确保 Rancher server 的证书被 Bitbucket server 信任。有两种选择: + +1. 使用受信任的 CA 签发的证书来设置 Rancher server。 +1. 如果你使用的是自签名证书,请将 Rancher server 的证书导入 Bitbucket server。有关说明,请参阅 Bitbucket sever 文档以了解如何[配置自签名证书](https://confluence.atlassian.com/bitbucketserver/if-you-use-self-signed-certificates-938028692.html)。 + +::: + + + + +**结果**:版本控制提供商通过身份验证后,你将被自动重定向以配置你希望使用流水线的仓库。 + +### 2. 配置仓库 + +授权版本控制提供商后,你将被自动重定向以配置你希望使用流水线的仓库。即使其他人设置了版本控制提供商,你也能看到他们的仓库并构建流水线: + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 转到要配置流水线的集群,然后单击 **Explore**。 +1. 在顶部导航栏的下拉菜单中,选择要配置流水线的项目。 +1. 在左侧导航栏中,单击**旧版应用 > 项目 > 流水线**。 +1. 单击**配置仓库**。 + +1. 此处会显示仓库列表。如果你是第一次配置仓库,请单击 **Authorize & Fetch Your Own Repositories** 来获取你的仓库列表。 + +1. 在要设置流水线的仓库处单击**启用**。 + +1. 启用所有仓库后,单击**完成**。 + +**结果**:你有了一个可以配置流水线的仓库列表。 + +### 3. 配置流水线 + +现在仓库已添加到你的项目中。你可以通过添加自动化阶段和步骤来配置流水线。为方便起见,我们提供了多种用于特有任务的内置步骤类型。 + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 转到要配置流水线的集群,然后单击 **Explore**。 +1. 在顶部导航栏的下拉菜单中,选择要配置流水线的项目。 +1. 在左侧导航栏中,单击**旧版应用 > 项目 > 流水线**。 +1. 找到要设置流水线的仓库。 +1. 通过 UI 或使用仓库中的 YAML 文件(即 `.rancher-pipeline.yml` 或 `.rancher-pipeline.yaml`)配置流水线。流水线配置分为阶段和步骤。必须完全完成阶段后才能进入下一个阶段,但一个阶段中的步骤可以同时运行。你可以在每个阶段中添加不同的步骤类型。请注意,在构建步骤时,会根据步骤类型提供不同的高级选项。高级选项包括触发规则、环境变量和密文。有关通过 UI 或 YAML 文件配置流水线的更多信息,请参阅[流水线配置参考](../reference-guides/pipelines/pipeline-configuration.md)。 + + * 如果要使用 UI,请选择 **⋮ > 编辑配置**以使用 UI 配置流水线。配置流水线后,你必须查看 YAML 文件并将其推送到仓库。 + * 如果你要使用 YAML 文件,请选择 **⋮ > 查看/编辑 YAML** 来配置流水线。如果你使用 YAML 文件,你需要在更改文件后将更新的文件推送到仓库,以便更新仓库中的内容。在编辑流水线配置时,Rancher 需要花一些时间检查现有的流水线配置。 + +1. 从分支列表中选择要使用的`分支`。 + +1. 可选:设置通知。 + +1. 设置流水线的触发规则。 + +1. 为流水线输入**超时**。 + +1. 配置完所有阶段和步骤后,单击**完成**。 + +**结果** :你的流水线已配置好并可以运行了。 + + +## 流水线配置参考 + +参见[此页面](../reference-guides/pipelines/pipeline-configuration.md)以了解如何通过配置流水线实现以下目的: + +- 运行脚本 +- 构建和发布镜像 +- 发布应用商店模板 +- 部署 YAML +- 部署商店应用 + +配置参考还包括如何配置: + +- 通知 +- 超时 +- 触发流水线的规则 +- 环境变量 +- 密文 + + +## 运行流水线 + +首次运行你的流水线。找到你的流水线并选择 **⋮ > 运行**。 + +在此初始运行期间将测试你的流水线。以下流水线组件将作为工作负载部署到你的项目专用于该流水线的命名空间: + +- `docker-registry` +- `jenkins` +- `minio` + +这个过程需要几分钟。完成后,你可以从项目的**工作负载**选项卡中查看每个流水线组件。 + +## 触发流水线 + +启用仓库后,会在版本控制提供商中自动设置 webhook。默认情况下,流水线会由 **push** 事件触发到仓库,但你也可以修改触发运行流水线的事件。 + +可用事件: + +* **Push**:当提交被推送到仓库中的分支时,触发流水线。 +* **Pull Request**:对仓库发起 PR 时,触发流水线。 +* **Tag**:在仓库中创建标签时,触发流水线。 + +:::note + +Rancher 的[示例仓库](../reference-guides/pipelines/example-repositories.md)不存在此选项。 + +::: + +### 修改仓库的事件触发器 + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 转到要配置流水线的集群,然后单击 **Explore**。 +1. 在顶部导航栏的下拉菜单中,选择要配置流水线的项目。 +1. 在左侧导航栏中,单击**旧版应用 > 项目 > 流水线**。 +1. 找到要修改事件触发器的仓库。选择 **⋮ > 设置**。 +1. 为仓库选择所需的事件触发器(**Push**、**Pull Request** 或 **Tag**)。 +1. 单击**保存**。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/prometheus-federator-guides.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/prometheus-federator-guides.md new file mode 100644 index 00000000000..742fd54b6fe --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/prometheus-federator-guides.md @@ -0,0 +1,8 @@ +--- +title: Prometheus Federator 指南 +--- + +- [启用 Prometheus Operator](../how-to-guides/advanced-user-guides/monitoring-alerting-guides/prometheus-federator-guides/enable-prometheus-federator.md) +- [卸载 Prometheus Operator](../how-to-guides/advanced-user-guides/monitoring-alerting-guides/prometheus-federator-guides/uninstall-prometheus-federator.md) +- [自定义 Grafana 仪表板](../how-to-guides/advanced-user-guides/monitoring-alerting-guides/prometheus-federator-guides/customize-grafana-dashboards.md) +- [设置工作负载](../how-to-guides/advanced-user-guides/monitoring-alerting-guides/prometheus-federator-guides/set-up-workloads.md) \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/prometheus-federator.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/prometheus-federator.md new file mode 100644 index 00000000000..f35a6d2fe7c --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/prometheus-federator.md @@ -0,0 +1,105 @@ +--- +title: Prometheus Federator +weight: 7 +--- + +Prometheus Federator(也称为 Project Monitoring V2)基于 [rancher/helm-project-operator](https://github.com/rancher/helm-project-operator) 部署一个 Helm Project Operator。该 Operator 管理 Helm Chart 的部署,每个 Operator 都包含一个 Project Monitoring Stack,而每个堆栈都包含: + +- [Prometheus](https://prometheus.io/)(由 [Prometheus Operator](https://github.com/prometheus-operator/prometheus-operator) 在外部管理) +- [Alertmanager](https://prometheus.io/docs/alerting/latest/alertmanager/)(由 [Prometheus Operator](https://github.com/prometheus-operator/prometheus-operator) 在外部管理) +- [Grafana](https://github.com/helm/charts/tree/master/stable/grafana)(通过嵌入式 Helm Chart 部署) +- 基于 [kube-prometheus](https://github.com/prometheus-operator/kube-prometheus/) 社区策划资源集合的默认 PrometheusRules 和 Grafana 仪表板 +- 监视已部署资源的默认 ServiceMonitor + +:::note 重要提示: + +Prometheus Federator 适合在已安装 Prometheus Operator CRD 的集群中与现有的 Prometheus Operator Deployment 一起部署。 + +::: + +## Operator 工作原理 + +1. 在部署此 Chart 时,用户可以创建 ProjectHelmCharts CR,并在**项目 Registration 命名空间 (`cattle-project-`)** 中将 `spec.helmApiVersion` 设置为 `monitoring.cattle.io/v1alpha1`(在 Rancher UI 中也称为“项目监控”)。 +2. 在看到每个 ProjectHelmChartCR 时,Operator 会代表项目所有者在**项目 Release 命名空间 (`cattle-project--monitoring`)** 中自动部署一个 Project Prometheus 堆栈(基于 ProjectHelmChart 控制器在 **Operator / System Namespace** 中创建的 HelmChart CR 和 HelmRelease CR)。 +3. RBAC 将自动分配到项目 Release 命名空间中,从而允许用户查看 Prometheus、Alertmanager 以及已部署的 Project Monitoring Stack 的 Grafana UI(基于在项目 Registration 命名空间上针对[面向用户的默认 Kubernetes 角色](https://kubernetes.io/docs/reference/access-authn-authmonitoring-alerting/prometheus-federator/rbac#user-facing-roles)定义的 RBAC)。有关详细信息,请参阅[配置 RBAC](../reference-guides/prometheus-federator/rbac.md)。 + +### 什么是项目? + +在 Prometheus Federator 中,项目是一组可以由 `metav1.LabelSelector` 标识的命名空间。默认情况下,用于标识项目的标签是 `field.cattle.io/projectId`,该标签用于标识给定 Rancher 项目中包含的命名空间。 + +### 配置由 ProjectHelmChart 创建的 Helm 版本 + +此 ProjectHelmChart 资源的 `spec.values` 对应于为底层 Helm Chart 配置的 `values.yaml` 覆盖,该 Helm Chart 是 Operator 代表用户部署的。要查看底层 Chart 的 `values.yaml` 规范,你可以选择以下其中一种方式: + +- 查看位于 [`charts/rancher-project-monitoring` 中的 `rancher/prometheus-federator`](https://github.com/rancher/prometheus-federator/blob/main/charts/rancher-project-monitoring) 的 Chart 定义(Chart 版本会绑定到 Operator 版本)。 +- 查找在每个项目 Registration 命名空间中自动创建的名为 `monitoring.cattle.io.v1alpha1` 的 ConfigMap,其中包含用于配置 Chart(直接嵌入到 `prometheus-federator` 二进制文件中)的`values.yaml` 和 `questions.yaml`。 + +### 命名空间 + +Prometheus Federator 是基于 [rancher/helm-project-operator](https://github.com/rancher/helm-project-operator) 的 Project Operator,Prometheus Federator 提供了三类命名空间供 Operator 查找: + +1. **Operator / System 命名空间**:部署 Operator 的命名空间(例如 `cattle-monitoring-system`)。此命名空间将包含该 Operator 监视的所有 ProjectHelmChart 的所有 HelmChart 和 HelmRelease。**只有集群管理员才能访问此命名空间**。 + +2. **项目 Registration 命名空间 (`cattle-project-`)**:Operator 在这些命名空间中监视 ProjectHelmChart。对于在项目发布命名空​​间中创建的自动分配的 RBAC,应用于此命名空间的 RoleBinding 和 ClusterRoleBinding 也会作为 RBAC 的真实来源。有关详细信息,请参阅 [RBAC 页面](../reference-guides/prometheus-federator/rbac.md)。**项目所有者(admin)、项目成员(edit)和只读成员(view)应该有权访问此命名空间。** + + :::note 注意事项: + + - 如果提供了 `.Values.global.cattle.projectLabel`(默认设置为 `field.cattle.io/projectId`),则 Operator 会自动生成项目注册命名空间,并将它导入到命名空间绑定的项目中。换言之,如果观察到至少一个带有该标签的命名空间,则 Operator 会创建一个项目 Registration 命名空间。除非出现以下两种情况,否则 Operator 不会让这些命名空间被删除。第一种情况是带有该标签的所有命名空间都消失了(例如,这是该项目中的最后一个命名空间,在这种情况下,命名空间将标有标签 `"helm.cattle.io/helm-project-operator-orphaned": "true"`,表示可以删除)。第二种情况是由于项目 ID 是在 `.Values.helmProjectOperator.otherSystemProjectLabelValues` 下提供的(用作项目的拒绝名单),导致 Operator 不再监视该项目。这些命名空间不会被自动删除,这样能避免破坏用户数据。如果需要,建议用户在创建或删除项目时手动清理这些命名空间。 + + - 如果未提供 `.Values.global.cattle.projectLabel`,则 Operator / System 命名空间也是项目注册命名空间。 + + ::: + +3. **项目发布命名空​​间(`cattle-project--monitoring`)**:Operator 代表 ProjectHelmChart 在其中部署项目监控堆栈的命名空间集。Operator 还将根据在项目 Registration 命名空间中找到的绑定,自动为项目监控堆栈在此命名空间中创建的角色分配 RBAC。**只有集群管理员才能访问这个命名空间。部署的 Helm Chart 和 Prometheus Federator 将为项目所有者(admin)、项目成员(edit)和只读成员(view)分配该命名空间的有限访问权限。** + + :::note 注意事项: + + - 项目发布命名空间会自动部署并导入到 ID 在 `.Values.helmProjectOperator.projectReleaseNamespaces.labelValue` 下指定的项目中,如果未指定,且项目注册命名空间中指定了 ProjectHelmChart,则默认为 `.Values.global.cattle.systemProjectId` 的值。 + + - 项目发布命名空​​间的孤立约定与项目注册命名空间的相同(参见上面的注释)。 + + - 如果 `.Values.projectReleaseNamespaces.enabled` 为 false,则项目发布命名空​​间与项目注册命名空间是相同的。 + + ::: + +### Helm 资源(HelmChart、HelmRelease) + +在部署 ProjectHelmChart 时,Prometheus Federator 将自动创建和管理两个子自定义资源,它们依次管理以下底层 Helm 资源: + +- HelmChart CR(通过 Operator 中的嵌入式 [k3s-io​​/helm-contoller](https://github.com/k3s-io/helm-controller) 管理):此自定义资源会根据应用到 HelmChart CR 的变更,在触发 `helm install`、`helm upgrade` 或 `helm uninstall` 的同一命名空间中自动创建一个 Job。此 CR 会根据 ProjectHelmChart 的更改(例如,修改 `values.yaml`)或底层项目定义的更改(例如,从项目中添加或删除命名空间)自动更新。 + +:::note 重要提示: + +如果 ProjectHelmChart 没有部署或更新底层项目监控堆栈,你可以先使用此资源在 Operator / System 命名空间中创建的 Job 来检查 Helm 操作是否有问题。通常只能由**集群管理员访问**。 + +::: + +- HelmRelease CR(通过 Operator 中的嵌入式 [rancher/helm-locker](https://github.com/rancher/helm-locker) 管理):此自定义资源会自动锁定已部署的 Helm 版本并自动覆盖对底层资源的更新,除非更改是 Helm 操作导致的(`helm install`、`helm upgrade` 或 `helm uninstall` 由 HelmChart CR 执行)。 + +:::note + +HelmRelease CR 会发出 Kubernetes 事件,用于检测底层 Helm 版本修改并将其锁定回原位。要查看这些事件,你可以使用 `kubectl describe helmrelease -n `。你还可以查看此 Operator 的日志,了解检测到更改的时间以及哪些资源被尝试更改。 + +::: + +这两种资源都是为 Operator / System 命名空间中的所有 Helm Chart 创建的,用于避免低权限用户的权限升级。 + +### 高级 Helm Project Operator 配置 + +有关高级配置的更多信息,请参阅[此页面](https://github.com/rancher/prometheus-federator/blob/main/charts/prometheus-federator/0.0.1/README.md#advanced-helm-project-operator-configuration)。 + + + +### Local 集群上的 Prometheus Federator + +Prometheus Federator 是一个资源密集型应用程序。你可以将其安装到 Local 集群(**不推荐**)。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/provisioning-storage-examples.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/provisioning-storage-examples.md new file mode 100644 index 00000000000..86042e508e3 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/provisioning-storage-examples.md @@ -0,0 +1,12 @@ +--- +title: 配置存储示例 +weight: 3053 +--- + +Rancher 通过各种卷插件来支持持久存储。但是,在使用这些插件将持久存储绑定到工作负载之前,无论是使用云解决方案还是你自己管理的本地解决方案,你都必须先配置存储本身。 + +为了你的方便,Rancher 提供了配置主流存储的参考文档: + +- [NFS](../how-to-guides/advanced-user-guides/manage-clusters/create-kubernetes-persistent-storage/provisioning-storage-examples/nfs-storage.md) +- [vSphere](../how-to-guides/advanced-user-guides/manage-clusters/create-kubernetes-persistent-storage/provisioning-storage-examples/vsphere-storage.md) +- [EBS](../how-to-guides/advanced-user-guides/manage-clusters/create-kubernetes-persistent-storage/provisioning-storage-examples/persistent-storage-in-amazon-ebs.md) diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/quick-start-guides.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/quick-start-guides.md new file mode 100644 index 00000000000..e7190ca9855 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/quick-start-guides.md @@ -0,0 +1,21 @@ +--- +title: Rancher 部署快速入门指南 +metaDescription: 快速开始 Rancher 部署和测试。本章节包含 Rancher 的简单设置和一些常见用例的说明。 +short title: 快速开始 Rancher 部署和测试。本章节包含 Rancher 的简单设置和一些常见用例的说明。 +weight: 2 +aliases: + - /rancher/v2.x/en/quick-start-guide/ +--- +:::caution + +本章节中提供的指南,旨在帮助你快速启动一个用于 Rancher 的沙盒,以评估 Rancher 是否能满足你的使用需求。快速入门指南不适用于生产环境。如果你需要获取生产环境的操作指导,请参见[安装](installation-and-upgrade.md)。 + +::: + +你可以阅读本章节,以快速开始部署和测试 Rancher 2.x。本章节包含 Rancher 的简单设置和一些常见用例的说明。未来,我们会在本章节中添加更多内容。 + +我们提供以下快速入门指南: + +- [部署 Rancher Server](deploy-rancher-manager.md):使用最方便的方式运行 Rancher。 + +- [部署工作负载](deploy-rancher-workloads.md):部署一个简单的[工作负载](https://kubernetes.io/docs/concepts/workloads/)并公暴露工作负载,以从集群外部访问工作负载。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/rancher-behind-an-http-proxy.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/rancher-behind-an-http-proxy.md new file mode 100644 index 00000000000..fd2d938cb3a --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/rancher-behind-an-http-proxy.md @@ -0,0 +1,14 @@ +--- +title: 使用 HTTP 代理安装 Rancher +weight: 4 +--- + +很多企业本地运行的服务器或虚拟机不能直接访问互联网,但是出于安全考虑,他们必须通过 HTTP(S) 代理连接到外部服务。本教程将分步介绍如何在这样的环境中进行高可用的 Rancher 安装。 + +另外,用户也可以在没有任何互联网访问的情况下离线设置 Rancher。详情请参见 [Rancher 官方文档](air-gapped-helm-cli-install.md)。 + +# 安装概要 + +1. [配置基础设施](../getting-started/installation-and-upgrade/other-installation-methods/rancher-behind-an-http-proxy/set-up-infrastructure.md) +2. [配置 Kubernetes 集群](../getting-started/installation-and-upgrade/other-installation-methods/rancher-behind-an-http-proxy/install-kubernetes.md) +3. [安装 Rancher](../getting-started/installation-and-upgrade/other-installation-methods/rancher-behind-an-http-proxy/install-rancher.md) diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/rancher-managed-clusters.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/rancher-managed-clusters.md new file mode 100644 index 00000000000..bef122dad11 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/rancher-managed-clusters.md @@ -0,0 +1,21 @@ +--- +title: Rancher 管理集群的最佳实践 +shortTitle: Rancher 管理的集群 +weight: 2 +--- + +### Logging + +有关集群级别日志和应用日志的建议,请参见 [Logging 最佳实践](../reference-guides/best-practices/rancher-managed-clusters/logging-best-practices.md)。 + +### Monitoring + +配置合理的监控和告警规则对于安全、可靠地运行生产环境中的工作负载至关重要。有关更多建议,请参阅[最佳实践](../reference-guides/best-practices/rancher-managed-clusters/monitoring-best-practices.md)。 + +### 设置容器的技巧 + +配置良好的容器可以极大地提高环境的整体性能和安全性。有关容器设置的建议,请参见[设置容器的技巧](../reference-guides/best-practices/rancher-managed-clusters/tips-to-set-up-containers.md)。 + +### Rancher 管理 vSphere 集群的最佳实践 + +[Rancher 管理 vSphere 集群的最佳实践](../reference-guides/best-practices/rancher-managed-clusters/rancher-managed-clusters-in-vsphere.md)概述了在 vSphere 环境中配置下游 Rancher 集群的参考架构,以及 VMware 记录的标准 vSphere 最佳实践。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/rancher-manager-architecture.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/rancher-manager-architecture.md new file mode 100644 index 00000000000..e52f863d76a --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/rancher-manager-architecture.md @@ -0,0 +1,18 @@ +--- +title: 架构 +weight: 1 +--- + +本章节重点介绍 [Rancher Server 及其组件](../reference-guides/rancher-manager-architecture/rancher-server-and-components.md) 以及 [Rancher 如何与下游 Kubernetes 集群通信](../reference-guides/rancher-manager-architecture/communicating-with-downstream-user-clusters.md)。 + +有关安装 Rancher 的不同方式的信息,请参见[安装选项概述](installation-and-upgrade.md#安装方式概述)。 + +有关 Rancher API Server 的主要功能,请参见[概述](../getting-started/introduction/overview.md#rancher-api-server-的功能)。 + +有关如何为 Rancher Server 设置底层基础架构,请参见[架构推荐](../reference-guides/rancher-manager-architecture/architecture-recommendations.md)。 + +:::note + +本节默认你已对 Docker 和 Kubernetes 有一定的了解。如果你需要了解 Kubernetes 组件如何协作,请参见 [Kubernetes 概念](../reference-guides/kubernetes-concepts.md)。 + +::: \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/rancher-on-a-single-node-with-docker.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/rancher-on-a-single-node-with-docker.md new file mode 100644 index 00000000000..9342995c2b2 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/rancher-on-a-single-node-with-docker.md @@ -0,0 +1,208 @@ +--- +title: 使用 Docker 将 Rancher 安装到单个节点中 +description: 在开发和测试环境中,你可以使用 Docker 安装。在单个 Linux 主机上安装 Docker,然后使用一个 Docker 容器部署 Rancher。 +weight: 2 +--- + +Rancher 可以通过运行单个 Docker 容器进行安装。 + +在这种安装方案中,你需要将 Docker 安装到单个 Linux 主机,然后使用单个 Docker 容器将 Rancher 部署到主机中。 + +:::note 想要使用外部负载均衡器? + +请参阅[使用外部负载均衡器的 Docker 安装](../getting-started/installation-and-upgrade/advanced-options/advanced-use-cases/configure-layer-7-nginx-load-balancer.md)。 + +::: + +Rancher 的 Docker 安装仅推荐用于开发和测试环境中。Rancher 版本决定了能否将 Rancher 迁移到高可用集群。 + +Rancher backup operator 可将 Rancher 从单个 Docker 容器迁移到高可用 Kubernetes 集群上。详情请参见[把 Rancher 迁移到新集群](../how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/migrate-rancher-to-new-cluster.md)。 + +### Rancher 特权访问 + +当 Rancher Server 部署在 Docker 容器中时,容器内会安装一个本地 Kubernetes 集群供 Rancher 使用。为 Rancher 的很多功能都是以 deployment 的方式运行的,而在容器内运行容器是需要特权模式的,因此你需要在安装 Rancher 时添加 `--privileged` 选项。 + +# 操作系统,Docker,硬件和网络要求 + +请确保你的节点满足常规的[安装要求](installation-requirements.md)。 + +# 1. 配置 Linux 主机 + +按照[要求](installation-requirements.md)配置一个 Linux 主机,用于运行 Rancher Server。 + +# 2. 选择一个 SSL 选项并安装 Rancher + +出于安全考虑,使用 Rancher 时请使用 SSL(Secure Sockets Layer)。SSL 保护所有 Rancher 网络通信(如登录和与集群交互)的安全。 + +:::tip 你是否需要: + +- 使用代理。参见 [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-证书)。 +- 完成离线安装。参见 [离线:Docker 安装](air-gapped-helm-cli-install.md)。 +- 记录所有 Rancher API 的事务。参加 [API 审计](../reference-guides/single-node-rancher-in-docker/advanced-options.md#api-审计日志)。 + +::: + +选择以下的选项之一: + +- [选项 A:使用 Rancher 生成的默认自签名证书](#选项-a:使用-rancher-生成的默认自签名证书) +- [选项 B:使用你自己的证书 - 自签名](#选项-b:使用你自己的证书---自签名) +- [选项 C:使用你自己的证书 - 可信 CA 签名的证书](#选项-c:使用你自己的证书---可信-ca-签名的证书) +- [选项 D:Let's Encrypt 证书](#选项-d:let's-encrypt-证书) +- [选项 E:Localhost 隧道,不使用证书](#选项-e:localhost-隧道,不使用证书) + +### 选项 A:使用 Rancher 生成的默认自签名证书 + +如果你在不考虑身份验证的开发或测试环境中安装 Rancher,可以使用 Rancher 生成的自签名证书安装 Rancher。这种安装方式避免了自己生成证书的麻烦。 + +登录到你的主机,然后运行以下命令: + +``` +docker run -d --restart=unless-stopped \ + -p 80:80 -p 443:443 \ + --privileged \ + rancher/rancher:latest +``` + +### 选项 B:使用你自己的证书 - 自签名 +在你团队访问 Rancher Server 的开发或测试环境中,创建一个用于你的安装的自签名证书,以便团队验证他们对实例的连接。 + +:::note 先决条件: + +使用 [OpenSSL](https://www.openssl.org/) 或其他方法创建自签名证书。 + +- 证书文件的格式必须是 PEM。 +- 在你的证书文件中,包括链中的所有中间证书。你需要对你的证书进行排序,把你的证书放在最前面,后面跟着中间证书。如需查看示例,请参见[证书故障排除](../getting-started/installation-and-upgrade/other-installation-methods/rancher-on-a-single-node-with-docker/certificate-troubleshooting.md)。 + +::: + +创建证书后,运行以下 Docker 命令以安装 Rancher。使用 `-v` 标志并提供证书的路径,以将证书挂载到容器中。 + +| 占位符 | 描述 | +| ------------------- | --------------------- | +| `` | 包含证书文件的目录的路径。 | +| `` | 完整证书链的路径。 | +| `` | 证书私钥的路径。 | +| `` | CA 证书的路径。 | + +登录到你的主机,然后运行以下命令: + +``` +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 \ + --privileged \ + rancher/rancher:latest +``` + +### 选项 C:使用你自己的证书 - 可信 CA 签名的证书 + +在公开暴露应用的生产环境中,请使用由可信 CA 签名的证书,以避免用户收到证书安全警告。 + +不建议将 Docker 安装用于生产环境。这些说明仅适用于测试和开发。 + +:::note 先决条件: + +- 证书文件的格式必须是 PEM。 +- 在你的证书文件中,包括可信 CA 提供的所有中间证书。你需要对你的证书进行排序,把你的证书放在最前面,后面跟着中间证书。如需查看示例,请参见[证书故障排除](../getting-started/installation-and-upgrade/other-installation-methods/rancher-on-a-single-node-with-docker/certificate-troubleshooting.md)。 + +::: + +获取证书后,运行以下 Docker 命令。 + +- 使用 `-v` 标志并提供证书的路径,以将证书挂载到容器中。因为你的证书是由可信的 CA 签名的,因此你不需要安装额外的 CA 证书文件。 +- 使用 `--no-cacerts` 作为容器的参数,以禁用 Rancher 生成的默认 CA 证书。 + +| 占位符 | 描述 | +| ------------------- | ----------------------------- | +| `` | 包含证书文件的目录的路径。 | +| `` | 完整证书链的路径。 | +| `` | 证书私钥的路径。 | + +登录到你的主机,然后运行以下命令: + +``` +docker run -d --restart=unless-stopped \ + -p 80:80 -p 443:443 \ + -v //:/etc/rancher/ssl/cert.pem \ + -v //:/etc/rancher/ssl/key.pem \ + --privileged \ + rancher/rancher:latest \ + --no-cacerts +``` + +### 选项 D:Let's Encrypt 证书 + +:::caution + +Let's Encrypt 对新证书请求有频率限制。因此,请限制创建或销毁容器的频率。详情请参见 [Let's Encrypt 官方文档 - 频率限制](https://letsencrypt.org/docs/rate-limits/)。 + +::: + +你也可以在生产环境中使用 [Let's Encrypt](https://letsencrypt.org/) 证书。Let's Encrypt 使用 HTTP-01 质询来验证你对域名的控制权。如果要确认你对该域名有控制权,你可将用于访问 Rancher 的主机名(例如 `rancher.mydomain.com`)指向运行的主机的 IP。你可通过在 DNS 中创建 A 记录,以将主机名绑定到 IP 地址。 + +不建议将 Docker 安装用于生产环境。这些说明仅适用于测试和开发。 + +:::note 先决条件: + +- Let's Encrypt 是联网服务。因此,在内网和离线环境中不能使用。 +- 在 DNS 中创建一条记录,将 Linux 主机 IP 地址绑定到要用于访问 Rancher 的主机名(例如,`rancher.mydomain.com`)。 +- 在 Linux 主机上打开 `TCP/80` 端口。Let's Encrypt 的 HTTP-01 质询可以来自任何源 IP 地址,因此端口 `TCP/80` 必须开放开所有 IP 地址。 + +::: + +满足先决条件后,你可以运行以下命令使用 Let's Encrypt 证书安装 Rancher。 + +| 占位符 | 描述 | +| ----------------- | ------------------- | +| `` | 你的域名地址 | + +登录到你的主机,然后运行以下命令: + +``` +docker run -d --restart=unless-stopped \ + -p 80:80 -p 443:443 \ + --privileged \ + rancher/rancher:latest \ + --acme-domain +``` + +### 选项 E:Localhost 隧道,不使用证书 + +如果你在开发或测试环境中安装 Rancher,且环境中有运行的 localhost 隧道解决方案(如 [ngrok](https://ngrok.com/)),不要生成证书。此安装选项不需要证书。 + +- 使用 `--no-cacerts` 作为参数,以禁用 Rancher 生成的默认 CA 证书。 + +登录到你的主机,然后运行以下命令: + +``` +docker run -d --restart=unless-stopped \ + -p 80:80 -p 443:443 \ + --privileged \ + rancher/rancher:latest \ + --no-cacerts +``` + +## 高级选项 + +使用 Docker 将 Rancher 安装到单个节点时,有如下几个可开启的高级选项: + +- 自定义 CA 证书 +- API 审计日志 +- TLS 设置 +- 离线环境 +- 持久化数据 +- 在同一个节点中运行 `rancher/rancher` 和 `rancher/rancher-agent` + +详情请参见[本页](../reference-guides/single-node-rancher-in-docker/advanced-options.md)。 + +## 故障排除 + +如需了解常见问题及故障排除提示,请参见[本页](../getting-started/installation-and-upgrade/other-installation-methods/rancher-on-a-single-node-with-docker/certificate-troubleshooting.md)。 + +## 后续操作 + +- **推荐**:检查单节点[备份](../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 集群](kubernetes-clusters-in-rancher-setup.md)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/rancher-security.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/rancher-security.md new file mode 100644 index 00000000000..43a072e8ba9 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/rancher-security.md @@ -0,0 +1,89 @@ +--- +title: 安全 +weight: 20 +aliases: + - /rancher/v2.x/en/security/ +--- + + + + + + + +
+

安全策略

+

Rancher Labs 会负责任地披露问题,并致力于在合理的时间内解决所有问题。

+
+

报告过程

+

请将安全问题发送至 security-rancher@suse.com

+
+

公告

+

订阅 Rancher 公告论坛以获取版本更新。

+
+ +安全是 Rancher 全部功能的基础。Rancher 集成了全部主流身份验证工具和服务,并提供了企业级的 [RBAC 功能](manage-role-based-access-control-rbac.md),让你的 Kubernetes 集群更加安全。 + +本文介绍了安全相关的文档以及资源,让你的 Rancher 安装和下游 Kubernetes 集群更加安全。 +### NeuVector 与 Rancher 的集成 + +_2.6.5 的新功能_ + +NeuVector 是一个开源的、以容器为中心的安全应用程序,现已集成到 Rancher 中。NeuVector 提供生产安全、DevOps 漏洞保护和容器防火墙等功能。请参阅 [Rancher 文档](../explanations/integrations-in-rancher/neuvector.md)和 [NeuVector 文档](https://open-docs.neuvector.com/)了解更多信息。 + +### 在 Kubernetes 集群上运行 CIS 安全扫描 + +Rancher 使用 [kube-bench](https://github.com/aquasecurity/kube-bench) 来运行安全扫描,从而检查 Kubernetes 是否按照 [CIS](https://www.cisecurity.org/cis-benchmarks/)(Center for Internet Security,互联网安全中心)Kubernetes Benchmark 中定义的安全最佳实践进行部署。 + +CIS Kubernetes Benchmark 是一个参考文档,用于为 Kubernetes 建立安全配置基线。 + +CIS 是一个 501(c\)(3) 非营利组织,成立于 2000 年 10 月,其使命是识别、开发、验证、促进和维持网络防御的最佳实践方案,并建立和指导社区,以在网络空间中营造信任的环境。 + +CIS Benchmark 是目标系统安全配置的最佳实践。CIS Benchmark 是由安全专家、技术供应商、公开和私人社区成员,以及 CIS Benchmark 开发团队共同志愿开发的。 + +Benchmark 提供两种类型的建议,分别是自动(Automated)和手动(Manual)。我们只运行 Automated 相关的测试。 + +Rancher 在集群上运行 CIS 安全扫描时会生成一份报告,该报告会显示每个测试的结果,包括测试概要以及 `passed`、`skipped` 和 `failed` 的测试数量。报告还包括失败测试的修正步骤。 + +有关详细信息,请参阅[安全扫描](cis-scan-guides.md)。 + +### SELinux RPM + +[安全增强型 Linux (SELinux)](https://en.wikipedia.org/wiki/Security-Enhanced_Linux) 是对 Linux 的安全增强。被政府机构使用之后,SELinux 已成为行业标准,并在 CentOS 7 和 8 上默认启用。 + +我们提供了 `rancher-selinux` 和 `rke2-selinux` 两个 RPM(Red Hat 软件包),让 Rancher 产品能够在 SELinux 主机上正常运行。有关详细信息,请参阅[此页面](selinux-rpm.md)。 + +### Rancher 强化指南 + +Rancher 强化指南基于 CIS Kubernetes Benchmark。 + +强化指南为强化 Rancher 的生产安装提供了说明性指导。有关安全管控的完整列表,请参阅 Rancher 的 [CIS Kubernetes Benchmark自我评估指南](#cis-benchmark-和自我评估)。 + +> 强化指南描述了如何保护集群中的节点,建议在安装 Kubernetes 之前参考强化指南中的步骤。 + +每个强化指南版本都针对特定的 CIS Kubernetes Benchmark、Kubernetes 和 Rancher 版本。 + +### CIS Benchmark 和自我评估 + +Benchmark 自我评估是 Rancher 安全强化指南的辅助。强化指南展示了如何强化集群,而 Benchmark 指南旨在帮助你评估强化集群的安全级别。 + +由于 Rancher 和 RKE 将 Kubernetes 服务安装为 Docker 容器,因此 CIS Kubernetes Benchmark 中的许多管控验证检查都不适用。本指南将介绍各种管控,并提供更新的示例命令来审核 Rancher 创建的集群的合规性。你可以前往 [CIS 网站](https://www.cisecurity.org/benchmark/kubernetes/)下载原始的 Benchmark 文档。 + +Rancher 每个版本的自我评估指南都对应特定的强化指南、Rancher、Kubernetes 和 CIS Benchmark 版本。 + +### 第三方渗透测试报告 + +Rancher 会定期聘请第三方对 Rancher 2.x 软件栈进行安全审核和渗透测试。测试环境会遵循 Rancher 提供的强化指南。测试结果会在第三方确认我们已经修复了 MEDIUM 或以上的问题后发布。 + +结果: + +- [Cure53 渗透测试 - 2019 年 7 月](https://releases.rancher.com/documents/security/pen-tests/2019/RAN-01-cure53-report.final.pdf) +- [Untamed Theory 渗透测试 - 2019 年 3 月](https://releases.rancher.com/documents/security/pen-tests/2019/UntamedTheory-Rancher_SecurityAssessment-20190712_v5.pdf) + +### Rancher 安全公告和 CVE + +Rancher 致力于向社区披露我们产品的安全问题。有关我们已解决问题的 CVE(Common Vulnerabilities and Exposures,通用漏洞披露)列表,请参阅[此页面](../reference-guides/rancher-security/security-advisories-and-cves.md)。 + +### Kubernetes 安全最佳实践 + +有关保护 Kubernetes 集群的建议,请参阅 [Kubernetes 安全最佳实践指南](../reference-guides/rancher-security/kubernetes-security-best-practices.md)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/rancher-server-configuration.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/rancher-server-configuration.md new file mode 100644 index 00000000000..a0b6e3850b1 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/rancher-server-configuration.md @@ -0,0 +1,12 @@ +--- +title: Rancher Server 配置 +--- + +- [RKE1 集群配置](../reference-guides/cluster-configuration/rancher-server-configuration/rke1-cluster-configuration.md) +- [RKE2 集群配置](../reference-guides/cluster-configuration/rancher-server-configuration/rke2-cluster-configuration.md) +- [K3s 集群配置](../reference-guides/cluster-configuration/rancher-server-configuration/k3s-cluster-configuration.md) +- [EKS 集群配置](../reference-guides/cluster-configuration/rancher-server-configuration/eks-cluster-configuration.md) +- [AKS 集群配置](../reference-guides/cluster-configuration/rancher-server-configuration/aks-cluster-configuration.md) +- [GKE 集群配置](../pages-for-subheaders/gke-cluster-configuration.md) +- [使用现有节点](../pages-for-subheaders/use-existing-nodes.md) +- [同步集群](../reference-guides/cluster-configuration/rancher-server-configuration/sync-clusters.md) \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/rancher-server.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/rancher-server.md new file mode 100644 index 00000000000..997d7475344 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/rancher-server.md @@ -0,0 +1,19 @@ +--- +title: Rancher Server 的最佳实践 +shortTitle: Rancher Server +weight: 1 +--- + +本指南介绍了让 Rancher 管理下游 Kubernetes 集群的 Rancher Server 运行建议。 + +### 推荐的架构和基础设施 + +有关在高可用 Kubernetes 集群上设置 Rancher Server 的通用建议,请参见[本指南](../reference-guides/best-practices/rancher-server/tips-for-running-rancher.md)。 + +### 部署策略 + +[本指南](../reference-guides/best-practices/rancher-server/rancher-deployment-strategy.md)旨在帮助你选择部署策略(区域部署/中心辐射型部署),来让 Rancher Server 更好地管理下游 Kubernetes 集群。 + +### 在 vSphere 环境中安装 Rancher + +[本指南](../reference-guides/best-practices/rancher-server/on-premises-rancher-in-vsphere.md)介绍了在 vSphere 环境中安装 Rancher 的参考架构,以及 VMware 记录的标准 vSphere 最佳实践。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/rancher-v2.6-hardening-guides.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/rancher-v2.6-hardening-guides.md new file mode 100644 index 00000000000..c75ca6808a6 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/rancher-v2.6-hardening-guides.md @@ -0,0 +1,59 @@ +--- +title: Rancher 2.6 的自我评估和强化指南 +shortTitle: Rancher 2.6 强化指南 +weight: 1 +aliases: + - /rancher/v2.6/en/security/rancher-2.5/ + - /rancher/v2.6/en/security/rancher-2.5/1.5-hardening-2.5/ + - /rancher/v2.6/en/security/rancher-2.5/1.5-benchmark-2.5/ + - /rancher/v2.6/en/security/rancher-2.5/1.6-hardening-2.5/ + - /rancher/v2.6/en/security/rancher-2.5/1.6-benchmark-2.5/ +--- + +Rancher 为每个受支持的 Rancher Kubernetes 发行版提供了对应的安全强化指南。 + + +## Rancher Kubernetes 发行版 + +Rancher 使用以下 Kubernetes 发行版: + +- [**RKE**](https://rancher.com/docs/rke/latest/en/):全称是 Rancher Kubernetes Engine,一个 CNCF 认证的 Kubernetes 发行版,能完全在 Docker 容器中运行。 +- [**RKE2**](https://docs.rke2.io/):一个完全合规的 Kubernetes 发行版,专注于安全和合规性。 +- [**K3s**](https://rancher.com/docs/k3s/latest/en/):一个完全符合要求的轻量级 Kubernetes 发行版。它易于安装,仅需要上游 Kubernetes 内存的一半,所有组件都在一个小于 100 MB 的二进制文件中。 + +要在 Rancher 发行版之外强化 Kubernetes 集群,请参阅你的 Kubernetes 提供商文档。 + +## 强化指南和 Benchmark 版本 + +这些指南已与 Rancher 2.6 版本一起测试。每个自我评估指南都附有强化指南,并在特定的 Kubernetes 版本和 CIS Benchmark 版本上进行了测试。如果 CIS Benchmark 测试尚未针对你的 Kubernetes 版本进行验证,你可以先使用现有指南。 + +### RKE 指南 + +| Kubernetes 版本 | CIS Benchmark 版本 | 自我评估指南 | 强化指南 | +| ------------------ | --------------------- | --------------------- | ---------------- | +| Kubernetes v1.18 到 v1.23 | CIS v1.6 | [链接](../reference-guides/rancher-security/rancher-v2.6-hardening-guides/rke1-self-assessment-guide-with-cis-v1.6-benchmark.md) | [链接](../reference-guides/rancher-security/rancher-v2.6-hardening-guides/rke1-hardening-guide-with-cis-v1.6-benchmark.md) | + +:::note + +- Kubernetes v1.19 和 v1.20 的 CIS v1.20 Benchmark 版本尚未作为配置文件发布在 Rancher 的 CIS Benchmark Chart 中。 + +::: + +### RKE2 指南 + +| 类型 | Kubernetes 版本 | CIS Benchmark 版本 | 自我评估指南 | 强化指南 | +| ---- | ------------------ | --------------------- | --------------------- | ---------------- | +| Rancher 配置的 RKE2 集群 | Kubernetes v1.21 到 v1.23 | CIS v1.6 | [链接](../reference-guides/rancher-security/rancher-v2.6-hardening-guides/rke2-self-assessment-guide-with-cis-v1.6-benchmark.md) | [链接](../reference-guides/rancher-security/rancher-v2.6-hardening-guides/rke2-hardening-guide-with-cis-v1.6-benchmark.md) | +| 独立 RKE2 | Kubernetes v1.21 到 v1.23 | CIS v1.6 | [链接](https://docs.rke2.io/security/cis_self_assessment16/) | [链接](https://docs.rke2.io/security/hardening_guide/) | + +### K3s 指南 + +| Kubernetes 版本 | CIS Benchmark 版本 | 自我评估指南 | 强化指南 | +| ------------------ | --------------------- | --------------------- | ---------------- | +| Kubernetes v1.21 和 v1.22 | CIS v1.6 | [链接](https://rancher.com/docs/k3s/latest/en/security/self_assessment/) | [链接](https://rancher.com/docs/k3s/latest/en/security/hardening_guide/) | + +## 使用 SELinux 的 Rancher + +[安全增强型 Linux (SELinux)](https://en.wikipedia.org/wiki/Security-Enhanced_Linux) 是对 Linux 的安全增强。被政府机构使用之后,SELinux 已成为行业标准,并在 RHEL 和 CentOS 上默认启用。 + +要配合使用 Rancher 与 SELinux,我们建议你根据[此页面](selinux-rpm.md#安装-rancher-selinux-rpm)的安装说明安装 `rancher-selinux` RPM。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/resources.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/resources.md new file mode 100644 index 00000000000..f837886e1ca --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/resources.md @@ -0,0 +1,26 @@ +--- +title: 资源 +weight: 5 +--- + +### Docker 安装 + +[单节点 Docker 安装](rancher-on-a-single-node-with-docker.md)适用于想要测试 Rancher 的用户。你无需使用 Helm 在 Kubernetes 集群上运行 Rancher,你可以使用 `docker run` 命令,把 Rancher Server 组件安装到单个节点上。 + +由于只有一个节点和一个 Docker 容器,因此,如果该节点发生故障,由于其他节点上没有可用的 etcd 数据副本,你将丢失 Rancher Server 的所有数据。 + +### 离线安装 + +按照[以下步骤](air-gapped-helm-cli-install.md)在离线环境中安装 Rancher Server。 + +离线环境可以是 Rancher Server 离线安装、防火墙后面或代理后面。 + +### 高级选项 + +安装 Rancher 时,有如下几个可开启的高级选项:每个安装指南中都提供了对应的选项。了解选项详情: + +- [自定义 CA 证书](../getting-started/installation-and-upgrade/resources/custom-ca-root-certificates.md) +- [API 审计日志](../getting-started/installation-and-upgrade/advanced-options/advanced-use-cases/enable-api-audit-log.md) +- [TLS 设置](../reference-guides/installation-references/tls-settings.md) +- [etcd 配置](../getting-started/installation-and-upgrade/advanced-options/advanced-use-cases/tune-etcd-for-large-installs.md) +- [离线安装 Local System Chart](../getting-started/installation-and-upgrade/resources/local-system-charts.md) diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/selinux-rpm.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/selinux-rpm.md new file mode 100644 index 00000000000..a6fcb83902f --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/selinux-rpm.md @@ -0,0 +1,17 @@ +--- +title: SELinux RPM +weight: 4 +--- + +[安全增强型 Linux (SELinux)](https://en.wikipedia.org/wiki/Security-Enhanced_Linux) 是对 Linux 的安全增强。 + +它由 Red Hat 开发,是 Linux 上 MAC(mandatory access controls,强制访问控制)的实现。系统管理员可以使用 MAC 设置应用程序和用户是如何访问不同资源的,例如文件、设备、网络和进程间的通信。SELinux 还通过默认限制操作系统来增强安全性。 + +被政府机构使用之后,SELinux 已成为行业标准,并在 CentOS 7 和 8 上默认启用。要检查 SELinux 是否在你的系统上启用和执行,请使用 `getenforce`: + +``` +# getenforce +Enforcing +``` + +我们提供了 [`rancher-selinux`](../reference-guides/rancher-security/selinux-rpm/about-rancher-selinux.md) 和 [`rke2-selinux`](../reference-guides/rancher-security/selinux-rpm/about-rke2-selinux.md) 两个 RPM(Red Hat 软件包),让 Rancher 产品能够在 SELinux 主机上正常运行。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/set-up-cloud-providers.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/set-up-cloud-providers.md new file mode 100644 index 00000000000..8fd18116029 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/set-up-cloud-providers.md @@ -0,0 +1,43 @@ +--- +title: 设置 Cloud Provider +weight: 2300 +--- +_cloud provider_ 是 Kubernetes 中的一个模块,它提供了一个用于管理节点、负载均衡器和网络路由的接口。 + +在 Rancher 中设置 cloud provider 时,如果你使用的云提供商支持自动化,Rancher Server 可以在启动 Kubernetes 定义时自动配置新节点、负载均衡器或持久存储设备。 + +如果你配置的节点云提供商集群不满足先决条件,集群将无法正确配置。 + +**Cloud Provider** 选项默认设置为 `None`。 + +可以启用的云提供商包括: + +* Amazon +* Azure +* GCE (Google Compute Engine) +* vSphere + +### 设置 Amazon 云提供商 + +有关启用 Amazon 云提供商的详细信息,请参阅[此页面](../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/set-up-cloud-providers/other-cloud-providers/amazon.md)。 + +### 设置 Azure 云提供商 + +有关启用 Azure 云提供商的详细信息,请参阅[此页面](../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/set-up-cloud-providers/other-cloud-providers/azure.md)。 + +### 设置 GCE 云提供商 + +有关启用 Google Compute Engine 云提供商的详细信息,请参阅[此页面](../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/set-up-cloud-providers/other-cloud-providers/google-compute-engine.md)。 + +### 设置 vSphere 云提供商 + +有关启用 vSphere 云提供商的详细信息,请参阅[此页面](vsphere-cloud-provider.md)。 + +### 设置自定义云提供商 + +任何 Kubernetes Cloud Provider 都可以通过`自定义`云提供商进行配置。 + +对于自定义云提供商选项,你可以参考 [RKE 文档](https://rancher.com/docs/rke/latest/en/config-options/cloud-providers/),了解如何为你的云提供商编辑 yaml 文件。特定云提供商的详细配置说明如下: + +* [vSphere](https://rancher.com/docs/rke/latest/en/config-options/cloud-providercluster-provisioning/rke-clusters/cloud-providers/vsphere/) +* [OpenStack](https://rancher.com/docs/rke/latest/en/config-options/cloud-providers/openstack/) diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/set-up-clusters-from-hosted-kubernetes-providers.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/set-up-clusters-from-hosted-kubernetes-providers.md new file mode 100644 index 00000000000..db1f73204f8 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/set-up-clusters-from-hosted-kubernetes-providers.md @@ -0,0 +1,30 @@ +--- +title: 通过托管 Kubernetes 提供商设置集群 +weight: 3 +--- + +在这种情况下,Rancher 不会配置 Kubernetes,因为它是由 Google Kubernetes Engine (GKE)、Amazon Elastic Container Service for Kubernetes 或 Azure Kubernetes Service 等提供商安装的。 + +如果你使用 Kubernetes 提供商,例如 Google GKE,Rancher 将与对应的云 API 集成,允许你从 Rancher UI 为托管集群创建和管理 RBAC。 + +在这个用例中,Rancher 使用提供商的 API 向托管提供商发送请求。然后,提供商会为你配置和托管集群。集群创建成功后,你可以像管理本地集群或云上集群一样,通过 Rancher UI 对集群进行管理。 + +Rancher 支持以下 Kubernetes 提供商: + +- [Google GKE (Google Kubernetes Engine)](https://cloud.google.com/kubernetes-engine/) +- [Amazon EKS (Amazon Elastic Container Service for Kubernetes)](https://aws.amazon.com/eks/) +- [Microsoft AKS (Azure Kubernetes Service)](https://azure.microsoft.com/en-us/services/kubernetes-service/) +- [Alibaba ACK (Alibaba Cloud Container Service for Kubernetes)](https://www.alibabacloud.com/product/kubernetes) +- [Tencent TKE (Tencent Kubernetes Engine)](https://intl.cloud.tencent.com/product/tke) +- [Huawei CCE (Huawei Cloud Container Engine)](https://www.huaweicloud.com/en-us/product/cce.html) + +## 托管 Kubernetes 提供商的身份验证 + +使用 Rancher 创建由提供商托管的集群时,你需要输入身份验证信息。Rancher 会使用验证信息来访问云厂商的 API。有关如何获取此信息的详情,请参阅: + +- [创建 GKE 集群](../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-clusters-from-hosted-kubernetes-providers/gke.md) +- [创建 EKS 集群](amazon-eks-permissions.md) +- [创建 AKS 集群](../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-clusters-from-hosted-kubernetes-providers/aks.md) +- [创建 ACK 集群](../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-clusters-from-hosted-kubernetes-providers/alibaba.md) +- [创建 TKE 集群](../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-clusters-from-hosted-kubernetes-providers/tencent.md) +- [创建 CCE 集群](../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-clusters-from-hosted-kubernetes-providers/huawei.md) diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/single-node-rancher-in-docker.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/single-node-rancher-in-docker.md new file mode 100644 index 00000000000..ec2524a165f --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/single-node-rancher-in-docker.md @@ -0,0 +1,5 @@ +--- +title: Docker 中的单节点 Rancher +--- + +以下文档将讨论 Docker 安装的 [HTTP 代理配置](../reference-guides/single-node-rancher-in-docker/http-proxy-configuration.md)和[高级选项](../reference-guides/single-node-rancher-in-docker/advanced-options.md)。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/use-existing-nodes.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/use-existing-nodes.md new file mode 100644 index 00000000000..0f1c1dbc35a --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/use-existing-nodes.md @@ -0,0 +1,140 @@ +--- +title: 在现有自定义节点上启动 Kubernetes +description: 要创建具有自定义节点的集群,你需要访问集群中的服务器,并根据 Rancher 的要求配置服务器。 +metaDescription: "要创建具有自定义节点的集群,你需要访问集群中的服务器,并根据 Rancher 的要求配置服务器。" +weight: 2225 +--- + +创建自定义集群时,Rancher 使用 RKE(Rancher Kubernetes Engine)在本地裸机服务器、本地虚拟机或云服务器节点中创建 Kubernetes 集群。 + +要使用此选项,你需要访问要在 Kubernetes 集群中使用的服务器。请根据[要求](../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/node-requirements-for-rancher-managed-clusters.md)配置每台服务器,其中包括硬件要求和 Docker 要求。在每台服务器上安装 Docker 后,你还需要在每台服务器上运行 Rancher UI 中提供的命令,从而将每台服务器转换为 Kubernetes 节点。 + +本节介绍如何设置自定义集群。 + +# 使用自定义节点创建集群 + +:::note 使用 Windows 主机作为 Kubernetes Worker 节点? + +在开始之前,请参阅[配置 Windows 自定义集群](use-windows-clusters.md)。 + +::: + + +### 1. 配置 Linux 主机 + +你可以通过配置 Linux 主机,来创建自定义集群。你的主机可以是: + +- 云虚拟机 +- 本地虚拟机 +- 裸机服务器 + +如果要重复使用之前的自定义集群中的节点,请在复用之前[清理节点](../how-to-guides/advanced-user-guides/manage-clusters/clean-cluster-nodes.md)。如果你重复使用尚未清理的节点,则集群配置可能会失败。 + +根据[安装要求](../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/node-requirements-for-rancher-managed-clusters.md)和[生产就绪集群的检查清单](checklist-for-production-ready-clusters.md)配置主机。 + +如果你使用 Amazon EC2 作为主机,并希望使用[双栈 (dual-stack)](https://kubernetes.io/docs/concepts/services-networking/dual-stack/) 功能,则需要满足配置主机的其他[要求](https://rancher.com/docs/rke//latest/en/config-options/dual-stack#requirements)。 + +### 2. 创建自定义集群 + +1. 点击 **☰ > 集群管理**。 +1. 在**集群**页面上,单击**创建**。 +1. 单击**自定义**。 +1. 输入**集群名称**。 +1. 在**集群配置**中,选择 Kubernetes 版本、要使用的网络提供商,以及是否启用项目网络隔离。要查看更多集群选项,请单击**显示高级选项**。 + + :::note 你使用 Windows 主机作为 Kubernetes Worker 节点? + + - 请参阅[启用 Windows 支持选项](use-windows-clusters.md)。 + - 支持 Windows 集群的唯一网络插件是 Flannel。 + + ::: + + :::note Amazon EC2 上的双栈: + + 如果你使用 Amazon EC2 作为主机,并希望使用[双栈 (dual-stack)](https://kubernetes.io/docs/concepts/services-networking/dual-stack/) 功能,则需要满足配置 RKE 的其他[要求](https://rancher.com/docs/rke//latest/en/config-options/dual-stack#requirements)。 + + ::: + +6. 单击**下一步**。 + +4. 使用**成员角色**为集群配置用户授权。点击**添加成员**添加可以访问集群的用户。使用**角色**下拉菜单为每个用户设置权限。 + +7. 从**节点角色**中,选择要由集群节点充当的角色。你必须为 `etcd`、`worker` 和 `controlplane` 角色配置至少一个节点。自定义集群需要所有三个角色才能完成配置。有关角色的详细信息,请参阅[本节](../reference-guides/kubernetes-concepts.md#kubernetes-集群中节点的角色)。 + +:::note 注意事项: + +- 使用 Windows 主机作为 Kubernetes Worker 节点?请参阅[本节](use-windows-clusters.md)。 +- 裸机服务器提醒:如果你想将裸机服务器专用于每个角色,则必须为每个角色配置一个裸机服务器(即配置多个裸机服务器)。 + +::: + +8. **可选**:点击[显示高级选项](../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/about-rancher-agents.md)来指定注册节点时使用的 IP 地址,覆盖节点的主机名,或将[标签](https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/)或[污点](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/)添加到节点。 + +9. 将屏幕上显示的命令复制到剪贴板。 + +10. 使用你惯用的 shell(例如 PuTTy 或远程终端)登录到你的 Linux 主机。粘贴剪贴板的命令并运行。 + +:::note + +如果要将特定主机专用于特定节点角色,请重复步骤 7-10。根据需要多次重复这些步骤。 + +::: + +11. 在 Linux 主机上运行完命令后,单击**完成**。 + +**结果**: + +你已创建集群,集群的状态是**配置中**。Rancher 已在你的集群中。 + +当集群状态变为 **Active** 后,你可访问集群。 + +**Active** 状态的集群会分配到两个项目: + +- `Default`:包含 `default` 命名空间 +- `System`:包含 `cattle-system`,`ingress-nginx`,`kube-public` 和 `kube-system` 命名空间。 + + +### 3. 仅限亚马逊:标签资源 + +如果你已将集群配置为使用 Amazon 作为**云提供商**,请使用集群 ID 标记你的 AWS 资源。 + +[Amazon 文档:标记你的 Amazon EC2 资源](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html) + +:::note + +你可以使用 Amazon EC2 实例,而无需在 Kubernetes 中配置云提供商。如果你想使用特定的 Kubernetes 云提供商功能,配置云提供商即可。如需更多信息,请参阅 [Kubernetes 云提供商](https://kubernetes.io/docs/concepts/cluster-administration/cloud-providers/)。 + +::: + +以下资源需要使用 `ClusterID` 进行标记: + +- **Nodes**:Rancher 中添加的所有主机。 +- **Subnet**:集群使用的子网。 +- **Security Group**:用于你的集群的安全组。 + +:::note + +不要标记多个安全组。创建 Elastic Load Balancer 时,标记多个组会导致错误。 + +::: + +应该使用的标签是: + +``` +Key=kubernetes.io/cluster/, Value=owned +``` + +`` 可以是你选择的任何字符串。但是,必须在你标记的每个资源上使用相同的字符串。将值设置为 `owned` 会通知集群所有带有 `` 标记的资源都由该集群拥有和管理。 + +如果你在集群之间共享资源,你可以将标签更改为: + +``` +Key=kubernetes.io/cluster/CLUSTERID, Value=shared +``` + +# 可选的后续步骤 + +创建集群后,你可以通过 Rancher UI 访问集群。最佳实践建议你设置以下访问集群的备用方式: + +- **通过 kubectl CLI 访问你的集群**:按照[这些步骤](../how-to-guides/advanced-user-guides/manage-clusters/access-clusters/use-kubectl-and-kubeconfig.md#在工作站使用-kubectl-访问集群)在你的工作站上使用 kubectl 访问集群。在这种情况下,你将通过 Rancher Server 的身份验证代理进行身份验证,然后 Rancher 会让你连接到下游集群。此方法允许你在没有 Rancher UI 的情况下管理集群。 +- **通过 kubectl CLI 使用授权的集群端点访问你的集群**:按照[这些步骤](../how-to-guides/advanced-user-guides/manage-clusters/access-clusters/use-kubectl-and-kubeconfig.md#直接使用下游集群进行身份验证)直接使用 kubectl 访问集群,而无需通过 Rancher 进行身份验证。我们建议设置此替代方法来访问集群,以便在无法连接到 Rancher 时访问集群。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/use-new-nodes-in-an-infra-provider.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/use-new-nodes-in-an-infra-provider.md new file mode 100644 index 00000000000..05ce4cc5559 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/use-new-nodes-in-an-infra-provider.md @@ -0,0 +1,153 @@ +--- +title: 在云厂商的新节点上启动 Kubernetes +weight: 2205 +--- + +在 Rancher 中使用节点模板来创建 RKE 或 RKE2 集群时,每个生成的节点池都会显示在新的**主机池**选项卡中。你可以通过执行以下操作来查看主机池: + +1. 点击**☰ > 集群管理**。 +1. 单击 RKE 或 RKE2 集群的名称。 + +## RKE 集群 + +使用 Rancher,你可以基于[节点模板](use-new-nodes-in-an-infra-provider.md#节点模板)创建节点池。此节点模板定义了要用于在基础设施提供商或云厂商中启动节点的参数。 + +在托管在云厂商的节点池上安装 Kubernetes 的一个好处是,如果一个节点与集群断开连接,Rancher 可以自动创建另一个节点并将其加入集群,从而确保节点池的数量符合要求。 + +可用于创建节点模板的云提供商是由[主机驱动](use-new-nodes-in-an-infra-provider.md#主机驱动)决定的。 + +### 节点模板 + +节点模板保存了用于在特定云提供商中配置节点时要使用的参数。这些节点可以从 UI 启动。Rancher 使用 [Docker Machine](https://docs.docker.com/machine/) 来配置这些节点。可用于创建节点模板的云提供商取决于 Rancher 中状态是 Active 的主机驱动。 + +在 Rancher 中创建节点模板后,模板会被保存,以便你可以再次使用该模板来创建节点池。节点模板绑定到你的登录名。添加模板后,你可以将其从用户配置文件中删除。 + +#### 节点标签 + +你可以为每个节点模板添加[标签](https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/),这样,使用节点模板创建的节点都会自动带有这些标签。 + +无效标签会阻止升级,或阻止 Rancher 启动。有关标签语法的详细信息,请参阅 [Kubernetes 文档](https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#syntax-and-character-set)。 + +#### 节点污点 + +你可以为每个节点模板添加[污点](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/),这样,使用节点模板创建的节点都会自动带有这些污点。 + +由于污点可以同时添加到节点模板和节点池中,因此如果添加了相同键的污点效果没有冲突,则所有污点都将添加到节点中。如果存在具有相同键但不同效果的污点,则节点池中的污点将覆盖节点模板中的污点。 + +#### 节点模板的管理员控制 + +管理员可以控制所有节点模板。现在,管理员可以维护 Rancher 中的所有节点模板。当节点模板所有者不再使用 Rancher 时,他们创建的节点模板可以由管理员管理,以便继续更新和维护集群。 + +要访问所有节点模板,管理员需要执行以下操作: + +1. 点击 **☰ > 集群管理**。 +1. 单击 **RKE1 配置 > 节点模板**。 + +**结果**:列出所有节点模板。你可以通过单击 **⋮** 来编辑或克隆模板。 + +### 节点池 + +使用 Rancher,你可以基于[节点模板](#节点模板)创建节点池。 + +节点模板定义了节点的配置,例如要使用的操作系统、CPU 数量和内存量。 + +使用节点池的好处是,如果一个节点被销毁或删除,你可以增加 Active 节点的数量来补偿丢失的节点。节点池可以帮助你确保节点池的计数符合要求。 + +每个节点池必须分配一个或多个节点角色。 + +每个节点角色(即 etcd、controlplane 和 worker)都应分配给不同的节点池。虽然你可以将多个节点角色分配给同一个节点池,但不要在生产集群中执行此操作。 + +推荐的设置: + +- 具有 etcd 角色且计数为 3 的节点池 +- 具有 controlplane 角色且计数至少为 2 的节点池 +- 具有 worker 角色且计数至少为 2 的节点池 + +**离线环境中的 RKE1 下游集群节点**: + +默认情况下,在配置 RKE1 下游集群节点时(例如在 vSphere 中),Rancher 会尝试运行 Docker 安装脚本。但是,Rancher Docker 安装脚本在离线环境中会运行失败。要解决此问题,如果 Docker 已预安装到 VM 镜像上,你可以选择在创建节点模板时跳过安装 Docker。为此,你可以在 Rancher UI **引擎选项**下的 `Docker 安装 URL` 下拉列表中选择 **无**。 + +
**引擎选项下拉列表**
+ +![引擎选项下拉列表](/img/node-template-engine-options-rke1.png) + +#### 节点池污点 + +如果你没有在节点模板上定义[污点](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/),则可以为每个节点池添加污点。相比在节点模板上添加污点,在节点池上添加污点的好处在于,你可以替换节点模板,而不必担心污点是否在节点模板中。 + +每个污点都将自动添加到节点池中已创建的节点。因此,如果你在已有节点的节点池中添加污点,污点不会应用到已有的节点,但是添加到该节点池中的新节点都将获得该污点。 + +如果污点同时添加到节点模板和节点池中,且添加了相同键的污点效果没有冲突,则所有污点都将添加到节点中。如果存在具有相同键但不同效果的污点,则节点池中的污点将覆盖节点模板中的污点。 + +#### 节点自动替换 + +Rancher 可以自动替换节点池中无法访问的节点。如果节点在指定的时间中处于 Inactive 状态,Rancher 将使用该节点池的节点模板来重新创建节点。 + +:::caution + +自我修复节点池的功能帮助你替换无状态应用的 worker 节点。不建议在 master 节点或连接了持久卷的节点的节点池上启用节点自动替换,因为虚拟机会被临时处理。节点池中的节点与集群断开连接时,其持久卷将被破坏,从而导致有状态应用的数据丢失。 + +::: + +节点自动替换基于 Kubernetes 节点控制器工作。节点控制器定期检查所有节点的状态(可通过 `kube-controller` 的 `--node-monitor-period` 标志配置)。一个节点不可访问时,节点控制器将污染该节点。发生这种情况时,Rancher 将开始其删除倒计时。你可以配置 Rancher 等待删除节点的时间。如果在删除倒计时结束前污点没有被删除,Rancher 将继续删除该节点。Rancher 会根据节点池设置的数量来创建新的节点。 + +#### 启用节点自动替换 + +创建节点池时,你可以指定 Rancher 替换无响应节点的等待时间(以分钟为单位)。 + +1. 在创建或编辑集群的表单中,转到**节点池**。 +1. 转到要启用节点自动替换的节点池。在 **Recreate Unreachable After** 字段中,输入 Rancher 在替换节点之前应该等待节点响应的分钟数。 +1. 填写表单的其余部分以创建或编辑集群。 + +**结果** :已为节点池启用节点自动替换。 + +#### 禁用节点自动替换 + +你可以执行以下步骤从 Rancher UI 禁用节点自动替换: + +1. 点击 **☰ > 集群管理**。 +1. 在**集群**页面上,转到要禁用节点自动替换的集群,然后单击 **⋮ > 编辑配置**。 +1. 在**节点池**部分中,转到要启用节点自动替换的节点池。在 **Recreate Unreachable After** 字段中,输入 0。 +1. 单击**保存**。 + +**结果**:已禁用节点池的节点自动替换。 + +### 云凭证 + +节点模板可以使用云凭证,来存储用于在云提供商中启动节点的凭证,其优点是: + +- 凭证会存储为更安全的 Kubernetes 密文,而且你无需每次都输入凭证便可编辑节点模板。 + +- 创建云凭证后,你可以重新使用该凭证来创建其他节点模板。 + +- 多个节点模板可以使用相同的云凭证来创建节点池。如果你的密钥被泄露或过期,则可以在一个位置更新云凭证,从而一次更新所有使用该凭证的节点模板。 + +创建云凭证后,用户可以[管理创建的云凭证](../reference-guides/user-settings/manage-cloud-credentials.md)。 + +### 主机驱动 + +如果你找不到想要的主机驱动,你可以在 Rancher 的[内置主机驱动](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-provisioning-drivers/manage-node-drivers.md#激活/停用主机驱动)中查看并激活它,也可以[添加自定义主机驱动](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-provisioning-drivers/manage-node-drivers.md#添加自定义主机驱动)。 + +## RKE2 集群 + +Rancher 2.6 支持直接使用 Rancher UI 配置 [RKE2](https://docs.rke2.io/) 集群。RKE2,也称为 RKE Government,是一个完全符合标准的 Kubernetes 发行版,它专注于安全性和合规性。 + +:::note + +对于 RKE2 集群模板,请参阅[此页面](../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/manage-cluster-templates.md#rke2-集群模板)了解更多信息。 + +::: + +### 节点角色 + +RKE2 CLI 公开了 `server` 和 `agent` 两个角色,它们分别代表 Kubernetes 节点角色 `etcd` + `controlplane` 和 `worker`。通过 Rancher 2.6 中的 RKE2 集成,RKE2 节点池可以分配更细粒度的角色,例如 `etcd` 和 `controlplane`。 + +你可以在 RKE2 CLI 中使用标志和节点污染,来控制调度工作负载和 Kubernetes master 节点的位置,从而使用 `etcd`,`controlplane` 和 `worker` 节点功能。这些角色没有在 RKE2 CLI 中实现为第一级角色的原因是,RKE2 被概念化为一组原始构建块,使用 Rancher 等编排系统得到最佳利用。 + +在 Rancher 中实现这三个节点角色,表示 Rancher 管理的 RKE2 集群能够轻松使用为 RKE 集群推荐的相同架构的所有最佳实践。 + +在[推荐的集群架构](../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/checklist-for-production-ready-clusters/recommended-cluster-architecture.md)中,我们概述了每个角色集群应该有多少节点: + +- 至少拥有三个角色为 etcd 的节点,来确保失去一个节点时仍能存活。 +- 至少两个节点具有 controlplane 角色,以实现主组件高可用性。 +- 至少两个具有 worker 角色的节点,用于在节点故障时重新安排工作负载。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/use-windows-clusters.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/use-windows-clusters.md new file mode 100644 index 00000000000..2470a900b37 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/use-windows-clusters.md @@ -0,0 +1,287 @@ +--- +title: 在 Windows 集群上启动 Kubernetes +weight: 2240 +--- + +使用 Rancher 配置[自定义集群](use-existing-nodes.md)时,Rancher 通过 RKE(Rancher Kubernetes Engine)在现有节点上安装 Kubernetes。 + +在使用 Rancher 配置的 Windows 集群中,集群必须同时包含 Linux 和 Windows 节点。Kubernetes controlplane 只能运行在 Linux 节点上,Windows 节点只能有 Worker 角色。Windows 节点只能用于部署工作负载。 + +Windows 集群的其他要求如下: + +- 只有在创建集群时启用了 Windows 支持的集群才能添加 Windows 节点。无法为现有集群启用 Windows 支持。 +- 需要 Kubernetes 1.15+。 +- 必须使用 Flannel 网络提供商。 +- Windows 节点必须有 50 GB 的磁盘空间。 + +有关完整的要求列表,请参阅[本节](#windows-集群的要求)。 + +有关支持 Windows 的 Kubernetes 功能摘要,请参阅[在 Windows 中使用 Kubernetes 支持的功能和限制](https://kubernetes.io/docs/setup/production-environment/windows/intro-windows-in-kubernetes/#supported-functionality-and-limitations)的 Kubernetes 文档,或[在 Kubernetes 中调度 Windows 容器的指南](https://kubernetes.io/docs/setup/production-environment/windows/user-guide-windows-containers/)。 + + +## Rancher 2.6 变更 + +Rancher 2.6 支持直接使用 Rancher UI 配置 [RKE2](https://docs.rke2.io/) 集群。RKE2,也称为 RKE Government,是一个完全符合标准的 Kubernetes 发行版,它专注于安全性和合规性。 + +在 Rancher 2.6.5 中,RKE2 已经 GA。 + +### RKE2 Windows + +RKE2 配置功能还包括在 Windows 集群上安装 RKE2。RKE2 的 Windows 功能包括: + +- 由 containerd 提供支持的使用 RKE2 的 Windows 容器 +- 直接从 Rancher UI 配置 Windows RKE2 自定义集群 +- 用于 Windows RKE2 自定义集群的 Calico CNI +- 技术预览包含了 Windows Server 的 SAC 版本(2004 和 20H2) + +要使 Windows 支持 RKE2 自定义集群,请选择 Calico 作为 CNI。 + +:::note + +默认情况下,Rancher 允许 Windows 工作负载 pod 部署在 Windows 和 Linux Worker 节点上。在 RKE2 中创建混合集群时,你必须编辑 Chart 中的 `nodeSelector`,从而将 Pod 放置到兼容的 Windows 节点上。有关如何使用 `nodeSelector` 将 pod 分配给节点的更多信息,请参阅 [Kubernetes 文档](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector)。 + +::: + +**_Rancher v2.6.7 新功能_** + +- Kubernetes v1.24.1 及更高版本支持 Windows RKE2 中的 HostProcess 容器。有关详细信息,请参阅[上游文档](https://kubernetes.io/docs/tasks/configure-pod-container/create-hostprocess-pod/)。 + +## Windows 集群的要求 + +网络、操作系统和 Docker 的一般节点要求与 [Rancher 安装](installation-requirements.md)的节点要求相同。 + +### 操作系统和 Docker 要求 + +我们对 Windows Server 和 Windows 容器的支持与 LTSC(长期服务渠道)和 SAC(半年渠道)的 Microsoft 官方生命周期相匹配。 + +有关 Windows Server 的支持生命周期的日期,请参阅 [Microsoft 文档](https://docs.microsoft.com/en-us/windows-server/get-started/windows-server-release-info)。 + +### Kubernetes 版本 + +需要 Kubernetes v1.15+。 + +如果你在 Windows Server 20H2 Standard Core 上使用 Kubernetes v1.21,则必须在节点上安装补丁“2019-08 Servicing Stack Update for Windows Server”。 + +### 节点要求 + +集群中的主机至少需要: + +- 2 核 CPU +- 5 GB 内存 +- 50 GB 磁盘空间 + +Rancher 不会配置不满足要求的节点。 + +### 网络要求 + +在配置新集群之前,请确保你已经在接收入站网络流量的设备上安装了 Rancher。这是集群节点与 Rancher 通信所必需的。如果你尚未安装 Rancher,请在继续阅读本指南之前先参阅[安装文档](installation-and-upgrade.md)进行安装。 + +Rancher 仅支持使用 Flannel 作为网络提供商的 Windows。 + +有两个网络选项:[**Host Gateway (L2bridge)**](https://github.com/coreos/flannel/blob/master/Documentation/backends.md#host-gw) 和 [**VXLAN (Overlay)**](https://github.com/coreos/flannel/blob/master/Documentation/backends.md#vxlan)。默认选项是 **VXLAN (Overlay)** 模式。 + +对于 **Host Gateway (L2bridge)** 网络,最好为所有节点使用相同的第 2 层网络。否则,你需要为它们配置路由规则。有关详细信息,请参阅[配置云托管 VM 路由的文档](../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/use-windows-clusters/network-requirements-for-host-gateway.md#云托管虚拟机的路由配置)。如果你使用的是 Amazon EC2、Google GCE 或 Azure 虚拟机,你需要[禁用私有 IP 地址检查](../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/use-windows-clusters/network-requirements-for-host-gateway.md#禁用私有-ip-地址检查)。 + +对于 **VXLAN (Overlay)** 网络,你必须安装 [KB4489899](https://support.microsoft.com/en-us/help/4489899) 修补程序。大多数云托管的 VM 已经具有此修补程序。 + +如果你在为 AWS 虚拟私有云配置 DHCP 选项集,请注意,你只能在 `domain-name` 选项字段中指定一个域名。详情请参见 [DHCP 选项文档](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html)。 + +:::note + +一些 Linux 操作系统支持以空格分隔的多个域名。但是,其他 Linux 操作系统和 Windows 将该值视为单个域名,从而导致意外错误。如果你的 DHCP 选项集与具有多个操作系统实例的 VPC 相关联,请仅指定一个域名。 + +::: + +### 带有 ESXi 6.7u2 及更高版本的 vSphere 上的 Rancher + +如果你在带有 ESXi 6.7u2 或更高版本的 VMware vSphere 上使用 Rancher,并使用 Red Hat Enterprise Linux 8.3、CentOS 8.3 或 SUSE Enterprise Linux 15 SP2 或更高版本,你需要禁用 `vmxnet3` 虚拟网络适配器硬件卸载功能。否则,不同集群节点上的 pod 之间的所有网络连接会因为超时错误而失败。从 Windows pod 到在 Linux 节点上运行的关键服务(例如 CoreDNS)的所有连接也将失败。外部连接也可能失败。出现这个问题的原因是 Linux 发行版在 `vmxnet3` 中启用了硬件卸载功能,而且 `vmxnet3` 硬件卸载功能中存在一个会丢弃客户覆盖流量的数据包的 bug。要解决此问题,必须禁用 `vmxnet3` 硬件卸载功能。此设置不会在重启后继续生效,因此需要在每次启动时禁用。推荐的做法是在 `/etc/systemd/system/disable_hw_offloading.service` 中创建一个 systemd 单元文件,这会在启动时禁用 `vmxnet3` 硬件卸载功能。禁用 `vmxnet3` 硬件卸载功能的示例 systemd 单元文件如下所示。注意,`` 必须自定义为主机的 `vmxnet3` 网络接口,如 `ens192`: + +``` +[Unit] +Description=Disable vmxnet3 hardware offloading feature + +[Service] +Type=oneshot +ExecStart=ethtool -K tx-udp_tnl-segmentation off +ExecStart=ethtool -K tx-udp_tnl-csum-segmentation off +StandardOutput=journal + +[Install] +WantedBy=multi-user.target +``` +然后在 systemd 单元文件上设置适当的权限: +``` +chmod 0644 /etc/systemd/system/disable_hw_offloading.service +``` +最后,启用 systemd 服务: +``` +systemctl enable disable_hw_offloading.service +``` + +### 架构要求 + +Kubernetes 集群管理节点(`etcd` 和 `controlplane`)必须运行在 Linux 节点上。 + +部署工作负载的 `worker` 节点通常是 Windows 节点,但必须至少有一个 `worker` 节点运行在 Linux 上,才能按顺序运行 Rancher Cluster Agent、DNS、Metrics Server 和 Ingress 相关容器。 + +我们推荐下表中列出的三节点架构,但你始终可以添加额外的 Linux 和 Windows worker 节点来扩展集群,从而实现冗余: + + + +| 节点 | 操作系统 | Kubernetes 集群角色 | 用途 | +| ------ | --------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | +| 节点 1 | Linux(推荐 Ubuntu Server 18.04) | controlplane, etcd, worker | 管理 Kubernetes 集群 | +| 节点 2 | Linux(推荐 Ubuntu Server 18.04) | Worker | 支持集群的 Rancher Cluster Agent、Metrics Server、DNS 和 Ingress | +| 节点 3 | Windows(Windows Server 核心版本 1809 或更高版本) | Worker | 运行 Windows 容器 | + +### 容器要求 + +Windows 要求容器的版本必须与部署容器的 Windows Server 的版本一致。因此,你必须在 Windows Server 核心版本 1809 或更高版本上构建容器。如果你已经使用早期的 Windows Server 核心版本构建了容器,则必须使用 Windows Server 核心版本 1809 或更高版本重新构建容器。 + +### 云提供商要求 + +如果你在集群中设置了 Kubernetes 云提供商,则需要进行一些额外的操作。如果你想使用云提供商的功能,例如为集群自动配置存储、负载均衡器或其他基础设施,你可能需要设置云提供商。有关如何配置满足条件的云提供商集群节点,请参阅[此页面](set-up-cloud-providers.md)。 + +如果你的云提供商是 GCE(Google Compute Engine),则必须执行以下操作: + +- 按照[步骤](../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/set-up-cloud-providers/other-cloud-providers/google-compute-engine.md) 在`cluster.yml` 中启用 GCE 云提供商。 +- 在 Rancher 中配置集群时,在 Rancher UI 中选择**自定义云提供商**作为云提供商。 + +## 教程:如何创建支持 Windows 的集群 + +本教程描述了如何使用[推荐架构](#guide-architecture)中的三个节点创建由 Rancher 配置的集群。 + +在现有节点上使用 Rancher 配置集群时,你需要在每个节点上安装 [Rancher Agent](../reference-guides/cluster-configuration/rancher-server-configuration/use-existing-nodes/rancher-agent-options.md) 来将节点添加到集群中。在 Rancher UI 中创建或编辑集群时,你会看到一个**自定义节点运行命令**,你可以在每台服务器上运行该命令,从而将服务器添加到集群中。 + +要设置支持 Windows 节点和容器的集群,你需要完成以下任务: + + +### 1. 配置主机 + +要在具有 Windows 支持的现有节点上配置集群,请准备好你的主机。 + +主机可以是: + +- 云托管的虚拟机 +- 虚拟化集群中的虚拟机 +- 裸金属服务器 + +你将配置三个节点: + +- 一个 Linux 节点,用于管理 Kubernetes controlplane 并存储你的 `etcd`。 +- 第二个 Linux 节点,它将作为 worker 节点。 +- Windows 节点,它将作为 worker 节点运行 Windows 容器。 + +| 节点 | 操作系统 | +| ------ | ------------------------------------------------------------ | +| 节点 1 | Linux(推荐 Ubuntu Server 18.04) | +| 节点 2 | Linux(推荐 Ubuntu Server 18.04) | +| 节点 3 | Windows(Windows Server 核心版本 1809 或更高版本) | + +如果你的节点托管在**云提供商**上,并且你需要自动化支持(例如负载均衡器或持久存储设备),你的节点还需要满足额外的配置要求。详情请参见[选择云提供商](set-up-cloud-providers.md)。 + +### 2. 在现有节点上创建集群 + +在现有节点上创建 Windows 集群的说明与一般[创建自定义集群的说明](use-existing-nodes.md)非常相似,但有一些特定于 Windows 的要求。 + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 在**集群**页面上,单击**创建**。 +1. 单击**自定义**。 +1. 在**集群名称**字段中输入集群的名称。 +1. 在 **Kubernetes 版本**下拉菜单中,选择 v1.19 或更高版本。 +1. 在**网络提供商**字段中,选择 **Flannel**。 +1. 在 **Windows 支持**中,单击**启用**。 +1. 可选:启用 Windows 支持后,你将能够选择 Flannel 后端模式。有两个网络选项:[**Host Gateway (L2bridge)**](https://github.com/coreos/flannel/blob/master/Documentation/backends.md#host-gw) 和 [**VXLAN (Overlay)**](https://github.com/coreos/flannel/blob/master/Documentation/backends.md#vxlan)。默认选项是 **VXLAN (Overlay)** 模式。 +1. 点击**下一步**。 + +:::note 重要提示: + +对于 Host Gateway (L2bridge) 网络,最好为所有节点使用相同的第 2 层网络。否则,你需要为它们配置路由规则。有关详细信息,请参阅[配置云托管 VM 路由的文档](../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/use-windows-clusters/network-requirements-for-host-gateway.md#云托管虚拟机的路由配置)。如果你使用的是 Amazon EC2、Google GCE 或 Azure 虚拟机,你需要[禁用私有 IP 地址检查](../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/use-windows-clusters/network-requirements-for-host-gateway.md#禁用私有-ip-地址检查)。 + +::: + +### 3. 将节点添加到集群 + +本节介绍如何将 Linux 和 Worker 节点注册到集群。你将在每个节点上运行一个命令,该命令将安装 Rancher Agent 并允许 Rancher 管理每个节点。 + +#### 添加 Linux master 节点 + +在本节中,你需要在 Rancher UI 上填写表单以获取自定义命令,从而在 Linux master 节点上安装 Rancher Agent。然后,复制该命令并在 Linux master 节点上运行命令,从而在集群中注册该节点。 + +集群中的第一个节点应该是具有 **controlplane** 和 **etcd** 角色的 Linux 主机。至少必须为此节点启用这两个角色,并且必须先将此节点添加到集群中,然后才能添加 Windows 主机。 + +1. 在**节点操作系统**中,单击 **Linux**。 +1. 在**节点角色**中,至少选择 **etcd** 和 **controlplane**。推荐选择所有的三个角色。 +1. 可选:如果点击**显示高级选项**,你可以自定义 [Rancher Agent](../reference-guides/cluster-configuration/rancher-server-configuration/use-existing-nodes/rancher-agent-options.md) 和[节点标签](https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/)的设置。 +1. 将屏幕上显示的命令复制到剪贴板。 +1. SSH 到你的 Linux 主机,然后运行复制到剪贴板的命令。 +1. 完成配置 Linux 节点后,选择**完成**。 + +**结果**: + +你已创建集群,集群的状态是**配置中**。Rancher 已在你的集群中。 + +当集群状态变为 **Active** 后,你可访问集群。 + +**Active** 状态的集群会分配到两个项目: + +- `Default`:包含 `default` 命名空间 +- `System`:包含 `cattle-system`,`ingress-nginx`,`kube-public` 和 `kube-system` 命名空间。 + + +节点可能需要几分钟才能注册到集群中。 + +#### 添加 Linux Worker 节点 + +在本节中,我们通过运行命令将 Linux Worker 节点注册到集群中。 + +在初始配置集群之后,你的集群只有一个 Linux 主机。接下来,我们添加另一个 Linux `worker` 主机,用于支持集群的 _Rancher Cluster Agent_、_Metrics Server_、_DNS_ 和 _Ingress_。 + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 转到你创建的集群,然后单击 **⋮ > 编辑配置**。 +1. 向下滚动到**节点操作系统**。选择 **Linux**。 +1. 在**自定义节点运行命令**中,转到**节点选项**并选择 **Worker** 角色。 +1. 将屏幕上显示的命令复制到剪贴板。 +1. 使用远程终端连接登录到你的 Linux 主机。粘贴剪贴板的命令并运行。 +1. 在 **Rancher**中,单击**保存**。 + +**结果**:**Worker** 角色已安装在你的 Linux 主机上,并且节点会向 Rancher 注册。节点可能需要几分钟才能注册到集群中。 + +:::note + +Linux Worker 节点上的污点 + +以下污点将添加集群中的 Linux Worker 节点中。将此污点添加到 Linux Worker 节点后,添加到 Windows 集群的任何工作负载都将自动调度到 Windows Worker 节点。如果想将工作负载专门调度到 Linux Worker 节点上,则需要为这些工作负载添加容忍度。 + +| 污点键 | 污点值 | 污点效果 | +| -------------- | ----------- | ------------ | +| `cattle.io/os` | `linux` | `NoSchedule` | + +::: + +#### 添加 Windows Worker 节点 + +在本节中,我们通过运行命令将 Windows Worker 节点注册到集群中。 + +你可以通过编辑集群并选择 **Windows** 选项,从而将 Windows 主机添加到集群中。 + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 转到你创建的集群,然后单击 **⋮ > 编辑配置**。 +1. 向下滚动到**节点操作系统**。选择 **Windows**。注意:你将看到 **worker** 角色是唯一可用的角色。 +1. 将屏幕上显示的命令复制到剪贴板。 +1. 使用你喜欢的工具(例如 [Microsoft 远程桌面](https://docs.microsoft.com/en-us/windows-server/remote/remote-desktop-services/clients/remote-desktop-clients))登录到 Windows 主机。在 **Command Prompt (CMD)** 中运行复制到剪贴板的命令。 +1. 在 Rancher 中,单击**保存**。 +1. 可选:如果要向集群添加更多 Windows 节点,请重复这些操作。 + +**结果**:**Worker** 角色已安装在你的 Windows 主机上,并且节点会向 Rancher 注册。节点可能需要几分钟才能注册到集群中。你现在已拥有一个 Windows Kubernetes 集群。 + +### 可选的后续步骤 + +创建集群后,你可以通过 Rancher UI 访问集群。最佳实践建议你设置以下访问集群的备用方式: + +- **通过 kubectl CLI 访问你的集群**:按照[这些步骤](../how-to-guides/advanced-user-guides/manage-clusters/access-clusters/use-kubectl-and-kubeconfig.md#在工作站使用-kubectl-访问集群)在你的工作站上使用 kubectl 访问集群。在这种情况下,你将通过 Rancher Server 的身份验证代理进行身份验证,然后 Rancher 会让你连接到下游集群。此方法允许你在没有 Rancher UI 的情况下管理集群。 +- **通过 kubectl CLI 使用授权的集群端点访问你的集群**:按照[这些步骤](../how-to-guides/advanced-user-guides/manage-clusters/access-clusters/use-kubectl-and-kubeconfig.md#直接使用下游集群进行身份验证)直接使用 kubectl 访问集群,而无需通过 Rancher Server 进行身份验证。我们建议设置此替代方法来访问集群,以便在无法连接到 Rancher 时访问集群。 + +## Azure 中存储类的配置 + +如果你的节点使用 Azure VM,则可以使用 [Azure 文件](https://docs.microsoft.com/en-us/azure/aks/azure-files-dynamic-pv)作为集群的存储类(StorageClass)。详情请参见[此部分](../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/use-windows-clusters/azure-storageclass-configuration.md)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/user-settings.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/user-settings.md new file mode 100644 index 00000000000..74df9618997 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/user-settings.md @@ -0,0 +1,16 @@ +--- +title: 用户设置 +weight: 23 +--- + +在 Rancher 中,每个用户都有很多与登录相关的设置,例如个人偏好、API 密钥等。你可以从**用户设置**菜单中配置这些设置。你可以单击主菜单中的头像来打开此菜单。 + +![用户设置菜单](/img/user-settings.png) + +可用的用户设置包括: + +- [API & 密钥](../reference-guides/user-settings/api-keys.md):如果你想以编程方式与 Rancher 交互,你需要一个 API 密钥。你可以按照本节中的说明获取密钥。 +- [云凭证](../reference-guides/user-settings/manage-cloud-credentials.md):管理[节点模板](use-new-nodes-in-an-infra-provider.md#节点模板)使用的云凭证,从而[为集群配置节点](launch-kubernetes-with-rancher.md)。 +- [节点模板](../reference-guides/user-settings/manage-node-templates.md):管理 [Rancher 用来为集群配置节点](launch-kubernetes-with-rancher.md)的模板。 +- [偏好设置](../reference-guides/user-settings/user-preferences.md):设置 Rancher UI 的表面首选项。 +- 登出:结束你的用户会话。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/vsphere-cloud-provider.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/vsphere-cloud-provider.md new file mode 100644 index 00000000000..e1bbf035db3 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/vsphere-cloud-provider.md @@ -0,0 +1,14 @@ +--- +title: 设置 vSphere 云提供商 +weight: 4 +--- + +在本节中,你将了解如何在 vSphere 中为 Rancher 管理的 RKE Kubernetes 集群设置 vSphere 云提供商。 + +# 树内云提供商 + +要使用树内 vSphere 云提供商,你需要使用 RKE 配置选项。详情请参见[此页](../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/set-up-cloud-providers/vsphere/configure-in-tree-vsphere.md)。 + +# 树外云提供商 + +要设置树外 vSphere 云提供商,你需要从 Rancher 市场安装 Helm Chart。详情请参见[此页](../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/set-up-cloud-providers/vsphere/configure-out-of-tree-vsphere.md)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/vsphere.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/vsphere.md new file mode 100644 index 00000000000..119fb70c02c --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/vsphere.md @@ -0,0 +1,58 @@ +--- +title: 创建 vSphere 集群 +shortTitle: vSphere +description: 使用 Rancher 创建 vSphere 集群。集群可能包括具有不同属性的 VM 组,这些属性可用于细粒度控制节点的大小。 +metaDescription: 使用 Rancher 创建 vSphere 集群。集群可能包括具有不同属性的 VM 组,这些属性可用于细粒度控制节点的大小。 +weight: 2225 +--- +import YouTube from '@site/src/components/YouTube' + +你可以结合使用 Rancher 与 vSphere,从而在本地体验云环境的操作。 + +Rancher 可以在 vSphere 中配置节点并在其上安装 Kubernetes。在 vSphere 中创建 Kubernetes 集群时,Rancher 首先与 vCenter API 通信来配置指定数量的虚拟机。然后在它们之上安装 Kubernetes。 + +vSphere 集群可能由多组具有不同属性(例如内存或 vCPU 数量)的 VM 组成。这种分组允许对每个 Kubernetes 角色的节点大小进行细粒度控制。 + +## Rancher 2.3 中的 vSphere 增强功能 + +我们更新了 vSphere 节点模板,使你可以通过以下增强功能在本地体验云操作: + +### 自我修复的节点池 + +使用 Rancher 配置 vSphere 节点的最大优势之一,是允许你在本地集群中使用 Rancher 的自我修复节点池(也称为[节点自动替换功能](use-new-nodes-in-an-infra-provider.md#节点自动替换))。自我修复节点池的功能帮助你替换无状态应用的 worker 节点。当 Rancher 使用节点模板配置节点时,Rancher 可以自动替换无法访问的节点。 + +:::caution + +不建议在 master 节点或连接了持久卷的节点的节点池上启用节点自动替换,因为虚拟机会被临时处理。节点池中的节点与集群断开连接时,其持久卷将被破坏,从而导致有状态应用的数据丢失。 + +::: + +### 实例和调度的动态填充选项 + +vSphere 的节点模板已更新。当你使用 vSphere 凭证创建节点模板时,该模板会自动填充你在 vSphere 控制台中可以访问的相同的虚拟机配置选项。 + +要填充的字段设置需要满足[先决条件](../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/use-new-nodes-in-an-infra-provider/vsphere/provision-kubernetes-clusters-in-vsphere.md#先决条件)。 + +### 更多支持的操作系统 + +你可以使用任何支持 `cloud-init` 的操作系统来配置 VM。[cloud config](https://cloudinit.readthedocs.io/en/latest/topics/examples.html) 仅支持 YAML 格式。 + +### 2.3.3 节点模板功能的视频介绍 + +在这段 YouTube 视频中,我们演示了如何使用新的节点模板在本地环境体验云环境一样的操作。 + + + +## 创建 vSphere 集群 + +在[本节](../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/use-new-nodes-in-an-infra-provider/vsphere/provision-kubernetes-clusters-in-vsphere.md)中,你将学习如何使用 Rancher 在 vSphere 中安装 [RKE](https://rancher.com/docs/rke/latest/en/) Kubernetes 集群。 + +## 配置存储 + +有关如何使用 Rancher 在 vSphere 中配置存储的示例,请参阅[本节](../how-to-guides/advanced-user-guides/manage-clusters/create-kubernetes-persistent-storage/provisioning-storage-examples/vsphere-storage.md)。要在 vSphere 中动态配置存储,你必须[启用](vsphere-cloud-provider.md) vSphere 云提供商。 + +## 启用 vSphere 云提供商 + +在 Rancher 中设置云提供商时,Rancher Server 可以自动为集群配置新的基础设施,包括新节点或持久存储设备。 + +有关详细信息,请参阅[启用 vSphere 云提供商](vsphere-cloud-provider.md)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/workloads-and-pods.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/workloads-and-pods.md new file mode 100644 index 00000000000..9a3c795f1b9 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/workloads-and-pods.md @@ -0,0 +1,79 @@ +--- +title: "Kubernetes 工作负载和 Pod" +description: "了解在 Kubernetes 中构建复杂容器化应用程序的两种结构:Kubernetes 工作负载和 Pod" +weight: 3025 +--- + +你可以使用两种基本结构(pod 和工作负载)在 Kubernetes 中构建复杂的容器化应用程序。构建应用程序后,你可以使用第三种结构(service)在集群中或互联网上公开应用程序。 + +### Pod + +[_Pod_](https://kubernetes.io/docs/concepts/workloads/pods/pod-overview/) 是一个或多个共享网络命名空间和存储卷的容器。大多数 pod 只有一个容器。因此,我们讨论的 _pod_ 通常等同于 _容器_。扩展 pod 的方式与扩展容器的方式相同,即配置实现服务的同一 pod 的多个实例。通常,Pod 会根据工作负载进行扩展和管理。 + +### 工作负载 + +_工作负载_ 是为 pod 设置部署规则的对象。Kubernetes 基于这些规则执行部署,并根据应用程序的当前状态来更新工作负载。 +工作负载让你可以定义应用程序调度、扩展和升级的规则。 + +#### 工作负载类型 + +Kubernetes 将工作负载分为不同的类型。Kubernetes 支持的最流行的类型是: + +- [Deployment](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/) + + _Deployment_ 最适合用于无状态应用程序(即不需要维护工作负载的状态)。由 Deployment 类型工作负载管理的 Pod 是独立且一次性的。如果 pod 中断了,Kubernetes 会删除该 pod 然后重新创建它。一个示例应用程序是 Nginx Web 服务器。 + +- [StatefulSet](https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/) + + 与 Deployment 相比,_StatefulSet_ 最适合在需要维护身份和存储数据的应用程序中使用。适用的应用程序类似于 Zookeeper(一个需要数据库进行存储的应用程序)。 + +- [DaemonSet](https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/) + + _Daemonset_ 确保集群中的每个节点都运行 pod 的副本。如果你需要收集日志或监控节点性能,这种类似 daemon 的工作负载效果是最好的。 + +- [Job](https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/) + + _Job_ 启动一个或多个 Pod 并确保指定数量的 Pod 能成功终止。Job 最好用于运行有限任务至完成状态,而不是管理正在进行的应用程序的所需状态。 + +- [CronJob](https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/) + + _CronJobs_ 与 Job 类似。但是,CronJob 会基于 cron 的计划运行到完成状态。 + +### Services + +在许多用例中,工作负载必须: + +- 由集群中的其他工作负载访问。 +- 暴露给外部。 + +你可以通过创建一个 _Service_ 实现这些目的。Service 使用[选择器/标签(查看代码示例)](https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#service-and-replicationcontroller)来映射到底层工作负载的 pod。Rancher UI 使用你选择的服务端口和类型来自动创建 service 以及工作负载,从而简化此映射过程。 + +#### Service 类型 + +Rancher 中有几种可用的 Service 类型。以下描述来自 [Kubernetes 文档](https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types)。 + +- **ClusterIP** + + > 在集群内部 IP 上公开 Service。如果你选择此值,Service 只能从集群内访问。这是默认的 `ServiceType`。 + +- **NodePort** + + > 在每个节点 IP 上的静态端口(`NodePort`)上暴露 Service。`ClusterIP` service 是自动创建的,而 `NodePort` service 会路由到 ClusterIP service。你可以通过请求 `:` 在集群外部联系 `NodePort` service。 + +- **LoadBalancer** + + > 使用云提供商的负载均衡器向外部公开服务。`NodePort` 和 `ClusterIP` service 是自动创建的,外部负载均衡器会路由到这些 service。 + +## 工作负载选项 + +以下文档介绍了如何部署工作负载和使用工作负载选项。 + +- [部署工作负载](../how-to-guides/new-user-guides/kubernetes-resources-setup/workloads-and-pods/deploy-workloads.md) +- [升级工作负载](../how-to-guides/new-user-guides/kubernetes-resources-setup/workloads-and-pods/upgrade-workloads.md) +- [回滚工作负载](../how-to-guides/new-user-guides/kubernetes-resources-setup/workloads-and-pods/roll-back-workloads.md) + +## 相关链接 + +### 外部链接 + +- [Service](https://kubernetes.io/docs/concepts/services-networking/service/) diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/rancher-manager.md b/i18n/zh/docusaurus-plugin-content-docs/current/rancher-manager.md new file mode 100644 index 00000000000..22240715c98 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/rancher-manager.md @@ -0,0 +1,22 @@ +--- +slug: / +weight: 1 +title: "Rancher 2.6" +shortTitle: "Rancher 2.6(最新)" +description: "Rancher 在 Kubernetes 之上添加了新的功能,让你一站式管理上百个集群,统一 RBAC,开启监控和告警。了解更多。" +metaTitle: "Rancher 2.6 文档:了解新功能" +metaDescription: "Rancher 2 在 Kubernetes 之上添加了新的功能,让你一站式管理上百个集群,统一 RBAC,开启监控和告警。了解更多。" +insertOneSix: false +ctaBanner: 0 +aliases: + - /rancher/v2.x/en/ +--- +Rancher 最初是为了支持多种容器编排引擎而构建的,其中包括 Rancher 自己的容器编排引擎 Cattle。随着 Kubernetes 的兴起,Rancher 2 开始转向部署和管理在任何地方、任何提供商上运行的 Kubernetes 集群。 + +Rancher 可以创建来自 Kubernetes 托管服务提供商的集群,创建节点并安装 Kubernetes,或者导入在任何地方运行的现有 Kubernetes 集群。 + +Rancher 基于 Kubernetes 添加了新的功能,包括统一所有集群的身份验证和 RBAC,让系统管理员从一个位置控制全部集群的访问。 + +此外,Rancher 可以为集群和资源提供更精细的监控和告警,将日志发送到外部提供商,并通过应用商店(Application Catalog)直接集成 Helm。如果你拥有外部 CI/CD 系统,你可以将其与 Rancher 对接。没有的话,你也可以使用 Rancher 提供的 Fleet 自动部署和升级工作负载。 + +Rancher 是一个 _全栈式_ 的 Kubernetes 容器管理平台,为你提供在任何地方都能成功运行 Kubernetes 的工具。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides.md new file mode 100644 index 00000000000..0144efd14a7 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides.md @@ -0,0 +1,13 @@ +--- +title: 参考指南 +--- + +**参考指南**是用户可以学习的产品或流程描述。参考指南是“信息导向”的,主要用于描述。 + +本章节的文档可能包含一些操作步骤,但是描述操作步骤不是本章节的主要目的。 + +使用参考指南的用户熟悉且了解如何使用 Rancher。当用户需要参考具体使用细节时,用户可以获取更详细的使用描述。 + +Rancher 参考指南示例: +1. [Rancher Manager 架构](./pages-for-subheaders/rancher-manager-architecture.md) +2. [集群配置指南](./pages-for-subheaders/cluster-configuration.md) diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/about-the-api/api-tokens.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/about-the-api/api-tokens.md new file mode 100644 index 00000000000..9880d81d147 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/about-the-api/api-tokens.md @@ -0,0 +1,88 @@ +--- +title: API 令牌 +weight: 1 +--- + +默认情况下,某些集群级别的 API 令牌是使用无限期 TTL(`ttl=0`)生成的。换言之,除非你让令牌失效,否则 `ttl=0` 的 API 令牌永远不会过期。令牌不会因为更改密码而失效。 + +要停用 API 令牌,你可以删除令牌或停用用户账号。 + +### 删除令牌 +要删除令牌: + +1. 转到 `https:///v3/tokens`,在 Rancher API 视图中查看包含所有令牌的列表。 + +1. 通过 ID 访问要删除的令牌。例如,`https:///v3/tokens/kubectl-shell-user-vqkqt`。 + +1. 单击**删除**。 + +以下是使用 `ttl=0` 生成的完整令牌列表: + +| 令牌 | 描述 | +| ----------------- | -------------------------------------------------------------------------------------- | +| `kubeconfig-*` | Kubeconfig 令牌 | +| `kubectl-shell-*` | 在浏览器中访问 `kubectl` shell | +| `agent-*` | Agent deployment 令牌 | +| `compose-token-*` | compose 令牌 | +| `helm-token-*` | Helm Chart deployment 令牌 | +| `*-pipeline*` | 项目流水线令牌 | +| `telemetry-*` | 遥测令牌 | +| `drain-node-*` | 用于清空的令牌(由于没有原生 Kubernetes API,我们使用 `kubectl` 来清空) | + + +### 在 Kubeconfig 令牌上设置 TTL + +管理员可以在 Kubeconfig 令牌上设置全局存活时间 (time-to-live,TTL)。如需更改默认 kubeconfig TTL,你可以导航到全局设置并将 [`kubeconfig-default-token-ttl-minutes`](#kubeconfig-default-token-ttl-minutes) 设置为所需的持续时间(单位:分钟)。[`kubeconfig-default-token-ttl-minutes`](#kubeconfig-default-token-ttl-minutes) 的默认值为 0,表示令牌永不过期。 + +:::note + +除了由 CLI 创建的用于[生成 kubeconfig 令牌](#在生成的-kubeconfig-中禁用令牌)的令牌之外,所有 kubeconfig 令牌都使用此设置。 + +::: + +### 在生成的 Kubeconfig 中禁用令牌 + +1. 将 `kubeconfig-generate-token` 设置为 `false`。此设置让 Rancher 不再在用户单击下载 kubeconfig 文件时自动生成令牌。如果停用此设置,生成的 kubeconfig 将引用 [Rancher CLI](../cli-with-rancher/kubectl-utility.md#使用-kubectl-和-kubeconfig-令牌-进行-ttl-认证) 来检索集群的短期令牌。当这个 kubeconfig 在客户端(例如 `kubectl`)中使用时,你需要安装 Rancher CLI 来完成登录请求。 + +2. 将 `kubeconfig-token-ttl-minutes` 设置为所需的时长(单位:分钟)。`kubeconfig-token-ttl-minutes` 默认设置为 960(即 16 小时)。 + +### 令牌哈希 + +你可以启用令牌哈希,令牌将使用 SHA256 算法进行单向哈希。这是一个不可逆的操作,一旦启用,此功能将无法禁用。在启用功能或在测试环境中评估之前,建议你先进行备份。 + +要启用令牌哈希,请参阅[本节](../../pages-for-subheaders/enable-experimental-features.md)。 + +此功能将影响所有令牌,包括但不限于以下内容: + +- Kubeconfig 令牌 +- 持有者令牌 API 密钥/调用 +- 内部操作使用的令牌 + +### 令牌设置 +以下全局设置会影响 Rancher 令牌的行为: + +| 设置 | 描述 | +| ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| [`auth-user-session-ttl-minutes`](#auth-user-session-ttl-minutes) | 用户认证会话令牌的 TTL(单位:分钟)。 | +| [`kubeconfig-default-token-TTL-minutes`](#kubeconfig-default-token-ttl-minutes) | 默认 TTL,应用于所有 kubeconfig 令牌(除了[由 Rancher CLI 生成的令牌](#在生成的-kubeconfig-中禁用令牌))。**此设置从 2.6.6 版本开始引入。** | +| [`kubeconfig-token-ttl-minutes`](#kubeconfig-token-ttl-minutes) | 在 CLI 中生成的令牌 TTL。**自 2.6.6 起已弃用,并将在 2.8.0 中删除**。请知悉,`kubeconfig-default-token-TTL-minutes` 将用于所有 kubeconfig 令牌。 | +| [`auth-token-max-ttl-minutes`](#auth-token-max-ttl-minutes) | 除了由 [`auth-user-session-ttl-minutes`](#auth-user-session-ttl-minutes) 控制的令牌外,所有令牌的最大 TTL。 | +| [`kubeconfig-generate-token`](#kubeconfig-generate-token) | 如果为 true,则在用户下载 kubeconfig 时自动生成令牌。 | + +#### auth-user-session-ttl-minutes +存活时间(TTL)(单位:分钟),用于确定用户身份验证会话令牌的到期时间。过期后,用户将需要登录并获取新令牌。此设置不受 [`auth-token-max-ttl-minutes`](#auth-token-max-ttl-minutes) 的影响。会话令牌是在用户登录 Rancher 时创建的。 + +#### kubeconfig-default-token-TTL-minutes +存活时间(TTL)(单位:分钟),用于确定 kubeconfig 令牌的到期时间。令牌过期后,API 将拒绝令牌。此设置的值不能大于 [`auth-token-max-ttl-minutes`](#auth-token-max-ttl-minutes) 的值。此设置适用于在请求的 kubeconfig 文件中生成的令牌,不包括[由 Rancher CLI 生成的](#在生成的-kubeconfig-中禁用令牌)令牌。 +**此设置从 2.6.6 版本开始引入**。 + +#### kubeconfig-token-ttl-minutes +存活时间(TTL)(单位:分钟),用于确定由 CLI 生成的 kubeconfig 令牌的到期时间。当 [`kubeconfig-generate-token`](#kubeconfig-generate-token) 设为 false 时,则由 CLI 生成令牌。令牌过期后,API 将拒绝令牌。此设置的值不能大于 [`auth-token-max-ttl-minutes`](#auth-token-max-ttl-minutes) 的值。 +**自版本 2.6.6 起已弃用,并将在 2.8.0 中删除。请知悉,此设置将被 [`kubeconfig-default-token-TTL-minutes`](#kubeconfig-default-token-ttl-minutes) 的值替换**。 + +#### auth-token-max-ttl-minutes +身份验证令牌的最大生存时间 (TTL)(单位:分钟)。如果用户尝试创建一个 TTL 大于 `auth-token-max-ttl-minutes` 的令牌,Rancher 会将令牌 TTL 设置为 `auth-token-max-ttl-minutes` 的值。身份验证令牌是为验证 API 请求而创建的。 +**2.6.6 版本更改:适用于所有 kubeconfig 令牌和 API 令牌。** + +#### kubeconfig-generate-token +如果设置为 true,则通过 UI 请求的 kubeconfig 将包含一个有效的令牌。如果设置为 false,kubeconfig 将包含一个使用 Rancher CLI 提示用户登录的命令。然后,[CLI 将为用户检索和缓存令牌](../cli-with-rancher/kubectl-utility.md#使用-kubectl-和-kubeconfig-令牌-进行-ttl-认证)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/amazon-eks-permissions/minimum-eks-permissions.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/amazon-eks-permissions/minimum-eks-permissions.md new file mode 100644 index 00000000000..98e36753378 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/amazon-eks-permissions/minimum-eks-permissions.md @@ -0,0 +1,224 @@ +--- +title: 最小 EKS 权限 +weight: 1 +--- + +此处提供在 Rancher 中使用 EKS 驱动所有功能所需的最小权限。Rancher 需要额外的权限来配置`服务角色`和 `VPC` 资源。你可以选择在创建集群**之前**创建这些资源,以便在定义集群配置时选择这些资源。 + +| 资源 | 描述 | +---------|------------ +| 服务角色 | 服务角色向 Kubernetes 提供管理资源所需的权限。Rancher 可以使用以下[服务角色权限](#服务角色权限)来创建服务角色。 | +| VPC | 提供 EKS 和 Worker 节点使用的隔离网络资源。Rancher 使用以下 [VPC 权限](#vpc-权限)创建 VPC 资源。 | + + +资源定位使用 `*` 作为在 Rancher 中创建 EKS 集群之前,无法已知创建的资源的名称(ARN)。 + +```json +{ + "Version": "2012-10-17", + "Statement": [ + { + "Sid": "EC2Permisssions", + "Effect": "Allow", + "Action": [ + "ec2:RunInstances", + "ec2:RevokeSecurityGroupIngress", + "ec2:RevokeSecurityGroupEgress", + "ec2:DescribeInstanceTypes", + "ec2:DescribeRegions", + "ec2:DescribeVpcs", + "ec2:DescribeTags", + "ec2:DescribeSubnets", + "ec2:DescribeSecurityGroups", + "ec2:DescribeRouteTables", + "ec2:DescribeLaunchTemplateVersions", + "ec2:DescribeLaunchTemplates", + "ec2:DescribeKeyPairs", + "ec2:DescribeInternetGateways", + "ec2:DescribeImages", + "ec2:DescribeAvailabilityZones", + "ec2:DescribeAccountAttributes", + "ec2:DeleteTags", + "ec2:DeleteSecurityGroup", + "ec2:DeleteKeyPair", + "ec2:CreateTags", + "ec2:CreateSecurityGroup", + "ec2:CreateLaunchTemplateVersion", + "ec2:CreateLaunchTemplate", + "ec2:CreateKeyPair", + "ec2:AuthorizeSecurityGroupIngress", + "ec2:AuthorizeSecurityGroupEgress" + ], + "Resource": "*" + }, + { + "Sid": "CloudFormationPermisssions", + "Effect": "Allow", + "Action": [ + "cloudformation:ListStacks", + "cloudformation:ListStackResources", + "cloudformation:DescribeStacks", + "cloudformation:DescribeStackResources", + "cloudformation:DescribeStackResource", + "cloudformation:DeleteStack", + "cloudformation:CreateStackSet", + "cloudformation:CreateStack" + ], + "Resource": "*" + }, + { + "Sid": "IAMPermissions", + "Effect": "Allow", + "Action": [ + "iam:PassRole", + "iam:ListRoles", + "iam:ListRoleTags", + "iam:ListInstanceProfilesForRole", + "iam:ListInstanceProfiles", + "iam:ListAttachedRolePolicies", + "iam:GetRole", + "iam:GetInstanceProfile", + "iam:DetachRolePolicy", + "iam:DeleteRole", + "iam:CreateRole", + "iam:AttachRolePolicy" + ], + "Resource": "*" + }, + { + "Sid": "KMSPermisssions", + "Effect": "Allow", + "Action": "kms:ListKeys", + "Resource": "*" + }, + { + "Sid": "EKSPermisssions", + "Effect": "Allow", + "Action": [ + "eks:UpdateNodegroupVersion", + "eks:UpdateNodegroupConfig", + "eks:UpdateClusterVersion", + "eks:UpdateClusterConfig", + "eks:UntagResource", + "eks:TagResource", + "eks:ListUpdates", + "eks:ListTagsForResource", + "eks:ListNodegroups", + "eks:ListFargateProfiles", + "eks:ListClusters", + "eks:DescribeUpdate", + "eks:DescribeNodegroup", + "eks:DescribeFargateProfile", + "eks:DescribeCluster", + "eks:DeleteNodegroup", + "eks:DeleteFargateProfile", + "eks:DeleteCluster", + "eks:CreateNodegroup", + "eks:CreateFargateProfile", + "eks:CreateCluster" + ], + "Resource": "*" + } + ] +} +``` + +### 服务角色权限 + +指的是 Rancher 在 EKS 集群创建过程中,代表用户创建服务角色所需的权限。 + +```json +{ + "Version": "2012-10-17", + "Statement": [ + { + "Sid": "IAMPermisssions", + "Effect": "Allow", + "Action": [ + "iam:AddRoleToInstanceProfile", + "iam:AttachRolePolicy", + "iam:CreateInstanceProfile", + "iam:CreateRole", + "iam:CreateServiceLinkedRole", + "iam:DeleteInstanceProfile", + "iam:DeleteRole", + "iam:DetachRolePolicy", + "iam:GetInstanceProfile", + "iam:GetRole", + "iam:ListAttachedRolePolicies", + "iam:ListInstanceProfiles", + "iam:ListInstanceProfilesForRole", + "iam:ListRoles", + "iam:ListRoleTags", + "iam:PassRole", + "iam:RemoveRoleFromInstanceProfile" + ], + "Resource": "*" + } + ] +} +``` + +创建 EKS 集群时,Rancher 将创建具有以下信任策略的服务角色: + +```json +{ + "Version": "2012-10-17", + "Statement": [ + { + "Action": "sts:AssumeRole", + "Principal": { + "Service": "eks.amazonaws.com" + }, + "Effect": "Allow", + "Sid": "" + } + ] +} +``` + +此角色还将具有两个角色策略,其中包含以下策略 ARN: + +``` +arn:aws:iam::aws:policy/AmazonEKSClusterPolicy +arn:aws:iam::aws:policy/AmazonEKSServicePolicy +``` + +### VPC 权限 + +Rancher 创建 VPC 和关联资源所需的权限。 + +```json +{ + "Version": "2012-10-17", + "Statement": [ + { + "Sid": "VPCPermissions", + "Effect": "Allow", + "Action": [ + "ec2:ReplaceRoute", + "ec2:ModifyVpcAttribute", + "ec2:ModifySubnetAttribute", + "ec2:DisassociateRouteTable", + "ec2:DetachInternetGateway", + "ec2:DescribeVpcs", + "ec2:DeleteVpc", + "ec2:DeleteTags", + "ec2:DeleteSubnet", + "ec2:DeleteRouteTable", + "ec2:DeleteRoute", + "ec2:DeleteInternetGateway", + "ec2:CreateVpc", + "ec2:CreateSubnet", + "ec2:CreateSecurityGroup", + "ec2:CreateRouteTable", + "ec2:CreateRoute", + "ec2:CreateInternetGateway", + "ec2:AttachInternetGateway", + "ec2:AssociateRouteTable" + ], + "Resource": "*" + } + ] +} +``` diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/backup-restore-configuration/backup-configuration.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/backup-restore-configuration/backup-configuration.md new file mode 100644 index 00000000000..bedef47145a --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/backup-restore-configuration/backup-configuration.md @@ -0,0 +1,171 @@ +--- +title: 备份配置 +shortTitle: 备份 +weight: 1 +--- + +你可以在备份创建页面配置调度,启用加密,并指定备份的存储位置。 + + +## 调度 + +选择第一个选项来执行一次性备份,或选择第二个选项来安排定期备份。选择**定期备份**后,你可以配置以下两个字段: + +- **调度**:该字段支持 + - 标准 [cron 表达式](https://en.wikipedia.org/wiki/Cron),例如 `"0 * * * *"` + - 描述符,例如 `"@midnight"` 或 `"@every 1h30m"` +- **保留数量**:指定必须保留的备份文件数量。如果文件数量超过 `retentionCount` 设置的值,最旧的文件将被删除。默认值为 10。 + +| YAML 指令名称 | 描述 | +| ---------------- | ---------------- | +| `schedule` | 提供用于调度定期备份的 cron 字符串。 | +| `retentionCount` | 提供要保留的备份文件数量。 | + +## 加密 + +rancher-backup 通过调用 kube-apiserver 来收集资源。apiserver 返回的对象会被解密,所以即使启用了[静态加密](https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/),备份收集的加密对象也会是明文。 + +为避免以明文形式存储资源,你可以使用静态加密使用的同一个 encryptionConfig 文件,对备份中的特定资源进行加密。 + +:::note 重要提示: + +`rancher-backup` operator 不会保存 encryptionConfig 文件,因此请自行保存该文件。 +执行还原时需要使用同一个 encryptionFile。 + +::: + +Operator 将这个 encryptionConfig 用作 Kubernetes 密文,该密文必须在 operator 的命名空间中。Rancher 将 `rancher-backup` operator 安装到 `cattle-resources-system` 命名空间中。因此,请在该命名空间中创建这个 encryptionConfig 密文。 + +对于 `EncryptionConfiguration`,你可以使用 [Kubernetes 文档中提供的示例](https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/#understanding-the-encryption-at-rest-configuration)。 + +要创建密文,加密配置文件必须命名为 `encryption-provider-config.yaml`,而且必须使用 `--from-file` 标志来创建这个密文。 + +将 `EncryptionConfiguration` 保存到名为 `encryption-provider-config.yaml` 的文件中,并运行以下命令: + +``` +kubectl create secret generic encryptionconfig \ + --from-file=./encryption-provider-config.yaml \ + -n cattle-resources-system +``` + +这将确保密文包含一个名为 `encryption-provider-config.yaml` 的 key,而且 operator 会使用该 key 来获取加密配置。 + +`加密配置密文` 下拉菜单将过滤并仅列出拥有这个 key 的密文。 + +![](/img/backup_restore/backup/encryption.png) + +在上面的示例命令中,`encryptionconfig` 这个名称可以任意修改。 + + +| YAML 指令名称 | 描述 | +| ---------------- | ---------------- | +| `encryptionConfigSecretName` | 提供 `cattle-resources-system` 命名空间中包含加密配置文件的密文的名称。 | + +## 存储位置 + +如果在备份中指定了 `StorageLocation`,operator 将从该特定的 S3 存储桶中检索备份位置。如果没有指定,operator 将尝试在默认 operator 级别的 S3 存储和 operator 级别的 PVC 存储中查找这个文件。默认存储位置是在部署 `rancher-backup` operator 时配置的。 + +如果你选择第一个选项,备份将存储在安装 rancher-backup Chart 时配置的存储位置中。如果你选择第二个选项,你可以配置不同的兼容 S3 的对象存储作为备份存储位置。 + +### S3 + +S3 存储位置包含以下配置字段: + +1. **凭证密文**(可选):如果你需要使用 AWS 访问密钥(access key)和密文密钥(secret key)来访问 S3 存储桶,请使用带有密钥和指令 `accessKey` 和 `secretKey` 的凭证来创建密文。它可以是任意一个命名空间。你可以点击[此处](#credentialsecret-示例)查看示例密文。如果运行 operator 的节点在 EC2 中,并且设置了允许它们访问 S3 的 IAM 权限,则此指令是不必要的(如[本节](#ec2-节点访问-s3-的-iam-权限)所述)。凭证密文下拉菜单列出了所有命名空间的密文。 +1. **存储桶名称**:存储备份文件的 S3 存储桶的名称。 +1. **区域**(可选):S3 存储桶所在的 AWS [区域](https://aws.amazon.com/about-aws/global-infrastructure/regions_az/)。配置 MinIO 时不需要该字段。 +1. **文件夹**(可选):S3 存储桶中存储备份文件的文件夹名称。不支持嵌套文件夹(例如, `rancher/cluster1`)。 +1. **端点**:用于访问存储桶区域中的 S3 的[端点](https://docs.aws.amazon.com/general/latest/gr/s3.html)。 +1. **端点 CA**(可选):Base64 编码的 CA 证书。如需获取示例,请参见 [S3 兼容配置示例](#s3-存储配置示例)。 +1. **跳过 TLS 验证**(可选):如果你不使用 TLS,则设置为 `true`。 + + +| YAML 指令名称 | 描述 | 必填 | +| ---------------- | ---------------- | ------------ | +| `credentialSecretName` | 如果你需要使用 AWS 访问密钥(access key)和密文密钥(secret key)来访问 S3 存储桶,请使用带有密钥和指令 `accessKey` 和 `secretKey` 的凭证来创建密文。它可以在任何命名空间中,只要你在 `credentialSecretNamespace` 中提供该命名空间。点击[这里](#credentialsecret-示例)查看示例密文。如果运行 operator 的节点在 EC2 中,并且设置了允许它们访问 S3 的 IAM 权限,则此指令是不必要的(如[本节](#ec2-节点访问-s3-的-iam-权限)所述)。 | | +| `credentialSecretNamespace` | 包含访问 S3 的凭证的密文的命名空间。如果运行 operator 的节点在 EC2 中,并且设置了允许它们访问 S3 的 IAM 权限,则此指令是不必要的(如[本节](#ec2-节点访问-s3-的-iam-权限)所述)。 | | +| `bucketName` | 存储备份文件的 S3 存储桶的名称。 | ✓ | +| `folder` | S3 存储桶中存储备份文件的文件夹名称。不支持嵌套文件夹(例如, `rancher/cluster1`)。 | | +| `region` | S3 存储桶所在的 AWS [区域](https://aws.amazon.com/about-aws/global-infrastructure/regions_az/)。 | ✓ | +| `endpoint` | 用于访问存储桶区域中的 S3 的[端点](https://docs.aws.amazon.com/general/latest/gr/s3.html)。 | ✓ | +| `endpointCA` | Base64 编码的 CA 证书。如需获取示例,请参见 [S3 兼容配置示例](#s3-存储配置示例)。 | | +| `insecureTLSSkipVerify` | 如果你不使用 TLS,则设置为 `true`。 | | + +### S3 存储配置示例 + +```yaml +s3: + credentialSecretName: s3-creds + credentialSecretNamespace: default + bucketName: rancher-backups + folder: rancher + region: us-west-2 + endpoint: s3.us-west-2.amazonaws.com +``` + +### MinIO 配置示例 + +```yaml +s3: + credentialSecretName: minio-creds + bucketName: rancherbackups + endpoint: minio.35.202.130.254.xip.io + endpointCA: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURHakNDQWdLZ0F3SUJBZ0lKQUtpWFZpNEpBb0J5TUEwR0NTcUdTSWIzRFFFQkN3VUFNQkl4RURBT0JnTlYKQkFNTUIzUmxjM1F0WTJFd0hoY05NakF3T0RNd01UZ3lOVFE1V2hjTk1qQXhNREk1TVRneU5UUTVXakFTTVJBdwpEZ1lEVlFRRERBZDBaWE4wTFdOaE1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBCjA4dnV3Q2Y0SEhtR2Q2azVNTmozRW5NOG00T2RpS3czSGszd1NlOUlXQkwyVzY5WDZxenBhN2I2M3U2L05mMnkKSnZWNDVqeXplRFB6bFJycjlpbEpWaVZ1NFNqWlFjdG9jWmFCaVNsL0xDbEFDdkFaUlYvKzN0TFVTZSs1ZDY0QQpWcUhDQlZObU5xM3E3aVY0TE1aSVpRc3N6K0FxaU1Sd0pOMVVKQTZ6V0tUc2Yzc3ByQ0J2dWxJWmZsVXVETVAyCnRCTCt6cXZEc0pDdWlhNEEvU2JNT29tVmM2WnNtTGkwMjdub3dGRld3MnRpSkM5d0xMRE14NnJoVHQ4a3VvVHYKQXJpUjB4WktiRU45L1Uzb011eUVKbHZyck9YS2ZuUDUwbk8ycGNaQnZCb3pUTStYZnRvQ1d5UnhKUmI5cFNTRApKQjlmUEFtLzNZcFpMMGRKY2sxR1h3SURBUUFCbzNNd2NUQWRCZ05WSFE0RUZnUVU5NHU4WXlMdmE2MTJnT1pyCm44QnlFQ2NucVFjd1FnWURWUjBqQkRzd09ZQVU5NHU4WXlMdmE2MTJnT1pybjhCeUVDY25xUWVoRnFRVU1CSXgKRURBT0JnTlZCQU1NQjNSbGMzUXRZMkdDQ1FDb2wxWXVDUUtBY2pBTUJnTlZIUk1FQlRBREFRSC9NQTBHQ1NxRwpTSWIzRFFFQkN3VUFBNElCQVFER1JRZ1RtdzdVNXRQRHA5Q2psOXlLRW9Vd2pYWWM2UlAwdm1GSHpubXJ3dUVLCjFrTkVJNzhBTUw1MEpuS29CY0ljVDNEeGQ3TGdIbTNCRE5mVVh2anArNnZqaXhJYXR2UWhsSFNVaWIyZjJsSTkKVEMxNzVyNCtROFkzelc1RlFXSDdLK08vY3pJTGh5ei93aHRDUlFkQ29lS1dXZkFiby8wd0VSejZzNkhkVFJzNwpHcWlGNWZtWGp6S0lOcTBjMHRyZ0xtalNKd1hwSnU0ZnNGOEcyZUh4b2pOKzdJQ1FuSkg5cGRIRVpUQUtOL2ppCnIvem04RlZtd1kvdTBndEZneWVQY1ZWbXBqRm03Y0ZOSkc4Y2ZYd0QzcEFwVjhVOGNocTZGeFBHTkVvWFZnclMKY1VRMklaU0RJd1FFY3FvSzFKSGdCUWw2RXBaUVpWMW1DRklrdFBwSQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0t +``` +### credentialSecret 示例 + +```yaml +apiVersion: v1 +kind: Secret +metadata: + name: creds +type: Opaque +data: + accessKey: + secretKey: +``` + +### EC2 节点访问 S3 的 IAM 权限 + +有两种方法可以设置 `rancher-backup` operator 来使用 S3 作为备份存储位置。 + +一种方法是在 Backup 自定义资源中配置 `credentialSecretName`(即可以访问 S3 的 AWS 凭证)。 + +如果集群节点在 Amazon EC2 中,你也可以给 EC2 节点分配 IAM 权限,使其可以访问 S3。 + +要允许节点访问 S3,请按照 [AWS 文档](https://aws.amazon.com/premiumsupport/knowledge-center/ec2-instance-access-s3-bucket/)中的说明,为 EC2 创建一个 IAM 角色。在向角色添加自定义策略时,添加以下权限,并将 `Resource` 替换为你的存储桶名称: + +```json +{ + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": [ + "s3:ListBucket" + ], + "Resource": [ + "arn:aws:s3:::rancher-backups" + ] + }, + { + "Effect": "Allow", + "Action": [ + "s3:PutObject", + "s3:GetObject", + "s3:DeleteObject", + "s3:PutObjectAcl" + ], + "Resource": [ + "arn:aws:s3:::rancher-backups/*" + ] + } + ] +} +``` + +在创建角色并将相应的实例配置文件附加 EC2 实例后,Backup 自定义资源中的 `credentialSecretName` 指令可以留空。 + +## 示例 + +如需获取 Backup 自定义资源的示例,请参见[本页](examples.md#备份)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/backup-restore-configuration/examples.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/backup-restore-configuration/examples.md new file mode 100644 index 00000000000..24d300cc163 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/backup-restore-configuration/examples.md @@ -0,0 +1,294 @@ +--- +title: 示例 +weight: 5 +--- + +本节包含 Backup 和 Restore 自定义资源的示例。 + +默认的备份存储位置是在安装或升级 `rancher-backup` operator 时配置的。 + +只有 Restore 自定义资源使用创建备份时使用的加密配置密文时,才能还原加密的备份。 + +## 备份 + +本节包含 Backup 自定义资源的示例。 + +> **注意**:有关配置以下选项的更多信息,请参阅[备份配置参考页面](./backup-configuration.md)。 + +### 在默认位置进行加密备份 + +```yaml +apiVersion: resources.cattle.io/v1 +kind: Backup +metadata: + name: default-location-encrypted-backup +spec: + resourceSetName: rancher-resource-set + encryptionConfigSecretName: encryptionconfig +``` + +### 在默认位置进行定期备份 + +```yaml +apiVersion: resources.cattle.io/v1 +kind: Backup +metadata: + name: default-location-recurring-backup +spec: + resourceSetName: rancher-resource-set + schedule: "@every 1h" + retentionCount: 10 +``` + +### 在默认位置进行加密的定期备份 + +```yaml +apiVersion: resources.cattle.io/v1 +kind: Backup +metadata: + name: default-enc-recurring-backup +spec: + resourceSetName: rancher-resource-set + encryptionConfigSecretName: encryptionconfig + schedule: "@every 1h" + retentionCount: 3 +``` + +### Minio 中的加密备份 + +```yaml +apiVersion: resources.cattle.io/v1 +kind: Backup +metadata: + name: minio-backup +spec: + storageLocation: + s3: + credentialSecretName: minio-creds + credentialSecretNamespace: default + bucketName: rancherbackups + endpoint: minio.xip.io + endpointCA: + resourceSetName: rancher-resource-set + encryptionConfigSecretName: encryptionconfig +``` + +### 使用 AWS 凭证密文在 S3 中备份 + +```yaml +apiVersion: resources.cattle.io/v1 +kind: Backup +metadata: + name: s3-backup +spec: + storageLocation: + s3: + credentialSecretName: s3-creds + credentialSecretNamespace: default + bucketName: rancher-backups + folder: ecm1 + region: us-west-2 + endpoint: s3.us-west-2.amazonaws.com + resourceSetName: rancher-resource-set + encryptionConfigSecretName: encryptionconfig +``` + +### 使用 AWS 凭证密文在 S3 中进行定期备份 + +```yaml +apiVersion: resources.cattle.io/v1 +kind: Backup +metadata: + name: s3-recurring-backup +spec: + storageLocation: + s3: + credentialSecretName: s3-creds + credentialSecretNamespace: default + bucketName: rancher-backups + folder: ecm1 + region: us-west-2 + endpoint: s3.us-west-2.amazonaws.com + resourceSetName: rancher-resource-set + encryptionConfigSecretName: encryptionconfig + schedule: "@every 1h" + retentionCount: 10 +``` + +### 从具有访问 S3 的 IAM 权限的 EC2 节点进行备份 + +这个例子表明,如果运行 `rancher-backup` 的节点拥有这些[访问 S3 的权限](backup-configuration.md#ec2-节点访问-s3-的-iam-权限),就不必提供 AWS 的凭证密文来创建备份。 + +```yaml +apiVersion: resources.cattle.io/v1 +kind: Backup +metadata: + name: s3-iam-backup +spec: + storageLocation: + s3: + bucketName: rancher-backups + folder: ecm1 + region: us-west-2 + endpoint: s3.us-west-2.amazonaws.com + resourceSetName: rancher-resource-set + encryptionConfigSecretName: encryptionconfig +``` + +## 还原 + +本节包含 Restore 自定义资源的示例。 + +> **注意**:有关配置以下选项的更多信息,请参阅[恢复配置参考页面](./restore-configuration.md)。 + +### 使用默认备份文件位置还原 + +```yaml +apiVersion: resources.cattle.io/v1 +kind: Restore +metadata: + name: restore-default +spec: + backupFilename: default-location-recurring-backup-752ecd87-d958-4d20-8350-072f8d090045-2020-09-26T12-29-54-07-00.tar.gz +# encryptionConfigSecretName: test-encryptionconfig +``` + +### 为 Rancher 迁移进行还原 +```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 + prune: false + storageLocation: + s3: + credentialSecretName: s3-creds + credentialSecretNamespace: default + bucketName: rancher-backups + folder: ecm1 + region: us-west-2 + endpoint: s3.us-west-2.amazonaws.com +``` + +### 使用加密的备份还原 + +```yaml +apiVersion: resources.cattle.io/v1 +kind: Restore +metadata: + name: restore-encrypted +spec: + backupFilename: default-test-s3-def-backup-c583d8f2-6daf-4648-8ead-ed826c591471-2020-08-24T20-47-05Z.tar.gz + encryptionConfigSecretName: encryptionconfig +``` + +### 从 Minio 还原加密的备份 + +```yaml +apiVersion: resources.cattle.io/v1 +kind: Restore +metadata: + name: restore-minio +spec: + backupFilename: default-minio-backup-demo-aa5c04b7-4dba-4c48-9ac4-ab7916812eaa-2020-08-30T13-18-17-07-00.tar.gz + storageLocation: + s3: + credentialSecretName: minio-creds + credentialSecretNamespace: default + bucketName: rancherbackups + endpoint: minio.xip.io + endpointCA: + encryptionConfigSecretName: test-encryptionconfig +``` + +### 使用 AWS 凭证密文访问 S3 从备份中还原 + +```yaml +apiVersion: resources.cattle.io/v1 +kind: Restore +metadata: + name: restore-s3-demo +spec: + backupFilename: test-s3-recurring-backup-752ecd87-d958-4d20-8350-072f8d090045-2020-09-26T12-49-34-07-00.tar.gz.enc + storageLocation: + s3: + credentialSecretName: s3-creds + credentialSecretNamespace: default + bucketName: rancher-backups + folder: ecm1 + region: us-west-2 + endpoint: s3.us-west-2.amazonaws.com + encryptionConfigSecretName: test-encryptionconfig +``` + +### 从具有访问 S3 的 IAM 权限的 EC2 节点进行还原 + +这个例子表明,如果运行 `rancher-backup` 的节点拥有这些[访问 S3 的权限](backup-configuration.md#ec2-节点访问-s3-的-iam-权限),就不必提供 AWS 的凭证密文来从备份中还原。 + +```yaml +apiVersion: resources.cattle.io/v1 +kind: Restore +metadata: + name: restore-s3-demo +spec: + backupFilename: default-test-s3-recurring-backup-84bf8dd8-0ef3-4240-8ad1-fc7ec308e216-2020-08-24T10#52#44-07#00.tar.gz + storageLocation: + s3: + bucketName: rajashree-backup-test + folder: ecm1 + region: us-west-2 + endpoint: s3.us-west-2.amazonaws.com + encryptionConfigSecretName: test-encryptionconfig +``` + +# 在 S3 中存储备份的凭证密文示例 + +```yaml +apiVersion: v1 +kind: Secret +metadata: + name: creds +type: Opaque +data: + accessKey: + secretKey: +``` + +# EncryptionConfiguration 示例 + +以下代码片段演示了两种不同类型的密文及其与自定义资源的备份和还原的相关性。 + +第一个示例是用于加密备份文件的密钥。在这种情况下,Backup operator 将无法读取密文加密文件。它只使用密文的内容。 + +第二个示例是 Kubernetes 密文加密配置文件,用于加密存储在 etcd 中的密文。**备份 etcd 数据存储时,请务必同时备份 EncryptionConfiguration**。如果你没有这样做,而且备份数据时正在使用密文加密,你将无法使用恢复的数据。 + + +```yaml +apiVersion: apiserver.config.k8s.io/v1 +kind: EncryptionConfiguration +resources: + - resources: + - secrets + providers: + - aesgcm: + keys: + - name: key1 + secret: c2VjcmV0IGlzIHNlY3VyZQ== + - name: key2 + secret: dGhpcyBpcyBwYXNzd29yZA== + - aescbc: + keys: + - name: key1 + secret: c2VjcmV0IGlzIHNlY3VyZQ== + - name: key2 + secret: dGhpcyBpcyBwYXNzd29yZA== + - secretbox: + keys: + - name: key1 + secret: YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoxMjM0NTY= +``` + + + diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/backup-restore-configuration/restore-configuration.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/backup-restore-configuration/restore-configuration.md new file mode 100644 index 00000000000..261c4118f20 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/backup-restore-configuration/restore-configuration.md @@ -0,0 +1,83 @@ +--- +title: 还原配置 +shortTitle: 还原 +weight: 2 +--- + +你可以在还原创建页面提供还原备份的详细信息。 + +![](/img/backup_restore/restore/restore.png) + + +## 备份源 +你需要提供备份文件和备份文件存储位置的详细信息,operator 会使用这些信息执行还原。选择以下其中一个选项来提供这些详细信息。 + + + + +### 使用已有的备份配置恢复 + +如果你选择这个选项,**目标备份**下拉菜单中会出现集群中可用的备份。从下拉菜单中选择 Backup,选择后**备份文件名**字段会自动填写,而且所选 Backup 的信息会传递给 operator + +![](/img/backup_restore/restore/existing.png) + +如果 Backup 自定义资源在集群中不存在,你需要获取准确的文件名,并使用默认存储目标或与 S3 兼容的对象存储来提供备份源的详细信息。 + + +### 使用默认存储目标恢复 + +如果你要从 operator 级别配置的默认存储位置中的备份文件进行恢复,请选择此选项。operator 级别的配置是指安装或升级 `rancher-backup` operator 时配置的存储位置。在**备份文件名**字段中提供准确的文件名。 + +![](/img/backup_restore/restore/default.png) + +### 使用与 S3 兼容的对象存储恢复 + +如果在 operator 级别没有配置默认存储位置,或者备份文件所在的存储桶与配置的默认存储位置不一样时,请选择此选项。在**备份文件名**字段中提供准确的文件名。请参见[本节](#从-s3-获取备份文件名)了解从 S3 获取备份文件名的具体步骤。填写 S3 兼容对象存储的所有详细信息。它的字段与 [Backup 自定义资源](backup-configuration.md#存储位置)中 `backup.StorageLocation` 配置的字段一样。 + +![](/img/backup_restore/restore/s3store.png) + +## 加密 + +如果备份是在启用加密的情况下创建的,备份文件的后缀为 `.enc`。如果你选择这类的 Backup,或者提供后缀为 `.enc` 的备份文件名,则会显示另一个名为**加密配置密文**的下拉菜单。 + +![](/img/backup_restore/restore/encryption.png) + +从该下拉菜单中选择的密文必须与执行备份时用于 Backup 自定义资源的密文内容相同。如果加密配置不匹配,还原将会失败。 + +`加密配置密文` 下拉菜单将过滤并仅列出拥有这个 key 的密文。 + +| YAML 指令名称 | 描述 | +| ---------------- | ---------------- | +| `encryptionConfigSecretName` | 提供 `cattle-resources-system` 命名空间中包含加密配置文件的密文的名称。 | + +:::note 重要提示: + +此字段仅在备份创建的过程中启用了加密功能时才需要设置。提供错误的加密配置将导致还原失败。 + +::: + +## 还原过程中修剪 + +* **Prune**:为了从备份中完全恢复 Rancher,并回到备份时的确切状态,我们需要删除 Rancher 在备份后创建的所有额外资源。如果 **Prune** 标志被启用,operator 就会删除这些资源。Prune 是默认启用的,建议保持启用状态。 +* **删除超时**:在删除资源的时候,operator 编辑资源以删除 Finalizers,并试图再次删除前将等待的时间。 + +| YAML 指令名称 | 描述 | +| ---------------- | ---------------- | +| `prune` | 删除备份中不存在的由 Rancher 管理的资源(推荐)。 | +| `deleteTimeoutSeconds` | 在删除资源的时候,operator 编辑资源以删除 Finalizers,并试图再次删除前将等待的时间。 | + +## 从 S3 获取备份文件名 + +这是 `rancher-backup` operator 用来执行还原的备份文件的名称。 + +要从 S3 获取这个文件名,请进入你的 S3 存储桶(或在执行备份时指定的文件夹)。 + +复制文件名并将其存储在你的 Restore 自定义资源中。假设你的备份文件的名字是 `backupfile`: + +- 如果你的存储桶名称是 `s3bucket`,而且你没有指定文件夹,那么要使用的 `backupFilename` 会是 `backupfile`。 +- 如果你的存储桶名称是 `s3bucket`,而且基础文件夹是 `s3folder`,那么要使用的 `backupFilename` 会是 `backupfile`。 +- 如果 `s3Folder` 中有一个名为 `s3sub` 的子文件夹,而且你的备份文件存放在该文件夹中,那么要使用的`backupFilename` 会是 `s3sub/backupfile`。 + +| YAML 指令名称 | 描述 | +| ---------------- | ---------------- | +| `backupFilename` | 这是 `rancher-backup` operator 用来执行还原的备份文件的名称。 | diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/backup-restore-configuration/storage-configuration.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/backup-restore-configuration/storage-configuration.md new file mode 100644 index 00000000000..ea191f70ca4 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/backup-restore-configuration/storage-configuration.md @@ -0,0 +1,58 @@ +--- +title: 备份存储位置配置 +shortTitle: 存储 +weight: 3 +--- + +配置一个用于保存所有备份的默认存储位置。你可以选择对每个备份进行覆盖,但仅限于使用 S3 对象存储。 + +在 operator 级别只能配置一个存储位置。 + + +## 存储位置配置 + +### 无默认存储位置 + +你可以选择不配置 operator 级别的存储位置。如果选择此选项,你必须配置一个与 S3 兼容的对象存储作为每个备份的存储位置。 + +### S3 兼容的对象存储 + +| 参数 | 描述 | +| -------------- | -------------- | +| 凭证密文 | 从 Rancher 的密文中选择 S3 的凭证。[示例](examples.md#在-s3-中存储备份的凭证密文示例)。 | +| 存储桶名称 | 存储备份的 [S3 存储桶](https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingBucket.html)的名称。默认值:`rancherbackups`。 | +| 区域 | S3 存储桶所在的 [AWS 区域](https://aws.amazon.com/about-aws/global-infrastructure/regions_az/)。 | +| 文件夹 | 存储备份的 [S3 存储桶中的文件夹](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/using-folders.html)。 | +| 端点 | [S3 端点](https://docs.aws.amazon.com/general/latest/gr/s3.html),例如 `s3.us-west-2.amazonaws.com`。 | +| Endpoint CA | 用于 S3 端点的 CA 证书。默认值:base64 编码的 CA 证书。 | +| insecureTLSSkipVerify | 如果你不使用 TLS,则设置为 `true`。 | + +### 使用现有的 StorageClass + +如果你通过选择 StorageClass 选项来安装 `rancher-backup` Chart,将会创建一个持久卷说明(Persistent Volume Claim,PVC),而且 Kubernetes 会动态配置一个持久卷(Persistent Volume,PV),所有备份都会默认保存到该持久卷中。 + +关于创建存储类的信息,请参见[本章节](../../how-to-guides/advanced-user-guides/manage-clusters/create-kubernetes-persistent-storage/manage-persistent-storage/dynamically-provision-new-storage.md)。 + +::: note 重要提示: + +强烈建议使用回收策略为 "Retain" 的 StorageClass。否则,如果 `rancher-backup` Chart 创建的 PVC 在应用升级期间或意外被删除后,PV 也会被删除,也就是说所有保存在其中的备份都会被删除。 +如果没有这样的 StorageClass,则在设置 PV 之后,一定要将它的回收策略设置为 "Retain",然后再将备份存储在其中。 + +::: + +### 使用现有的持久卷 + +选择一个用于存储备份的现有持久卷。有关在 Rancher 中创建 PersistentVolumes 的更多信息,请参见[本节](../../how-to-guides/advanced-user-guides/manage-clusters/create-kubernetes-persistent-storage/manage-persistent-storage/set-up-existing-storage.md#2-添加一个引用持久存储的-persistentvolume)。 + +:::note 重要提示: + +强烈建议使用回收策略为 "Retain" 的 Persistent Volume。否则,如果 `rancher-backup` Chart 创建的 PVC 在应用升级期间或意外被删除后,PV 也会被删除,也就是说所有保存在其中的备份都会被删除。 + +::: + +## rancher-backup Helm Chart 的示例 values.yaml + +使用 Helm CLI 时,可用于配置 `rancher-backup` operator 的 `values.yaml` 可以在 [backup-restore-operator](https://github.com/rancher/backup-restore-operator/blob/master/charts/rancher-backup/values.yaml) 仓库中找到。 + +有关 `values.yaml` 文件和在安装时配置 Helm Charts 的更多信息,请参见 [Helm 文档](https://helm.sh/docs/intro/using_helm/#customizing-the-chart-before-installing)。 + diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/best-practices/rancher-managed-clusters/logging-best-practices.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/best-practices/rancher-managed-clusters/logging-best-practices.md new file mode 100644 index 00000000000..9be47e82426 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/best-practices/rancher-managed-clusters/logging-best-practices.md @@ -0,0 +1,88 @@ +--- +title: Logging 最佳实践 +weight: 1 +--- +本指南介绍了集群级别日志和应用日志的最佳实践。 + +- [集群级别日志](#集群级别日志) +- [应用日志](#应用日志) +- [通用最佳实践](#通用最佳实践) + +在 Rancher 2.5 之前,Rancher 的 Logging 是一个静态集成。可供选择的聚合器是固定的(包括 ElasticSearch、Splunk、Kafka、Fluentd 和 Syslog),而且只有两个配置级别可供选择(集群级别和项目级别)。 + +现在,Rancher 的日志聚合更加灵活。通过新的 Logging 的功能,管理员和用户都可以部署符合细粒度收集标准的日志记录,同时提供更多的目标和配置选项。 + +Rancher 的 Logging 使用的是 Banzai Cloud logging operator。我们让你可以管理这个 operator 及其资源,并将它的管理功能和 Rancher 集群管理联系起来。 + +## 集群级别日志 + +### 抓取集群内日志 + +某些用户可能想从集群中运行的每个容器中抓取日志。但是你的安全团队可能要求你从所有执行点收集所有日志。 + +在这种情况下,我们建议你至少创建两个 _ClusterOutput_ 对象 - 一个用于安全团队(如果需要),另一个用于你自己,即集群管理员。创建这些对象时,请选择一个可以处理整个集群的大量日志的输出端点。此外,你还需要选择合适的索引来接收这些日志。 + +创建这些 _ClusterOutput_ 对象后,创建一个 _ClusterFlow_ 来收集所有日志。不要在此 flow 上定义任何 _Include_ 或 _Exclude_ 规则。这可以确保你能收集整个集群的所有日志。如果你有两个 _ClusterOutputs_,请确保它们都能收到日志。 + +### Kubernetes 组件 + +_ClusterFlows_ 能够收集 Kubernetes 集群中所有主机上所有容器的日志。如果这些容器包含在 Kubernetes Pod 中,这个方法是适用的。但是,RKE 容器不存在于 Kubernetes 内。 + +目前,Rancher 能搜集 RKE 容器的日志,但不能轻易过滤。这是因为这些日志不包含源容器的信息(例如 `etcd` 或 `kube-apiserver`)。 + +Rancher 的未来版本将包含源容器名称,来支持过滤这些组件的日志。该功能实现之后,你将能够自定义 _ClusterFlow_ 来**仅**检索 Kubernetes 组件日志,并将日志发送到适当的输出位置。 + +## 应用日志 + +对于 Kubernetes 和所有基于容器的应用而言,最佳实践是将应用日志引导到 `stdout`/`stderr`。容器运行时将捕获这些日志并用它们进行**某些操作** - 通常是将它们写入文件。根据容器运行时(及其配置),这些日志可以放置在任意数量的位置。 + +在将日志写入文件的情况下,Kubernetes 通过在每个主机上创建一个 `/var/log/containers` 目录来提供帮助。这个目录将日志文件符号链接到它们的实际目的地(可能因为配置或容器运行时而有所不同)。 + +Rancher 的 Logging 将读取 `/var/log/containers` 中的所有日志条目,确保所有容器的所有日志条目(假设使用默认配置)均能被收集和处理。 + +### 特定日志文件 + +日志收集仅从 Kubernetes 中的 Pod 中检索 `stdout`/`stderr` 日志。但是,我们也可能想从应用生成的其他文件中收集日志。在这种情况下,你可以使用一个(或两个)日志流 Sidecar。 + +设置日志流 Sidecar 的目的是获取写入磁盘的日志文件,并将其内容传输到 `stdout`。这样一来,Banzai Logging Operator 就可以接收这些日志,并把日志发送到目标输出位置。 + +要进行设置,编辑你的工作负载资源(例如 Deployment)并添加以下 Sidecar 定义: + +```yaml +... +containers: +- args: + - -F + - /path/to/your/log/file.log + command: + - tail + image: busybox + name: stream-log-file-[name] + volumeMounts: + - mountPath: /path/to/your/log + name: mounted-log +... +``` + +这将添加一个容器到你的工作负载定义中,用于将 `/path/to/your/log/file.log` 的内容(在本示例中)传输到 `stdout`。 + +然后将根据你设置的 _Flows_ 或 _ClusterFlows_ 自动收集该日志流。你还可以通过使用容器的名称,专门为该日志文件创建一个 _Flow_。示例如下: + +```yaml +... +spec: + match: + - select: + container_names: + - stream-log-file-name +... +``` + + +## 通用最佳实践 + +- 尽量输出结构化日志条目(例如 `syslog`、JSON)。这些格式已经有了解析器,因此你可以更轻松地处理日志条目。 +- 尽量在日志条目内提供创建该日志条目的应用的名称。这可以使故障排除更容易。这是因为 Kubernetes 并不总是将应用的名称作为对象名称。例如,某个 Pod ID 可能是 `myapp-098kjhsdf098sdf98`,从这个 ID 中我们不能获取运行在容器内的应用的太多信息。 +- 除了在集群范围内收集所有日志的情况外,尽量严格限定 _Flow_ 和 _ClusterFlow_ 对象的范围。这使得在出现问题时更容易进行故障排除,并且还有助于确保不相关的日志条目不会出现在你的聚合器中。严格限定范围的一个例子是将 _Flow_ 限制在命名空间中的单个 _Deployment_,甚至是 _Pod_ 中的单个容器。 +- 除非要进行故障排除,否则不要让日志太详细。太详细的日志会带来许多问题,其中最主要的是**带来干扰**,即重要事件可能会淹没在海量 `DEBUG` 信息中。你可以通过使用自动告警和脚本来缓解这种问题,但太详细的日志仍然给日志管理基础设施带来过大的压力。 +- 如果可能,尽量在日志条目中提供事务或请求 ID。这可以使跨日志源追踪应用活动变得更容易,尤其是在处理分布式应用时。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/best-practices/rancher-managed-clusters/monitoring-best-practices.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/best-practices/rancher-managed-clusters/monitoring-best-practices.md new file mode 100644 index 00000000000..ac43a70dd22 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/best-practices/rancher-managed-clusters/monitoring-best-practices.md @@ -0,0 +1,112 @@ +--- +title: 监控最佳实践 +weight: 2 +--- + +配置合理的监控和告警规则对于安全、可靠地运行生产环境中的工作负载至关重要。在使用 Kubernetes 和 Rancher 时也是如此。幸运的是,你可以使用集成的监控和告警功能来简化整个过程。 + +[Rancher 监控文档](../../../pages-for-subheaders/monitoring-and-alerting.md)描述了如何设置完整的 Prometheus 和 Grafana。这是开箱即用的功能,它将从集群中的所有系统和 Kubernetes 组件中抓取监控数据,并提供合理的仪表板和告警。但为了实现可靠的设置,你还需要监控你的工作负载并使 Prometheus 和 Grafana 适应你的特定用例和集群规模。本文档将为你提供这方面的最佳实践。 + +## 监控内容 + +Kubernetes 本身以及运行在其内部的应用构成了一个分布式系统,不同的组件之间能够进行交互。对于整个系统和每个单独的组件,你必须确保其性能、可用性、可靠性和可扩展性。详情请参见 Google 免费的 [Site Reliability Engineering Book](https://landing.google.com/sre/sre-book/),尤其是关于 [Monitoring distributed systems](https://landing.google.com/sre/sre-book/chapters/monitoring-distributed-systems/) 的章节。 + +## 配置 Prometheus 资源使用 + +在安装集成监控时,Rancher 允许进行一些配置,这些配置取决于你的集群规模和其中运行的工作负载。本章将更详细地介绍这些内容。 + +### 存储和数据保留 + +Prometheus 所需的存储空间取决于你存储的时间序列和标签的数量,以及你配置的数据保留量。需要注意的是,Prometheus 并不是用来长期存储指标的。数据通常只保留几天,而不是几周或几个月。这是因为 Prometheus 不会对存储的指标进行任何聚合。不聚合的好处是避免稀释数据,但这也意味着不设置保留时长的话,所需的存储空间随着时间的推移线性增长。 + +以下是计算所需存储空间的一种方法。首先,通过以下查询来查看 Prometheus 中存储块的平均大小: + +``` +rate(prometheus_tsdb_compaction_chunk_size_bytes_sum[1h]) / rate(prometheus_tsdb_compaction_chunk_samples_sum[1h]) +``` + +接下来,找出每秒的数据引入速率: + +``` +rate(prometheus_tsdb_head_samples_appended_total[1h]) +``` + +然后与保留时间相乘,并添加几个百分点作为缓冲区: + +``` +平均块大小(以字节为单位)x 每秒的数据引入速率 x 保留时间(以秒为单位)x 1.1 = 必需的存储空间(以字节为单位) +``` + +你可以访问[这篇博客](https://www.robustperception.io/how-much-disk-space-do-prometheus-blocks-use)了解关于如何计算必须的存储空间的更多信息。 + +你可以参见 [Prometheus 官方文档](https://prometheus.io/docs/prometheus/latest/storage)来进一步了解 Prometheus 的存储概念。 + +### CPU 和内存的请求和限制 + +在较大的 Kubernetes 集群中,Prometheus 会消耗大量内存。Prometheus 需要的内存与它存储的时间序列和标签的数量以及抓取间隔有关。 + +你可以访问[这篇博客](https://www.robustperception.io/how-much-ram-does-prometheus-2-x-need-for-cardinality-and-ingestion)了解关于如何计算必须的内存的更多信息。 + +所需的 CPU 数量与你正在执行的查询数量相关。 + +### 长期储存 + +Prometheus 不是用于长期存储指标的,它只用于短期存储。 + +如果想要长时间存储部分或全部指标,你可以利用 Prometheus 的[远程读/写](https://prometheus.io/docs/prometheus/latest/storage/#remote-storage-integrations)功能将其连接到 [Thanos](https://thanos.io/),[InfluxDB](https://www.influxdata.com/) 或 [M3DB](https://www.m3db.io/) 等存储系统。你可以访问[这篇博客](https://rancher.com/blog/2020/prometheus-metric-federation)找到设置示例。 + +## 抓取自定义工作负载 + +虽然集成的 Rancher Monitoring 已经可以从集群的节点和系统组件中抓取系统指标,但你也需要为部署在 Kubernetes 上的自定义工作负载抓取数据。为此,你可以配置 Prometheus,让它在一定的时间间隔内对你应用的端点进行 HTTP 请求。然后,这些端点会以 Prometheus 格式返回指标。 + +一般来说,你会从集群中运行的所有工作负载中抓取数据,然后将数据用于告警或调试问题。一般情况下,你只有在具体事件发生后才需要某些指标数据。如果数据已经被抓取并存储了,那就好办了。由于 Prometheus 只是短期存储指标,因此抓取和存储大量数据的成本并不是那么高。如果你使用的是 Prometheus 的长期存储方案,那么你也可以决定持久存储哪些数据。 + +### 关于 Prometheus Exporters + +许多第三方工作负载(如数据库、队列或 Web 服务器)要么已经支持以 Prometheus 格式公开指标,要么有所谓的 exporter,来对工具的指标格式和 Prometheus 理解的指标格式进行转换。通常,你可以将这些 exporter 作为额外的 Sidecar 容器添加到工作负载的 Pod 中。很多 Helm Chart 已经包含了部署 exporter 的选项。此外,你还可以在 [promcat.io](https://promcat.io/) 和 [ExporterHub](https://exporterhub.io/) 上找到一个由 SysDig 策划的 exporter 列表。 + +### Prometheus 的编程语言和框架支持 + +要想把你的自定义应用指标放到 Prometheus 中,你必须直接从你的应用代码中收集和暴露这些指标。幸运的是,对于大多数流行的编程语言和框架来说,已经有一些库和集成来帮助解决这个问题。其中一个例子是 [Spring 框架](https://docs.spring.io/spring-metrics/docs/current/public/prometheus)中的 Prometheus 支持。 + +### ServiceMonitor 和 PodMonitor + +一旦所有工作负载都以 Prometheus 格式公开了指标后,你必须配置 Prometheus 来抓取数据。Rancher 使用 [prometheus-operator](https://github.com/prometheus-operator/prometheus-operator),这使得使用 ServiceMonitors 和 PodMonitors 来添加其他抓取目标变得容易。很多 Helm Chart 已经包含直接创建这些监控器的选项。你也可以在 Rancher 文档中找到更多信息。 + +### Prometheus 推送网关(Pushgateway) + +有些工作负载的指标很难被 Prometheus 抓取,就像 Jobs 和 CronJobs 这样的短期工作负载,或者是不允许在单个处理的传入请求之间共享数据的应用,如 PHP 应用。 + +要想获得这些用例的指标,你可以设置 [prometheus-pushgateways](https://github.com/prometheus/pushgateway)。CronJob 或 PHP 应用将把指标更新推送到 pushgateway。pushgateway 汇总并通过 HTTP 端点暴露它们,然后可以由 Prometheus 抓取。 + +### Prometheus Blackbox 监控 + +有时,你可能需要从外部监控工作负载。为此,你可以使用 [Prometheus blackbox-exporter](https://github.com/prometheus/blackbox_exporter),它允许通过 HTTP、HTTPS、DNS、TCP 和 ICMP 探测任何类型的端点。 + +## 在(微)服务架构中进行监控 + +如果你有一个(微)服务架构,在该架构中集群的多个单独的工作负载相互通信,那么拥有这些流量的详细指标和跟踪是非常重要的,因为这可以帮助你了解所有这些工作负载之间的通信方式,以及问题或瓶颈可能出现的地方。 + +当然,你可以监控所有工作负载中的所有内部流量,并将这些指标暴露给 Prometheus,但这相当耗费精力。像 Istio 这样的服务网格(可以通过[单击](https://rancher.com/docs/rancher/v2.6/en/istio/)在 Rancher 中安装)可以自动完成这项工作,并提供所有 Service 之间流量的丰富的遥测数据。 + +## 真实用户监控 + +监控所有内部工作负载的可用性和性能对于稳定、可靠和快速地运行应用至关重要。但这些指标只能向你展示部分情况。要想获得一个完整的视图,还必须知道你的最终用户是如何实际感知的。为此,你可以研究各种[真实用户监控解决方案](https://en.wikipedia.org/wiki/Real_user_monitoring)。 + +## 安全监控 + +除了通过监控工作负载来检测性能、可用性或可扩展性之外,你还应该监控集群和运行在集群中的工作负载,来发现潜在的安全问题。一个好的做法是经常运行 [CIS 扫描](../../../pages-for-subheaders/cis-scan-guides.md)并发出告警,来检查集群是否按照安全最佳实践进行配置。 + +对于工作负载,你可以看看 Kubernetes 和 Container 安全解决方案,比如 [Falco](https://falco.org/),[Aqua Kubernetes Security](https://www.aquasec.com/solutions/kubernetes-container-security/),[SysDig](https://sysdig.com/) 等。 + +## 设置告警 + +将所有的指标纳入监控系统并在仪表板中可视化是很好的做法,但你也希望在出现问题时能主动收到提醒。 + +集成的 Rancher 监控已经配置了一套合理的告警,这些告警在任何 Kubernetes 集群中都是可用的。你可以扩展告警,来覆盖特定的工作负载和用例。 + +在设置告警时,你需要为对你应用非常关键的工作负载配置告警,但同时也要确保告警不会太频繁。理想情况下,你收到的每一个告警都应该是一个你需要关注并解决的问题。如果你一直收到不太关键的告警,你就有可能开始完全忽略告警信息,然后错过真正重要的告警。因此,少量的告警可能会更好。首先,你可以关注真正重要的指标,例如应用离线等。之后,解决出现的所有问题,然后再创建更详细的告警。 + +如果告警开始发送,但你暂时无法处理,你也可以将告警静默一定时间,以便以后查看。 + +如果需要了解更多关于如何设置告警和通知通道的信息,请访问 [Rancher 文档中心](../../../pages-for-subheaders/monitoring-and-alerting.md)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/best-practices/rancher-managed-clusters/rancher-managed-clusters-in-vsphere.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/best-practices/rancher-managed-clusters/rancher-managed-clusters-in-vsphere.md new file mode 100644 index 00000000000..4645d90b4f2 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/best-practices/rancher-managed-clusters/rancher-managed-clusters-in-vsphere.md @@ -0,0 +1,59 @@ +--- +title: Rancher 管理 vSphere 集群的最佳实践 +shortTitle: Rancher 在 vSphere 托管的集群 +--- + +本指南概述了在 vSphere 环境中配置下游 Rancher 集群的参考架构,以及 VMware 记录的标准 vSphere 最佳实践。 + +- [1. 虚拟机注意事项](#1-虚拟机注意事项) +- [2. 网络注意事项](#2-网络注意事项) +- [3. 存储注意事项](#3-存储注意事项) +- [4. 备份和灾难恢复](#4-备份和灾难恢复) + +
解决方案概述
+ +![解决方案概述](/img/solution_overview.drawio.svg) + +# 1. 虚拟机注意事项 + +### 利用虚拟机模板来构建环境 + +为了保证跨环境部署的虚拟机的一致性,你可以考虑使用虚拟机模板形式的黄金镜像(golden image)。你可以使用 Packer 来实现,从而增加更多自定义选项。 + +### 利用 DRS 反亲和规则(可能的话)在 ESXi 主机上分离下游集群节点 + +这样可以确保节点虚拟机分布在多台 ESXi 主机上,从而防止主机级别的单点故障。 + +### 利用 DRS 反亲和规则(可能的话)在 Datastore 上分离下游集群节点 + +这样可以确保节点虚拟机分布在多个 Datastore 上,从而防止 Datastore 级别的单点故障。 + +### 为 Kubernetes 配置合适的虚拟机 + +在部署节点时,请遵循 K8s 和 etcd 的最佳实践,其中包括禁用 swap,检查集群中的所有主机之间是否有良好的网络连接,为每个节点使用唯一的主机名、MAC 地址和 `product_uuids`。 + +# 2. 网络注意事项 + +### 利用 ETCD 节点之间的低延迟和高带宽连接 + +尽可能在单个数据中心内部署 etcd 成员,来避免延迟开销并减少网络分区的可能性。大多数情况下,1Gb 的连接就足够了。对于大型集群,10Gb 的连接可以缩短恢复备份所需的时间。 + +### 为虚拟机提供固定的 IP 地址 + +你可以为使用的所有节点都配置一个静态 IP。如果使用 DHCP,则每个节点都应该有一个 DHCP 预留,以确保节点分配到相同的 IP 地址。 + +# 3. 存储注意事项 + +### 在 ETCD 节点上使用 SSD 磁盘 + +ETCD 对写入延迟非常敏感。因此,你可以尽量使用 SSD 磁盘来提高写入性能。 + +# 4. 备份和灾难恢复 + +### 定期备份下游集群 + +Kubernetes 使用 etcd 来存储其所有数据,包括配置、状态和元数据。在灾难恢复的情况下,备份这些数据是至关重要的。 + +### 备份下游节点虚拟机 + +将 Rancher 下游节点的虚拟机纳入标准的虚拟机备份策略中。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/best-practices/rancher-managed-clusters/tips-to-set-up-containers.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/best-practices/rancher-managed-clusters/tips-to-set-up-containers.md new file mode 100644 index 00000000000..e2632314654 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/best-practices/rancher-managed-clusters/tips-to-set-up-containers.md @@ -0,0 +1,53 @@ +--- +title: 设置容器的技巧 +weight: 100 +--- + +配置良好的容器可以极大地提高环境的整体性能和安全性。 + +本文介绍一些设置容器的技巧。 + +如果你需要了解容器安全的详细信息,也可以参见 Rancher 的[容器安全指南](https://rancher.com/complete-guide-container-security)。 + +### 使用通用容器操作系统 + +在可能的情况下,你应该尽量在通用的容器基础操作系统上进行标准化。 + +Alpine 和 BusyBox 等较小的发行版减少了容器镜像的大小,并且通常具有较小的漏洞。 + +流行的发行版如 Ubuntu、Fedora 和 CentOS 等都经过了大量的测试,并提供了更多的功能。 + +### 使用 From scratch 容器 +如果你的微服务是一个独立的静态二进制,你应该使用 `From scratch` 容器。 + +`FROM scratch` 容器是一个[官方 Docker 镜像](https://hub.docker.com/_/scratch),它是空的,这样你就可以用它来设计最小的镜像。 + +这个镜像这将具有最小的攻击层和最小的镜像大小。 + +### 以非特权方式运行容器进程 +在可能的情况下,在容器内运行进程时使用非特权用户。虽然容器运行时提供了隔离,但仍然可能存在漏洞和攻击。如果容器以 root 身份运行,无意中或意外的主机挂载也会受到影响。有关为 Pod 或容器配置安全上下文的详细信息,请参见 [Kubernetes 文档](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/)。 + +### 定义资源限制 +你应该将 CPU 和内存限制应用到你的 Pod 上。这可以帮助管理 worker 节点上的资源,并避免发生故障的微服务影响其他微服务。 + +在标准 Kubernetes 中,你可以设置命名空间级别的资源限制。在 Rancher 中,你可以设置项目级别的资源限制,项目内的所有命名空间都会继承这些限制。详情请参见 Rancher 官方文档。 + +在设置资源配额时,如果你在项目或命名空间上设置了任何与 CPU 或内存相关的内容(即限制或预留),所有容器都需要在创建期间设置各自的 CPU 或内存字段。为了避免在创建工作负载期间对每个容器设置这些限制,可以在命名空间上指定一个默认的容器资源限制。 + +有关如何在[容器级别](https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/#resource-requests-and-limits-of-pod-and-container)和命名空间级别设置资源限制的更多信息,请参见 Kubernetes 文档。 + +### 定义资源需求 +你应该将 CPU 和内存要求应用到你的 Pod 上。这对于通知调度器需要将你的 pod 放置在哪种类型的计算节点上,并确保它不会过度配置该节点资源至关重要。在 Kubernetes 中,你可以通过在 pod 的容器规范的资源请求字段中定义 `resources.requests` 来设置资源需求。详情请参见 [Kubernetes 文档](https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/#resource-requests-and-limits-of-pod-and-container)。 + +:::note + +如果你为 pod 所部署的命名空间设置了资源限制,而容器没有特定的资源请求,则不允许启动 pod。为了避免在创建工作负载期间对每个容器设置这些字段,可以在命名空间上指定一个默认的容器资源限制。 + +::: + +建议在容器级别上定义资源需求,否则,调度器会认为集群加载对你的应用没有帮助。 + +### 配置存活和就绪探测器 +你可以为你的容器配置存活探测器和就绪探测器。如果你的容器不是完全崩溃,Kubernetes 是不会知道它是不健康的,除非你创建一个可以报告容器状态的端点或机制。或者,确保你的容器在不健康的情况下停止并崩溃。 + +Kubernetes 文档展示了如何[为容器配置存活和就绪探测器](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/best-practices/rancher-server/on-premises-rancher-in-vsphere.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/best-practices/rancher-server/on-premises-rancher-in-vsphere.md new file mode 100644 index 00000000000..377dbbae4e7 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/best-practices/rancher-server/on-premises-rancher-in-vsphere.md @@ -0,0 +1,86 @@ +--- +title: 在 vSphere 环境中安装 Rancher +shortTitle: vSphere 环境中的 Rancher +weight: 3 +--- + +本指南概述了在 vSphere 环境中在 RKE Kubernetes 集群上安装 Rancher 的参考架构,以及 VMware 记录的标准 vSphere 最佳实践。 + + +
解决方案概述
+ +![解决方案概述](/img/rancher-on-prem-vsphere.svg) + +## 1. 负载均衡器注意事项 + +你需要使用一个负载均衡器将流量转发到 RKE 节点上的 Rancher 工作负载。 + +### 利用容错和高可用性 + +请充分利用具有继承高可用功能的外部(硬件或软件)负载均衡器(如:F5、NSX-T、Keepalived 等)。 + +### 备份负载均衡器配置 + +在灾难恢复时,可用的负载均衡器配置可以加快恢复过程。 + +### 配置健康检查 + +让负载均衡器在健康检查失败时自动将节点标记为不可用。例如,NGINX 可以通过以下配置来实现这一功能: + +`max_fails=3 fail_timeout=5s` + +### 利用外部负载均衡器 + +避免在管理集群内使用软件负载均衡器。 + +### 安全访问 Rancher + +将防火墙/ACL 规则配置为只允许 Rancher 访问。 + +## 2. 虚拟机注意事项 + +### 根据 Rancher 文档确定虚拟机的大小 + +请参见[安装要求](https://rancher.com/docs/rancher/v2.6/en/installation/requirements/)来确定虚拟机的大小。 + +### 利用虚拟机模板来构建环境 + +为了保证跨环境部署的虚拟机的一致性,你可以考虑使用虚拟机模板形式的黄金镜像(golden image)。你可以使用 Packer 来实现,从而增加更多自定义选项。 + +### 利用 DRS 反亲和规则(可能的话)在 ESXi 主机上分离 Rancher 集群节点 + +这样可以确保节点虚拟机分布在多台 ESXi 主机上,从而防止主机级别的单点故障。 + +### 利用 DRS 反亲和规则(可能的话)在 Datastore 上分离 Rancher 集群节点 + +这样可以确保节点虚拟机分布在多个 Datastore 上,从而防止 Datastore 级别的单点故障。 + +### 为 Kubernetes 配置合适的虚拟机 + +在部署节点时,请遵循 K8s 和 etcd 的最佳实践,其中包括禁用 swap,检查集群中的所有主机之间是否有良好的网络连接,为每个节点使用唯一的主机名、MAC 地址和 `product_uuids`。 + +## 3. 网络注意事项 + +### 利用 ETCD 节点之间的低延迟和高带宽连接 + +尽可能在单个数据中心内部署 etcd 成员,来避免延迟开销并减少网络分区的可能性。大多数情况下,1Gb 的连接就足够了。对于大型集群,10Gb 的连接可以缩短恢复备份所需的时间。 + +### 为虚拟机提供固定的 IP 地址 + +你可以为使用的所有节点都配置一个静态 IP。如果使用 DHCP,则每个节点都应该有一个 DHCP 预留,以确保节点分配到相同的 IP 地址。 + +## 4. 存储注意事项 + +### 在 ETCD 节点上使用 SSD 磁盘 + +ETCD 对写入延迟非常敏感。因此,你可以尽量使用 SSD 磁盘来提高写入性能。 + +## 5. 备份和灾难恢复 + +### 定期备份管理集群 + +Rancher 将数据存储在它所在的 Kubernetes 集群的 ETCD datastore 中。与其它 Kubernetes 集群一样,你需要对该集群进行频繁且经过测试的备份。 + +### 备份 Rancher 集群节点虚拟机 + +将 Rancher 管理节点的虚拟机纳入标准的虚拟机备份策略中。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/best-practices/rancher-server/rancher-deployment-strategy.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/best-practices/rancher-server/rancher-deployment-strategy.md new file mode 100644 index 00000000000..ab97b704cf7 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/best-practices/rancher-server/rancher-deployment-strategy.md @@ -0,0 +1,45 @@ +--- +title: Rancher 部署策略 +weight: 100 +--- + +本文提供 Rancher Server 的两种部署策略,用于管理下游 Kubernetes 集群。每种策略都有优缺点。请按照你的实际情况选择最适合的部署策略: + +* [中心辐射型策略](#中心辐射型策略) +* [区域型策略](#区域型策略) + +## 中心辐射型策略 +--- + +在中心辐射型部署中,一个 Rancher controlplane 就可以管理遍布全球的 Kubernetes 集群。这个 controlplane 运行在高可用 Kubernetes 集群上,并且会受延迟影响。 + +![](/img/bpg/hub-and-spoke.png) + +### 优点 + +* 环境中可以具有跨区域的节点和网络连接。 +* 可以通过一个 controlplane 界面查看所有区域和环境。 +* Kubernetes 不需要 Rancher 进行操作,并且可以容忍与 Rancher controlplane 断开连接。 + +### 缺点 + +* 受限于网络延迟。 +* 如果 controlplane 出现故障,在恢复之前不可以在全球范围内创建新服务。但是每个 Kubernetes 集群都可以继续单独管理。 + +## 区域型策略 +--- +在区域型部署模型中,controlplane 部署在靠近计算节点的位置。 + +![](/img/bpg/regional.png) + +### 优点 + +* 如果某个区域的 controlplane 出现故障,其他区域内的 Rancher 功能仍然可以保持正常。 +* 网络延迟大大降低,提高 Rancher 的性能。 +* 可以在每个区域内独立升级 Rancher controlplane。 + +### 缺点 + +* 管理多个 Rancher 安装的开销较大。 +* 需要在多个界面中查看全球所有的 Kubernetes 集群。 +* 在 Rancher 中部署多集群应用时,需要在每个 Rancher Server 中重复部署步骤。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/best-practices/rancher-server/tips-for-running-rancher.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/best-practices/rancher-server/tips-for-running-rancher.md new file mode 100644 index 00000000000..537652dfde0 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/best-practices/rancher-server/tips-for-running-rancher.md @@ -0,0 +1,37 @@ +--- +title: Rancher 运行技巧 +weight: 100 +--- + +本指南适用于使用 Rancher 管理下游 Kubernetes 集群的用例。高可用设置可以防止 Rancher Server 不可用时无法访问下游集群。 + +高可用 Rancher 安装指将 Rancher 安装到至少有三个节点的 Kubernetes 集群上,适用于所有生产环境以及重要的安装场景。在多个节点上运行多个 Rancher 实例能够实现单节点安装无法提供的高可用性。 + +如果你在 vSphere 环境中安装 Rancher,请参见[最佳实践文档](on-premises-rancher-in-vsphere.md)。 + +在设置高可用 Rancher 安装时,请考虑以下事项。 + +### 在单独的集群上运行 Rancher +不要在安装了 Rancher 的 Kubernetes 集群上运行其他工作负载或微服务。 + +### 确保 Kubernetes 节点配置正确 +在部署节点时,请遵循 K8s 和 etcd 的最佳实践,其中包括禁用 swap,检查集群中的所有主机之间是否有良好的网络连接,为每个节点使用唯一的主机名、MAC 地址和 `product_uuids`,检查所需端口是否已经打开,并使用配置 SSD 的 etcd 进行部署。详情请参见 [kubernetes 官方文档](https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/#before-you-begin)和 [etcd 性能操作指南](https://etcd.io/docs/v3.4/op-guide/performance/)。 + +### 使用 RKE 时:备份状态文件(Statefile) +RKE 将集群状态记录在一个名为 `cluster.rkestate` 的文件中,该文件对集群的恢复和/或通过 RKE 维护集群非常重要。由于这个文件包含证书材料,我们强烈建议在备份前对该文件进行加密。请在每次运行 `rke up` 后备份状态文件。 + +### 在同一个数据中心运行集群中的所有节点 +为达到最佳性能,请在同一地理数据中心运行所有三个节点。如果你在云(如 AWS)上运行节点,请在不同的可用区(AZ)中运行这三个节点。例如,在 us-west-2a 中运行节点 1,在 us-west-2b 中运行节点 2,在 us-west-2c 中运行节点 3。 + +### 保证开发和生产环境的相似性 +强烈建议为运行 Rancher 的 Kubernetes 集群配备 “staging” 或 “pre-production” 环境。这个环境的软件和硬件配置应该尽可能接近你的生产环境。 + +### 监控集群以规划容量 +Rancher Server 的 Kubernetes 集群应该尽可能满足[系统和硬件要求](../../../pages-for-subheaders/installation-requirements.md)。越偏离系统和硬件要求,你可能面临的风险就越大。 + +但是,已发布的要求已经考虑了各种工作负载类型,因此,基于指标来规划容量应该是扩展 Rancher 的最佳实践。 + +你可以将 Rancher 集成业界领先的开源监控解决方案 Prometheus 以及能可视化 Prometheus 指标的 Grafana,来监控集群节点、Kubernetes 组件和软件部署的状态和过程。 + +在集群中[启用监控](../../../pages-for-subheaders/monitoring-and-alerting.md)后,你可以通过设置告警通知,来了解集群容量的使用情况。你还可以使用 Prometheus 和 Grafana 监控框架,在你扩容时建立关键指标的基线。 + diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cli-with-rancher/kubectl-utility.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cli-with-rancher/kubectl-utility.md new file mode 100644 index 00000000000..8d81f941fda --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cli-with-rancher/kubectl-utility.md @@ -0,0 +1,32 @@ +--- +title: kubectl 实用程序 +--- + +# kubectl + +kubectl 用于与 Rancher 进行交互。 + +### kubectl 实用程序 + +安装 `kubectl`。详情请参见[安装 kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/)。 + +要配置 kubectl,通过 Rancher Web UI 访问你的集群,单击 `Kubeconfig`,然后复制内容并将其粘贴到你的 `~/.kube/config` 文件中。 + +检查是否可以成功运行 `kubectl cluster-info` 或 `kubectl get pods` 命令。 + +### 使用 kubectl 和 kubeconfig 令牌进行 TTL 认证 + +_要求_ + +如果管理员[关闭了 kubeconfig 令牌生成](../about-the-api/api-tokens.md#在生成的-kubeconfig-中禁用令牌),当你运行 `kubectl` 时,kubeconfig 文件需要 [Rancher CLI](./rancher-cli.md) 存在于你的 PATH 中。否则,你会看到这样的错误信息: +`Unable to connect to the server: getting credentials: exec: exec: "rancher": executable file not found in $PATH`。 + +该功能可以让 kubectl 与 Rancher Server 进行身份验证,并在需要时获得新的 kubeconfig token。目前支持以下验证提供程序: + +1. 本地 +2. Active Directory (仅限 LDAP) +3. FreeIPA +4. OpenLDAP +5. SAML 身份提供商:Ping,Okta,ADFS,Keycloak 和 Shibboleth + +如果你是第一次运行 kubectl(例如,`kubectl get pods`),它会要求你选择一个验证提供程序并使用 Rancher Server 登录。kubeconfig token 会被缓存到 `./.cache/token` 下你运行 kubectl 的路径中。该 Token 在[过期](../about-the-api/api-tokens.md#在生成的-kubeconfig-中禁用令牌)或[从 Rancher Server 删除](../about-the-api/api-tokens.md#删除令牌)之前都是有效的。过期后,下一个 `kubectl get pods` 命令会要求你再次使用 Rancher Server 登录。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cli-with-rancher/rancher-cli.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cli-with-rancher/rancher-cli.md new file mode 100644 index 00000000000..1e3674d73b3 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cli-with-rancher/rancher-cli.md @@ -0,0 +1,88 @@ +--- +title: Rancher CLI +description: Rancher CLI 是一个命令行工具,用于在工作站中与 Rancher 进行交互。 +weight: 21 +--- + +Rancher CLI(命令行界面)是一个命令行工具,可用于与 Rancher 进行交互。使用此工具,你可以使用命令行而不用通过 GUI 来操作 Rancher。 + +### 下载 Rancher CLI + +你可以直接 UI 下载二进制文件。链接位于 UI 页脚的右侧。我们提供用于 Windows、Mac 和 Linux 的二进制文件。你还可以访问我们的 CLI [发布页面](https://github.com/ranchcli/releases)直接下载二进制文件。 + +1. 点击左上角的 **☰**。 +1. 单击底部的 **v2.6.x**,**v2.6.x** 是一个超链接文本,表示已安装的 Rancher 版本。 +1. 在 **CLI 下载**中,有 Windows、Mac 和 Linux 的二进制文件下载链接。你还可以访问我们的 CLI [发布页面](https://github.com/ranchcli/releases)直接下载二进制文件。 + +### 要求 + +下载 Rancher CLI 后,你需要进行一些配置。Rancher CLI 需要: + +- 你的 Rancher Server URL,用于连接到 Rancher Server。 +- API 持有者令牌(Bearer Token),用于向 Rancher 进行身份验证。有关获取持有者令牌的更多信息,请参阅[创建 API 密钥](../user-settings/api-keys.md)。 + +### CLI 身份验证 + +在使用 Rancher CLI 控制你的 Rancher Server 之前,你必须使用 API 持有者令牌进行身份验证。运行以下命令进行登录(将 `` 和 `` 替换为你的实际信息): + +```bash +$ ./rancher login https:// --token +``` + +如果 Rancher Server 使用自签名证书,Rancher CLI 会提示你继续连接。 + +### 项目选择 + +在执行命令之前,你必须先选择一个 Rancher 项目来执行这些命令。要选择[项目](../../how-to-guides/advanced-user-guides/manage-clusters/projects-and-namespaces.md),请运行 `./rancher context switch` 命令。输入此命令后,会显示可用项目的列表。输入一个数字以选择项目。 + +**示例:`./rancher context switch` 输出** +``` +User:rancher-cli-directory user$ ./rancher context switch +NUMBER CLUSTER NAME PROJECT ID PROJECT NAME +1 cluster-2 c-7q96s:p-h4tmb project-2 +2 cluster-2 c-7q96s:project-j6z6d Default +3 cluster-1 c-lchzv:p-xbpdt project-1 +4 cluster-1 c-lchzv:project-s2mch Default +Select a Project: +``` + +输入数字后,控制台会显示你所选项目的消息。 + +``` +INFO[0005] Setting new context to project project-1 +INFO[0005] Saving config to /Users/markbishop/.ranchcli2.json +``` + +请确保你可以成功运行 `rancher kubectl get pods`。 + +### 命令 + +以下命令可用于 Rancher CLI: + +| 命令 | 结果 | +|---|---| +| `apps, [app]` | 对商店应用(即单个 [Helm Chart](https://docs.helm.sh/developing_charts/))或 Rancher Chart 执行操作。 | +| `catalog` | 对[应用商店](../../pages-for-subheaders/helm-charts-in-rancher.md)执行操作。 | +| `clusters, [cluster]` | 对[集群](../../pages-for-subheaders/kubernetes-clusters-in-rancher-setup.md)执行操作。 | +| `context` | 在 Rancher [项目](../../how-to-guides/advanced-user-guides/manage-clusters/projects-and-namespaces.md)之间切换。有关示例,请参阅[项目选择](#项目选择)。 | +| `inspect [OPTIONS] [RESOURCEID RESOURCENAME]` | 显示 [Kubernetes 资源](https://kubernetes.io/docs/reference/kubectl/cheatsheet/#resource-types)或 Rancher 资源(即[项目](../../how-to-guides/advanced-user-guides/manage-clusters/projects-and-namespaces.md)和[工作负载](../../pages-for-subheaders/workloads-and-pods.md))的详细信息。按名称或 ID 指定资源。 | +| `kubectl` | 运行 [kubectl 命令](https://kubernetes.io/docs/reference/kubectl/overview/#operations)。 | +| `login, [l]` | 登录 Rancher Server。有关示例,请参阅 [CLI 身份验证](#cli-身份验证)。 | +| `namespaces, [namespace]` | 执行命名空间操作。 | +| `nodes, [node]` | 执行节点空间操作。 | +| `projects, [project]` | 执行[项目](../../how-to-guides/advanced-user-guides/manage-clusters/projects-and-namespaces.md)操作。 | +| `ps` | 显示项目中的[工作负载](../../pages-for-subheaders/workloads-and-pods.md)。 | +| `settings, [setting]` | 显示 Rancher Server 的当前设置。 | +| `ssh` | 使用 SSH 协议连接到你的某个集群节点。 | +| `help, [h]` | 显示命令列表或某个命令的帮助。 | + + +### Rancher CLI 帮助 + +使用 CLI 登录 Rancher Server 后,输入 `./rancher --help` 以获取命令列表。 + +所有命令都支持 `--help` 标志,该标志解释了每个命令的用法。 + +### 限制 + +Rancher CLI **不能**用于安装[仪表板应用程序或 Rancher 功能 Chart](../../pages-for-subheaders/helm-charts-in-rancher.md)。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cluster-configuration/downstream-cluster-configuration/machine-configuration/amazon-ec2.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cluster-configuration/downstream-cluster-configuration/machine-configuration/amazon-ec2.md new file mode 100644 index 00000000000..19945c1c3e5 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cluster-configuration/downstream-cluster-configuration/machine-configuration/amazon-ec2.md @@ -0,0 +1,79 @@ +--- +title: EC2 主机配置参考 +weight: 2 +--- + +有关 EC2 和节点的更多详细信息,请参阅 [EC2 管理控制台](https://aws.amazon.com/ec2)的官方文档。 + +### 区域 + +构建集群的地理[区域](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html)。 + +### 地区 + +[地区](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html#concepts-availability-zones),一个区域内用于构建集群的隔离位置。 + +### 实例类型 + +[实例类型](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html)用于配置集群,能确定硬件特性。 + +### 根磁盘大小 + +配置[根设备](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/RootDeviceStorage.html)的大小(以 GB 为单位)。 + +### VPC/子网 + +[VPC](https://docs.aws.amazon.com/vpc/latest/userguide/configure-your-vpc.html) 或特定的[子网](https://docs.aws.amazon.com/vpc/latest/userguide/configure-subnets.html)(VPC 中的一个 IP 范围),用于添加你的资源。 + +### IAM 实例配置文件名称 + +示例配置文件的名称,用于将 IAM 角色传递给 EC2 实例。 + +## 高级选项 + +### AMI ID + +用于集群中节点的 [Amazon Machine Image(AMI)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIs.html)。 + +### 用于 AMI 的 SSH 用户名 + +用于连接到你启动的实例的用户名。有关选定 AMI 的默认用户名,请参阅[此处](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connection-prereqs.html)。对于未列出的 AMI,请咨询 AMI 提供商。 + +### 安全组 + +选择默认安全组或配置安全组。 + +请参考[使用主机驱动时的 Amazon EC2 安全组](../../../../getting-started/installation-and-upgrade/installation-requirements/port-requirements.md#rancher-aws-ec2-安全组),了解 `rancher-nodes` 安全组中创建的规则。 + +### EBS 根卷类型 + +用于根设备的 [EBS 卷类型](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-volume-types.html)。 + +### 加密 EBS 卷 + +启用 [Amazon EBS 加密](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html)。 + +### 请求 Spot 实例 + +开启[请求 Spot 实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-requests.html)选项,并指定你愿意支付的最高实例价格(每小时)。 + +### 仅使用私有地址 + +启用仅使用[私人地址](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-instance-addressing.html)的选项。 + +### EBS 优化实例 + +使用 [EBS 优化实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-optimized.html)。 + +### 允许访问 EC2 元数据 + +启用对 [EC2 元数据](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html)的访问。 + +### 为元数据使用 Token + +使用 [Instance Metadata Service Version 2 (IMDSv2)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html),即基于令牌访问元数据的方法。 + +### 添加标签 + +使用[标签](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html)添加元数据,从而对资源进行分类。 + diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cluster-configuration/downstream-cluster-configuration/machine-configuration/azure.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cluster-configuration/downstream-cluster-configuration/machine-configuration/azure.md new file mode 100644 index 00000000000..71454c552cb --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cluster-configuration/downstream-cluster-configuration/machine-configuration/azure.md @@ -0,0 +1,121 @@ +--- +title: Azure 主机配置 +weight: 2 +--- + +有关 Azure 的更多信息,请参阅官方 [Azure 文档](https://docs.microsoft.com/en-us/azure/?product=featured)。 + +### 环境 + +Microsoft 提供了多个[云](https://docs.microsoft.com/en-us/cli/azure/cloud?view=azure-cli-latest)来满足地区法律的要求: + +- AzurePublicCloud +- AzureGermanCloud +- AzureChinaCloud +- AzureUSGovernmentCloud + +### 位置 + +配置集群和节点的[位置](https://docs.microsoft.com/en-us/azure/virtual-machines/regions)。 + +### 资源组 + +资源组是一个容器,其中包含 Azure 解决方案的相关资源。资源组可以包括解决方案的所有资源,或者仅包括你希望作为一个组来管理的资源。你可以根据组织的需求来决定如何将资源分配给资源组。通常情况下,你可以将生命周期相同的资源添加到同一个资源组,以便轻松地按组进行部署、更新和删除。 + +你可以使用现有资源组,也可以输入资源组的名称,然后系统将为你创建一个资源组。 + +有关管理资源组的信息,请参阅 [Azure 文档](https://docs.microsoft.com/en-us/azure/azure-resource-manager/management/manage-resource-groups-portal)。 + +### 可用性集(非托管) + +要添加 VM 的现有[可用性集](https://docs.microsoft.com/en-us/azure/virtual-machines/availability-set-overview)的名称或 ID。 + +### 镜像 + +作为 ARM 资源标识符提供的操作系统镜像的名称。需要使用托管磁盘。 + +### 虚拟机大小 + +为节点池中的每个 VM 选择一个大小。有关每个 VM 大小的详细信息,请参阅[此页面](https://azure.microsoft.com/en-us/pricing/details/virtual-machines/linux/)。 + +## 高级选项 + +### 容错域数量 + +容错域定义了共享公共电源和网络交换机的虚拟机组。如果可用性集已创建,将忽略容错域数量。 + +有关容错域的更多信息,请参阅[此处](https://docs.microsoft.com/en-us/azure/virtual-machines/availability-set-overview#how-do-availability-sets-work)。 + +### 更新域数量 + +更新域表示可以同时重新启动的虚拟机组和底层物理硬件。如果可用性集已创建,将忽略更新域数量。 + +有关更新域的更多信息,请参阅[此处](https://docs.microsoft.com/en-us/azure/virtual-machines/availability-set-overview#how-do-availability-sets-work)。 + +### 购买计划 + +Azure 市场中的某些 VM 镜像需要购买计划。如果适用,请为你选择的镜像选择格式为 `publisher:product:plan` 的购买计划。 + +### 子网 + +创建新 VNet 或引用现有 VNet 时的子网名称。 + +默认值:`docker-machine` + +### 子网前缀 + +创建 CIDR 格式的新 VNet 时要使用的子网 IP 地址前缀。 + +默认值:`192.168.0.0/16` + +### 虚拟网络 + +要使用或创建的[虚拟网络](https://docs.microsoft.com/en-us/azure/virtual-network/virtual-networks-overview)(如果不存在)。格式为 `[resourcegroup:]name`。 + +### 公共 IP 选项 + +#### 没有公共 IP + +不要分配公共 IP 地址。 + +#### 静态公共 IP + +分配静态公共 IP 地址。 + +### 使用私有 IP + +使用静态私有 IP 地址。 + +### 私有 IP 地址 + +配置要使用的静态私有 IP 地址。 + +### 网络安全组 + +要使用的[网络安全组(NSG)](https://docs.microsoft.com/en-us/azure/virtual-network/network-security-groups-overview)。使用此模板的所有节点都将使用配置的网络安全组。如果没有配置网络安全组,则为每个节点创建一个新的网络安全组。 + +### DNS 标签 + +公共 IP 地址的唯一 DNS 名称标签。 + +### 储存类型 + +用于 VM 的[存储账号](https://docs.microsoft.com/en-us/azure/storage/common/storage-account-overview)类型。可选项包括 Standard LRS、Standard ZRS、Standard GRS、Standard RAGRS 和 Premium LRS。 + +### 使用托管磁盘 + +[Azure 托管磁盘](https://docs.microsoft.com/en-us/azure/virtual-machines/managed-disks-overview)是由 Azure 管理并与 Azure Virtual Machines 一起使用的块级存储卷。托管磁盘旨在实现 99.999% 的高可用性。托管磁盘通过提供三个数据副本来实现高可用性和高持续性。 + +### 托管磁盘大小 + +每个节点的磁盘大小(以 GB 为单位)。 + +### SSH 用户名 + +用于 SSH 连接到节点的用户名。 + +### 开放端口 + +打开指定端口上的入站流量。如果你使用现有的网络安全组,将忽略开放端口。 + +默认值:`2379/tcp, 2380/tcp, 6443/tcp, 9796/tcp, 10250/tcp, 10251/tcp, 10252/tcp, 10256/tcp` 和 `8472/udp, 4789/udp` \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cluster-configuration/downstream-cluster-configuration/machine-configuration/digitalocean.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cluster-configuration/downstream-cluster-configuration/machine-configuration/digitalocean.md new file mode 100644 index 00000000000..e5ae02672de --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cluster-configuration/downstream-cluster-configuration/machine-configuration/digitalocean.md @@ -0,0 +1,34 @@ +--- +title: DigitalOcean 主机配置 +weight: 2 +--- + +有关 DigitalOcean、Droplet 的更多详细信息,请参阅[官方文档](https://docs.digitalocean.com/products/compute/)。 + +### 区域 + +配置创建 Droplet 的[区域](https://docs.digitalocean.com/products/app-platform/concepts/region/)。 + +### 大小 + +配置 Droplet 的[大小](https://docs.digitalocean.com/products/droplets/resources/choose-plan/)。 + +### 操作系统镜像 + +配置用于创建 Droplet 的操作系统[镜像](https://docs.digitalocean.com/products/images/)。 + +### Monitoring + +启用 DigitalOcean 代理以进行额外的[监控](https://docs.digitalocean.com/products/monitoring/)。 + +### IPv6 + +为 Droplet 启用 IPv6。 + +### 私有网络 + +为 Droplet 启用私有网络。 + +### Droplet 标签 + +将标签(tag, label)应用于 Droplet。标签只能包含字母、数字、冒号、破折号和下划线。例如,`my_server`。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cluster-configuration/downstream-cluster-configuration/node-template-configuration/amazon-ec2.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cluster-configuration/downstream-cluster-configuration/node-template-configuration/amazon-ec2.md new file mode 100644 index 00000000000..e835bc4423b --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cluster-configuration/downstream-cluster-configuration/node-template-configuration/amazon-ec2.md @@ -0,0 +1,50 @@ +--- +title: EC2 节点模板配置 +weight: 1 +--- + +有关 EC2 和节点的更多详细信息,请参阅 [EC2 管理控制台](https://aws.amazon.com/ec2)的官方文档。 +### 区域 + +在**区域**字段中,选择创建云凭证时使用的同一区域。 + +### 云凭证 + +你的 AWS 账户访问信息,存储在[云凭证](../../../user-settings/manage-cloud-credentials.md)中。 + +请参阅 [Amazon 文档:创建访问密钥](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html#Using_CreateAccessKey)来创建访问密钥和密文密钥。 + +请参阅 [Amazon 文档:创建 IAM 策略(控制台)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-start)来创建 IAM 策略。 + +请参阅 [Amazon 文档:为用户添加权限(控制台)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console)了解如何绑定 IAM。 + +参阅下面的三个示例 JSON 策略: + +- [IAM 策略示例](../../../../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/use-new-nodes-in-an-infra-provider/create-an-amazon-ec2-cluster.md#iam-策略示例) +- [带有 PassRole 的 IAM 策略示例](../../../../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/use-new-nodes-in-an-infra-provider/create-an-amazon-ec2-cluster.md#带有-passrole-的-iam-策略示例)(如果要使用 [Kubernetes 云提供商](../../../../pages-for-subheaders/set-up-cloud-providers.md),或将 IAM 配置文件传递给实例,则需要) +- [允许用户加密 EBS 卷的 IAM 策略示例](../../../../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/use-new-nodes-in-an-infra-provider/create-an-amazon-ec2-cluster.md#允许加密-ebs-卷的-iam-策略示例) + +### 验证和配置节点 + +为集群选择可用区和网络设置。 + +### 安全组 + +选择默认安全组或配置安全组。 + +请参考[使用主机驱动时的 Amazon EC2 安全组](../../../../getting-started/installation-and-upgrade/installation-requirements/port-requirements.md#rancher-aws-ec2-安全组),了解 `rancher-nodes` 安全组中创建的规则。 + +--- +**_v2.6.4 的新功能_** + +如果你自行为 EC2 实例提供安全组,Rancher 不会对其进行修改。因此,你需要让你的安全组允许 [Rancher 配置实例所需的端口](../../../../getting-started/installation-and-upgrade/installation-requirements/port-requirements.md#rke-上-rancher-server-节点的端口)。有关使用安全组控制 EC2 实例的入站和出站流量的更多信息,请参阅[这里](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html#WorkingWithSecurityGroups)。 + +### 实例选项 + +配置要创建的实例。确保为 AMI 配置正确的 **SSH 用户**。所选的区域可能不支持默认实例类型。在这种情况下,你必须选择一个确实存在的实例类型。否则将出现错误,表示请求的配置不受支持。 + +如果需要传递 **IAM 示例配置名称**(不是 ARN),例如要使用 [Kubernetes 云提供商](../../../../pages-for-subheaders/set-up-cloud-providers.md)时,策略则需要其他权限。有关示例策略,请参阅[带有 PassRole 的 IAM 策略示例](#带有-passrole-的-iam-策略示例)。 + +### 引擎选项 + +在节点模板的**引擎选项**中,你可以配置 Docker daemon。你可能需要指定 Docker 版本或 Docker 仓库镜像。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cluster-configuration/downstream-cluster-configuration/node-template-configuration/azure.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cluster-configuration/downstream-cluster-configuration/node-template-configuration/azure.md new file mode 100644 index 00000000000..ba005475499 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cluster-configuration/downstream-cluster-configuration/node-template-configuration/azure.md @@ -0,0 +1,19 @@ +--- +title: Azure 节点模板配置 +weight: 1 +--- + +有关 Azure 的更多信息,请参阅官方 [Azure 文档](https://docs.microsoft.com/en-us/azure/?product=featured)。 + +账户访问信息存储在云凭证中。云凭证存储在 Kubernetes 密文中。多个节点模板可以使用相同的云凭证。你可以使用现有的云凭证或创建新的凭证。 + +- **Placement** 设置托管集群的地理区域以及其他位置元数据。 +- **Network** 配置集群中使用的网络。 +- **Instance** 自定义你的 VM 配置。 + +[Docker daemon](https://docs.docker.com/engine/docker-overview/#the-docker-daemon) 配置选项包括: + +- **标签**:有关标签的信息,请参阅 [Docker 对象标签文档](https://docs.docker.com/config/labels-custom-metadata/)。 +- **Docker 引擎安装 URL**:确定要在实例上安装的 Docker 版本。 +- **镜像仓库 mirror**:Docker daemon 使用的 Docker 镜像仓库镜像。 +- **其他高级选项**:参见 [Docker daemon 选项参考](https://docs.docker.com/engine/reference/commandline/dockerd/)。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cluster-configuration/downstream-cluster-configuration/node-template-configuration/digitalocean.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cluster-configuration/downstream-cluster-configuration/node-template-configuration/digitalocean.md new file mode 100644 index 00000000000..8df38f69c0d --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cluster-configuration/downstream-cluster-configuration/node-template-configuration/digitalocean.md @@ -0,0 +1,19 @@ +--- +title: DigitalOcean 节点模板配置 +weight: 1 +--- + +账户访问信息存储在云凭证中。云凭证存储在 Kubernetes 密文中。多个节点模板可以使用相同的云凭证。你可以使用现有的云凭证或创建新的凭证。 + +### Droplet 选项 + +**Droplet 选项**用于配置集群的地理区域和规范。 + +### Docker Daemon + +[Docker daemon](https://docs.docker.com/engine/docker-overview/#the-docker-daemon) 配置选项包括: + +- **标签**:有关标签的信息,请参阅 [Docker 对象标签文档](https://docs.docker.com/config/labels-custom-metadata/)。 +- **Docker 引擎安装 URL**:确定要在实例上安装的 Docker 版本。 +- **镜像仓库 mirror**:Docker daemon 使用的 Docker 镜像仓库镜像。 +- **其他高级选项**:参见 [Docker daemon 选项参考](https://docs.docker.com/engine/reference/commandline/dockerd/)。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cluster-configuration/downstream-cluster-configuration/node-template-configuration/nutanix.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cluster-configuration/downstream-cluster-configuration/node-template-configuration/nutanix.md new file mode 100644 index 00000000000..060db7628aa --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cluster-configuration/downstream-cluster-configuration/node-template-configuration/nutanix.md @@ -0,0 +1,58 @@ +--- +title: Nutanix 节点模板配置 +weight: 2 +--- + + +## 账号访问 + +| 参数 | 必填 | 描述 | 默认 | +|:-----------------------------|:--------:|:-----------------------------------------------------------------|:----- +| 管理端点 | ✓ | Prism Central 的主机名/IP 地址 | +| 用户名 | ✓ | Prism Central 用户的用户名 | +| 密码 | ✓ | Prism Central 用户的密码 | +| 允许不安全的通信 | | 设置为 true 以允许与 Prism Central 进行不安全的 SSL 通信 | False | + +## 调度 + +选择虚拟机要调度到哪个 Nutanix 集群。 + +| 参数 | 必填 | 描述 | +|:----------|:--------:|:---------------------------------------------------------------------------- +| 集群 | ✓ | 部署虚拟机的 Nutanix 集群的名称(区分大小写) | + +## 实例选项 + +在**实例参数**中,配置此模板创建的 VM 的 vCPU 数量、内存和磁盘大小。 + +| 参数 | 必填 | 描述 | 默认 | +|:---------------------|:--------:|:--------------------------------------------------------------------------------------------|:------- +| CPU | | 分配给 VM 的 vCPU 数量(核心) | 2 | +| 内存 | | 分配给 VM 的 RAM 量 (MB) | 2 GB | +| Template Image | ✓ | 要作为虚拟机主磁盘进行克隆的磁盘镜像模板的名称(必须支持 cloud-init) | +| 虚拟机磁盘大小 | | 虚拟机主磁盘的新大小(以 GiB 为单位) | +| 其他磁盘大小 | | 要添加到虚拟机的其他磁盘的大小(以 GiB 为单位) | +| 储存容器 | | 要配置其他磁盘的存储容器 _UUID_ | +| Cloud Config YAML | | 要提供给虚拟机的 cloud-init(将使用 Rancher root 用户修补) | +| 网络 | ✓ | 要附加到虚拟机的网络的名称 | +| 虚拟机类别 | | 要应用于虚拟机的类别名称 | + +虚拟机支持通过 [Config Drive v2 datasource](https://cloudinit.readthedocs.io/en/latest/topics/datasources/configdrive.html) 来支持 [cloud-init](https://cloudinit.readthedocs.io/en/latest/) 的任何现代 Linux 操作系统。 + +## 网络 + +节点模板允许你为虚拟机配置多个网络。在**网络**字段中,你可以单击**添加**,然后在 AOS 中添加任何可用的网络。 + +## 虚拟机类别 + +类别用于将实体分组成键值对。通常会根据某些标准为虚拟机分配一个类别。然后,你可以将策略绑定到分配(分组)了特定类别值的实体。 + +## cloud-init + +[Cloud-init](https://cloudinit.readthedocs.io/en/latest/) 允许你在首次启动时应用配置,从而初始化节点。这可能涉及创建用户或授权 SSH 密钥之类的操作。 + +要使用 cloud-init 初始化,请将使用有效 YAML 语法的 cloud config 粘贴到 **Cloud Config YAML** 字段中。要获取支持的 cloud config 指令的注释示例集,请参阅 [cloud-init 文档](https://cloudinit.readthedocs.io/en/latest/topics/examples.html)。 + +不建议使用基于 cloud-init 的网络配置,仅支持使用用户数据 `runcmd`,不支持 NoCloud 或其他网络配置数据源。 + +建议使用 Nutanix IP Address Management(IPAM) 或其他 DHCP 服务。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cluster-configuration/downstream-cluster-configuration/node-template-configuration/vsphere.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cluster-configuration/downstream-cluster-configuration/node-template-configuration/vsphere.md new file mode 100644 index 00000000000..fb6b8e2825d --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cluster-configuration/downstream-cluster-configuration/node-template-configuration/vsphere.md @@ -0,0 +1,87 @@ +--- +title: vSphere 节点模板配置 +weight: 2 +--- + + +## 账号访问 + +| 参数 | 必填 | 描述 | +|:----------------------|:--------:|:-----| +| 云凭证 | * | 你的 vSphere 账号访问信息,存储在[云凭证](../../../user-settings/manage-cloud-credentials.md)中。 | + +你的云凭证具有以下字段: + +| 凭证字段 | 描述 | +|-----------------|--------------| +| vCenter 或 ESXi Server | 输入 vCenter 或 ESXi 主机名/IP。ESXi 是你创建和运行虚拟机和虚拟设备的虚拟化平台。你可以通过 vCenter Server 服务来管理网络中连接的多个主机并池化主机资源。 | +| 端口 | 可选:配置 vCenter 或 ESXi Server 的端口。 | +| 用户名和密码 | 你的 vSphere 登录用户名和密码。 | + +## 调度 + +选择虚拟机要调度到哪个虚拟机监控程序。 + +**调度**中的字段应使用 vSphere 中可用的数据中心和其他计划选项自动填充。 + +| 字段 | 必填 | 解释 | +|---------|---------------|-----------| +| 数据中心 | * | 选择要调度 VM 的数据中心的名称/路径。 | +| 资源池 | | 要在其中调度 VM 的资源池名称。资源池可对独立主机或集群的可用 CPU 和内存资源进行分区,也可以嵌套使用。如果是独立 ESXi,请留空。如果未指定,则使用默认资源池。 | +| 数据存储 | * | 如果你有数据存储集群,则可以打开**数据存储**字段。此字段允许你选择要将 VM 调度到哪个数据存储集群。如果该字段未打开,你可以选择单个磁盘。 | +| 文件夹 | | 数据中心中用于创建 VM 的文件夹的名称。必须已经存在。此下拉菜单中的 VM 文件夹直接对应于 vSphere 中的 VM 文件夹。在 vSphere 配置文件中,文件夹名称应以 `vm/` 开头。 | +| 主机 | | 用于调度 VM 的主机系统的 IP。如果是独立 ESXi 或具有 DRS(分布式资源调度器)的集群,将此字段留空。如果指定,将使用主机系统的池,而忽略**资源池**参数。 | + +## 实例选项 + +在**实例参数**中,配置此模板创建的 VM 的 vCPU 数量、内存和磁盘大小。 + +| 参数 | 必填 | 描述 | +|:----------------|:--------:|:-----------| +| CPU | * | 要分配给 VM 的 vCPU 数量。 | +| 内存 | * | 要分配给 VM 的内存量。 | +| 磁盘 | * | 要挂载到 VM 的磁盘大小(以 MB 为单位)。 | +| 创建方法 | * | 在节点上设置操作系统的方法。可以使用 ISO 或 VM 模板安装操作系统。根据创建方法,你还必须指定 VM 模板、内容库、现有 VM 或 ISO。有关创建方法的详细信息,请参阅 [VM 创建方法](#vm-创建方法)。 | +| Cloud Init | | `cloud-config.yml` 文件的 URL 或用于配置 VM 的 URL。此文件允许进一步定制操作系统,例如网络配置、DNS 服务器或系统守护程序。操作系统必须支持 `cloud-init`。 | +| 网络 | | 要挂载 VM 的网络的名称。 | +| guestinfo 配置参数 | | VM 的其他配置参数。这些参数对应 vSphere 控制台中的[高级设置](https://kb.vmware.com/s/article/1016098)。示例用例包括提供 RancherOS [guestinfo]({{}}/os/v1.x/en/installation/cloud/vmware-esxi/#vmware-guestinfo) 参数,或为 VM 启用磁盘 UUID (`disk.EnableUUID=TRUE`)。 | + + +### VM 创建方法 + +在**创建方法**字段中,配置用于在 vSphere 中配置 VM 的方法。可用的选项包括创建从 RancherOS ISO 启动的 VM,或通过从现有虚拟机或 [VM 模板](https://docs.vmware.com/en/VMware-vSphere/6.5/com.vmware.vsphere.vm_admin.doc/GUID-F7BF0E6B-7C4F-4E46-8BBF-76229AEA7220.html)克隆来创建 VM。 + +现有 VM 或模板可以使用任何现代 Linux 操作系统,该操作系统配置为使用 [NoCloud 数据源](https://cloudinit.readthedocs.io/en/latest/topics/datasources/nocloud.html)来支持 [cloud-init](https://cloudinit.readthedocs.io/en/latest/)。 + +选择创建 VM 的方式: + +- **使用模板部署:数据中心**:选择存在于所选数据中心的 VM 模板。 +- **使用模板部署:内容库**:首先选择包含你的模板的[内容库](https://docs.vmware.com/en/VMware-vSphere/6.5/com.vmware.vsphere.vm_admin.doc/GUID-254B2CE8-20A8-43F0-90E8-3F6776C2C896.html),然后从填充列表**库模板**中选择模板。 +- **克隆现有的虚拟机**:在**虚拟机**字段中选择一个现有虚拟机,新虚拟机将克隆自该虚拟机。 +- **使用 boot2docker ISO 安装**:确保 **OS ISO URL** 字段包含 RancherOS 的 VMware ISO 版本的 URL (`rancheros-vmware.iso`)。请注意,运行 Rancher Server 节点必须能访问该 URL。 + +## 网络 + +节点模板允许你为虚拟机配置多个网络。在**网络**字段中,你可以单击**添加网络**来添加 vSphere 中可用的任何网络。 + +## 节点标签和自定义属性 + +标签用于向 vSphere 对象清单中的对象添加元数据,以便对对象进行排序和搜索。 + +你的所有 vSphere 标签都将显示为节点模板中可供选择的选项。 + +在自定义属性中,Rancher 会让你选择你已经在 vSphere 中设置的所有自定义属性。自定义属性是键,你可以为每个属性输入值。 + +:::note + +自定义属性是一项旧版功能,最终将从 vSphere 中删除。 + +::: + +## cloud-init + +[Cloud-init](https://cloudinit.readthedocs.io/en/latest/) 允许你在首次启动时应用配置,从而初始化节点。这可能涉及创建用户、授权 SSH 密钥或设置网络之类的操作。 + +要使用 cloud-init 初始化,请使用有效的 YAML 语法创建一个 cloud config 文件,并将文件内容粘贴到 **Cloud Init** 字段中。要获取支持的 cloud config 指令的注释示例集,请参阅 [cloud-init 文档](https://cloudinit.readthedocs.io/en/latest/topics/examples.html)。 + +请注意,使用 ISO 创建方法时不支持 cloud-init。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cluster-configuration/rancher-server-configuration/aks-cluster-configuration.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cluster-configuration/rancher-server-configuration/aks-cluster-configuration.md new file mode 100644 index 00000000000..bd9dfe53de2 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cluster-configuration/rancher-server-configuration/aks-cluster-configuration.md @@ -0,0 +1,226 @@ +--- +shortTitle: AKS 集群配置 +title: AKS 集群配置参考 +weight: 4 +--- + +## Rancher 2.6 变更 + +- 支持添加多个节点池 +- 支持私有集群 +- 启用自动缩放节点池 +- 在云凭证中配置 AKS 权限 + +## RBAC + +在 Rancher UI 中配置 AKS 集群时,无法禁用 RBAC。如果在 AKS 中为集群禁用了 RBAC,则无法在 Rancher 中注册或导入集群。 + +Rancher 可以使用与其他集群一样的方式为 AKS 集群配置成员角色。有关详细信息,请参阅 [RBAC](../../../pages-for-subheaders/manage-role-based-access-control-rbac.md)。 + +## 云凭证 + +:::note + +本节中的配置信息假设你已经为 Rancher 设置了服务主体。有关如何设置服务主体的分步说明,请参阅[本节](../../../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-clusters-from-hosted-kubernetes-providers/aks.md#microsoft-azure-中的先决条件)。 + +::: + +### 订阅 ID + +要获取订阅 ID,请单击左侧导航栏中的 **All Services**。然后单击 **Subscriptions**。转到要与 Kubernetes 集群关联的订阅的名称,然后复制 **Subscription ID**。 + +### 客户端 ID + +要获取客户端 ID,请转到 Azure 门户,然后单击 **Azure Active Directory**,单击 **App registrations**,然后单击服务主体的名称。客户端 ID 在 app registration 详细信息页面上列为 **Application (client) ID**。 + +### 客户端密码 + +在创建客户端密码值后,你无法再获取它的值。因此如果你还没有客户端密码值,则需要创建一个新的客户端密码。 + +要获取新的客户端密码,请转到 Azure 门户,然后单击 **Azure Active Directory**,单击 **App registrations**,然后单击服务主体的名称。 + +然后点击 **Certificates & secrets** 并点击 **New client secret**。单击 **Add**。然后复制新客户端密码的 **Value**。 + +### 环境 + +Microsoft 提供了多个[云](https://docs.microsoft.com/en-us/cli/azure/cloud?view=azure-cli-latest)来满足地区法律的要求: + +- AzurePublicCloud +- AzureGermanCloud +- AzureChinaCloud +- AzureUSGovernmentCloud + +## 账号访问 + +在本部分中,你需要选择现有的 Azure 云凭证或创建一个新凭证。 + +有关配置 Azure 云凭证的帮助,请参阅[本部分](#云凭证)。 + +## 集群位置 + +配置集群和节点位置。有关 AKS 可用区的详细信息,请参阅 [AKS 文档](https://docs.microsoft.com/en-us/azure/aks/availability-zones)。 + +高可用性位置包括多个可用区。 + +## 集群选项 + +### Kubernetes 版本 + +可用的 Kubernetes 版本是从 Azure API 动态获取的。 + +### 集群资源组 + +资源组是一个容器,其中包含 Azure 解决方案的相关资源。资源组可以包括解决方案的所有资源,或者仅包括你希望作为一个组来管理的资源。你可以根据组织的需求来决定如何将资源分配给资源组。通常情况下,你可以将生命周期相同的资源添加到同一个资源组,以便轻松地按组进行部署、更新和删除。 + +你可以使用现有资源组,也可以输入资源组的名称,然后系统将为你创建一个资源组。 + +使用包含现有 AKS 集群的资源组将会创建一个新资源组。Azure AKS 仅允许每个资源组对应一个 AKS 集群。 + +有关管理资源组的信息,请参阅 [Azure 文档](https://docs.microsoft.com/en-us/azure/azure-resource-manager/management/manage-resource-groups-portal)。 + +### Linux 管理员用户名 + +用于创建到 Linux 节点的 SSH 连接的用户名。 + +AKS 节点的默认用户名是 `azureuser`。 + +### SSH 公钥 + +用于创建到 Linux 节点的 SSH 连接的密钥。 + +### 标签 + +如果你的组织使用标签来管理多个 Azure 服务的资源,那么集群标签则非常有用。这些标签不适用于集群内的资源。 + +## 网络选项 + +### 负载均衡器 SKU + +Azure 负载均衡器支持 standard 和 basic SKU(stock keeping units)。 + +有关 standard 负载均衡器和 basic 负载均衡器的对比,请参阅官方 [Azure 文档](https://docs.microsoft.com/en-us/azure/load-balancer/skus#skus)。Microsoft 建议使用 standard 负载均衡器。 + +如果你选择了一个或多个可用区,或者你有多个节点池,则需要 Standard 负载均衡器。 + +### 网络策略 + +默认情况下,AKS 集群中的所有 Pod 都可以无限制地发送和接收流量。为了提高安全性,你可以定义控制流量的规则。Kubernetes 中的网络策略功能允许你定义集群中 pod 之间的入口和出口流量规则。 + +Azure 提供了两种实现网络策略的方法。创建 AKS 集群时会选择网络策略选项。创建集群后无法更改策略选项: + +- Azure 自己的实现,称为 Azure 网络策略。Azure 网络策略需要 Azure CNI。 +- Calico Network Policies,一个由 [Tigera](https://www.tigera.io/) 创立的开源网络和网络安全解决方案。 + +你也可以选择不使用网络策略。 + +有关 Azure 和 Calico 网络策略及其功能之间的差异,请参阅 [AKS 文档](https://docs.microsoft.com/en-us/azure/aks/use-network-policies#differences-between-azure-and-calico-policies-and-their-capabilities)。 + +### DNS 前缀 +为集群的 Kubernetes API server FQDN 输入唯一的 DNS 前缀。 + +### 网络插件 +有两个网络插件,分别是 kubenet 和 Azure CNI。 + +[kubenet](https://kubernetes.io/docs/concepts/cluster-administration/network-plugins/#kubenet) Kubernetes 插件是 AKS 创建的集群的默认配置。使用 kubenet 时,集群中的每个节点都会收到一个可路由的 IP 地址。Pod 使用 NAT 与 AKS 集群外部的其他资源进行通信。这种方法减少了需要在网络空间中保留以供 Pod 使用的 IP 地址数量。 + +如果使用 Azure CNI(高级)网络插件,Pod 可以使用完整的虚拟网络连接,并且可以从连接的网络中通过 pod 的私有 IP 地址直接访问。这个插件需要更多的 IP 地址空间。 + +有关 kubenet 和 Azure CNI 之间差异的详细信息,请参阅 [AKS 文档](https://docs.microsoft.com/en-us/azure/aks/concepts-network#compare-network-models)。 + +### HTTP 应用路由 + +启用后,HTTP 应用路由附加组件可以更轻松地访问部署到 AKS 集群的应用。它部署了两个组件,分别是 [Kubernetes Ingress controller](https://kubernetes.io/docs/concepts/services-networking/ingress/) 和 [External-DNS](https://github.com/kubernetes-incubator/external-dns) controller。 + +有关详细信息,请参阅 [AKS 文档](https://docs.microsoft.com/en-us/azure/aks/http-application-routing)。 + +### 设置授权 IP 范围 + +你可以使用[授权的 IP 地址范围](https://docs.microsoft.com/en-us/azure/aks/api-server-authorized-ip-ranges#overview-of-api-server-authorized-ip-ranges)来保护对 Kubernetes API server 的访问。 + +Kubernetes API server 公开 Kubernetes API。该组件提供管理工具(例如 kubectl)的交互。AKS 提供带有专用 API server 的单租户集群 controlplane。默认情况下,API server 分配了一个公共 IP 地址,你应该使用基于 Kubernetes 或 Azure 的 RBAC 来控制对 API server 的访问。 + +要保护对其他可公开的 AKS controlplane 和 API server 的访问,你可以启用并使用授权的 IP 范围。这些授权的 IP 范围只允许定义的 IP 地址范围与 API server 通信。 + +但是,即使你使用了授权的 IP 地址范围,你仍应使用 Kubernetes RBAC 或 Azure RBAC 来授权用户及其请求的操作。 + +### 容器监控 + +容器监控使用 Metrics API 从 Kubernetes 中可用的控制器、节点和容器中收集内存和处理器指标,从而为你可视化性能数据。容器日志也能被收集。启用监控后,系统会通过 Linux 的 Log Analytics 代理的容器化版本自动为你收集指标和日志。指标会被写入指标存储,而日志数据会被写入与你的 [Log Analytics](https://docs.microsoft.com/en-us/azure/azure-monitor/logs/log-query-overview) 工作区关联的日志存储。 + +### Log Analytics 工作区资源组 + +[资源组](https://docs.microsoft.com/en-us/azure/azure-resource-manager/management/overview#resource-groups)包含 Log Analytics 工作区。你必须至少创建一个工作区才能使用 Azure Monitor Logs。 + +### Log Analytics 工作区名称 + +Azure Monitor Logs 收集的数据存储在一个或多个 [Log Analytics 工作区中](https://docs.microsoft.com/en-us/azure/azure-monitor/logs/design-logs-deployment)。工作区定义了数据的地理位置、访问权限(定义了哪些用户可以访问数据)以及配置设置(定价层和数据保留等)。 + +你必须至少创建一个工作区才能使用 Azure Monitor Logs。一个工作区可能就足以满足你的所有监控数据。你也可以根据需求创建多个工作区。例如,你可能有一个工作区用于生产数据,另一个工作区用于测试。 + +有关 Azure Monitor Logs 的详细信息,请参阅 [Azure 文档](https://docs.microsoft.com/en-us/azure/azure-monitor/logs/data-platform-logs)。 + +### 支持私有 Kubernetes 服务 + +通常情况下,无论集群是否为私有,AKS worker 节点都不会获得公共 IP。在私有集群中,controlplane 没有公共端点。 + +Rancher 可以通过以下两种方式之一连接到私有 AKS 集群。 + +第一种方法是确保 Rancher 运行在与 AKS 节点相同的 [NAT](https://docs.microsoft.com/en-us/azure/virtual-network/nat-overview) 上。 + +第二种方法是运行命令向 Rancher 注册集群。配置集群后,你可以在任何能连接到集群的 Kubernetes API 的地方运行显示的命令。配置启用了私有 API 端点的 AKS 集群时,此命令将显示在弹出窗口中。 + +:::note + +注册现有 AKS 集群时,集群可能需要一些时间(可能是数小时)才会出现在 `Cluster To register` 下拉列表中。不同区域的结果可能不同。 + +::: + +有关连接到 AKS 专用集群的详细信息,请参阅 [AKS 文档](https://docs.microsoft.com/en-us/azure/aks/private-clusters#options-for-connecting-to-the-private-cluster)。 + +## 节点池 + +### 模式 + +在 Azure 界面中,用户能够指定主要节点池(Primary Node Pool)依赖于 `system`(通常用于 controlplane)还是 `user`(Rancher 最常用的)。 + +你可以指定主要节点池(Primary Node Pool)的模式、操作系统、数量和大小。 + +`system` 节点池总是需要运行节点,因此它们不能缩容到一个节点以下。至少需要一个 `system` 节点池。 + +对于后续的节点池,Rancher UI 强制使用默认的 `user`。`user` 节点池允许缩容到零节点。`user` 节点池不运行 Kubernetes controlplane 的任何部分。 + +AKS 不会公开运行 Kubernetes controlplane 组件的节点。 + +### 可用区 + +[可用区](https://docs.microsoft.com/en-us/azure/availability-zones/az-overview)是区域内的唯一物理位置。每个可用区由一个或多个配备独立电源、冷却系统和网络的数据中心组成。 + +并非所有区域都支持可用区。有关具有可用区的 Azure 区域列表,请参阅 [Azure 文档](https://docs.microsoft.com/en-us/azure/availability-zones/az-region#azure-regions-with-availability-zones)。 + +### 虚拟机大小 + +为节点池中的每个 VM 选择一个大小。有关每个 VM 大小的详细信息,请参阅[此页面](https://azure.microsoft.com/en-us/pricing/details/virtual-machines/linux/)。 + +### 操作系统磁盘类型 + +节点池中的节点可以使用托管磁盘或临时磁盘。 + +[临时 OS 磁盘](https://docs.microsoft.com/en-us/azure/virtual-machines/ephemeral-os-disks)在本地虚拟机存储上创建,并不会保存到远程 Azure 存储。临时 OS 磁盘适用于无状态工作负载,其中的应用可以容忍单个 VM 故障,但更容易受 VM 部署时间或重置单个虚拟机实例镜像的影响。使用临时 OS 磁盘,你可以体验更低的 OS 磁盘读/写延迟和更快的 VM 重置镜像过程。 + +[Azure 托管磁盘](https://docs.microsoft.com/en-us/azure/virtual-machines/managed-disks-overview)是由 Azure 管理并与 Azure Virtual Machines 一起使用的块级存储卷。托管磁盘旨在实现 99.999% 的高可用性。托管磁盘通过提供三个数据副本来实现高可用性和高持续性。 + +### 操作系统磁盘大小 + +每个节点的磁盘大小(以 GB 为单位)。 + +### 节点数 +节点池中的节点数。[Azure 订阅](https://docs.microsoft.com/en-us/azure/azure-resource-manager/management/azure-subscription-service-limits)可能会限制最大节点数。 + +### 每个节点的最大 Pod 数量 +每个节点的最大 Pod 数量默认为 110,最大为 250。 + +### 启用自动扩缩容 + +启用自动扩缩容后,你需要输入最小和最大节点数。 + +启用 Auto Scaling 后,你将无法手动对节点池进行扩缩容。扩缩容由 AKS autoscaler 控制。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cluster-configuration/rancher-server-configuration/eks-cluster-configuration.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cluster-configuration/rancher-server-configuration/eks-cluster-configuration.md new file mode 100644 index 00000000000..62feb5c7dbc --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cluster-configuration/rancher-server-configuration/eks-cluster-configuration.md @@ -0,0 +1,151 @@ +--- +title: EKS 集群配置参考 +shortTitle: EKS 集群配置 +weight: 2 +--- + +### 账号访问 + +使用获取的信息为 IAM 策略填写每个下拉列表和字段: + +| 设置 | 描述 | +| ---------- | -------------------------------------------------------------------------------------------------------------------- | +| 区域 | 从下拉列表中选择构建集群的地理区域。 | +| 云凭证 | 选择为 IAM 策略创建的云凭证。有关在 Rancher 中创建云凭证的更多信息,请参阅[此页面](../../user-settings/manage-cloud-credentials.md)。 | + +### 服务角色 + +选择一个[服务角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html)。 + +| 服务角色 | 描述 | +-------------|--------------------------- +| Standard:Rancher 生成的服务角色 | 如果选择此角色,Rancher 会自动添加一个服务角色以供集群使用。 | +| 自定义:从现有的服务角色中选择 | 如果选择此角色,Rancher 将允许你从已在 AWS 中创建的服务角色中进行选择。有关在 AWS 中创建自定义服务角色的更多信息,请参阅 [Amazon 文档](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#create-service-linked-role)。 | + +### 密文加密 + +可选:要加密密文,请选择或输入在 [AWS 密钥管理服务 (KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) 中创建的密钥。 + +### API Server 端点访问 + +配置公共/私有 API 访问是一个高级用例。有关详细信息,请参阅 [EKS 集群端点访问控制文档](https://docs.aws.amazon.com/eks/latest/userguide/cluster-endpoint.html)。 + +### 专用 API 端点 + +如果你在创建集群时启用了私有 API 端点访问,并禁用了公共 API 端点访问,那么你必须进行额外的步骤才能使 Rancher 成功连接到集群。在这种情况下,一个弹窗将会显示,其中包含需要在要注册到 Rancher 的集群上运行的命令。配置集群后,你可以在任何能连接到集群的 Kubernetes API 的地方运行显示的命令。 + +以下两种方法能避免这个额外的手动步骤: +- 在创建集群时,创建具有私有和公共 API 端点访问权限的集群。在集群创建并处于 active 状态后,你可以禁用公共访问,Rancher 将能继续与 EKS 集群通信。 +- 确保 Rancher 与 EKS 集群共享同一个子网。然后,你可以使用安全组使 Rancher 能够与集群的 API 端点进行通信。在这种情况下,你不需要运行注册集群的命令,Rancher 就能够与你的集群通信。有关配置安全组的更多信息,请参阅[安全组文档](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html)。 + +### 公共访问端点 + +你也可以选择通过显式 CIDR 块来限制对公共端点的访问。 + +如果你限制对特定 CIDR 块的访问,那么建议你也启用私有访问,以避免丢失与集群的网络通信。 + +启用私有访问需要满足以下条件之一: +- Rancher 的 IP 必须是允许的 CIDR 块的一部分。 +- 应该启用了私有访问。此外,Rancher 必须和集群共享同一个子网,并对集群有网络访问权限。你可以通过安全组来进行配置。 + +有关对集群端点的公共和私有访问的更多信息,请参阅 [Amazon EKS 文档](https://docs.aws.amazon.com/eks/latest/userguide/cluster-endpoint.html)。 + +### 子网 + +| 选项 | 描述 | +| ------- | ------------ | +| Standard:Rancher 生成的 VPC 和子网 | 在配置集群时,Rancher 会生成一个具有 3 个公有子网的新 VPC。 | +| 自定义:从现有的 VPC 和子网中选择 | 在配置集群时,Rancher 将你的 controlplane 和节点配置为使用你已经[在 AWS 中创建](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html)的 VPC 和子网。 | + +有关更多信息,请参阅 AWS 文档以了解[集群 VPC 注意事项](https://docs.aws.amazon.com/eks/latest/userguide/network_reqs.html)。根据你在上一步中的选择,按照以下说明进行操作。 + +- [什么是 Amazon VPC?](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) +- [VPC 和子网](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Subnets.html) + +### 安全组 + +Amazon 文档: + +- [集群安全组注意事项](https://docs.aws.amazon.com/eks/latest/userguide/sec-group-reqs.html) +- [VPC 的安全组](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html) +- [创建安全组](https://docs.aws.amazon.com/vpc/latest/userguide/getting-started-ipv4.html#getting-started-create-security-group) + +### Logging + +将 controlplane 日志配置为发送到 Amazon CloudWatch。如果你将集群日志发送到 CloudWatch Logs,你需要按照 standard CloudWatch Logs 支付数据引入和存储费用。 + +每个日志类型均对应一个 Kubernetes controlplane 组件。有关这些组件的更多信息,请参阅 Kubernetes 文档中的 [Kubernetes 组件](https://kubernetes.io/docs/concepts/overview/components/)。 + +有关 EKS controlplane 日志管理的更多信息,请参阅[官方文档](https://docs.aws.amazon.com/eks/latest/userguide/control-plane-logs.html)。 + +### 托管节点组 + +Amazon EKS 托管的节点组自动为 Amazon EKS Kubernetes 集群的节点(Amazon EC2 实例)进行预置和生命周期管理。 + +有关节点组如何工作以及如何配置的更多信息,请参阅 [EKS 文档](https://docs.aws.amazon.com/eks/latest/userguide/managed-node-groups.html)。 + +#### 使用你自己的启动模板 + +你可以提供启动模板 ID 和版本,以便轻松配置节点组中的 EC2 实例。如果你提供了启动模板,则以下设置都无法在 Rancher 中进行配置。因此,如果你使用启动模板,则需要在启动模板中指定以下列表中的所有必须和所需的设置。另请注意,如果提供了启动模板 ID 和版本,则只能更新模板版本。如果要使用新模板 ID,则需要创建新的托管节点组。 + +| 选项 | 描述 | 必填/选填 | +| ------ | ----------- | ----------------- | +| 实例类型 | 为要配置的实例选择[硬件规格](https://aws.amazon.com/ec2/instance-types/)。 | 必填 | +| 镜像 ID | 为节点指定自定义 AMI。与 EKS 一起使用的自定义 AMI 必须[正确配置](https://aws.amazon.com/premiumsupport/knowledge-center/eks-custom-linux-ami/)。 | 选填 | +| 节点卷大小 | 启动模板必须指定具有所需大小的 EBS 卷。 | 必填 | +| SSH 密钥 | 要添加到实例以对节点进行 SSH 访问的密钥。 | 选填 | +| 用户数据 | [MIME 多部分格式](https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html#launch-template-user-data)的 Cloud init 脚本。 | 选填 | +| 实例资源标签 | 标记节点组中的每个 EC2 实例。 | 选填 | + +#### Rancher 管理的启动模板 + +如果你不指定启动模板,你将能够在 Rancher UI 中配置上述选项,并且可以在创建后更新所有这些选项。为了利用所有这些选项,Rancher 将为你创建和管理启动模板。Rancher 中的所有集群都将有一个 Rancher 管理的启动模板。此外,每个没有指定启动模板的托管节点组都将具有一个管理的启动模板版本。此启动模板的名称将具有 “rancher-managed-lt-” 前缀,后面是集群的显示名称。此外,Rancher 管理的启动模板将使用 “rancher-managed-template” 键和 “do-not-modify-or-delete” 值来进行标记,以将其识别为 Rancher 管理的启动模板。请注意,不要修改或删除此启动模板,或将此启动模板与其他集群或托管节点组一起使用。因为这可能会使你的节点组“降级”并需要销毁和重新创建。 + +#### 自定义 AMI + +如果你在启动模板或 Rancher 中指定了自定义 AMI,则必须[正确配置](https://aws.amazon.com/premiumsupport/knowledge-center/eks-custom-linux-ami/)镜像,并且必须提供用户数据以[引导节点](https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html#launch-template-custom-ami)。这是一个高级用例,因此你必须要了解其要求。 + +如果你指定了不包含自定义 AMI 的启动模板,则 Amazon 将为 Kubernetes 版本和所选区域使用 [EKS 优化的 AMI](https://docs.aws.amazon.com/eks/latest/userguide/eks-optimized-ami.html)。你还可以为能从中受益的工作负载选择[启用 GPU 的实例](https://docs.aws.amazon.com/eks/latest/userguide/eks-optimized-ami.html#gpu-ami)。 + +:::note + +如果你在下拉菜单或启动模板中提供了自定义 AMI,则会忽略 Rancher 中设置的启用 GPU 的实例。 + +::: + +#### Spot 实例 + +Spot 实例现在[受 EKS 支持](https://docs.aws.amazon.com/eks/latest/userguide/managed-node-groups.html#managed-node-group-capacity-types-spot)。如果你指定了启动模板,Amazon 建议不要在模板中提供实例类型。相反,Amazon 建议提供多种实例类型。如果你为节点组启用了“请求 Spot 实例”复选框,那么你将有机会提供多种实例类型。 + +:::note + +在这种情况下,你在实例类型下拉列表中所选的选项都将被忽略,你必须在“Spot 实例类型”中至少指定一种实例类型。此外,与 EKS 一起使用的启动模板无法请求 Spot 实例。请求 Spot 实例必须是 EKS 配置的一部分。 + +::: + +#### 节点组设置 + +以下设置也是可配置的。在创建节点组后,除“节点组名称”外的所有选项都是可编辑的。 + +| 选项 | 描述 | +| ------- | ------------ | +| 节点组名称 | 节点组的名称。 | +| 期望 ASG 大小 | 期望的实例数量。 | +| 最大 ASG 大小 | 最大的实例数量。在安装 [Cluster Autoscaler](https://docs.aws.amazon.com/eks/latest/userguide/cluster-autoscaler.html) 之前,此设置不会生效。 | +| 最小 ASG 大小 | 最小的实例数量。在安装 [Cluster Autoscaler](https://docs.aws.amazon.com/eks/latest/userguide/cluster-autoscaler.html) 之前,此设置不会生效。 | +| 标签 | 应用于管理的节点组中节点的 Kubernetes 标签。 | +| 标签 | 管理的节点组的标签,这些标签不会传播到任何相关资源。 | + + +### 配置刷新间隔 + +`eks-refresh-cron` 设置已弃用。它已迁移到 `eks-refresh` 设置,这是一个表示秒的整数。 + +默认值为 300 秒。 + +你可以通过运行 `kubectl edit setting eks-refresh` 来更改同步间隔。 + +如果之前设置了 `eks-refresh-cron` 设置,迁移将自动进行。 + +刷新窗口越短,争用条件发生的可能性就越小。但这确实增加了遇到 AWS API 可能存在的请求限制的可能性。 + diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cluster-configuration/rancher-server-configuration/gke-cluster-configuration/gke-private-clusters.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cluster-configuration/rancher-server-configuration/gke-cluster-configuration/gke-private-clusters.md new file mode 100644 index 00000000000..b50c96997b8 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cluster-configuration/rancher-server-configuration/gke-cluster-configuration/gke-private-clusters.md @@ -0,0 +1,50 @@ +--- +title: 私有集群 +weight: 2 +--- + +在 GKE 中,[私有集群](https://cloud.google.com/kubernetes-engine/docs/concepts/private-cluster-concept)是一种集群,其节点仅通过分配内部 IP 地址与入站和出站流量相隔离。GKE 中的私有集群可以选择将 controlplane 端点作为公开访问的地址或作为私有地址。这与其他 Kubernetes 提供商不同,后者可能将具有私有 controlplane 端点的集群称为“私有集群”,但仍允许进出节点的流量。基于你的组织的网络和安全要求,你可能想创建一个有私有节点的集群,其中有或没有公共 controlplane 端点。从 Rancher 配置的 GKE 集群可以通过在**集群选项**中选择**私有集群**(在**显示高级选项**下)来使用隔离的节点。通过选择**启用私有端点**,可以选择将 controlplane 端点设为私有。 + +### 私有节点 + +由于私有集群中的节点只有内部 IP 地址,它们将无法安装 cluster agent,Rancher 将无法完全管理集群。这可以通过几种方式来处理。 + +#### Cloud NAT + +:::caution + +Cloud NAT 将[产生费用](https://cloud.google.com/nat/pricing)。 + +::: + +如果限制外出的互联网访问对你的组织来说不是一个问题,可以使用 Google 的 [Cloud NAT](https://cloud.google.com/nat/docs/using-nat) 服务来允许私有网络中的节点访问互联网,使它们能够从 Dockerhub 下载所需的镜像并与 Rancher management server 通信。这是最简单的解决方案。 + +#### 私有镜像仓库 + +:::caution + +此方案不受官方支持。如果 Cloud NAT 服务不足以满足你的需求,则可以参考此方案。 + +::: + +如果要求限制节点的传入和传出流量,请按照离线安装说明,在集群所在的 VPC 上设置一个私有容器[镜像仓库](https://rancher.com/docs/rancher/v2.6/en/installation/other-installation-methods/air-gap/),从而允许集群节点访问和下载运行 cluster agent 所需的镜像。如果 controlplane 端点也是私有的,Rancher 将需要[直接访问](#直接访问)它。 + +### 私有 controlplane 端点 + +如果集群暴露了公共端点,Rancher 将能够访问集群,且无需执行额外的步骤。但是,如果集群没有公共端点,则必须确保 Rancher 可以访问集群。 + +#### Cloud NAT + +:::caution + +Cloud NAT 将[产生费用](https://cloud.google.com/nat/pricing)。 + +::: + +如上所述,如果不考虑限制对节点的传出互联网访问,则可以使用 Google 的 [Cloud NAT](https://cloud.google.com/nat/docs/using-nat) 服务来允许节点访问互联网。当集群进行配置时,Rancher 将提供一个在集群上运行的注册命令。下载新集群的 [kubeconfig](https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-access-for-kubectl) 并在集群上运行提供的 kubectl 命令。如果要通过获取集群访问权来运行此命令,你可以创建临时节点或使用 VPC 中的现有节点,或者登录到某个集群节点或使用某个集群节点创建 SSH 隧道。 + +#### 直接访问 + +如果 Rancher server 与集群的 controlplane 运行在同一 VPC 上,它将直接访问 controlplane 的私有端点。集群节点将需要访问[私有镜像仓库](#私有镜像仓库)以下载上述的镜像。 + +你还可以使用 Google 的服务(例如 [Cloud VPN](https://cloud.google.com/network-connectivity/docs/vpn/concepts/overview) 或 [Cloud Interconnect VLAN](https://cloud.google.com/network-connectivity/docs/interconnect))来促进组织网络与 Google VPC 之间的连接。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cluster-configuration/rancher-server-configuration/k3s-cluster-configuration.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cluster-configuration/rancher-server-configuration/k3s-cluster-configuration.md new file mode 100644 index 00000000000..254e3b406c4 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cluster-configuration/rancher-server-configuration/k3s-cluster-configuration.md @@ -0,0 +1,147 @@ +--- +title: K3s 集群配置参考 +shortTitle: K3s 集群配置 +weight: 6 +--- + +本文介绍 Rancher 中可用于新的或现有的 K3s Kubernetes 集群的配置选项。 + +## 概述 + +你可以通过以下两种方式之一来配置 Kubernetes 选项: + +- [Rancher UI](#rancher-ui-中的配置选项):使用 Rancher UI 来选择设置 Kubernetes 集群时常用的自定义选项。 +- [集群配置文件](#集群配置文件):高级用户可以创建一个 K3s 配置文件,而不是使用 Rancher UI 来为集群选择 Kubernetes 选项。配置文件允许你设置 K3s 安装中可用的任何[选项](https://rancher.com/docs/k3s/latest/en/installation/install-options/)。 + +## Rancher UI 中的配置选项 + +:::tip + +一些高级配置选项没有在 Rancher UI 表单中开放,但你可以通过在 YAML 中编辑 K3s 集群配置文件来启用这些选项。有关 YAML 中 K3s 集群的可配置选项的完整参考,请参阅 [K3s 文档](https://rancher.com/docs/k3s/latest/en/installation/install-options/)。 + +::: + +### 基本信息 +#### Kubernetes 版本 + +这指的是集群节点上安装的 Kubernetes 版本。Rancher 基于 [hyperkube](https://github.com/rancher/hyperkube) 打包了自己的 Kubernetes 版本。 + +有关更多详细信息,请参阅[升级 Kubernetes](../../../getting-started/installation-and-upgrade/upgrade-and-roll-back-kubernetes.md)。 + +#### 加密密文 + +启用或禁用密文加密的选项。启用后,密文将使用 AES-CBC 密钥进行加密。如果禁用,则在再次启用加密之前无法读取任何以前的密文。有关详细信息,请参阅 [K3s 文档](https://rancher.com/docs/k3s/latest/en/advanced/#secrets-encryption-config-experimental)。 + +#### 项目网络隔离 + +如果你的网络提供商允许项目网络隔离,你可以选择启用或禁用项目间的通信。 + +#### SELinux + +启用或禁用 [SELinux](https://rancher.com/docs/k3s/latest/en/advanced/#selinux-support) 支持的选项。 + +#### CoreDNS + +默认情况下,[CoreDNS](https://coredns.io/) 会安装为默认 DNS 提供程序。如果未安装 CoreDNS,则必须自己安装备用 DNS 提供程序。有关详细信息,请参阅 [K3s 文档](https://rancher.com/docs/k3s/latest/en/networking/#coredns)。 + +#### Klipper Service LB + +启用或禁用 [Klipper](https://github.com/rancher/klipper-lb) 服务负载均衡器的选项。有关详细信息,请参阅 [K3s 文档](https://rancher.com/docs/k3s/latest/en/networking/#service-load-balancer)。 + +#### Traefik Ingress + +启用或禁用 [Traefik](https://traefik.io/) HTTP 反向代理和负载均衡器的选项。有关更多详细信息和配置选项,请参阅 [K3s 文档](https://rancher.com/docs/k3s/latest/en/networking/#traefik-ingress-controller)。 + +#### Local Storage + +在节点上启用或禁用 [Local Storage](https://rancher.com/docs/k3s/latest/en/storage/) 的选项。 + +#### Metrics Server + +启用或禁用 [metrics server](https://github.com/kubernetes-incubator/metrics-server) 的选项。如果启用,请确保为入站 TCP 流量打开 10250 端口。 + +### 附加配置 + +集群启动时将应用的其他 Kubernetes 清单,会作为[附加组件](https://kubernetes.io/docs/concepts/cluster-administration/addons/)来管理。有关详细信息,请参阅 [K3s 文档](https://rancher.com/docs/k3s/latest/en/helm/#automatically-deploying-manifests-and-helm-charts)。 + +### Agent 环境变量 + +为 [K3s agent](https://rancher.com/docs/k3s/latest/en/architecture/) 设置环境变量的选项。你可以使用键值对设置环境变量。有关详细信息,请参阅 [K3s 文档](https://rancher.com/docs/k3s/latest/en/installation/install-options/agent-config/)。 + +### etcd + +#### 自动快照 + +启用或禁用定期 etcd 快照的选项。如果启用,用户可以配置快照的频率。有关详细信息,请参阅 [K3s 文档](https://rancher.com/docs/k3s/latest/en/backup-restore/#creating-snapshots)。 + +#### 指标 + +选择向公众公开或仅在集群内公开 etcd 指标的选项。 + +### 网络 + +#### 集群 CIDR + +用于 pod IP 的 IPv4/IPv6 网络 CIDR(默认:10.42.0.0/16)。 + +#### Service CIDR + +用于 Service IP 的 IPv4/IPv6 网络 CIDR(默认:10.43.0.0/16)。 + +#### 集群 DNS + +用于 coredns 服务的 IPv4 集群 IP。应该在你的 service-cidr 范围内(默认:10.43.0.10)。 + +#### 集群域名 + +选择集群的域。默认值为 `cluster.local`。 + +#### NodePort 服务端口范围 + +更改可用于 [NodePort 服务](https://kubernetes.io/docs/concepts/services-networking/service/#nodeport)的端口范围的选项。默认值为 `30000-32767`。 + +#### TLS 可选名称 + +在服务器 TLS 证书上添加其他主机名或 IPv4/IPv6 地址作为 Subject Alternative Name。 + +#### 授权集群端点 + +授权集群端点(ACE)可用于直接访问 Kubernetes API server,而无需通过 Rancher 进行通信。 + +有关授权集群端点的工作原理以及使用的原因,请参阅[架构介绍](../../../pages-for-subheaders/rancher-manager-architecture.md#4-授权集群端点)。 + +我们建议使用具有授权集群端点的负载均衡器。有关详细信息,请参阅[推荐的架构](../../rancher-manager-architecture/architecture-recommendations.md#授权集群端点架构)。 + +### 镜像仓库 + +选择要从中拉取 Rancher 镜像的镜像仓库。有关更多详细信息和配置选项,请参阅 [K3s 文档](https://rancher.com/docs/k3s/latest/en/installation/private-registry/)。 + +### 升级策略 + +#### controlplane 并发 + +选择可以同时升级多少个节点。可以是固定数字或百分比。 + +#### Worker 并发 + +选择可以同时升级多少个节点。可以是固定数字或百分比。 + +#### 清空节点(controlplane) + +在升级之前从节点中删除所有 pod 的选项。 + +#### 清空节点(worker 节点) + +在升级之前从节点中删除所有 pod 的选项。 + +### 高级配置 + +为不同节点设置 kubelet 选项。有关可用选项,请参阅 [Kubernetes 文档](https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet/)。 + +## 集群配置文件 + +高级用户可以创建一个 K3s 配置文件,而不是使用 Rancher UI 表单来为集群选择 Kubernetes 选项。配置文件允许你设置 K3s 安装中可用的任何[选项](https://rancher.com/docs/k3s/latest/en/installation/install-options/)。 + +要直接从 Rancher UI 编辑 K3s 配置文件,单击**以 YAML 文件编辑**。 + + diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cluster-configuration/rancher-server-configuration/rke1-cluster-configuration.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cluster-configuration/rancher-server-configuration/rke1-cluster-configuration.md new file mode 100644 index 00000000000..535b31945ad --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cluster-configuration/rancher-server-configuration/rke1-cluster-configuration.md @@ -0,0 +1,348 @@ +--- +title: RKE 集群配置参考 +shortTitle: RKE 集群配置 +weight: 1 +--- + +Rancher 安装 Kubernetes 时,它使用 [RKE](../../../pages-for-subheaders/launch-kubernetes-with-rancher.md) 或 [RKE2](https://docs.rke2.io/) 作为 Kubernetes 发行版。 + +本文介绍 Rancher 中可用于新的或现有的 RKE Kubernetes 集群的配置选项。 + + +## 概述 + +你可以通过以下两种方式之一来配置 Kubernetes 选项: + +- [Rancher UI](#rancher-ui-中的配置选项):使用 Rancher UI 来选择设置 Kubernetes 集群时常用的自定义选项。 +- [集群配置文件](#集群配置文件):高级用户可以创建一个 RKE 配置文件,而不是使用 Rancher UI 来为集群选择 Kubernetes 选项。配置文件可以让你使用 YAML 来指定 RKE 安装中可用的任何选项(除了 system_images 配置)。 + +RKE 集群配置选项嵌套在 `rancher_kubernetes_engine_config` 参数下。有关详细信息,请参阅[集群配置文件](#集群配置文件)。 + +在 [RKE 启动的集群](../../../pages-for-subheaders/launch-kubernetes-with-rancher.md)中,你可以编辑任何后续剩余的选项。 + +有关 RKE 配置文件语法的示例,请参阅 [RKE 文档](https://rancher.com/docs/rke/latest/en/example-yamls/)。 + +Rancher UI 中的表单不包括配置 RKE 的所有高级选项。有关 YAML 中 RKE Kubernetes 集群的可配置选项的完整参考,请参阅 [RKE 文档](https://rancher.com/docs/rke/latest/en/config-options/)。 + +## 在 Rancher UI 中使用表单编辑集群 + +要编辑你的集群: + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 转到要配置的集群,然后单击 **⋮ > 编辑配置**。 + + +## 使用 YAML 编辑集群 + +高级用户可以创建一个 RKE 配置文件,而不是使用 Rancher UI 来为集群选择 Kubernetes 选项。配置文件可以让你使用 YAML 来指定 RKE 安装中可用的任何选项(除了 system_images 配置)。 + +RKE 集群(也称为 RKE1 集群)的编辑方式与 RKE2 和 K3s 集群不同。 + +要直接从 Rancher UI 编辑 RKE 配置文件: + +1. 点击 **☰ > 集群管理**。 +1. 转到要配置的 RKE 集群。单击并单击 **⋮ > 编辑配置**。你将会转到 RKE 配置表单。请注意,由于集群配置在 Rancher 2.6 中发生了变更,**⋮ > 以 YAML 文件编辑**可用于配置 RKE2 集群,但不能用于编辑 RKE1 配置。 +1. 在配置表单中,向下滚动并单击**以 YAML 文件编辑**。 +1. 编辑 `rancher_kubernetes_engine_config` 参数下的 RKE 选项。 + +## Rancher UI 中的配置选项 + +:::tip + +一些高级配置选项没有在 Rancher UI 表单中开放,但你可以通过在 YAML 中编辑 RKE 集群配置文件来启用这些选项。有关 YAML 中 RKE Kubernetes 集群的可配置选项的完整参考,请参阅 [RKE 文档](https://rancher.com/docs/rke/latest/en/config-options/)。 + +::: + +### Kubernetes 版本 + +这指的是集群节点上安装的 Kubernetes 版本。Rancher 基于 [hyperkube](https://github.com/rancher/hyperkube) 打包了自己的 Kubernetes 版本。 + +有关更多详细信息,请参阅[升级 Kubernetes](../../../getting-started/installation-and-upgrade/upgrade-and-roll-back-kubernetes.md)。 + +### 网络提供商 + +这指的是集群使用的[网络提供商](https://kubernetes.io/docs/concepts/cluster-administration/networking/)。有关不同网络提供商的更多详细信息,请查看我们的[网络常见问题解答](../../../faq/container-network-interface-providers.md)。 + +:::caution + +启动集群后,你无法更改网络提供商。由于 Kubernetes 不允许在网络提供商之间切换,因此,请谨慎选择要使用的网络提供商。使用网络提供商创建集群后,如果你需要更改网络提供商,你将需要拆除整个集群以及其中的所有应用。 + +::: + +Rancher 与以下开箱即用的网络提供商兼容: + +- [Canal](https://github.com/projectcalico/canal) +- [Flannel](https://github.com/coreos/flannel#flannel) +- [Calico](https://docs.projectcalico.org/v3.11/introduction/) +- [Weave](https://github.com/weaveworks/weave) + +:::note Weave 注意事项: + +选择 Weave 作为网络提供商时,Rancher 将通过生成随机密码来自动启用加密。如果你想手动指定密码,请参阅使用[配置文件](#rke-集群配置文件参考)和 [Weave 网络插件选项](https://rancher.com/docs/rke/latest/en/config-options/add-ons/network-plugins/#weave-network-plug-in-options)来配置集群。 + +::: + +### 项目网络隔离 + +如果你的网络提供商允许项目网络隔离,你可以选择启用或禁用项目间的通信。 + +如果你使用支持执行 Kubernetes 网络策略的 RKE 网络插件(例如 Canal 或 Cisco ACI 插件),则可以使用项目网络隔离。 + +### Kubernetes 云提供商 + +你可以配置 [Kubernetes 云提供商](../../../pages-for-subheaders/set-up-cloud-providers.md)。如果你想在 Kubernetes 中使用动态配置的[卷和存储](../../../pages-for-subheaders/create-kubernetes-persistent-storage.md),你通常需要选择特定的云提供商。例如,如果你想使用 Amazon EBS,则需要选择 `aws` 云提供商。 + +:::note + +如果你要使用的云提供商未作为选项列出,你需要使用[配置文件选项](#集群配置文件)来配置云提供商。请参考 [RKE 云提供商文档](https://rancher.com/docs/rke/latest/en/config-options/cloud-providers/)来了解如何配置云提供商。 + +::: + +### 私有镜像仓库 + +集群级别的私有镜像仓库配置仅能用于配置集群。 + +在 Rancher 中设置私有镜像仓库的主要方法有两种:通过[全局默认镜像仓库](../../../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/global-default-private-registry.md)中的**设置**选项卡设置全局默认镜像仓库,以及在集群级别设置的高级选项中设置私有镜像仓库。全局默认镜像仓库可以用于离线设置,不需要凭证的镜像仓库。而集群级私有镜像仓库用于所有需要凭证的私有镜像仓库。 + +如果你的私有镜像仓库需要凭证,为了将凭证传递给 Rancher,你需要编辑每个需要从仓库中拉取镜像的集群的集群选项。 + +私有镜像仓库的配置选项能让 Rancher 知道要从哪里拉取用于集群的[系统镜像](https://rancher.com/docs/rke/latest/en/config-options/system-images/)或[附加组件镜像](https://rancher.com/docs/rke/latest/en/config-options/add-ons/)。 + +- **系统镜像**是维护 Kubernetes 集群所需的组件。 +- **附加组件**用于部署多个集群组件,包括网络插件、ingress controller、DNS 提供商或 metrics server。 + +有关为集群配置期间应用的组件设置私有镜像仓库的更多信息,请参阅[私有镜像仓库的 RKE 文档](https://rancher.com/docs/rke/latest/en/config-options/private-registries/)。 + +Rancher v2.6 引入了[为 RKE 集群配置 ECR 镜像仓库](https://rancher.com/docs/rke/latest/en/config-options/private-registries/#amazon-elastic-container-registry-ecr-private-registry-setup)的功能。 + +### 授权集群端点 + +授权集群端点(ACE)可用于直接访问 Kubernetes API server,而无需通过 Rancher 进行通信。 + +:::note + +授权集群端点仅适用于 Rancher 启动的 Kubernetes 集群,即只适用于 Rancher [使用 RKE](../../../pages-for-subheaders/rancher-manager-architecture.md#配置-kubernetes-集群的工具) 来配置的集群。它不适用于托管在 Kubernetes 提供商中的集群,例如 Amazon 的 EKS。 + +::: + +在 Rancher 启动的 Kubernetes 集群中,它默认启用,使用具有 `controlplane` 角色的节点的 IP 和默认的 Kubernetes 自签名证书。 + +有关授权集群端点的工作原理以及使用的原因,请参阅[架构介绍](../../../pages-for-subheaders/rancher-manager-architecture.md#4-授权集群端点)。 + +我们建议使用具有授权集群端点的负载均衡器。有关详细信息,请参阅[推荐的架构](../../rancher-manager-architecture/architecture-recommendations.md#授权集群端点架构)。 + +### 节点池 + +有关使用 Rancher UI 在 RKE 集群中设置节点池的信息,请参阅[此页面](../../../pages-for-subheaders/use-new-nodes-in-an-infra-provider.md)。 + +### NGINX Ingress + +如果你想使用高可用性配置来发布应用,并且你使用没有原生负载均衡功能的云提供商来托管主机,请启用此选项以在集群中使用 NGINX Ingress。 + +### Metrics Server 监控 + +这是启用或禁用 [Metrics Server](https://rancher.com/docs/rke/latest/en/config-options/add-ons/metrics-server/) 的选项。 + +每个能够使用 RKE 启动集群的云提供商都可以收集指标并监控你的集群节点。如果启用此选项,你可以从你的云提供商门户查看你的节点指标。 + +### Pod 安全策略支持 + +为集群启用 [pod 安全策略](../../../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/create-pod-security-policies.md)。启用此选项后,使用**默认 Pod 安全策略**下拉菜单选择一个策略。 + +你必须有已配置的 Pod 安全策略才能使用此选项。 + +### 节点上的 Docker 版本 + +表示是否允许节点运行 Rancher 不正式支持的 Docker 版本。 + +如果你选择使用支持的 Docker 版本,Rancher 会禁止 pod 运行在安装了不支持的 Docker 版本的节点上。 + +如需了解各个 Rancher 版本通过了哪些 Docker 版本测试,请参见[支持和维护条款](https://rancher.com/support-maintenance-terms/)。 + +### Docker 根目录 + +如果要添加到集群的节点为 Docker 配置了非默认 Docker 根目录(默认为 `/var/lib/docker`),请在此选项中指定正确的 Docker 根目录。 + +### 默认 Pod 安全策略 + +如果你启用了 **Pod 安全策略支持**,请使用此下拉菜单选择应用于集群的 pod 安全策略。 + +### 节点端口范围 + +更改可用于 [NodePort 服务](https://kubernetes.io/docs/concepts/services-networking/service/#nodeport)的端口范围的选项。默认为 `30000-32767`。 + +### 定期 etcd 快照 + +启用或禁用[定期 etcd 快照](https://rancher.com/docs/rke/latest/en/etcd-snapshots/#etcd-recurring-snapshots)的选项。 + +### Agent 环境变量 + +为 [rancher agent](../../../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/about-rancher-agents.md) 设置环境变量的选项。你可以使用键值对设置环境变量。如果 Rancher Agent 需要使用代理与 Rancher Server 通信,则可以使用 Agent 环境变量设置 `HTTP_PROXY`,`HTTPS_PROXY` 和 `NO_PROXY` 环境变量。 + +### 更新 ingress-nginx + +使用 Kubernetes 1.16 之前版本创建的集群将具有 `OnDelete`的 `ingress-nginx` `updateStrategy`。使用 Kubernetes 1.16 或更高版本创建的集群将具有 `RollingUpdate`。 + +如果 `ingress-nginx` 的 `updateStrategy` 是 `OnDelete`,则需要删除这些 pod 以获得 deployment 正确的版本。 + + + +## RKE 集群配置文件参考 + +高级用户可以创建一个 RKE 配置文件,而不是使用 Rancher UI 来为集群选择 Kubernetes 选项。配置文件可以让你在 RKE 安装中设置任何[可用选项](https://rancher.com/docs/rke/latest/en/config-options/)(`system_images` 配置除外)。使用 Rancher UI 或 API 创建集群时,不支持 `system_images` 选项。 + +有关 YAML 中 RKE Kubernetes 集群的可配置选项的完整参考,请参阅 [RKE 文档](https://rancher.com/docs/rke/latest/en/config-options/)。 + +### Rancher 中的配置文件结构 + +RKE(Rancher Kubernetes Engine)是 Rancher 用来配置 Kubernetes 集群的工具。过去,Rancher 的集群配置文件与 [RKE 配置文件](https://rancher.com/docs/rke/latest/en/example-yamls/)的结构是一致的。但由于 Rancher 文件结构发生了变化,因此在 Rancher 中,RKE 集群配置项与非 RKE 配置项是分开的。所以,你的集群配置需要嵌套在集群配置文件中的 `rancher_kubernetes_engine_config` 参数下。使用早期版本的 Rancher 创建的集群配置文件需要针对这种格式进行更新。以下是一个集群配置文件示例: + +
+ 集群配置文件示例 + +```yaml +# +# Cluster Config +# +docker_root_dir: /var/lib/docker +enable_cluster_alerting: false +enable_cluster_monitoring: false +enable_network_policy: false +local_cluster_auth_endpoint: + enabled: true +# +# Rancher Config +# +rancher_kubernetes_engine_config: # Your RKE template config goes here. + addon_job_timeout: 30 + authentication: + strategy: x509 + ignore_docker_version: true +# +# # 目前仅支持 Nginx ingress provider +# # 要禁用 Ingress controller,设置 `provider: none` +# # 要在指定节点上禁用 Ingress,使用 node_selector,例如: +# provider: nginx +# node_selector: +# app: ingress +# + ingress: + provider: nginx + kubernetes_version: v1.15.3-rancher3-1 + monitoring: + provider: metrics-server +# +# If you are using calico on AWS +# +# network: +# plugin: calico +# calico_network_provider: +# cloud_provider: aws +# +# # To specify flannel interface +# +# network: +# plugin: flannel +# flannel_network_provider: +# iface: eth1 +# +# # To specify flannel interface for canal plugin +# +# network: +# plugin: canal +# canal_network_provider: +# iface: eth1 +# + network: + options: + flannel_backend_type: vxlan + plugin: canal +# +# services: +# kube-api: +# service_cluster_ip_range: 10.43.0.0/16 +# kube-controller: +# cluster_cidr: 10.42.0.0/16 +# service_cluster_ip_range: 10.43.0.0/16 +# kubelet: +# cluster_domain: cluster.local +# cluster_dns_server: 10.43.0.10 +# + services: + etcd: + backup_config: + enabled: true + interval_hours: 12 + retention: 6 + safe_timestamp: false + creation: 12h + extra_args: + election-timeout: 5000 + heartbeat-interval: 500 + gid: 0 + retention: 72h + snapshot: false + uid: 0 + kube_api: + always_pull_images: false + pod_security_policy: false + service_node_port_range: 30000-32767 + ssh_agent_auth: false +windows_prefered_cluster: false +``` +
+ +### 默认 DNS 提供商 + +下表显示了默认部署的 DNS 提供商。有关如何配置不同 DNS 提供商的更多信息,请参阅 [DNS 提供商相关的 RKE 文档](https://rancher.com/docs/rke/latest/en/config-options/add-ons/dns/)。CoreDNS 只能在 Kubernetes v1.12.0 及更高版本上使用。 + +| Rancher 版本 | Kubernetes 版本 | 默认 DNS 提供商 | +|-------------|--------------------|----------------------| +| v2.2.5 及更高版本 | v1.14.0 及更高版本 | CoreDNS | +| v2.2.5 及更高版本 | v1.13.x 及更低版本 | kube-dns | +| v2.2.4 及更低版本 | 任意 | kube-dns | + +## YAML 中的 Rancher 特定参数 + +除了 RKE 配置文件选项外,还有可以在配置文件 (YAML) 中配置的 Rancher 特定设置如下。 + +### docker_root_dir + +请参阅 [Docker 根目录](#docker-根目录)。 + +### enable_cluster_monitoring + +启用或禁用[集群监控](../../../pages-for-subheaders/monitoring-and-alerting.md)的选项。 + +### enable_network_policy + +启用或禁用项目网络隔离的选项。 + +如果你使用支持执行 Kubernetes 网络策略的 RKE 网络插件(例如 Canal 或 Cisco ACI 插件),则可以使用项目网络隔离。 + +### local_cluster_auth_endpoint + +请参阅[授权集群端点](#授权集群端点)。 + +示例: + +```yaml +local_cluster_auth_endpoint: + enabled: true + fqdn: "FQDN" + ca_certs: |- + -----BEGIN CERTIFICATE----- + ... + -----END CERTIFICATE----- +``` + +### 自定义网络插件 + +你可以使用 RKE 的[用户定义的附加组件功能](https://rancher.com/docs/rke/latest/en/config-options/add-ons/user-defined-add-ons/)来添加自定义网络插件。部署 Kubernetes 集群之后,你可以定义要部署的任何附加组件。 + +有两种方法可以指定附加组件: + +- [内嵌附加组件](https://rancher.com/docs/rke/latest/en/config-options/add-ons/user-defined-add-ons/#in-line-add-ons) +- [为附加组件引用 YAML 文件](https://rancher.com/docs/rke/latest/en/config-options/add-ons/user-defined-add-ons/#referencing-yaml-files-for-add-ons) + +有关如何通过编辑 `cluster.yml` 来配置自定义网络插件的示例,请参阅 [RKE 文档](https://rancher.com/docs/rke/latest/en/config-options/add-ons/network-plugins/custom-network-plugin-example)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cluster-configuration/rancher-server-configuration/rke2-cluster-configuration.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cluster-configuration/rancher-server-configuration/rke2-cluster-configuration.md new file mode 100644 index 00000000000..a3a20ce7ec0 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cluster-configuration/rancher-server-configuration/rke2-cluster-configuration.md @@ -0,0 +1,354 @@ +--- +title: RKE2 集群配置参考 +shortTitle: RKE2 集群配置 +weight: 5 +--- + +本文介绍 Rancher 中可用于新的或现有的 RKE2 Kubernetes 集群的配置选项。 + +## 概述 + +你可以通过以下两种方式之一来配置 Kubernetes 选项: + +- [Rancher UI](#rancher-ui-中的配置选项):使用 Rancher UI 来选择设置 Kubernetes 集群时常用的自定义选项。 +- [集群配置文件](#集群配置文件):高级用户可以创建一个 RKE2 配置文件,而不是使用 Rancher UI 来为集群选择 Kubernetes 选项。配置文件让你能设置更多可用于 RKE2 的其他[安装选项](https://docs.rke2.io/install/install_options/install_options)。 + +## 在 Rancher UI 中使用表单编辑集群 + +要编辑你的集群: + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 转到要配置的集群,然后单击 **⋮ > 编辑配置**。 + +## 使用 YAML 编辑集群 + +高级用户可以创建一个 RKE2 配置文件,而不是使用 Rancher UI 来为集群选择 Kubernetes 选项。配置文件可以让你使用 YAML 来指定 RKE2 安装中可用的任何选项。 + +要直接从 Rancher UI 中编辑 RKE2 配置文件: + +1. 点击 **☰ > 集群管理**。 +1. 转到你要配置的集群,然后单击 **⋮ > 以 YAML 文件编辑**。 +1. 编辑 `rkeConfig` 参数下的 RKE 选项。 + +## Rancher UI 中的配置选项 + +:::tip + +一些高级配置选项没有在 Rancher UI 表单中开放,但你可以通过在 YAML 中编辑 RKE2 集群配置文件来启用这些选项。有关 YAML 中 RKE2 Kubernetes 集群的可配置选项的完整参考,请参阅 [RKE2 文档](https://docs.rke2.io/install/install_options/install_options/)。 + +::: + +## 主机池 + +本小节介绍了通用的主机池配置。对于针对特定基础设施提供商的配置,请参阅以下页面: + +- [Azure](../downstream-cluster-configuration/machine-configuration/azure.md) +- [DigitalOcean](../downstream-cluster-configuration/machine-configuration/digitalocean.md) +- [EC2](../downstream-cluster-configuration/machine-configuration/amazon-ec2.md) + +### 池名称 + +主机池的名称。 + +### 主机数量 + +池中的主机数。 + +### 角色 + +将 etcd、controlplane 和 worker 角色分配给节点的选项。 + +### 高级配置 + +#### 自动替换 + +如果节点无法访问的持续时间达到该值,则会被自动删除和替换。 + +#### 删除前清空 + +通过在删除节点之前驱逐所有 pod 来清空节点。 + +#### Kubernetes 节点标签 + +将[标签](https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/)(label)添加到节点,让对象选择更加简便。 + +有关标签语法的详细信息,请参阅 [Kubernetes 文档](https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#syntax-and-character-set)。 + +#### 污点 + +将[污点](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/)(taint)添加到节点,防止 pod 被调度或在节点上执行(除非 pod 具有匹配的容忍度)。 + +## 集群配置 + +### 基本信息 +#### Kubernetes 版本 + +这指的是集群节点上安装的 Kubernetes 版本。Rancher 基于 [hyperkube](https://github.com/rancher/hyperkube) 打包了自己的 Kubernetes 版本。 + +有关更多详细信息,请参阅[升级 Kubernetes](../../../getting-started/installation-and-upgrade/upgrade-and-roll-back-kubernetes.md)。 + +#### 容器网络提供商 + +这指的是集群使用的[网络提供商](https://kubernetes.io/docs/concepts/cluster-administration/networking/)。 + +:::caution + +启动集群后,你无法更改网络提供商。由于 Kubernetes 不允许在网络提供商之间切换,因此,请谨慎选择要使用的网络提供商。使用网络提供商创建集群后,如果你需要更改网络提供商,你将需要拆除整个集群以及其中的所有应用。 + +::: + +Rancher 与以下开箱即用的网络提供商兼容: + +- [Canal](https://github.com/projectcalico/canal) +- [Cilium](https://cilium.io/)\* +- [Calico](https://docs.projectcalico.org/v3.11/introduction/) +- [Multus](https://github.com/k8snetworkplumbingwg/multus-cni) + +\* 在 [Cilium CNI](../../../faq/container-network-interface-providers.md#cilium) 中使用[项目网络隔离](#项目网络隔离)时,你可以开启跨节点入口路由。详情请参见 [CNI 提供商文档](../../../faq/container-network-interface-providers.md#ingress-routing-across-nodes-in-cilium)。 + +有关不同网络提供商以及如何配置它们的更多详细信息,请查阅 [RKE2 文档](https://docs.rke2.io/install/network_options/)。 + +##### 双栈网络 + +所有 CNI 网络插件都支持[双栈](https://docs.rke2.io/install/network_options/#dual-stack-configuration)网络。要在双栈模式下配置 RKE2,请为你的[集群 CIDR](#集群-cidr) 和/或 [Service CIDR](#service-cidr) 设置有效的 IPv4/IPv6 CIDR。 + +###### 额外配置 {#dual-stack-additional-config} + +使用 `cilium` 或 `multus,cilium` 作为容器网络接口提供商时,请确保**启用 IPv6 支持**选项。 + +#### 云提供商 + +你可以配置 [Kubernetes 云提供商](../../../pages-for-subheaders/set-up-cloud-providers.md)。如果你想在 Kubernetes 中使用动态配置的[卷和存储](../../../pages-for-subheaders/create-kubernetes-persistent-storage.md),你通常需要选择特定的云提供商。例如,如果你想使用 Amazon EBS,则需要选择 `aws` 云提供商。 + +:::note + +如果你要使用的云提供商未作为选项列出,你需要使用[配置文件选项](#集群配置文件)来配置云提供商。请参考[本文档](https://rancher.com/docs/rke/latest/en/config-options/cloud-providers/)来了解如何配置云提供商。 + +::: + +#### 默认 Pod 安全策略 + +为集群选择默认的 [pod 安全策略](../../../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/create-pod-security-policies.md)。请参阅 [RKE2 文档](https://docs.rke2.io/security/policies/)来了解每个可用策略的规范。 + +#### Worker CIS 配置文件 + +选择一个 [CIS benchmark](../../../pages-for-subheaders/cis-scan-guides.md) 来验证系统配置。 + +#### 项目网络隔离 + +如果你的网络提供商允许项目网络隔离,你可以选择启用或禁用项目间的通信。 + +如果你使用支持执行 Kubernetes 网络策略的 RKE2 网络插件(例如 Canal),则可以使用项目网络隔离。 + +#### CoreDNS + +默认情况下,[CoreDNS](https://coredns.io/) 会安装为默认 DNS 提供程序。如果未安装 CoreDNS,则必须自己安装备用 DNS 提供程序。有关其他 CoreDNS 配置,请参阅 [RKE2 文档](https://docs.rke2.io/networking/#coredns)。 + +#### NGINX Ingress + +如果你想使用高可用性配置来发布应用,并且你使用没有原生负载均衡功能的云提供商来托管主机,请启用此选项以在集群中使用 NGINX Ingress。有关其他配置选项,请参阅 [RKE2 文档](https://docs.rke2.io/networking/#nginx-ingress-controller)。 + +有关其他配置选项,请参阅 [RKE2 文档](https://docs.rke2.io/networking/#nginx-ingress-controller)。 + +#### Metrics Server + +这是启用或禁用 [Metrics Server](https://rancher.com/docs/rke/latest/en/config-options/add-ons/metrics-server/) 的选项。 + +每个能够使用 RKE2 启动集群的云提供商都可以收集指标并监控你的集群节点。如果启用此选项,你可以从你的云提供商门户查看你的节点指标。 + +### 附加配置 + +集群启动时将应用的其他 Kubernetes 清单,会作为[附加组件](https://kubernetes.io/docs/concepts/cluster-administration/addons/)来管理。有关详细信息,请参阅 [RKE2 文档](https://docs.rke2.io/helm/#automatically-deploying-manifests-and-helm-charts)。 + +### Agent 环境变量 + +为 [Rancher agent](https://rancher.com/docs/rancher/v2.6/en/cluster-provisioning/rke-clusters/rancher-agents/) 设置环境变量的选项。你可以使用键值对设置环境变量。有关详细信息,请参阅 [RKE2 文档](https://docs.rke2.io/install/install_options/linux_agent_config/)。 + +### etcd + +#### 自动快照 + +启用或禁用定期 etcd 快照的选项。如果启用,用户可以配置快照的频率。有关详细信息,请参阅 [RKE2 文档](https://docs.rke2.io/backup_restore/#creating-snapshots)。请注意,如果使用 RKE2,快照存储会在每个 etcd 节点上,这与 RKE1 不同(RKE1 每个集群只存储一个快照)。 + +#### 指标 + +选择向公众公开或仅在集群内公开 etcd 指标的选项。 + +### 网络 + +#### 集群 CIDR + +用于 pod IP 的 IPv4 和/或 IPv6 网络 CIDR(默认:10.42.0.0/16)。 + +##### 双栈网络 + +要配置[双栈](https://docs.rke2.io/install/network_options/#dual-stack-configuration)模式,请输入有效的 IPv4/IPv6 CIDR。例如 `10.42.0.0/16,2001:cafe:42:0::/56`。 + +使用 `cilium` 或 `multus,cilium` 作为[容器网络](#容器网络)接口提供商时,你需要进行[附加配置](#dual-stack-additional-config)。 + +#### Service CIDR + +用于 Service IP 的 IPv4/IPv6 网络 CIDR(默认:10.43.0.0/16)。 + +##### 双栈网络 + +要配置[双栈](https://docs.rke2.io/install/network_options/#dual-stack-configuration)模式,请输入有效的 IPv4/IPv6 CIDR。例如 `10.42.0.0/16,2001:cafe:42:0::/56`。 + +使用 `cilium` 或 `multus,cilium` 作为[容器网络](#容器网络)接口提供商时,你需要进行[附加配置](#dual-stack-additional-config)。 + +#### 集群 DNS + +用于 coredns 服务的 IPv4 集群 IP。应该在你的 service-cidr 范围内(默认:10.43.0.10)。 + +#### 集群域名 + +选择集群的域。默认值为 `cluster.local`。 + +#### NodePort 服务端口范围 + +更改可用于 [NodePort 服务](https://kubernetes.io/docs/concepts/services-networking/service/#nodeport)的端口范围的选项。默认值为 `30000-32767`。 + +#### TLS 可选名称 + +在服务器 TLS 证书上添加其他主机名或 IPv4/IPv6 地址作为 Subject Alternative Name。 + +#### 授权集群端点 + +授权集群端点(ACE)可用于直接访问 Kubernetes API server,而无需通过 Rancher 进行通信。 + +在 Rancher 启动的 Kubernetes 集群中,它默认启用,使用具有 `controlplane` 角色的节点的 IP 和默认的 Kubernetes 自签名证书。 + +有关授权集群端点的工作原理以及使用的原因,请参阅[架构介绍](../../../pages-for-subheaders/rancher-manager-architecture.md#4-授权集群端点)。 + +我们建议使用具有授权集群端点的负载均衡器。有关详细信息,请参阅[推荐的架构](../../rancher-manager-architecture/architecture-recommendations.md#授权集群端点架构)。 + +### 镜像仓库 + +选择要从中拉取 Rancher 镜像的镜像仓库。有关更多详细信息和配置选项,请参阅 [RKE2 文档](https://docs.rke2.io/install/containerd_registry_configuration/)。 + +### 升级策略 + +#### controlplane 并发 + +选择可以同时升级多少个节点。可以是固定数字或百分比。 + +#### Worker 并发 + +选择可以同时升级多少个节点。可以是固定数字或百分比。 + +#### 清空节点(controlplane) + +在升级之前从节点中删除所有 pod 的选项。 + +#### 清空节点(worker 节点) + +在升级之前从节点中删除所有 pod 的选项。 + +### 高级配置 + +为不同节点设置 kubelet 选项。有关可用选项,请参阅 [Kubernetes 文档](https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet/)。 + +## 集群配置文件参考 + +高级用户可以创建一个配置文件,而不是使用 Rancher UI 来为集群选择 Kubernetes 选项。配置文件允许你为 RKE2 设置[可用的选项](https://docs.rke2.io/install/install_options/server_config/),其中包括已经在 [Rancher UI 配置选项](#rancher-ui-中的配置选项)中列出的选项以及 Rancher 特定的参数。 + +
+ + 集群配置文件片段示例 + + +```yaml +spec: + cloudCredentialSecretName: cattle-global-data:cc-s879v + kubernetesVersion: v1.23.6+rke2r2 + localClusterAuthEndpoint: {} + rkeConfig: + chartValues: + rke2-calico: {} + etcd: + snapshotRetention: 5 + snapshotScheduleCron: 0 */5 * * * + machineGlobalConfig: + cni: calico + disable-kube-proxy: false + etcd-expose-metrics: false + profile: null + machinePools: + - controlPlaneRole: true + etcdRole: true + machineConfigRef: + kind: Amazonec2Config + name: nc-test-pool1-pwl5h + name: pool1 + quantity: 1 + unhealthyNodeTimeout: 0s + workerRole: true + machineSelectorConfig: + - config: + protect-kernel-defaults: false + registries: {} + upgradeStrategy: + controlPlaneConcurrency: "1" + controlPlaneDrainOptions: + deleteEmptyDirData: true + enabled: true + gracePeriod: -1 + ignoreDaemonSets: true + timeout: 120 + workerConcurrency: "1" + workerDrainOptions: + deleteEmptyDirData: true + enabled: true + gracePeriod: -1 + ignoreDaemonSets: true + timeout: 120 +``` +
+ +### chartValues + +此选项用于为 RKE2/K3s 安装的 System Chart 指定值。 + +示例: + +```yaml +chartValues: + chart-name: + key: value +``` +### machineGlobalConfig + +RKE2/K3s 配置嵌套在 `machineGlobalConfig` 参数下。在这里所做的任何配置更改都将应用到每个节点。你可以在此处应用[RKE2 的独立版本](https://docs.rke2.io/install/install_options/server_config/)中可用的配置选项。 + +示例: + +```yaml +machineGlobalConfig: + etcd-arg: + - key1=value1 + - key2=value2 +``` + +### machineSelectorConfig + +此参数与 [`machineGlobalConfig`](#machineglobalconfig) 相同,只是可以在配置中指定 [label](#kubernetes-node-labels) 选择器。该配置仅应用于与标签选择器匹配的节点。 + +允许多个 `config` 条目,可以为每个条目指定各自的 `machineLabelSelector`。用户可以指定 `matchExpressions`、`matchLabels`、指定二者或都不指定。如果你省略了 `machineLabelSelector`,则与将 config 放入 `machineGlobalConfig` 的效果相同。 + +示例: + +```yaml +machineSelectorConfig + - config: + config-key: config-value + machineLabelSelector: + matchExpressions: + - key: example-key + operator: string # 有效的运算符:In、NotIn、Exists 和 DoesNotExist + values: + - example-value1 + - example-value2 + matchLabels: + key1: value1 + key2: value2 +``` diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cluster-configuration/rancher-server-configuration/sync-clusters.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cluster-configuration/rancher-server-configuration/sync-clusters.md new file mode 100644 index 00000000000..11c31371f96 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cluster-configuration/rancher-server-configuration/sync-clusters.md @@ -0,0 +1,35 @@ +--- +title: 同步 +weight: 10 +--- + +同步是 EKS 和 GKE 集群的功能,它使 Rancher 更新集群的值,以便它们与托管在 Kubernetes 提供商中的相应集群对象保持一致。这使得 Rancher 不是托管集群状态的唯一所有者。其最大的局限性是,在同一时间或在 5 分钟内处理 Rancher 和另一个来源的更新时,可能会导致其中一个来源的状态被完全覆盖。 + +### 工作原理 + +要理解同步是如何工作的,则必须理解 Rancher Cluster 对象上的两个字段: + +1. 集群的 config 对象,位于集群的规范上: + + * 对于 EKS,该字段称为 EKSConfig + * 对于 GKE,该字段称为 GKEConfig + +2. UpstreamSpec 对象 + + * 对于 EKS,它位于集群状态的 EKSStatus 字段中。 + * 对于 GKE,它位于集群状态的 GKEStatus 字段中。 + +定义这些对象的结构类型可以在它们对应的 operator 项目中找到: + +* [eks-operator](https://github.com/rancher/eks-operator/blob/master/pkg/apis/eks.cattle.io/v1/types.go) +* [gke-operator](https://github.com/rancher/gke-operator/blob/master/pkg/apis/gke.cattle.io/v1/types.go) + +除集群名称、位置(区域或地区)、导入和云凭证引用之外,所有字段在此 Spec 对象上都是可为空的。 + +EKSConfig 和 GKEConfig 代表其非零值的期望状态。配置对象中非零的字段可以被认为是“管理的”。在 Rancher 中创建集群时,所有字段都是非零的,因此都是“管理”的。在把一个已存在的集群注册到 Rancher 时,所有可为空字段都是 nil 并且不是“管理”的。一旦 Rancher 更改了这些字段的值,这些字段就会被管理。 + +UpstreamSpec 代表集群在托管的 Kubernetes 提供商中的情况,并以 5 分钟的时间间隔刷新。刷新 UpstreamSpec 后,Rancher 会检查集群是否正在进行更新。如果它正在更新,则不做任何进一步处理。如果它目前没有更新,EKSConfig 或 GKEConfig 上的任何 "管理" 字段都会被最近更新的 UpstreamSpec 上的相应值覆盖。 + +有效的期望状态可以被认为是 UpstreamSpec + EKSConfig 或 GKEConfig 中的所有非零字段。这是 UI 中显示的内容。 + +如果 Rancher 和另一个来源试图在同一时间或在更新完成后的 5 分钟尝试更新集群,那么任何 "管理" 的字段都有可能陷入争用状态。以 EKS 为例,集群可能将 PrivateAccess 作为管理字段。如果 PrivateAccess 为 false,然后在 EKS 控制台中启用,且在 11:01 完成。在这种情况下,在 11:05 之前从 Rancher 更新的标签的值可能会被覆盖。如果在集群处理更新时更新了标签,也会发生这种情况。如果集群已注册并且 PrivateAccess 字段为零,那么在上述情况下,这个问题应该不会发生。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cluster-configuration/rancher-server-configuration/use-existing-nodes/rancher-agent-options.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cluster-configuration/rancher-server-configuration/use-existing-nodes/rancher-agent-options.md new file mode 100644 index 00000000000..76a716a5dd7 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/cluster-configuration/rancher-server-configuration/use-existing-nodes/rancher-agent-options.md @@ -0,0 +1,54 @@ +--- +title: Rancher Agent 选项 +weight: 2500 +--- + +Rancher 在每个节点上部署一个 Agent 来与节点通信。本文描述了可以传递给 Agent 的选项。要使用这些选项,你需要[使用自定义节点创建集群](../../../../pages-for-subheaders/use-existing-nodes.md),并在添加节点时将选项添加到生成的 `docker run` 命令。 + +有关 Rancher 如何使用 Node Agent 与下游集群通信的概述,请参阅[产品架构](../../../../pages-for-subheaders/rancher-manager-architecture.md#3-node-agents)。 + +## 通用选项 + +| 参数 | 环境变量 | 描述 | +| ---------- | -------------------- | ----------- | +| `--server` | `CATTLE_SERVER` | 已配置的 Rancher `server-url`,Agent 将通过这个地址连接 Server。 | +| `--token` | `CATTLE_TOKEN` | 在 Rancher 中注册节点所需的 Token。 | +| `--ca-checksum` | `CATTLE_CA_CHECKSUM` | 使用已配置的 Rancher `cacerts` 进行 SHA256 校验和验证。 | +| `--node-name` | `CATTLE_NODE_NAME` | 覆盖用于注册节点的主机名(默认为 `hostname -s`)。 | +| `--label` | `CATTLE_NODE_LABEL` | 向节点添加节点标签。对于多个标签,请传递额外的 `--label` 选项。(`--label key=value`) | +| `--taints` | `CATTLE_NODE_TAINTS` | 将节点污点添加到节点。对于多个污点,请传递额外的 `--taints` 选项。(`--taints key=value:effect`) | + +## 角色选项 + +| 参数 | 环境变量 | 描述 | +| ---------- | -------------------- | ----------- | +| `--all-roles` | `ALL=true` | 将所有角色(`etcd`、`controlplane`、`worker`)应用到节点。 | +| `--etcd` | `ETCD=true` | 将角色 `etcd` 应用到节点。 | +| `--controlplane` | `CONTROL=true` | 将角色 `controlplane` 应用到节点。 | +| `--worker` | `WORKER=true` | 将角色 `worker` 应用到节点。 | + +## IP 地址选项 + +| 参数 | 环境变量 | 描述 | +| ---------- | -------------------- | ----------- | +| `--address` | `CATTLE_ADDRESS` | 节点将注册的 IP 地址(默认为用于连接 `8.8.8.8`的 IP)。 | +| `--internal-address` | `CATTLE_INTERNAL_ADDRESS` | 私有网络上用于主机间通信的 IP 地址。 | + +### 动态 IP 地址选项 + +出于自动化目的,你不能在命令中使用特定的 IP 地址,因为它必须是通用的才能用于每个节点。为此,我们提供了动态 IP 地址的选项。它们用作现有 IP 地址选项的值。支持 `--address` 和 `--internal-address`。 + +| 值 | 示例 | 描述 | +| ---------- | -------------------- | ----------- | +| 接口名称 | `--address eth0` | 将从给定的接口中检索第一个配置的 IP 地址。 | +| `ipify` | `--address ipify` | 将使用从 `https://api.ipify.org` 检索到的值。 | +| `awslocal` | `--address awslocal` | 将使用从 `http://169.254.169.254/latest/meta-data/local-ipv4` 检索到的值。 | +| `awspublic` | `--address awspublic` | 将使用从 `http://169.254.169.254/latest/meta-data/public-ipv4` 检索到的值。 | +| `doprivate` | `--address doprivate` | 将使用从 `http://169.254.169.254/metadata/v1/interfaces/private/0/ipv4/address` 检索到的值。 | +| `dopublic` | `--address dopublic` | 将使用从 `http://169.254.169.254/metadata/v1/interfaces/public/0/ipv4/address` 检索到的值。 | +| `azprivate` | `--address azprivate` | 将使用从 `http://169.254.169.254/metadata/instance/network/interface/0/ipv4/ipAddress/0/privateIpAddress?api-version=2017-08-01&format=text` 检索到的值。 | +| `azpublic` | `--address azpublic` | 将使用从 `http://169.254.169.254/metadata/instance/network/interface/0/ipv4/ipAddress/0/publicIpAddress?api-version=2017-08-01&format=text` 检索到的值。 | +| `gceinternal` | `--address gceinternal` | 将使用从 `http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/ip` 检索到的值。 | +| `gceexternal` | `--address gceexternal` | 将使用从 `http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/access-configs/0/external-ip` 检索到的值。 | +| `packetlocal` | `--address packetlocal` | 将使用从 `https://metadata.packet.net/2009-04-04/meta-data/local-ipv4` 检索到的值。 | +| `packetpublic` | `--address packetlocal` | 将使用从 `https://metadata.packet.net/2009-04-04/meta-data/public-ipv4` 检索到的值。 | diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/configure-openldap/openldap-config-reference.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/configure-openldap/openldap-config-reference.md new file mode 100644 index 00000000000..72ffd00eb31 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/configure-openldap/openldap-config-reference.md @@ -0,0 +1,81 @@ +--- +title: OpenLDAP 配置参考 +weight: 2 +--- + +本文提供在 Rancher 中设置 OpenLDAP 身份验证的参考。 + +有关配置 OpenLDAP 的更多详细信息,请参见[官方文档](https://www.openldap.org/doc/)。 + +> 在开始之前,请熟悉[外部身份验证配置和主体用户](../../pages-for-subheaders/about-authentication.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/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/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/advanced-user-guides/authentication-permissions-and-global-configuration/about-authentication/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/current/reference-guides/installation-references/feature-flags.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/installation-references/feature-flags.md new file mode 100644 index 00000000000..294ecae480f --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/installation-references/feature-flags.md @@ -0,0 +1,43 @@ +--- +title: 功能开关 +--- + +为了让你试用默认关闭的实验功能,我们引入了功能开关(feature flag)。 + +如需了解功能的值以及如何启用功能,请参阅[此处](../../pages-for-subheaders/enable-experimental-features.md)。 + +:::note + +某些功能需要重启 Rancher Server 容器才能生效。我们在文档的表格和 UI 中对这些功能进行了标记。 + +::: + +以下是 Rancher 中可用的功能开关列表: + +- `harvester`:从 2.6.1 开始可用。Harvester 用于管理 Virtualization Management 页面的访问。用户可以在该页面直接导航到 Harvester 集群并访问 Harvester UI。详情请参见[本页](../../explanations/integrations-in-rancher/harvester.md#功能开关)。 +- `rke2`:用于启用配置 RKE2 集群的功能。这个功能开关默认开启,即允许用户尝试配置此类集群。 +- `fleet`:由于 Fleet 功能已应用到新的配置框架中,因此我们需要启用先前的 `fleet` 功能开关。如果你在早期版本中禁用了此功能开关,升级到 Rancher 2.6 后,该功能开关会自动启用。详情请参见[此页](../../how-to-guides/new-user-guides/deploy-apps-across-clusters/fleet.md)。 +- `continuous-delivery`:在 Rancher v2.5.x 中,Fleet 带有 GitOps 功能,该功能不能与 Fleet 分开禁用。在 Rancher 2.6 中,我们引入了 `continuous-delivery` 功能开关,让你可以单独禁用 Fleet 的 GitOps 功能。详情请参见[本页](../../getting-started/installation-and-upgrade/advanced-options/enable-experimental-features/continuous-delivery.md)。 +- `legacy`:Rancher 会逐渐淘汰之前版本中的某些功能,以实现功能迭代。此处包括已弃用,以及之后会转移到其他地方的功能。默认情况下,新安装会禁用此功能开关。如果你从先前的版本升级,此功能开关会启用。 +- `token-hashing`:用于启动新的 token-hashing 功能。启用后,会使用 SHA256 算法对现有 Token 和所有新 Token 进行哈希处理。一旦对 Token 进行哈希处理,就无法撤消操作。该功能开关启用后无法被禁用。详情请参见[哈西处理 Token](../../reference-guides/about-the-api/api-tokens.md)。 +- `unsupported-storage-drivers`:该功能[允许使用不支持的存储驱动](../../getting-started/installation-and-upgrade/advanced-options/enable-experimental-features/unsupported-storage-drivers.md)。换言之,此功能允许你使用默认情况下未启用的存储提供商和卷插件。 +- `istio-virtual-service-ui`:此功能让你[启动用于管理 Istio 流量的 UI,其中包括创建、读取、更新和删除 Istio 虚拟服务(Virtual Service)和目标规则(Destination Rule)](../../getting-started/installation-and-upgrade/advanced-options/enable-experimental-features/istio-traffic-management-features.md)。 +- `multi-cluster-management`:用于配置和管理多个 Kubernetes 集群。此功能开关只能在安装时设置,之后不能更改。 + +下表介绍了 Rancher 中功能开关的可用版本和默认值: + +| 功能开关名称 | 默认值 | 状态 | 可用于 | 是否需要重启 Rancher | +| ----------------------------- | ------------- | ------------ | --------------- |---| +| `istio-virtual-service-ui` | `false` | 实验功能 | v2.3.0 | | +| `istio-virtual-service-ui` | `true` | GA* | v2.3.2 | | +| `unsupported-storage-drivers` | `false` | 实验功能 | v2.3.0 | | +| `fleet` | `true` | GA* | v2.5.0 | | +| `fleet` | `true` | 不能禁用 | v2.6.0 | N/A | +| `continuous-delivery` | `true` | GA* | v2.6.0 | | +| `token-hashing` | 新安装:`false`;升级:`true` | GA* | v2.6.0 | | +| `legacy` | 新安装:`false`;升级:`true` | GA* | v2.6.0 | | +| `multi-cluster-management` | `false` | GA* | v2.5.0 | | +| `harvester` | `true` | 实验功能 | v2.6.1 | | +| `rke2` | `true` | 实验功能 | v2.6.0 | | + +\* 一般情况下可用。此功能包含在 Rancher 中,不是实验功能的。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/installation-references/helm-chart-options.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/installation-references/helm-chart-options.md new file mode 100644 index 00000000000..b85c3c0a830 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/installation-references/helm-chart-options.md @@ -0,0 +1,274 @@ +--- +title: Rancher Helm Chart 选项 +weight: 1 +aliases: + - /rancher/v2.6/en/installation/resources/chart-options +--- + +本文提供了 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 审计日志](../../getting-started/installation-and-upgrade/advanced-options/advanced-use-cases/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` 时生效) | +| `busyboxImage` | "busybox" | `string` - 用来收集审计日志的 busybox 镜像位置 | +| `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/advanced-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。此参数用于离线环境安装。 | + + + +### 引导密码 + +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 审计日志](../../getting-started/installation-and-upgrade/advanced-options/advanced-use-cases/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 额外设置环境变量。该列表使用与容器清单定义相同的 `name` 和 `value` 键。记住需要给值加上引号。 + +```plain +--set 'extraEnv[0].name=CATTLE_TLS_MIN_VERSION' +--set 'extraEnv[0].value=1.0' +``` + +### 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 annotations。 + +设置自定义证书颁发者的示例: + +```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` 来设置你的代理服务器。 + +在 `noProxy` 列表中添加例外的 IP。确保你已添加了 Pod 集群 IP 范围(默认:`10.42.0.0/16`),服务集群 IP 范围(默认:`10.43.0.0/16`),内部集群域名(默认:`.svc,.cluster.local`)和所有 worker 集群 `controlplane` 节点。Rancher 支持在此列表中使用 CIDR 表示法范围。 + +```plain +--set proxy="http://:@:/" +--set noProxy="127.0.0.0/8\,10.0.0.0/8\,172.16.0.0/12\,192.168.0.0/16\,.svc\,.cluster.local" +``` + +### 额外的授信 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/current/reference-guides/installation-references/tls-settings.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/installation-references/tls-settings.md new file mode 100644 index 00000000000..e3e2aa9df95 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/installation-references/tls-settings.md @@ -0,0 +1,22 @@ +--- +title: TLS 设置 +weight: 3 +--- + +更改默认 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/current/reference-guides/kubernetes-concepts.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/kubernetes-concepts.md new file mode 100644 index 00000000000..08035e1c117 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/kubernetes-concepts.md @@ -0,0 +1,65 @@ +--- +title: Kubernetes 概念 +weight: 4 +--- + +本文解释了 Kubernetes 的相关概念,以便让你更好地了解 Rancher 的运行机制。本文仅对 Kubernetes 组件进行了简单的描述。如需了解更多详情,请参见 [Kubernetes 组件的官方文档](https://kubernetes.io/docs/concepts/overview/components/)。 + +## 关于 Docker + +Docker 是容器打包和运行时系统的标准。开发者在 Dockerfiles 中构建容器镜像,并在 Docker 镜像仓库中分发容器镜像。[Docker Hub](https://hub.docker.com) 是市面上主流的公有镜像仓库。许多企业还创建私有 Docker 镜像仓库。Docker 主要用于管理单个节点上的容器。 + +:::note + +由于 Kubernetes 已经成为了容器管理的主流工具,所以从 Rancher 2.x 版本开始,我们不再支持 Docker Swarm。如果你有使用 Docker 管理容器的需求,可以安装 Rancher 1.6 进行操作。 + +::: + +## 关于 Kubernetes + +Kubernetes 是容器和集群管理的标准。YAML 文件规定了组成一个应用所需的容器和其他资源。Kubernetes 提供了调度、伸缩、服务发现、健康检查、密文管理和配置管理等功能。 + +## Kubernetes 集群是什么 + +集群是可作为一个系统协同工作的一组计算机。 + +_Kubernetes 集群_ 是使用 [Kubernetes 容器编排系统](https://kubernetes.io/)来部署、运维和伸缩 Docker 容器的集群,让你的组织实现应用自动化运维。 + +## Kubernetes 集群中节点的角色 + +Kubernetes 集群中的每个计算资源称为一个 _节点_ 。节点可以是裸金属服务器或虚拟机。Kubernetes 将节点分为 _etcd_ 节点、_controlplane_ 节点和 _worker_ 节点。 + +一个 Kubernetes 集群至少包含一个 etcd 节点,一个 controlplane 节点和一个 worker 节点。 + +### etcd 节点 + +Rancher 在单节点和高可用安装中均使用 etcd 作为数据存储。在 Kubernetes 中,etcd 也是存储集群状态的节点的角色。 + +Kubernetes 集群的状态保存在 [etcd](https://kubernetes.io/docs/concepts/overview/components/#etcd) 中。etcd 节点运行 etcd 数据库。 + +etcd 数据库组件是一个分布式的键值对存储系统,用于存储所有 Kubernetes 的集群数据,例如集群协作和状态管理相关的数据。建议在多个节点上运行 etcd,以保证在发生故障时有可用的备份数据。 + +即使你可以仅在一个节点上运行 etcd,但 etcd 需要大多数节点(即 quorum)的同意才能更新集群状态。集群需要包含足够数量的健康 etcd 节点,以形成 quorum。假设集群中有 n 个节点,quorum 的数量则需要是 (n/2)+1。如果集群节点数量是奇数,每新增一个节点,都会增加 quorum 所需节点数。 + +一般情况下,集群中只要配置三个 etcd 节点就能满足小型集群的需求,五个 etcd 节点能满足大型集群的需求。 + +### controlplane 节点 + +controlplane 节点上运行 Kubernetes API server、scheduler 和 Controller Manager。这些节点执行日常任务,以确保集群状态和你的配置一致。因为 etcd 节点保存了集群的全部数据,所以 controlplane 节点是无状态的。虽然你可以在单个节点上运行 controlplane,但是我们建议在两个或以上的节点上运行 controlplane,以保证冗余性。另外,一个节点可以既是 controlplane 节点,又是 etcd 节点。 + +### Worker 节点 + +每个 [worker 节点](https://kubernetes.io/docs/concepts/architecture/nodes/)都能运行: + +- **Kubelets**:监控节点状态的 Agent,确保你的容器处于健康状态。 +- **工作负载**:承载应用和其他 deployment 的容器和 Pod。 + +Worker 节点也运行存储和网络驱动,有必要时也会运行 Ingress Controller。你可以根据需要,创建尽可能多的 worker 节点来运行你的[工作负载](../pages-for-subheaders/workloads-and-pods.md)。 + +## 关于 Helm + +在 Rancher 高可用安装的场景下,你可以使用 Helm 工具,把 Rancher 安装到 Kubernetes 集群上。 + +Helm 是 Kubernetes 的包管理工具。Helm Chart 为 Kubernetes YAML 清单文件提供了模板语法。通过 Helm,用户可以创建可配置的 deployment,而不仅仅只能使用静态文件。如果你需要创建自己的 deployment 商店应用,请参见 [https://helm.sh/](https://helm.sh) 上的文档。 + +有关 ServiceAccount 和 Cluster Role Binding 的更多信息,请参见 [Kubernetes 官方文档](https://kubernetes.io/docs/reference/access-authn-authz/rbac/)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/monitoring-v2-configuration/examples.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/monitoring-v2-configuration/examples.md new file mode 100644 index 00000000000..74e7c083698 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/monitoring-v2-configuration/examples.md @@ -0,0 +1,25 @@ +--- +title: 示例 +weight: 400 +--- + + +### ServiceMonitor + +你可以在[此处](https://github.com/prometheus-operator/prometheus-operator/blob/master/example/prometheus-operator-crd/monitoring.coreos.com_servicemonitors.yaml)找到 ServiceMonitor 自定义资源的示例。 + +### PodMonitor + +你可以在[此处](https://github.com/prometheus-operator/prometheus-operator/blob/master/example/user-guides/getting-started/example-app-pod-monitor.yaml)找到 PodMonitor 示例,还可以在[此处](https://github.com/prometheus-operator/prometheus-operator/blob/master/example/user-guides/getting-started/prometheus-pod-monitor.yaml)找到引用它的 Prometheus 资源示例。 + +### PrometheusRule + +PrometheusRule 包含你通常放置在 [Prometheus 规则文件](https://prometheus.io/docs/prometheus/latest/configuration/recording_rules/)中的告警和记录规则。 + +要在集群中更细粒度地应用 PrometheusRules,你可以使用 Prometheus 资源的 ruleSelector 字段,从而根据添加到 PrometheusRules 资源的标签来选择要加载到 Prometheus 上的 PrometheusRule。 + +你可以在[此页面](https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/user-guides/alerting.md)找到 PrometheusRule 示例。 + +### Alertmanager 配置 + +有关示例配置,请参阅[本节](../../how-to-guides/advanced-user-guides/monitoring-v2-configuration-guides/advanced-configuration/alertmanager.md#alertmanager-配置示例)。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/monitoring-v2-configuration/helm-chart-options.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/monitoring-v2-configuration/helm-chart-options.md new file mode 100644 index 00000000000..478ab6f4675 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/monitoring-v2-configuration/helm-chart-options.md @@ -0,0 +1,70 @@ +--- +title: Helm Chart 选项 +weight: 8 +--- + + +## 配置资源限制和请求 + +安装 `rancher-monitoring` 时可以配置资源请求和限制。 + +默认值在 `rancher-monitoring` Helm Chart 的 [values.yaml](https://github.com/rancher/charts/blob/main/charts/rancher-monitoring/values.yaml) 中。 + +下表中的默认值是所需的最低资源限制和请求: + +| 资源名称 | 内存限制 | CPU 限制 | 内存请求 | CPU 请求 | +| ------------- | ------------ | ----------- | ---------------- | ------------------ | +| alertmanager | 500Mi | 1000m | 100Mi | 100m | +| grafana | 200Mi | 200m | 100Mi | 100m | +| kube-state-metrics subchart | 200Mi | 100m | 130Mi | 100m | +| prometheus-node-exporter subchart | 50Mi | 200m | 30Mi | 100m | +| prometheusOperator | 500Mi | 200m | 100Mi | 100m | +| prometheus | 2500Mi | 1000m | 1750Mi | 750m | +| **总计** | **3950Mi** | **2700m** | **2210Mi** | **1250m** | + +建议至少配 50Gi 存储。 + + +## Notifiers 的可信 CA + +如果你需要将受信任的 CA 添加到 Notifiers,请执行以下步骤: + +1. 创建 `cattle-monitoring-system` 命名空间。 +1. 将你信任的 CA 密文添加到 `cattle-monitoring-system` 命名空间。 +1. 部署或升级 `rancher-monitoring` Helm Chart。在 Chart 选项中,引用**告警 > 补充密文**中的密钥。 + +**结果**:默认的 Alertmanager 自定义资源将有权访问你信任的 CA。 + + +## 其它抓取配置 + +如果无法通过 ServiceMonitor 或 PodMonitor 指定你想要的抓取配置,你可以在部署或升级 `rancher-monitoring` 时提供 `additionalScrapeConfigSecret`。 + +[scrape_config](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#scrape_config) 指定一组目标以及抓取这些目标的参数。在一般情况下,一个抓取配置指定一个 job。 + +Istio 就是一个可能用到这个配置的例子。有关详细信息,请参阅[本节](../../explanations/integrations-in-rancher/istio/configuration-options/selectors-and-scrape-configurations.md)。 + + +## 配置打包在 Monitoring V2 中的应用 + +我们使用 Monitoring V2 来部署 kube-state-metrics 和 node-exporter。node-exporter 部署为 DaemonSet。对于 Monitoring V2 helm Chart,values.yaml 中的所有东西都部署为子 Chart。 + +我们还部署了不由 prometheus 管理的 Grafana。 + +如果你查看 Helm Chart 在 kube-state-metrics 中的功能,则还有很多可以设置的值没有在顶层 Chart 中显示。 + +但是,你可以在顶层 Chart 中添加覆盖子 Chart 的值。 + +### 增加 Alertmanager 的副本 + +作为 Chart 部署选项的一部分,你可以选择增加部署到集群上的 Alertmanager 副本的数量。这些副本使用相同的底层 Alertmanager Config Secret 进行管理。有关 Alertmanager Config Secret 的更多信息,请参阅[本节](../../how-to-guides/advanced-user-guides/monitoring-v2-configuration-guides/advanced-configuration/alertmanager.md#多个-alertmanager-副本)。 + +### 为持久化 Grafana 仪表板配置命名空间 + +要让 Grafana 监控所有命名空间中的 ConfigMap,请在 `rancher-monitoring` Helm chart 中指定以下值: + +``` +grafana.sidecar.dashboards.searchNamespace=ALL +``` + +请注意,Monitoring Chart 用于添加 Grafana 仪表板的 RBAC 角色仅能让用户将仪表板添加到定义在 `grafana.dashboards.namespace` 中的命名空间,默认为 `cattle-dashboards`。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/monitoring-v2-configuration/receivers.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/monitoring-v2-configuration/receivers.md new file mode 100644 index 00000000000..1d64dec2941 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/monitoring-v2-configuration/receivers.md @@ -0,0 +1,305 @@ +--- +title: 接收器配置 +shortTitle: 接收器 +weight: 1 +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +[Alertmanager Config](https://prometheus.io/docs/alerting/latest/configuration/#configuration-file) Secret 包含 Alertmanager 实例的配置,该实例根据 Prometheus 发出的告警发送通知。 + +:::note + +本节参考假设你已经熟悉 Monitoring 组件的协同工作方式。有关 Alertmanager 的详细信息,请参阅[本节](../../explanations/integrations-in-rancher/monitoring-and-alerting/how-monitoring-works.md#3-alertmanager-工作原理)。 + +::: + + +## 在 Rancher UI 中创建接收器 + +:::note 先决条件: + +- 已安装 Monitoring 应用。 +- 如果你使用现有的 Alertmanager Secret 配置 Monitoring,则它必须具有 Rancher 的 UI 支持的格式。否则,你将只能直接修改 Alertmanager Secret 来进行更改。请注意,对于通过使用路由和接收器 UI 支持的 Alertmanager 配置类型,我们会继续进行强化。因此如果你有增强功能的请求,请[提交 issue](https://github.com/rancher/rancher/issues/new)。 + +::: + +要在 Rancher UI 中创建通知接收器: + + + + +1. 转到要创建接收器的集群。单击 **监控 -> 告警 -> AlertManagerConfigs**。 +1. 单击**创建**。 +1. 点击**添加接收器**。 +1. 输入接收器的**名称**。 +1. 为接收器配置一个或多个提供程序。如需获取填写表单的帮助,请参阅下方的配置选项。 +1. 单击**创建**。 + + + + +1. 转到要创建接收器的集群。单击**监控**,然后单击**接收器**。 +2. 输入接收器的名称。 +3. 为接收器配置一个或多个提供程序。如需获取填写表单的帮助,请参阅下方的配置选项。 +4. 单击**创建**。 + + + + +**结果**:告警可以向接收器发送通知。 + +## 接收器配置 + +通知集成是通过 `receiver` 配置的,[Prometheus](https://prometheus.io/docs/alerting/latest/configuration/#receiver) 文档对此进行了说明。 + +### 原生和非原生接收器 + +默认情况下,AlertManager 提供与一些接收器的原生集成,这些接收器在[本节](https://prometheus.io/docs/alerting/latest/configuration/#receiver)中列出。所有原生支持的接收器都可以通过 Rancher UI 进行配置。 + +对于 AlertManager 不提供原生支持的通知机制,可使用 [webhook 接收器](https://prometheus.io/docs/alerting/latest/configuration/#webhook_config)实现集成。你可以在[此处](https://prometheus.io/docs/operating/integrations/#alertmanager-webhook-receiver)找到提供此类集成的第三方驱动程序列表。Alerting Drivers 应用能让你访问这些驱动程序,以及它们相关的集成。启用后,你将可以在 Rancher UI 中配置非原生的接收器。 + +目前 Rancher Alerting Drivers 应用支持访问以下集成: +- Microsoft Teams,基于 [prom2teams](https://github.com/idealista/prom2teams) 驱动程序 +- SMS,基于 [Sachet](https://github.com/messagebird/sachet) 驱动程序 + +你可以在 Rancher UI 中可以配置以下类型的接收器: + +- Slack +- 电子邮件 +- PagerDuty +- Opsgenie +- Webhook +- 自定义 +- Teams +- SMS + +你可以在 YAML 中使用自定义接收器选项,从而配置无法通过 Rancher UI 表单配置的接收器。 + +## Slack + +| 字段 | 类型 | 描述 | +|------|--------------|------| +| URL | String | 输入你的 Slack webhook URL。有关创建 Slack webhook 的说明,请参阅 [Slack 文档](https://get.slack.help/hc/en-us/articles/115005265063-Incoming-WebHooks-for-Slack)。 | +| 默认频道 | String | 输入要发送告警通知的频道名称。格式:`#`。 | +| 代理 URL | String | webhook 通知的代理。 | +| 发送已解决告警 | Bool | 如果告警已解决(例如 [已解决] CPU 使用率过高问题),是否发送后续通知。 | + +## 电子邮件 + +| 字段 | 类型 | 描述 | +|------|--------------|------| +| 默认收件人地址 | String | 接收通知的电子邮件地址。 | +| 发送已解决告警 | Bool | 如果告警已解决(例如 [已解决] CPU 使用率过高问题),是否发送后续通知。 | + +SMTP 选项: + +| 字段 | 类型 | 描述 | +|------|--------------|------| +| 发件人 | String | 你的 SMTP 邮件服务器上可用的电子邮件地址,用于发送通知。 | +| 主机 | String | SMTP 服务器的 IP 地址或主机名。示例:`smtp.email.com`。 | +| 使用 TLS | Bool | 使用 TLS 进行加密。 | +| 用户名 | String | 用户名,用于通过 SMTP 服务器进行身份验证。 | +| 密码 | String | 密码,用于通过 SMTP 服务器进行身份验证。 | + +## PagerDuty + +| 字段 | 类型 | 描述 | +|------|------|-------| +| 集成类型 | String | `Events API v2` 或 `Prometheus`。 | +| 默认集成密钥 | String | 有关获取集成密钥的说明,请参阅 [PagerDuty 文档](https://www.pagerduty.com/docs/guides/prometheus-integration-guide/)。 | +| 代理 URL | String | PagerDuty 通知的代理。 | +| 发送已解决告警 | Bool | 如果告警已解决(例如 [已解决] CPU 使用率过高问题),是否发送后续通知。 | + +## Opsgenie + +| 字段 | 描述 | +|------|-------------| +| API 密钥 | 有关获取 API 密钥的说明,请参阅 [Opsgenie 文档](https://docs.opsgenie.com/docs/api-key-management)。 | +| 代理 URL | Opsgenie 通知的代理。 | +| 发送已解决告警 | 如果告警已解决(例如 [已解决] CPU 使用率过高问题),是否发送后续通知。 | + +Opsgenie 响应者: + +| 字段 | 类型 | 描述 | +|-------|------|--------| +| 类型 | String | 计划程序、团队、用户或升级。有关告警响应者的更多信息,请参阅 [Opsgenie 文档](https://docs.opsgenie.com/docs/alert-recipients-and-teams)。 | +| 发送至 | String | Opsgenie 收件人的 ID、名称或用户名。 | + +## Webhook + +| 字段 | 描述 | +|-------|--------------| +| URL | 你所选的应用的 Webhook URL。 | +| 代理 URL | webhook 通知的代理。 | +| 发送已解决告警 | 如果告警已解决(例如 [已解决] CPU 使用率过高问题),是否发送后续通知。 | + + + +## 自定义 + +此处提供的 YAML 将直接附加到 Alertmanager Config Secret 的接收器中。 + +## Teams + +### 为 Rancher 管理的集群启用 Teams 接收器 + +Teams 接收器不是原生接收器,因此需要启用后才能使用。你可以通过转到应用页面,安装 rancher-alerting-drivers 应用,然后选择 Teams 选项,从而为 Rancher 管理的集群启用 Teams 接收器。 + +1. 在 Rancher UI 中,转到要安装 rancher-alerting-drivers 的集群,然后单击**应用 & 应用市场**。 +1. 点击 **Alerting Drivers** 应用。 +1. 单击 **Helm 部署选项**选项卡。 +1. 选择 **Teams** 并单击**安装**。 +1. 记下使用的命名空间,后续步骤中将需要该命名空间。 + +### 配置 Teams 接收器 + +可以通过更新 ConfigMap 来配置 Teams 接收器。例如,以下是最小的 Teams 接收器配置: + +```yaml +[Microsoft Teams] +teams-instance-1: https://your-teams-webhook-url +``` + +配置完成后,按照[本节](#在-rancher-ui-中创建接收器)中的步骤添加接收器。 + +使用以下示例作为 URL,其中: + +- 将 `ns-1` 替换为安装 `rancher-alerting-drivers` 应用的命名空间。 + +```yaml +url: http://rancher-alerting-drivers-prom2teams.ns-1.svc:8089/v2/teams-instance-1 +``` + + + +## SMS + +### 为 Rancher 管理的集群启用 SMS 接收器 + +SMS 接收器不是原生接收器,因此需要启用后才能使用。你可以通过转到应用页面,安装 rancher-alerting-drivers 应用,然后选择 SMS 选项,从而为 Rancher 管理的集群启用 SMS 接收器。 + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 在**集群**页面上,转到要安装 `rancher-alerting-drivers` 的集群,然后单击 **Explore**。 +1. 在左侧导航栏中,单击**应用 & 应用市场**。 +1. 点击 **Alerting Drivers** 应用。 +1. 单击 **Helm 部署选项**选项卡。 +1. 选择 **SMS** 并单击**安装**。 +1. 记下使用的命名空间,后续步骤中将需要该命名空间。 + +### 配置 SMS 接收器 + +可以通过更新 ConfigMap 来配置 SMS 接收器。例如,以下是最小的 SMS 接收器配置: + +```yaml +providers: + telegram: + token: 'your-token-from-telegram' + +receivers: +- name: 'telegram-receiver-1' + provider: 'telegram' + to: + - '123456789' +``` + +配置完成后,按照[本节](#在-rancher-ui-中创建接收器)中的步骤添加接收器。 + +使用以下示例作为名称和 URL,其中: + +- 分配给接收器的名称(例如 `telegram-receiver-1`)必须与 ConfigMap 中 `receivers.name` 字段中的名称(例如 `telegram-receiver-1`)匹配。 +- 将 URL 中的 `ns-1` 替换为安装 `rancher-alerting-drivers` 应用的命名空间。 + +```yaml +name: telegram-receiver-1 +url http://rancher-alerting-drivers-sachet.ns-1.svc:9876/alert +``` + + + + +## 配置多个接收器 + +你可以编辑 Rancher UI 中的表单来设置一个接收器资源,其中包含 Alertmanager 将告警发送到你的通知系统所需的所有信息。 + +也可以向多个通知系统发送告警。一种方法是使用自定义 YAML 来配置接收器。如果你需要让两个系统接收相同的消息,则可以为多个通知系统添加配置。 + +你还可以通过使用路由的 `continue` 选项来设置多个接收器。这样,发送到接收器的告警会在路由树(可能包含另一个接收器)的下一级进行评估。 + + +## Alertmanager 配置示例 + +### Slack +要通过 Slack 设置通知,你可以将以下 Alertmanager Config YAML 放入 Alertmanager Config Secret 的 `alertmanager.yaml` 键中,你需要更新 `api_url` 来使用来自 Slack 的 Webhook URL: + +```yaml +route: + group_by: ['job'] + group_wait: 30s + group_interval: 5m + repeat_interval: 3h + receiver: 'slack-notifications' +receivers: +- name: 'slack-notifications' + slack_configs: + - send_resolved: true + text: '{{ template "slack.rancher.text" . }}' + api_url: +templates: +- /etc/alertmanager/config/*.tmpl +``` + +### PagerDuty +要通过 PagerDuty 设置通知,请使用 [PagerDuty 文档](https://www.pagerduty.com/docs/guides/prometheus-integration-guide/) 中的以下示例作为指导。此示例设置了一个路由,该路由捕获数据库服务的告警,并将告警发送到链接到服务的接收器,该服务将直接通知 PagerDuty 中的 DBA,而其他告警将被定向到具有不同 PagerDuty 集成密钥的默认接收器。 + +你可以将以下 Alertmanager Config YAML 放入 Alertmanager Config Secret 的 `alertmanager.yaml` 键中。你需要将 `service_key` 更新为使用你的 PagerDuty 集成密钥,可以根据 PagerDuty 文档的 "Integrating with Global Event Routing" 找到该密钥。有关配置选项的完整列表,请参阅 [Prometheus 文档](https://prometheus.io/docs/alerting/latest/configuration/#pagerduty_config)。 + +```yaml +route: + group_by: [cluster] + receiver: 'pagerduty-notifications' + group_interval: 5m + routes: + - match: + service: database + receiver: 'database-notifcations' + +receivers: +- name: 'pagerduty-notifications' + pagerduty_configs: + - service_key: 'primary-integration-key' + +- name: 'database-notifcations' + pagerduty_configs: + - service_key: 'database-integration-key' +``` + +## CIS 扫描告警的示例路由配置 + +在为 `rancher-cis-benchmark` 告警配置路由时,你可以使用键值对 `job:rancher-cis-scan` 来指定匹配。 + +例如,以下路由配置示例可以与名为 `test-cis` 的 Slack 接收器一起使用: + +```yaml +spec: + receiver: test-cis + group_by: +# - string + group_wait: 30s + group_interval: 30s + repeat_interval: 30s + match: + job: rancher-cis-scan +# key: string + match_re: + {} +# key: string +``` + +有关为 `rancher-cis-benchmark` 启用告警的更多信息,请参阅[本节](../../pages-for-subheaders/cis-scan-guides.md#为-rancher-cis-benchmark-启用告警)。 + + +## Notifiers 的可信 CA + +如果你需要将受信任的 CA 添加到 Notifiers,请按照[本节](helm-chart-options.md#notifiers-的可信-ca)中的步骤操作。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/monitoring-v2-configuration/routes.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/monitoring-v2-configuration/routes.md new file mode 100644 index 00000000000..4f769bb8849 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/monitoring-v2-configuration/routes.md @@ -0,0 +1,93 @@ +--- +title: 路由配置 +shortTitle: 路由 +weight: 5 +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +路由(Route)配置是 Alertmanager 自定义资源的一部分,用于控制 Prometheus 触发的告警在到达接收器之前的分组和过滤方式。 + +当路由更改时,Prometheus Operator 会重新生成 Alertmanager 自定义资源以反映更改。 + +有关配置路由的更多信息,请参阅[官方 Alertmanager 文档](https://www.prometheus.io/docs/alerting/latest/configuration/#route)。 + +:::note + +本节参考假设你已经熟悉 Monitoring 组件的协同工作方式。有关详细信息,请参阅[本节](../../explanations/integrations-in-rancher/monitoring-and-alerting/how-monitoring-works.md)。 + +::: + + + +## 路由限制 + +Alertmanager 根据接收器和路由树来代理 Prometheus 的告警,该路由树根据标签将告警过滤到指定接收器。 + +Alerting Drivers 为 Alertmanager 将告警代理到非原生接收器,例如 Microsoft Teams 和 SMS。 + +在配置路由和接收器的 Rancher UI 中,你可以配置有一个根的路由树,然后再配置一个深度,这样的树就有两个深度。但是如果在直接配置 Alertmanager 时使用 `continue` 路由,你可以让树更深。 + +每个接收器用于一个或多个通知提供商。因此,如果你需要将发送到 Slack 的每个告警也发送到 PagerDuty,你可以在同一个接收器中配置两者。 + +## 路由配置 + +### 标签和注释的注意事项 + +标签用于识别可能影响通知路由的信息。告警的标识信息可能包括容器名称,或应接收通知的团队的名称。 + +注释用于标识不影响告警接收者的信息,例如 Runbook URL 或错误消息。 + + +### 接收器 +路由需要引用一个已经配置好的[接收器](#接收器配置)。 + +### 分组 + + + + +:::note + +从 Rancher 2.6.5 开始,`分组依据`开始接受字符串列表而不是键值对。有关详细信息,请参阅[上游文档](https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/api.md#route)。 + +::: + +| 字段 | 默认 | 描述 | +|-------|--------------|---------| +| 分组依据 | N/A | 用于分组的标签列表。标签不得重复(在列表内)。如果提供了特殊标签“...”(由所有可能的标签聚合),标签必须在列表中是唯一的元素。 | +| 组等待时长 | 30s | 在发送之前,缓冲同一组告警的等待时间。 | +| 组间隔 | 5m | 等待多长时间才发送已添加到告警组的告警,其中该告警组的初次通知已被发送。 | +| 重复间隔 | 4h | 等待多长时间后,才重新发送已发送的告警。 | + + + + +| 字段 | 默认 | 描述 | +|-------|--------------|---------| +| 分组依据 | N/A | 将传入告警进行分组的标签。例如,`[ group_by: '[' , ... ']' ]`。针对 `cluster=A` 和 `alertname=LatencyHigh` 等标签的多个告警可以批处理到一个组中。要按所有可能的标签进行聚合,请使用特殊值 `'...'` 作为唯一标签名称,如 `group_by: ['...']`。以 `...` 进行分组能有效地完全禁用聚合,并按原样传递所有告警。除非你的告警量非常低或者你的上游通知系统能执行分组,否则你不太需要这样做。 | +| 组等待时长 | 30s | 在发送之前,缓冲同一组告警的等待时间。 | +| 组间隔 | 5m | 等待多长时间才发送已添加到告警组的告警,其中该告警组的初次通知已被发送。 | +| 重复间隔 | 4h | 等待多长时间后,才重新发送已发送的告警。 | + + + + + + +### 匹配 + +**Match** 字段指一组相等匹配器,用于根据告警上定义的标签来识别要发送到指定路由的告警。在 Rancher UI 中添加键值对时,它们对应于以下格式的 YAML: + +```yaml +match: + [ : , ... ] +``` + +**Match Regex** 字段指一组正则表达式匹配器,用于根据在该告警上定义的标签来识别要发送到指定路由的告警。在 Rancher UI 中添加键值对时,它们对应于以下格式的 YAML: + +```yaml +match_re: + [ : , ... ] +``` diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/monitoring-v2-configuration/servicemonitors-and-podmonitors.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/monitoring-v2-configuration/servicemonitors-and-podmonitors.md new file mode 100644 index 00000000000..d4df82878e1 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/monitoring-v2-configuration/servicemonitors-and-podmonitors.md @@ -0,0 +1,35 @@ +--- +title: ServiceMonitor 和 PodMonitor 配置 +shortTitle: ServiceMonitor 和 PodMonitor +weight: 7 +--- + +ServiceMonitor 和 PodMonitor 都是伪 CRD,它们映射 Prometheus 自定义资源的抓取配置。 + +这些配置对象以声明方式指定 Prometheus 抓取指标的端点。 + +ServiceMonitor 比 PodMonitor 更常用,推荐用于大多数用例。 + +:::note + +本节参考假设你已经熟悉 Monitoring 组件的协同工作方式。有关 Alertmanager 的详细信息,请参阅[本节](../../explanations/integrations-in-rancher/monitoring-and-alerting/how-monitoring-works.md)。 + +::: + +### ServiceMonitor + +这个伪 CRD 映射到 Prometheus 自定义资源配置的一部分。它以声明方式指定应如何监控 Kubernetes 服务组。 + +创建 ServiceMonitor 时,Prometheus Operator 会更新 Prometheus 抓取配置,从而包含 ServiceMonitor 配置。然后 Prometheus 开始从 ServiceMonitor 中定义的端点抓取指标。 + +如果集群中的任何 Service 与 ServiceMonitor `selector` 字段中的标签匹配,则会根据 ServiceMonitor 指定的 `endpoints` 进行监控。有关可以指定的字段的更多信息,请查看 Prometheus Operator 的[规范](https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#servicemonitor)。 + +有关 ServiceMonitor 工作原理的更多信息,请参阅 [Prometheus Operator 文档](https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/user-guides/running-exporters.md)。 + +### PodMonitor + +这个伪 CRD 映射到 Prometheus 自定义资源配置的一部分。它以声明方式指定应如何监控 Pod 组。 + +创建 PodMonitor 时,Prometheus Operator 会更新 Prometheus 抓取配置,从而包含 PodMonitor 配置。然后 Prometheus 开始从 PodMonitor 中定义的端点抓取指标。 + +如果集群中的任何 Pod 与 PodMonitor `selector` 字段中的标签匹配,则会根据 PodMonitor 指定的 `podMetricsEndpoints` 进行监控。有关可以指定的字段的更多信息,请查看 Prometheus Operator 的[规范](https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#podmonitorspec)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/pipelines/concepts.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/pipelines/concepts.md new file mode 100644 index 00000000000..db7ed310634 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/pipelines/concepts.md @@ -0,0 +1,36 @@ +--- +title: 概念 +weight: 1 +--- + +本文解释与流水线相关的常见概念和术语。 + +- **流水线**: + + _流水线_ 是一个软件交付过程,它被分成不同的阶段和步骤。设置流水线可以帮助开发者快速高效地上线新软件。Rancher 支持给每个项目单独设置流水线。流水线基于特定的仓库。它定义了构建、测试和部署代码的过程。Rancher 使用的是[流水线即代码](https://jenkins.io/doc/book/pipeline-as-code/)模型。在源代码仓库中,流水线配置以流水线文件表示,文件名为 `.rancher-pipeline.yml` 或 `.rancher-pipeline.yaml`。 + +- **阶段**: + + 一个流水线阶段由多个步骤组成。阶段按照流水线文件中定义的顺序执行。一个阶段中的步骤是同时执行的。只有上一个阶段中的所有步骤都完成且没有失败时,下一个阶段才会开始。 + +- **步骤**: + + 流水线步骤在指定阶段内执行。如果一个步骤以 `0` 以外的代码退出,则该步骤失败了。如果某个步骤以此失败代码退出,则整个流水线将失败并终止。 + +- **工作空间**: + + 工作空间是所有流水线步骤共享的工作目录。在流水线开始时,源代码会被检出到工作空间。每个步骤的命令都会在工作空间中启动。在流水线执行期间,上一步骤的工件将在后续步骤中使用。工作目录是一个临时卷,将在流水线执行完成时使用 executor pod 进行清理。 + +通常,流水线阶段包括: + +- **Build**: + + 每次将代码签入仓库时,流水线都会自动克隆仓库并构建软件的新迭代。在整个过程中,软件通常通过自动化测试进行审查。 + +- **Publish**: + + 构建完成后,将构建 Docker 镜像并将其发布到 Docker 镜像仓库,或发布商店应用模板。 + +- **Deploy**: + + 发布工件后,你将发布你的应用,以便用户开始使用更新后的产品。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/pipelines/configure-persistent-data.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/pipelines/configure-persistent-data.md new file mode 100644 index 00000000000..103356e13fe --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/pipelines/configure-persistent-data.md @@ -0,0 +1,96 @@ +--- +title: 为流水线组件配置持久数据 +weight: 600 +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +默认情况下,流水线内部的 Docker 镜像仓库和 Minio 工作负载都使用临时卷。这是开箱即用的默认存储方式,能让测试变得更加便利。但如果运行 Docker 镜像仓库或 Minio 的节点出现故障,你将丢失构建镜像和构建日志。在大多数情况下,这不是太大的问题。如果你希望构建镜像和日志能够在节点故障中幸免于难,你可以让 Docker 镜像仓库和 Minio 使用持久卷。 + +本节假设你了解持久存储在 Kubernetes 中的工作原理。如需更多信息,请参阅[存储的工作原理](../../how-to-guides/advanced-user-guides/manage-clusters/create-kubernetes-persistent-storage/manage-persistent-storage/about-persistent-storage.md)。 + +:::note 先决条件(适用于 A 和 B): + +[持久卷](../../pages-for-subheaders/create-kubernetes-persistent-storage.md)必须在集群中可用。 + +::: + +### A. 为 Docker 镜像仓库配置持久数据 + +1. 点击 **☰ > 集群管理**。 +1. 选择你创建的集群,并点击 **Explore**。 +1. 点击**工作负载**。 + +1. 找到 `docker-registry` 工作负载并选择 **⋮ > 编辑**。 + +1. 滚动到**卷**部分并展开它。从底部的**添加卷**菜单中选择以下选项之一: + + - **添加卷 > 添加新的持久卷(声明)** + - **添加卷 > 使用已有的持久卷(声明)** + +1. 完成为内部 Docker 镜像仓库选择持久卷的表单。 + + + + 1. 输入卷声明的**名称**。 + 1. 选择一个卷声明**源**: + - 如果你选择**使用存储类来配置新持久卷**,请选择存储类并输入**容量**。 + - 如果你选择**使用已有的持久卷**,请从下拉列表中选择**持久卷**。 + 1. 从**自定义**中,选择卷的读/写访问权限。 + 1. 单击**定义**。 + + + + + 1. 输入卷声明的**名称**。 + 1. 从下拉列表中选择**持久卷声明**。 + 1. 从**自定义**中,选择卷的读/写访问权限。 + 1. 单击**定义**。 + + + + +1. 在**挂载点**字段中,输入 `/var/lib/registry`,这是 Docker 镜像仓库容器内的数据存储路径。 + +1. 点击**升级**。 + +### B. 为 Minio 配置持久数据 + +1. 点击 **☰ > 集群管理**。 +1. 选择你创建的集群,并点击 **Explore**。 +1. 点击**工作负载**。 +1. 转到 `minio` 工作负载并选择 **⋮ > 编辑**。 + +1. 滚动到**卷**部分并展开它。从底部的**添加卷**菜单中选择以下选项之一: + + - **添加卷 > 添加新的持久卷(声明)** + - **添加卷 > 使用已有的持久卷(声明)** + +1. 完成为内部 Docker 镜像仓库选择持久卷的表单。 + + + + 1. 输入卷声明的**名称**。 + 1. 选择一个卷声明**源**: + - 如果你选择**使用存储类来配置新持久卷**,请选择存储类并输入**容量**。 + - 如果你选择**使用已有的持久卷**,请从下拉列表中选择**持久卷**。 + 1. 从**自定义**中,选择卷的读/写访问权限。 + 1. 单击**定义**。 + + + + + 1. 输入卷声明的**名称**。 + 1. 从下拉列表中选择**持久卷声明**。 + 1. 从**自定义**中,选择卷的读/写访问权限。 + 1. 单击**定义**。 + + + + +1. 在**挂载点**字段中,输入 `/data`,这是 Minio 容器内的数据存储路径。 + +1. 点击**升级**。 + +**结果**:已为你的流水线组件配置了持久存储。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/pipelines/example-repositories.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/pipelines/example-repositories.md new file mode 100644 index 00000000000..72506bbfdf1 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/pipelines/example-repositories.md @@ -0,0 +1,90 @@ +--- +title: 示例仓库 +weight: 500 +--- + +Rancher 附带了几个示例仓库,你可以通过这些仓库来熟悉流水线(pipeline)。在生产环境中为你的仓库使用流水线之前,我们建议你先配置和测试与你的环境最相似的示例仓库。你可以把这个示例仓库用作沙盒来配置仓库和构建演示等。Rancher 包含以下示例仓库: + +- Go +- Maven +- php + +:::note 先决条件: + +- 示例仓库仅在你没有[配置版本控制提供商](../../how-to-guides/advanced-user-guides/manage-projects/ci-cd-pipelines.md)时可用。 +- 由于流水线应用已被弃用并替换为 Fleet,因此在使用流水线之前,你需要打开旧版功能的功能开关。 +- 请注意,我们不再支持 Kubernetes 1.21+ 中的流水线。 + + 1. 在左上角,单击 **☰ > 全局设置**。 + 1. 单击**功能开关**。 + 1. 转到`旧版应用 `功能开关并单击 **⋮ > 激活**。 + +::: + +要开始使用这些示例仓库: + +1. [启用示例仓库](#1-启用示例仓库) +2. [查看示例流水线](#2-查看示例流水线) +3. [运行示例流水线](#3-运行示例流水线) + +### 1. 启用示例仓库 + +默认情况下,示例流水线仓库是禁用的。你可以启用一个(或多个)示例仓库来测试流水线功能,并查看流水线的工作原理。 + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 转到要配置流水线的集群,然后单击 **Explore**。 +1. 在顶部导航栏的下拉菜单中,选择要配置流水线的项目。 +1. 在左侧导航栏中,单击**旧版应用 > 项目 > 流水线**。 +1. 在**流水线**选项卡中,单击**配置仓库**。 + + :::note + + 示例仓库仅在你尚未 fetch 你自己的仓库时显示。 + + ::: + +1. 单击某个示例仓库(例如 `https://github.com/rancher/pipeline-example-go.git`)的**启用**按钮。然后单击**完成**。 + +**结果**: + +- **流水线**选项卡中启用了示例仓库以使用流水线。 + +- 以下工作负载被部署到新命名空间: + + - `docker-registry` + - `jenkins` + - `minio` + +### 2. 查看示例流水线 + +启用示例仓库后,查看流水线的配置: + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 转到要配置流水线的集群,然后单击 **Explore**。 +1. 在顶部导航栏的下拉菜单中,选择要配置流水线的项目。 +1. 在左侧导航栏中,单击**旧版应用 > 项目 > 流水线**。 +1. 在**流水线**选项卡中,单击**配置仓库**。 +1. 找到示例仓库,然后选择 **⋮ > 编辑配置**。查看流水线有两种方式: +* **Rancher UI**:点击**编辑配置**或**查看/编辑 YAML** 以查看流水线的阶段和步骤。YAML 视图会显示 `./rancher-pipeline.yml` 文件。 + +### 3. 运行示例流水线 + +启用示例仓库后,运行流水线以查看其工作原理。 + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 转到要配置流水线的集群,然后单击 **Explore**。 +1. 在顶部导航栏的下拉菜单中,选择要配置流水线的项目。 +1. 在左侧导航栏中,单击**旧版应用 > 项目 > 流水线**。 +1. 在**流水线**选项卡中,转到流水线并选择 **⋮ > 运行**。 + + :::note + + 第一次运行流水线时,需要几分钟来拉取相关镜像并预置必要的流水线组件。 + + ::: + +**结果**:流水线已运行。你可以在日志中查看结果。 + +### 后续操作 + +有关为仓库设置流水线的详细信息,请[配置版本控制提供商](../../how-to-guides/advanced-user-guides/manage-projects/ci-cd-pipelines.md)、启用仓库并配置流水线。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/pipelines/example-yaml.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/pipelines/example-yaml.md new file mode 100644 index 00000000000..c0a79c21339 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/pipelines/example-yaml.md @@ -0,0 +1,72 @@ +--- +title: 示例 YAML 文件 +weight: 501 +--- + +你可以通过 UI 或使用仓库中的 YAML 文件(即 `.rancher-pipeline.yml` 或 `.rancher-pipeline.yaml`)配置流水线。 + +在[流水线配置参考](pipeline-configuration.md)中,我们提供了使用 Rancher UI 或 YAML 来配置每个功能的示例。 + +以下是一个完整的 `rancher-pipeline.yml` 示例,供想要直接使用的用户使用: + +```yaml +# 示例 +stages: + - name: Build something + # 阶段的条件 + when: + branch: master + event: [ push, pull_request ] + # 多个步骤并发运行 + steps: + - runScriptConfig: + image: busybox + shellScript: echo ${FIRST_KEY} && echo ${ALIAS_ENV} + # 在容器中为步骤设置环境变量 + env: + FIRST_KEY: VALUE + SECOND_KEY: VALUE2 + # 从项目密文中设置环境变量 + envFrom: + - sourceName: my-secret + sourceKey: secret-key + targetKey: ALIAS_ENV + - runScriptConfig: + image: busybox + shellScript: date -R + # 步骤条件 + when: + branch: [ master, dev ] + event: push + - name: Publish my image + steps: + - publishImageConfig: + dockerfilePath: ./Dockerfile + buildContext: . + tag: rancher/rancher:v2.0.0 + # 可选择推送到远端镜像仓库 + pushRemote: true + registry: reg.example.com + - name: Deploy some workloads + steps: + - applyYamlConfig: + path: ./deployment.yaml +# 流水线的分支条件 +branch: + include: [ master, feature/*] + exclude: [ dev ] +# 以分钟为单位的超时 +timeout: 30 +notification: + recipients: + - # Recipient + recipient: "#mychannel" + # Notifier 的 ID + notifier: "c-wdcsr:n-c9pg7" + - recipient: "test@example.com" + notifier: "c-wdcsr:n-lkrhd" + # 选择发送通知的条件 + condition: ["Failed", "Success", "Changed"] + # 覆盖默认消息(可选) + message: "my-message" +``` diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/pipelines/pipeline-configuration.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/pipelines/pipeline-configuration.md new file mode 100644 index 00000000000..1d6da18a33e --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/pipelines/pipeline-configuration.md @@ -0,0 +1,634 @@ +--- +title: 流水线配置参考 +weight: 1 +--- + +在本文中,你将学习如何配置流水线。 + + +## 步骤类型 + +在每个阶段中,你都可以添加任意数量的步骤。一个阶段中的多个步骤会并发运行。 + +步骤类型包括: + +- [运行脚本](#步骤类型:运行脚本) +- [构建和发布镜像](#步骤类型:构建和发布镜像) +- [发布商店应用模板](#步骤类型:发布商店应用模板) +- [部署 YAML](#步骤类型:部署-yaml) +- [部署商店应用](#步骤类型:部署商店应用) + + + +### 通过 UI 配置步骤 + +如果你还没有添加任何阶段,请单击**为此分支配置流水线**以在 UI 中配置流水线。 + +1. 通过单击**添加阶段**将阶段添加到流水线执行中。 + + 1. 输入流水线中各个阶段的**名称**。 + 1. 你可以单击**显示高级选项**来配置[触发阶段的规则](#触发器和触发器规则)。注意,你之后还可以更新它们。 + +1. 创建阶段后,单击**添加步骤**来开始[添加步骤](#步骤类型)。你可以向每个阶段添加多个步骤。 + +### 通过 YAML 配置步骤 + +你可以在每个阶段中添加多个步骤。如需了解如何配置 YAML,请阅读每个[步骤类型](#步骤类型)和高级选项的更多信息。以下是一个小示例,说明如何配置多个阶段,其中各个阶段中都只有一个步骤: + +```yaml +# 示例 +stages: + - name: Build something + # 阶段的条件 + when: + branch: master + event: [ push, pull_request ] + # 多个步骤并发运行 + steps: + - runScriptConfig: + image: busybox + shellScript: date -R + - name: Publish my image + steps: + - publishImageConfig: + dockerfilePath: ./Dockerfile + buildContext: . + tag: rancher/rancher:v2.0.0 + # 可选择推送到远端镜像仓库 + pushRemote: true + registry: reg.example.com +``` +# 步骤类型:运行脚本 + +**运行脚本**步骤用于在指定容器内的工作空间中执行命令。你可以根据基础镜像提供的实用程序,使用这个步骤来构建、测试,以及执行更多其他操作。为方便起见,你可以使用变量来引用流水线执行的元数据。有关可用变量的列表,请参阅[流水线变量替换参考](#流水线变量替换参考)。 + +### 通过 UI 配置脚本 + +1. 从**步骤类型**下拉列表中,选择**运行脚本**并填写表单。 + +1. 单击**添加**。 + +### 通过 YAML 配置脚本 +```yaml +# 示例 +stages: +- name: Build something + steps: + - runScriptConfig: + image: golang + shellScript: go build +``` +## 步骤类型:构建和发布镜像 + +**构建和发布镜像**步骤用于构建并发布 Docker 镜像。此步骤需要源代码仓库中的 Dockerfile。 + +UI 中不提供将镜像发布到不安全镜像仓库的选项。但你可以在 YAML 中指定一个环境变量,从而将镜像发布到不安全的镜像仓库。 + +### 通过 UI 配置镜像的构建和发布 +1. 从**步骤类型**下拉菜单中,选择**构建和发布**。 + +1. 完成表单的剩余部分。下面列出了每个字段的说明。完成后,请单击**添加**。 + + | 字段 | 描述 | + ---------|----------| + | Dockerfile 路径 | 源代码仓库中 Dockerfile 的相对路径。如果 Dockerfile 位于根目录,则默认路径为 `./Dockerfile`。你可以在不同用例中将其设置为其他路径(例如 `./path/to/myDockerfile`)。 | + | 镜像名称 | `name:tag` 格式的镜像名称。不需要填写镜像仓库地址。例如,如果要构建 `example.com/repo/my-image:dev`,请输入 `repo/my-image:dev`。 | + | 将镜像推送到远端仓库 | 设置用于发布已构建的镜像的镜像仓库。要使用此选项,请启用它并从下拉列表中选择一个镜像仓库。如果禁用此选项,则将镜像推送到内部镜像仓库。 | + | 构建上下文

(**显示高级选项**) | 默认是源代码的根目录 (`.`)。有关更多详细信息,请参阅 Docker [构建命令文档](https://docs.docker.com/engine/reference/commandline/build/)。 | + +### 通过 YAML 配置镜像的构建和发布 + +你可以为 Docker daemon 和构建使用特定参数。UI 中没有开放这些参数,但你能以流水线 YAML 格式配置这些参数,如下例所示。可用的环境变量包括: + +| 变量名称 | 描述 | +------------------------|------------------------------------------------------------ +| PLUGIN_DRY_RUN | 禁用 Docker push | +| PLUGIN_DEBUG | Docker daemon 在调试模式下执行 | +| PLUGIN_MIRROR | Docker daemon 镜像仓库 mirror | +| PLUGIN_INSECURE | Docker daemon 允许不安全的镜像仓库 | +| PLUGIN_BUILD_ARGS | Docker 构建参数(逗号分隔的列表) | + +
+ +```yaml +# 此示例展示了在"推送镜像"步骤中使用的环境变量。 +# 此变量允许你 +# 将镜像发布到不安全的镜像仓库: + +stages: +- name: Publish Image + steps: + - publishImageConfig: + dockerfilePath: ./Dockerfile + buildContext: . + tag: repo/app:v1 + pushRemote: true + registry: example.com + env: + PLUGIN_INSECURE: "true" +``` + +## 步骤类型:发布商店应用模板 + +**发布商店应用模板**步骤将商店应用模板的版本(即 Helm Chart)发布到 Git 托管的镜像仓库。它生成一个 Git commit 并将其推送到你的 chart 仓库。要让这个步骤成功完成,需要源代码仓库中的 Chart 文件夹和专用流水线命名空间中的预配置密文。Chart 文件夹中的任何文件都支持[流水线变量替换参考](#流水线变量替换参考)中的变量。 + +### 通过 UI 配置发布商店应用的模板 + +1. 从**步骤类型**下拉菜单中,选择**发布商店应用模板**。 + +1. 完成表单的剩余部分。下面列出了每个字段的说明。完成后,请单击**添加**。 + + | 字段 | 描述 | + ---------|----------| + | Chart 文件夹 | `Chart.yaml` 文件所在的源代码仓库中, chart 文件夹的相对路径。 | + | 商店应用模板名称 | 模板的名称。例如,wordpress。 | + | 商店应用模板版本 | 你要发布的模板版本,应该和 `Chart.yaml` 文件中定义的版本一致。 | + | 协议 | 可以选择使用 HTTP(S) 或 SSH 协议发布。 | + | 密文 | 存储 Git 凭证的密文。在添加此步骤之前,你需要在项目的专用流水线命名空间中创建一个密文。如果你使用 HTTP(S) 协议,请将 Git 用户名和密码存储在密文的 `USERNAME` 和 `PASSWORD` 键中。如果你使用 SSH 协议,请将 Git 部署密钥存储在密文的 `DEPLOY_KEY` 中。创建密文后,在此选项中选择它。 | + | Git URL | 用于发布模板的 chart 仓库的 Git URL。 | + | Git 分支 | 用于发布模板的 chart 仓库的 Git 分支。 | + | 提交者姓名 | Commit 消息中使用的提交者姓名。 | + | 提交者邮箱 | Commit 消息中使用的提交者邮箱。 | + + +### 通过 YAML 配置发布商店应用的模板 + +你可以直接在 `.rancher-pipeline.yml` 文件中添加**发布商店应用模板**步骤。 + +在 `steps` 中,使用 `publishCatalogConfig` 添加一个步骤。你需要提供以下信息: + +* Path:`Chart.yaml` 文件所在的源代码仓库中, chart 文件夹的相对路径。 +* CatalogTemplate:模板的名称。 +* Version:你要发布的模板版本,应该和 `Chart.yaml` 文件中定义的版本一致。 +* GitUrl:用于发布模板的 chart 仓库的 Git URL。 +* GitBranch:用于发布模板的 chart 仓库的 Git 分支。 +* GitAuthor:Commit 消息中使用的提交者姓名。 +* GitEmail:Commit 消息中使用的提交者邮箱。 +* Credentials:需要通过引用专用流水线命名空间中的密文来提供 Git 凭证。如果你使用 SSH 协议进行发布,请将部署密钥保存在 `DEPLOY_KEY` 环境变量中。如果你使用 HTTP(S) 协议进行发布,请将你的用户名和密码保存在 `USERNAME` 和 `PASSWORD` 环境变量中。 + +```yaml +# 示例 +stages: +- name: Publish Wordpress Template + steps: + - publishCatalogConfig: + path: ./charts/wordpress/latest + catalogTemplate: wordpress + version: ${CICD_GIT_TAG} + gitUrl: git@github.com:myrepo/charts.git + gitBranch: master + gitAuthor: example-user + gitEmail: user@example.com + envFrom: + - sourceName: publish-keys + sourceKey: DEPLOY_KEY +``` + +## 步骤类型:部署 YAML + +此步骤将任意 Kubernetes 资源部署到项目中。此部署需要 Kubernetes 清单文件存在于源代码仓库中。清单文件中支持流水线变量替换。你可以在 [GitHub](https://github.com/rancher/pipeline-example-go/blob/master/deployment.yaml) 中查看​​示例文件。有关可用变量的列表,请参阅[流水线变量替换参考](#流水线变量替换参考)。 + +### 通过 UI 配置 YAML 的部署 + +1. 从**步骤类型**下拉列表中,选择**部署 YAML** 并填写表单。 + +1. 输入 **YAML 路径**,即源代码中清单文件的路径。 + +1. 单击**添加**。 + +### 通过 YAML 配置 YAML 的部署 + +```yaml +# 示例 +stages: +- name: Deploy + steps: + - applyYamlConfig: + path: ./deployment.yaml +``` + +## 步骤类型:部署商店应用 + +**部署商店应用**步骤用于在项目中部署商店应用。如果应用不存在,则将安装一个新应用,或升级现有应用。 + +### 通过 UI 配置商店应用的部署 + +1. 从**步骤类型**下拉菜单中,选择**部署商店应用**。 + +1. 完成表单的剩余部分。下面列出了每个字段的说明。完成后,请单击**添加**。 + + | 字段 | 描述 | + ---------|----------| + | 目录 | 将使用应用模板的商店应用。 | + | 模板名称 | 应用模板的名称。例如,wordpress。 | + | 模板版本 | 要部署的应用模板的版本。 | + | 命名空间 | 要部署应用的目标命名空间。 | + | 应用名称 | 要部署的应用的名称。 | + | 答案 | 用于部署应用的答案的键值对。 | + + +### 通过 YAML 配置商店应用的部署 + +你可以直接在 `.rancher-pipeline.yml` 文件中添加**部署商店应用**步骤。 + +在 `steps` 中,使用 `applyAppConfig` 添加一个步骤。你需要提供以下信息: + +* CatalogTemplate:模板的 ID。你可以单击`启动应用`,并选择该应用的`查看详情`来找到 ID。它是 URL 的最后一部分。 +* Version:要部署的模板的版本。 +* Answers:用于部署应用的答案的键值对。 +* Name:要部署的应用的名称。 +* TargetNamespace:要部署应用的目标命名空间。 + +```yaml +# 示例 +stages: +- name: Deploy App + steps: + - applyAppConfig: + catalogTemplate: cattle-global-data:library-mysql + version: 0.3.8 + answers: + persistence.enabled: "false" + name: testmysql + targetNamespace: test +``` + +## 超时 + +默认情况下,每个流水线执行的超时时间为 60 分钟。如果流水线执行无法在超时期限内完成,则流水线将中止。 + +### 通过 UI 配置超时 + +在**超时**字段中输入所需的值。 + +### 通过 YAML 配置超时 + +在 `timeout` 中,输入超时值(以分钟为单位)。 + +```yaml +# 示例 +stages: + - name: Build something + steps: + - runScriptConfig: + image: busybox + shellScript: ls +# 以分钟为单位的超时 +timeout: 30 +``` + +## 通知 + +你可以根据流水线的构建状态,启用对通知器的通知。在启用通知之前,Rancher 建议你先设置通知器,以便立即添加收件人。 + +### 通过 UI 配置通知 + +1. 在**通知**中,单击**启用**以打开通知。 + +1. 选择通知的条件。你可以选择接收以下状态的通知:`失败`、`成功`或`已更改`。例如,如果你想在执行失败时接收通知,请选择**失败**。 + +1. 如果你没有现有的通知器,Rancher 会提示未设置通知器的警告,并显示跳转到通知器页面的链接。你可以按照[说明](../../../versioned_docs/version-2.0-2.4/explanations/integrations-in-rancher/notifiers.md)添加通知器。如果你已经有通知器,你可以单击**添加收件人**按钮,将他们添加到通知中。 + + :::note + + 通知器是在集群级别配置的,需要不同级别的权限。 + + ::: + +1. 在下拉列表中为每个收件人选择通知器类型。根据通知器的类型,你可以使用默认收件人或覆盖收件人。例如,如果你有 _Slack_ 通知器,你可以更新通知发送的频道。你可以通过单击**添加收件人**来添加其他通知。 + +### 通过 YAML 配置通知 + +在 `notification` 中,你需要提供以下信息: + +* **Recipients**:接收通知的通知器/收件人的列表。 + * **Notifier**:通知器的 ID。你可以先找到通知器,并选择**在 API 中查看**来获取 ID。 + * **Recipient**:根据通知器的类型,你可以使用“默认收件人”,或使用不同的收件人来覆盖默认收件人。例如,在配置 slack 通知器时,你选择一个频道作为默认收件人,但如果你想将通知发送到不同的频道,你也可以选择不同的收件人。 +* **Condition**:发送通知的条件。 +* **Message(可选)**:如果你想更改默认通知消息,你可以在 yaml 中进行编辑。注意:此选项在 UI 中不可用。 + +```yaml +# 示例 +stages: + - name: Build something + steps: + - runScriptConfig: + image: busybox + shellScript: ls +notification: + recipients: + - # Recipient + recipient: "#mychannel" + # Notifier 的 ID + notifier: "c-wdcsr:n-c9pg7" + - recipient: "test@example.com" + notifier: "c-wdcsr:n-lkrhd" + # 选择发送通知的条件 + condition: ["Failed", "Success", "Changed"] + # 覆盖默认消息(可选) + message: "my-message" +``` + +## 触发器和触发器规则 + +配置流水线后,你可以使用不同的方法触发它: + +- **手动**: + + 配置流水线后,你可以使用 Rancher UI 中的最新 CI 定义来触发构建。流水线执行被触发后,Rancher 会动态配置一个 Kubernetes pod 来运行你的 CI 任务,然后在完成后将该 Pod 移除。 + +- **自动**: + + 为流水线启用仓库后,Webhook 会自动添加到版本控制系统中。当项目用户通过推送代码、新建 PR 或创建标签与仓库交互时,版本控制系统会向 Rancher Server 发送一个 webhook,从而触发流水线执行。 + + 要使用此自动化,仓库需要 webhook 管理权限。因此,当用户进行身份验证并 fetch 仓库时,只会显示他们具有 webhook 管理权限的仓库。 + +你可以创建触发规则,从而对流水线配置中的流水线执行进行细粒度控制。触发规则有两种: + +- **Run this when**:在触发器被显式触发时,此类规则将启动流水线、阶段或步骤。 + +- **Do Not Run this when**:当触发器被显式触发时,这类规则会跳过流水线、阶段或步骤。 + +如果所有条件都评估为 `true`,则执行流水线/阶段/步骤。否则将会跳过。跳过流水线时,不会执行任何流水线。如果一个阶段/步骤被跳过了,它会被认为是成功的,而且后续阶段/步骤会继续运行。 + +`branch` 条件支持通配符 (`*`) 扩展。 + +### 配置流水线触发器 + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 转到要配置流水线的集群,然后单击 **Explore**。 +1. 在顶部导航栏的下拉菜单中,选择要配置流水线的项目。 +1. 在左侧导航栏中,单击**旧版应用 > 项目 > 流水线**。 +1. 在要管理触发器规则的仓库中,选择 **⋮ > 编辑配置**。 +1. 点击**显示高级选项**。 +1. 在**触发器**中,配置规则以运行或跳过流水线。 + + 1. 单击**添加规则**。在**值**字段中,输入触发流水线的分支名称。 + + 1. **可选**:添加更多触发构建的分支。 + +1. 单击**完成**。 + +### 配置阶段触发器 + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 转到要配置流水线的集群,然后单击 **Explore**。 +1. 在顶部导航栏的下拉菜单中,选择要配置流水线的项目。 +1. 在左侧导航栏中,单击**旧版应用 > 项目 > 流水线**。 +1. 在要管理触发器规则的仓库中,选择 **⋮ > 编辑配置**。 +1. 找到要用于管理触发规则的**阶段**,单击该阶段的**编辑**图标。 +1. 单击**显示高级选项**。 +1. 在**触发器**中,配置规则以运行或跳过阶段。 + + 1. 单击**添加规则**。 + + 1. 选择触发阶段的**类型**并输入一个值。 + + | 类型 | 值 | + | ------ | -------------------------------------------------------------------- | + | 分支 | 触发阶段的分支名称。 | + | 事件 | 触发阶段的事件类型。可选值为 `Push`,`Pull Request` 和 `Tag`。 | + +1. 单击**保存**。 + +### 配置步骤触发器 + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 转到要配置流水线的集群,然后单击 **Explore**。 +1. 在顶部导航栏的下拉菜单中,选择要配置流水线的项目。 +1. 在左侧导航栏中,单击**旧版应用 > 项目 > 流水线**。 +1. 在要管理触发器规则的仓库中,选择 **⋮ > 编辑配置**。 +1. 找到要用于管理触发规则的**步骤**,单击该步骤的**编辑**图标。 +1. 单击**显示高级选项**。 +1. 在**触发器**中,配置规则以运行或跳过步骤。 + + 1. 单击**添加规则**。 + + 1. 选择触发步骤的**类型**并输入一个值。 + + | 类型 | 值 | + | ------ | -------------------------------------------------------------------- | + | 分支 | 触发步骤的分支名称。 | + | 事件 | 触发步骤的事件类型。可选值为 `Push`,`Pull Request` 和 `Tag`。 | + +1. 单击**保存**。 + + +### 通过 YAML 配置触发器 + +```yaml +# 示例 +stages: + - name: Build something + # 阶段的条件 + when: + branch: master + event: [ push, pull_request ] + # 多个步骤并发运行 + steps: + - runScriptConfig: + image: busybox + shellScript: date -R + # 步骤条件 + when: + branch: [ master, dev ] + event: push +# 流水线的分支条件 +branch: + include: [ master, feature/*] + exclude: [ dev ] +``` + +## 环境变量 + +配置流水线时,某些[步骤类型](#步骤类型)会允许你使用环境变量来配置步骤的脚本。 + +### 通过 UI 配置环境变量 + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 转到要配置流水线的集群,然后单击 **Explore**。 +1. 在顶部导航栏的下拉菜单中,选择要配置流水线的项目。 +1. 在左侧导航栏中,单击**旧版应用 > 项目 > 流水线**。 +1. 找到要编辑构建触发器的流水线,然后选择 **⋮ > 编辑配置**。 +1. 在其中一个阶段中,找到要为其添加环境变量的**步骤**,然后单击**编辑**图标。 +1. 单击**显示高级选项**。 +1. 单击**添加变量**,然后在出现的字段中输入键和值。根据需要添加更多的变量。 +1. 将你的环境变量添加到脚本或文件中。 +1. 单击**保存**。 + +### 通过 YAML 配置环境变量 + +```yaml +# 示例 +stages: + - name: Build something + steps: + - runScriptConfig: + image: busybox + shellScript: echo ${FIRST_KEY} && echo ${SECOND_KEY} + env: + FIRST_KEY: VALUE + SECOND_KEY: VALUE2 +``` + +## 密文 + +如果你需要在流水线脚本中使用安全敏感信息(如密码),你可以使用 Kubernetes [密文](../../how-to-guides/new-user-guides/kubernetes-resources-setup/secrets.md)来传入这些信息。 + +### 先决条件 +在与流水线相同的项目中创建一个密文,或者在运行流水线构建 pod 的命名空间中显式创建一个密文。 +
+ +:::note + +[PR 事件](#触发器和触发器规则)中的密文传入是禁用的。 + +::: + +### 通过 UI 配置密文 + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 转到要配置流水线的集群,然后单击 **Explore**。 +1. 在顶部导航栏的下拉菜单中,选择要配置流水线的项目。 +1. 在左侧导航栏中,单击**旧版应用 > 项目 > 流水线**。 +1. 找到要编辑构建触发器的流水线,然后选择 **⋮ > 编辑配置**。 +1. 在其中一个阶段中,找到要使用密文的**步骤**,然后单击**编辑**图标。 +1. 单击**显示高级选项**。 +1. 单击**使用密文添加**。选择要使用的密文文件。然后选择密钥。或者,你也可以输入密钥的别名。 +1. 单击**保存**。 + +### 通过 YAML 配置密文 + +```yaml +# 示例 +stages: + - name: Build something + steps: + - runScriptConfig: + image: busybox + shellScript: echo ${ALIAS_ENV} + # 来自项目密文的环境变量 + envFrom: + - sourceName: my-secret + sourceKey: secret-key + targetKey: ALIAS_ENV +``` + +## 流水线变量替换参考 + +为了方便你的使用,我们提供了以下在流水线配置脚本中可以使用的变量。在流水线执行期间,这些变量会被元数据替换。你可以使用 `${VAR_NAME}` 格式引用这些变量。 + +| 变量名称 | 描述 | +------------------------|------------------------------------------------------------ +| `CICD_GIT_REPO_NAME` | 仓库名称(省略 GitHub 组织)。 | +| `CICD_GIT_URL` | Git 仓库的 URL。 | +| `CICD_GIT_COMMIT` | 正在执行的 Git commit ID。 | +| `CICD_GIT_BRANCH` | 此事件的 Git 分支。 | +| `CICD_GIT_REF` | 此事件的 Git 参考规范。 | +| `CICD_GIT_TAG` | Git 标签名称,在标签事件上设置。 | +| `CICD_EVENT` | 触发构建的事件(`push`、`pull_request` 或 `tag`)。 | +| `CICD_PIPELINE_ID` | 流水线的 Rancher ID。 | +| `CICD_EXECUTION_SEQUENCE` | 流水线的生成号(build number)。 | +| `CICD_EXECUTION_ID` | `{CICD_PIPELINE_ID}-{CICD_EXECUTION_SEQUENCE}` 的组合。 | +| `CICD_REGISTRY` | 上一个发布镜像步骤的 Docker 镜像仓库地址,可在`部署 YAML` 步骤的 Kubernetes 清单文件中找到。 | +| `CICD_IMAGE` | 上一个发布镜像步骤构建的镜像的名称,可在 `Deploy YAML` 步骤的 Kubernetes 清单文件中找到。不包含镜像标签。

[示例](https://github.com/rancher/pipeline-example-go/blob/master/deployment.yaml) | + +## 全局流水线执行设置 + +配置版本控制提供商后,你可以在 Rancher 中全局配置流水线的几个执行选项。 + +### 更改流水线设置 + +:::note 先决条件: + +由于流水线应用已被弃用并替换为 Fleet,因此在使用流水线之前,你需要打开旧版功能的功能开关。请注意,我们不再支持 Kubernetes 1.21+ 中的流水线。 + +1. 在左上角,单击 **☰ > 全局设置**。 +1. 单击**功能开关**。 +1. 转到`旧版应用 `功能开关并单击 **⋮ > 激活**。 + +::: + +要编辑这些设置: + +1. 在左上角,单击 **☰ > 集群管理**。 +1. 转到要配置流水线的集群,然后单击 **Explore**。 +1. 在顶部导航栏的下拉菜单中,选择要配置流水线的项目。 +1. 在左侧导航栏中,单击**旧版应用 > 项目 > 流水线**。 + +- [Executor 配额](#executor-配额) +- [Executor 的资源配额](#executor-的资源配额) +- [自定义 CA](#自定义-ca) + +### Executor 配额 + +选择流水线 Executor 的最大数量。_executor 配额_ 决定了项目中可以同时运行多少个构建。如果触发的构建数量超过配额,后续构建将排队并等待空缺。默认情况下,配额为 `2`。如果配置为 `0` 或更小的值,则表示删除配额限制。 + +### Executor 的资源配额 + +为 Jenkins Agent 容器配置计算资源。当触发流水线执行时,会动态配置构建 pod 以运行你的 CI 任务。在底层,一个构建 pod 由一个 Jenkins Agent 容器和一个用于各个流水线步骤的容器组成。你可以为 pod 中的每个容器[管理计算资源](https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/)。 + +编辑**内存预留**、**内存限制**、**CPU 预留**或 **CPU 限制**,然后点击**更新限制和预留**。 + +要为流水线步骤容器配置计算资源: + +你可以在 `.rancher-pipeline.yml` 文件中为流水线步骤容器配置计算资源。 + +在步骤中,你需要提供以下信息: + +* **CPU 预留 (`CpuRequest`)**:对流水线步骤的容器的 CPU 请求。 +* **CPU 预留 (`CpuRequest`)**:对流水线步骤的容器的 CPU 限制。 +* **内存预留 (`MemoryRequest`)**:对流水线步骤的容器的内存请求。 +* **内存限制(`MemoryLimit`)**:对流水线步骤的容器的内存限制。 + +```yaml +# 示例 +stages: + - name: Build something + steps: + - runScriptConfig: + image: busybox + shellScript: ls + cpuRequest: 100m + cpuLimit: 1 + memoryRequest:100Mi + memoryLimit: 1Gi + - publishImageConfig: + dockerfilePath: ./Dockerfile + buildContext: . + tag: repo/app:v1 + cpuRequest: 100m + cpuLimit: 1 + memoryRequest:100Mi + memoryLimit: 1Gi +``` + +:::note + +Rancher 为流水线步骤设置了默认计算资源(`构建和发布镜像`和`运行脚本`步骤除外)。你可以通过指定计算资源来覆盖默认值。 + +::: + +### 自定义 CA + +如果你想将版本控制提供商与自定义/内部 CA 根证书一起使用,则需要将 CA 根证书添加到版本控制提供商的配置中,从而让流水线构建 pod 成功运行。 + +1. 单击**编辑证书**。 + +1. 粘贴 CA 根证书并单击**保存 CA 证书**。 + +**结果**:你现在可以使用流水线,而且新的 pod 将能够使用自签名证书。 + +# 流水线组件的持久化数据 + +默认情况下,内部 Docker 镜像仓库和 Minio 工作负载都使用临时卷。这是开箱即用的默认存储方式,能让测试变得更加便利。但如果运行 Docker 镜像仓库或 Minio 的节点出现故障,你将丢失构建镜像和构建日志。在大多数情况下,这不是太大的问题。如果你希望构建镜像和日志能够在节点故障中幸免于难,你可以让 Docker 镜像仓库和 Minio 使用持久卷。 + +有关为流水线设置持久存储的详细信息,请参阅[此页面](configure-persistent-data.md)。 + +## 示例 rancher-pipeline.yml + +如果你需要查看示例流水线配置文件,请参见[此页面](example-yaml.md)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/prometheus-federator/rbac.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/prometheus-federator/rbac.md new file mode 100644 index 00000000000..013e1778dc1 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/prometheus-federator/rbac.md @@ -0,0 +1,33 @@ +--- +title: RBAC +shortTitle: RBAC +weight: 2 +--- + +本文介绍 Prometheus Federator RBAC。 + +如[命名空间](../../pages-for-subheaders/prometheus-federator.md#命名空间)部分所述,Prometheus Federator 期望集群中具有项目级别权限(例如,具有由单个标签选择器确定的命名空间组的权限)的项目所有者、项目成员和其他用户,除了项目 Registration 命名空间(默认导入到项目中)和那些已经包含其项目的命名空间之外,在任何其他命名空间中都只有最低权限。因此,为了让项目所有者将特定 Chart 权限分配给其项目命名空间中的其他用户,Helm Project Operator 将自动监视以下绑定: + +- ClusterRoleBindings +- 项目发布命名空​​间中的 RoleBindings + +如果 Helm Project Operator 观察到其中一种绑定的更改,Helm Project Operator 会检查绑定指向的 `roleRef` 是否与具有以下名称的 ClusterRole 匹配: + +- `helmProjectOperator.releaseRoleBindings.clusterRoleRefs.admin` +- `helmProjectOperator.releaseRoleBindings.clusterRoleRefs.edit` +- `helmProjectOperator.releaseRoleBindings.clusterRoleRefs.view` + +默认情况下,这些 roleRef 分别对应 `admin`、`edit` 和 `view`,它们都是 [Kubernetes 面向用户的默认角色](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#user-facing-roles)。 + +:::note + +对于 Rancher RBAC 用户,这些 [Kubernetes 面向用户的默认角色](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#user-facing-roles)与`项目所有者`、`项目成员`和`只读`默认项目角色模板直接对应。 + +::: + +如果 `roleRef` 匹配,Helm Project Operator 将为所有用户和组过滤绑定的 `subjects`,并使用它为项目 Release 命名空间中的每个角色自动构造一个 RoleBinding,该 RoleBinding 的名称与角色相同并带有以下标签: + +- `helm.cattle.io/project-helm-chart-role: {{ .Release.Name }}` +- `helm.cattle.io/project-helm-chart-role-aggregate-from: ` + +默认情况下,Prometheus Federator 部署的底层 Chart `rancher-project-monitoring` 会为每个项目发布命名空​​间创建三个默认角色,这些角色能授权 `admin`、`edit` 和 `view` 用户查看项目监控堆栈的 Prometheus、Alertmanager 和 Grafana UI,从而提供最低权限。如果集群管理员想要为某些用户分配额外的权限,一种做法是直接将项目 Release 命名空间中的 RoleBinding 分配给某些用户。另一种做法是创建带有上述两个标签的角色,然后,项目所有者可以控制在项目 Registration 命名空间中分配这些 RBAC 角色的用户。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/rancher-cluster-tools.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/rancher-cluster-tools.md new file mode 100644 index 00000000000..7beed00180c --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/rancher-cluster-tools.md @@ -0,0 +1,49 @@ +--- +title: 集群工具:Logging,Monitoring 和可视化 +weight: 2033 +--- + +Rancher 包含 Kubernetes 中未包含的各种工具来协助你进行 DevOps 操作。Rancher 可以与外部服务集成,让你的集群更高效地运行。工具分为以下几类: + + +## Logging + +Logging 支持: + +- 获取和分析集群的状态 +- 在你的环境中发现趋势 +- 将日志保存到集群外部的安全位置 +- 随时了解容器崩溃、pod 驱逐或节点死亡等事件 +- 更轻松地调试和解决问题 + +Rancher 可以与 Elasticsearch、splunk、kafka、syslog 和 fluentd 集成。 + +有关详细信息,请参阅 [Logging 文档](../pages-for-subheaders/logging.md)。 +## 监控和告警 + +你可以使用 Rancher,通过业界领先并开源的 [Prometheus](https://prometheus.io/) 来监控集群节点、Kubernetes 组件和软件部署的状态和进程。 + +启用监控后,你可以通过设置告警和通知器来配置接收告警的机制。 + +通知器是通知你告警事件的服务。你可以通过配置通知器来向最适合采取纠正措施的员工发送告警通知。支持使用 Slack、电子邮件、PagerDuty、微信和 webhook 发送通知。 + +告警是触发这些通知的规则。在接收告警之前,你必须在 Rancher 中配置一个或多个通知器。你可以在集群或项目级别设置告警范围。 + +如需更多信息,请参阅[监控文档](../pages-for-subheaders/monitoring-and-alerting.md)。 + +## Istio + +[Istio](https://istio.io/) 是一种开源工具,可以让 DevOps 团队更轻松地观察、控制、排查并保护复杂的微服务网络中的流量。 + +Rancher v2.5 改进了与 Istio 的集成。 + +如需更多信息,请参阅 [Istio 文档](../pages-for-subheaders/istio.md)。 +## OPA Gatekeeper + +[OPA Gatekeeper](https://github.com/open-policy-agent/gatekeeper) 是一个开源项目,它对 OPA 和 Kubernetes 进行了集成,以通过许可控制器 Webhook 提供策略控制。有关如何在 Rancher 中启用 Gatekeeper 的详细信息,请参阅 [OPA Gatekeeper](../explanations/integrations-in-rancher/opa-gatekeeper.md)。 + +## CIS 扫描 + +Rancher 可以通过运行安全扫描来检查 Kubernetes 是否按照 CIS Kubernetes Benchmark 中定义的安全最佳实践进行部署。 + +如需更多信息,请参阅 [CIS 扫描文档](../pages-for-subheaders/cis-scan-guides.md)。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/rancher-manager-architecture/architecture-recommendations.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/rancher-manager-architecture/architecture-recommendations.md new file mode 100644 index 00000000000..15c3148b8fb --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/rancher-manager-architecture/architecture-recommendations.md @@ -0,0 +1,104 @@ +--- +title: 架构推荐 +weight: 3 +--- + +如果你准备在单个节点上安装 Rancher,我们推荐你[分开部署 Rancher 与下游集群](#分开部署-rancher-与下游集群)。 + +# 分开部署 Rancher 与下游集群 + +下游集群,是运行你自己的应用和服务的下游 Kubernetes 集群。 + +如果你通过 Docker 安装了 Rancher,运行 Rancher Server 的节点应该与你的下游集群分开。 + +如果你需要使用 Rancher 管理下游 Kubernetes 集群,那么运行 Rancher Server 的 Kubernetes 集群也应该与下游集群分开。 + +![分开部署 Rancher Server 与下游集群](/img/rancher-architecture-separation-of-rancher-server.svg) + +# 为什么高可用(HA)更适合生产环境中的 Rancher + +我们建议在高可用 Kubernetes 集群上安装 Rancher Server,以保护 Rancher Server 的数据。在高可用安装中,负载均衡器充当客户端的单点入口,并在集群中的多台服务器之间分配网络流量,这有助于防止任何一台服务器成为单点故障。 + +我们不建议在单个 Docker 容器中安装 Rancher,因为如果该节点发生故障,则其他节点上将没有可用的集群数据副本,并且你可能会丢失 Rancher Server 上的数据。 + +### K3s Kubernetes 集群安装 + +底层 Kubernetes 集群的一种选择是使用 K3s Kubernetes。K3s 是 Rancher CNCF 认证的 Kubernetes 发行版。K3s 易于安装,仅需要 Kubernetes 内存的一半,所有组件都在一个小于 100 MB 的二进制文件中。K3s 的另一个优点是允许外部 Datastore 保存集群数据,因此可以把 K3s 服务器节点视为无状态。 + +
运行 Rancher Management Server 的 K3s Kubernetes 集群架构
+![运行 Rancher Management Server 的 K3s Kubernetes 集群的架构](/img/k3s-server-storage.svg) + +### RKE Kubernetes 集群安装 + +在 RKE 安装中,集群数据在集群中的三个 etcd 节点上复制,以在某个节点发生故障时提供冗余和进行数据复制。 + +
运行 Rancher Management Server 的 RKE Kubernetes 集群的架构
+![运行 Rancher Management Server 的 RKE Kubernetes 集群的架构](/img/rke-server-storage.svg) + +# Kubernetes 安装的负载均衡器推荐配置 + +我们建议你为负载均衡器和 Ingress Controller 使用以下配置: + +* 把 Rancher 的 DNS 解析到四层负载均衡器上。 +* 负载均衡器应该把 TCP/80 端口和 TCP/443 端口的流量转发到 Kubernetes 集群的全部 3 个节点上。 +* Ingress Controller 会把 HTTP 重定向到 HTTPS,在 TCP/443 端口终结 SSL/TLS。 +* Ingress Controller 会把流量转发到 Rancher deployment 的 Pod 上的 TCP/80 端口。 + +
在 Kubernetes 集群中安装 Rancher,并使用四层负载均衡器,SSL 终止在 Ingress Controller 中
+![Rancher HA](/img/ha/rancher2ha.svg) + +# Kubernetes 安装环境 + +我们强烈建议你把 Rancher 安装到托管在云提供商(如 AWS EC2 和 Google Compute Engine(GCE)等)上的 Kubernetes 集群上。 + +为了达到最佳性能和安全性,我们建议你为 Rancher Management Server 创建一个专用的 Kubernetes 集群。不建议在此集群上运行用户工作负载。部署 Rancher 后,你可以[创建或导入集群](../../pages-for-subheaders/kubernetes-clusters-in-rancher-setup.md)来运行你的工作负载。 + +# Kubernetes 安装的推荐节点角色 + +如果 Rancher 安装在 K3s Kubernetes 或 RKE Kubernetes 集群上,以下建议适用。 + +### K3s 集群角色 + +在 K3s 集群中有两种类型的节点,分别是 Server 节点和 Agent 节点。你可以把工作负载调度到 Server 节点和 Agent 节点上。Server 节点运行 Kubernetes master。 + +对于运行 Rancher Management Server 的集群,我们建议使用两个 server 节点。不需要 Agent 节点。 + +### RKE 集群角色 + +如果 Rancher 安装在 RKE Kubernetes 集群上,该集群应具有三个节点,并且每个节点都应具有所有三个 Kubernetes 角色,分别是 etcd,controlplane 和 worker。 + +### Rancher Server 和下游 Kubernetes 集群的 RKE 集群架构对比 + +我们对 Rancher Server 集群上 RKE 节点角色建议,与对运行你的应用和服务的下游集群的建议相反。 + +在配置下游 Kubernetes 集群时,Rancher 使用 RKE 作为创建下游 Kubernetes 集群的工具。注意:Rancher 将在未来的版本中添加配置下游 K3s 集群的功能。 + +我们建议下游 Kubernetes 集群中的每个节点都只分配一个角色,以确保稳定性和可扩展性。 + +![Rancher Server 集群中和下游集群中节点的 Kubernetes 角色对比](/img/rancher-architecture-node-roles.svg) + +RKE 每个角色至少需要一个节点,但并不强制每个节点只能有一个角色。但是,我们建议为运行应用的集群中的每个节点,使用单独的角色,以保证在服务拓展时,worker 节点上的工作负载不影响 Kubernetes master 或集群的数据。 + +以下是我们对下游集群的最低配置建议: + +- **三个仅使用 etcd 角色的节点** ,以在三个节点中其中一个发生故障时,仍能保障集群的高可用性。 +- **两个只有 controlplane 角色的节点** ,以保证 master 组件的高可用性。 +- **一个或多个只有 worker 角色的节点**,用于运行 Kubernetes 节点组件,以及你部署的服务或应用的工作负载。 + +在设置 Rancher Server 时,在三个节点上使用全部这三个角色也是安全的,因为: + +* 它允许一个 `etcd` 节点故障。 +* 它通过多个 `controlplane` 节点来维护 master 组件的多个实例。 +* 此集群上没有创建除 Rancher 之外的其他工作负载。 + +由于 Rancher Server 集群中没有部署其他工作负载,因此在大多数情况下,这个集群都不需要使用我们出于可扩展性和可用性的考虑,而为下游集群推荐的架构。 + +有关下游集群的最佳实践,请查看[生产环境清单](../../pages-for-subheaders/checklist-for-production-ready-clusters.md)或[最佳实践](../../pages-for-subheaders/best-practices.md)。 + +# 授权集群端点架构 + +如果你使用[授权集群端点(ACE)](../../pages-for-subheaders/rancher-manager-architecture.md#4-授权集群端点),我们建议你创建一个指向负载均衡器的 FQDN,这个负载均衡器把流量转到所有角色为 `controlplane` 的节点。 + +如果你在负载均衡器上使用了私有 CA 签发的证书,你需要提供 CA 证书,这个证书会包含在生成的 kubeconfig 文件中,以校验证书链。详情请参见 [kubeconfig 文件](../../how-to-guides/advanced-user-guides/manage-clusters/access-clusters/use-kubectl-and-kubeconfig.md)和 [API 密钥](../user-settings/api-keys.md#创建-api-密钥)的相关文档。 + +在 Rancher 2.6.3 中,注册的 RKE2 和 K3s 集群可以使用 ACE 支持。点击[这里](../../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/register-existing-clusters.md#对-rke2-和-k3s-集群的授权集群端点支持)了解在下游集群中开启 ACE 的步骤。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/rancher-manager-architecture/communicating-with-downstream-user-clusters.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/rancher-manager-architecture/communicating-with-downstream-user-clusters.md new file mode 100644 index 00000000000..e83d49737ea --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/rancher-manager-architecture/communicating-with-downstream-user-clusters.md @@ -0,0 +1,132 @@ +--- +title: 与下游集群通信 +--- + +本节介绍 Rancher 如何配置和管理运行应用和服务的下游集群。 + +下图显示了 Cluster Controller、Cluster Agent 和 Node Agent 让 Rancher 控制下游集群的。 + +
与下游集群通信
+ +![Rancher 组件](/img/rancher-architecture-cluster-controller.svg) + +以下描述对应于上图中的数字: + +1. [认证代理](#1-认证代理) +2. [Cluster Controller 和 Cluster Agent](#2-cluster-controller-和-cluster-agent) +3. [Node Agents](#3-node-agents) +4. [授权集群端点](#4-授权集群端点) + +### 1. 认证代理 + +在此图中,名为 Bob 的用户希望查看在名为 User Cluster 1 的下游集群上运行的所有 Pod。在 Rancher 中,他可以运行 `kubectl` 命令来查看 +Pod。Bob 通过 Rancher 的认证代理进行身份验证。 + +认证代理将所有 Kubernetes API 调用转发到下游集群。它集成了本地身份验证、Active Directory 和 GitHub 等身份验证方式。在每个 Kubernetes API 调用请求时,认证代理会验证请求方的身份,并在转发给 Kubernetes master 节点之前,设置正确的 Kubernetes 消息头。 + +Rancher 使用 [ServiceAccount](https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/) 与 Kubernetes 集群通信,该 ServiceAccount 为在 Pod 中运行的进程提供身份。 + +默认情况下,Rancher 生成一个 [kubeconfig 文件](../../how-to-guides/advanced-user-guides/manage-clusters/access-clusters/use-kubectl-and-kubeconfig.md),文件包含凭证信息,用于为 Rancher Server 连接下游集群的 Kubernetes API Server 的代理。kubeconfig 文件 (`kube_config_rancher-cluster.yml`) 包含对集群的完全访问权限。 + +### 2. Cluster Controller 和 Cluster Agent + +每个下游集群都有一个 Cluster Agent,用于打开与 Rancher Server 中对应的 Cluster Controller 之间的通道。 + +每个下游集群有一个 Cluster Controller 和一个 Cluster Agent。每个 Cluster Controller 都能: + +- 检测下游集群中的资源变化 +- 将下游集群的当前状态变更到目标状态 +- 配置集群和项目的访问控制策略 +- 通过调用所需的 Docker Machine 驱动和 Kubernetes 引擎(例如 RKE 和 GKE)来配置集群 + +默认情况下,Cluster Controller 连接到 Cluster Agent,Rancher 才能与下游集群通信。如果 Cluster Agent 不可用,Cluster Controller 可以连接到 [Node Agent](#3-node-agents)。 + +Cluster Agent,也叫做 `cattle-cluster-agent`,是运行在下游集群中的组件。它具有以下功能: + +- 连接 Rancher 启动的 Kubernetes 集群中的 Kubernetes API。 +- 管理集群内的工作负载,pod 创建和部署。 +- 根据每个集群的全局策略,应用定义的角色和绑定。 +- 通过与 Cluster Controller 之间的通道,实现集群和 Rancher Server 之间的通信,包括事件,统计数据,节点信息和健康状况。 + +### 3. Node Agents + +如果 Cluster Agent(也称为 `cattle-cluster-agent`)不可用,其中一个 Node Agent 会创建一个连接到 Cluster Controller 的通道与 Rancher 通信。 + +`cattle-node-agent` 使用 [DaemonSet](https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/) 资源进行部署,以确保它能在 Rancher 启动的 Kubernetes 集群中的每个节点上运行,用于在执行集群操作时与节点交互。集群操作的包括升级 Kubernetes 版本,创建或恢复 etcd 快照等。 + +### 4. 授权集群端点 + +授权集群端点(ACE)可连接到下游集群的 Kubernetes API Server,而不用通过 Rancher 认证代理调度请求。 + +> 授权集群端点仅适用于 Rancher 启动的 Kubernetes 集群,即只适用于 Rancher [使用 RKE](../../pages-for-subheaders/launch-kubernetes-with-rancher.md) 来配置的集群。它不适用于导入的集群,也不适用于托管在 Kubernetes 提供商中的集群(例如 Amazon 的 EKS)。 + +授权集群端点的主要用途: + +- 在 Rancher 不可用时访问下游集群 +- 在 Rancher Server 和与下游集群之间相距甚远时降低延迟 + +`kube-api-auth` 微服务为授权集群端点提供用户验证功能。当使用 `kubectl`访问下游集群时,集群的 Kubernetes API Server 使用 `kube-api-auth` 服务作为 webhook 对用户进行身份验证。 + +与授权集群端点一样,`kube-api-auth` 的身份验证功能也仅适用于 Rancher 启动的 Kubernetes 集群。 + +> **示例场景:** 假设 Rancher Server 位于美国,User Cluster 1 与用户 Alice 均位于澳大利亚。Alice 可以使用 Rancher UI 操作 User Cluster 1 中的资源,但她的请求必须从澳大利亚发送到美国的 Rancher Server,然后通过代理返回澳大利亚,即下游集群所在的位置。地理距离可能导致明显延迟,因此,Alice 可以使用授权集群端点来降低延迟。 + +为下游集群启用授权集群端点后,Rancher 会在 kubeconfig 文件中额外生成一段 Kubernetes 上下文,用于直连到集群。该文件具有 `kubectl` 和 `helm`的凭证。 + +如果 Rancher 出现问题,你需要使用此 kubeconfig 文件中定义的上下文来访问集群。因此,我们建议你导出 kubeconfig 文件,以便在 Rancher 出现问题时,仍能使用文件中的凭证访问集群。详情请参见使用 [kubectl 和 kubeconfig 文件](../../how-to-guides/advanced-user-guides/manage-clusters/access-clusters/use-kubectl-and-kubeconfig.md)访问集群的章节。 + +# 重要文件 + +维护、排除问题和升级集群需要用到以下文件,请妥善保管这些文件: + +- `rancher-cluster.yml`:RKE 集群配置文件。 +- `kube_config_rancher-cluster.yml`:集群的 Kubeconfig 文件,包含完全访问集群的凭证。如果 Rancher 出现问题时,你可以使用此文件认证由 Rancher 启动的 Kubernetes 集群。 +- `rancher-cluster.rkestate`:Kubernetes 集群状态文件,文件包含用于完全访问集群的凭证。注意:仅在使用 RKE v0.2.0 或更高版本时,才会创建此该文件。 + +> **注意**:后两个文件名中的 `rancher-cluster` 部分取决于你命名 RKE 集群配置文件的方式。 + +有关在没有 Rancher 认证代理和其他配置选项的情况下连接到集群的更多信息,请参见 [kubeconfig 文件](../../how-to-guides/advanced-user-guides/manage-clusters/access-clusters/use-kubectl-and-kubeconfig.md)。 + +# 配置 Kubernetes 集群的工具 + +Rancher 使用什么工具配置下游集群,取决于集群的类型。 + +### Rancher 为托管在云提供商中的节点启动 Kubernetes + +Rancher 可以动态启动云上(如 Amazon EC2、DigitalOcean、Azure 或 vSphere 等)的节点,然后在节点上安装 Kubernetes。 + +Rancher 使用 [RKE](https://github.com/rancher/rke) 和 [docker-machine](https://github.com/rancher/machine) 来配置这类型的集群。 + +### Rancher 为自定义节点启动 Kubernetes + +在配置此类集群时,Rancher 会在现有节点上安装 Kubernetes,从而创建自定义集群。 + +Rancher 使用 [RKE](https://github.com/rancher/rke) 来启动此类集群。 + +### 托管的 Kubernetes 提供商 + +配置此类集群时,Kubernetes 由云提供商安装,如 GKE、ECS 或 AKS 等。 + +Rancher 使用 [kontainer-engine](https://github.com/rancher/kontainer-engine) 配置此类型的集群。 + +### 导入的 Kubernetes 集群 + +这种情况下,Rancher 需要连接到一个设置好的 Kubernetes 集群。因此,Rancher 不提供 Kubernetes,只设置 Rancher Agent 实现与集群通信。 + +# Rancher Server 组件和源码 + +下图展示了 Rancher Server 的组件: + +![Rancher 组件](/img/rancher-architecture-rancher-components.svg) + +Rancher 的 GitHub 代码仓库如下: + +- [Rancher Server 主代码库](https://github.com/rancher/rancher) +- [Rancher UI](https://github.com/rancher/ui) +- [Rancher API UI](https://github.com/rancher/api-ui) +- [Norman](https://github.com/rancher/norman)(Rancher 的 API 框架) +- [类型](https://github.com/rancher/types) +- [Rancher CLI](https://github.com/rancher/cli) +- [应用商店](https://github.com/rancher/helm) + +以上仅列出部分 Rancher 最重要的仓库。详情请参见[参与 Rancher 开源贡献](../../contribute-to-rancher.md#仓库)。如需获取 Rancher 使用的所有库和项目,请参见 `rancher/rancher` 仓库中的 [`go.mod` 文件](https://github.com/rancher/rancher/blob/master/go.mod)。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/rancher-manager-architecture/rancher-server-and-components.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/rancher-manager-architecture/rancher-server-and-components.md new file mode 100644 index 00000000000..41197981b0a --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/rancher-manager-architecture/rancher-server-and-components.md @@ -0,0 +1,25 @@ +--- +title: Rancher Server 和 Components +--- + +大多数 Rancher 2.x 软件均运行在 Rancher Server 上。Rancher Server 包括用于管理整个 Rancher 部署的所有软件组件。 + +下图展示了 Rancher 2.x 的上层架构。下图中,Rancher Server 管理两个下游 Kubernetes 集群,其中一个由 RKE 创建,另一个由 Amazon EKS 创建。 + +为了达到最佳性能和安全性,我们建议你为 Rancher Management Server 创建一个专用的 Kubernetes 集群。不建议在此集群上运行用户工作负载。部署 Rancher 后,你可以[创建或导入集群](../../pages-for-subheaders/kubernetes-clusters-in-rancher-setup.md)来运行你的工作负载。 + +下图介绍了用户如何通过 Rancher 的认证代理管理 [Rancher 启动的 Kubernetes](../../pages-for-subheaders/launch-kubernetes-with-rancher.md) 集群和[托管的 Kubernetes](../../pages-for-subheaders/set-up-clusters-from-hosted-kubernetes-providers.md) 集群: + +
通过 Rancher 的认证代理管理 Kubernetes 集群
+ +![架构](/img/rancher-architecture-rancher-api-server.svg) + +你可以把 Rancher 安装到单个节点或高可用 Kubernetes 集群上。 + +在生产环境中,建议安装到高可用 Kubernetes 集群。 + +Rancher 的 Docker 安装仅推荐用于开发和测试环境中。Rancher 版本决定了能否将 Rancher 迁移到高可用集群。 + +Rancher backup operator 可将 Rancher 从单个 Docker 容器迁移到高可用 Kubernetes 集群上。详情请参见[把 Rancher 迁移到新集群](../../how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/migrate-rancher-to-new-cluster.md)。 + +不管 Rancher Server 是如何安装的,它都应该运行在与其管理的下游集群不同节点上。如果 Rancher 安装在高可用的 Kubernetes 集群上,它需要运行在与其管理的集群不同的集群上。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/rancher-project-tools.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/rancher-project-tools.md new file mode 100644 index 00000000000..9158e8488b6 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/rancher-project-tools.md @@ -0,0 +1,33 @@ +--- +title: 项目工具:Logging,Monitoring 和可视化 +weight: 2525 +--- + +Rancher 包含 Kubernetes 中未包含的各种工具来协助你进行 DevOps 操作。Rancher 可以与外部服务集成,让你的集群更高效地运行。 + + +## Notifiers 和告警 + +通知器和告警是两个协同工作的功能,它们可以将 Rancher 系统中的事件告知你。在启用它们之前,你必须先安装监控应用。 + +通知器是通知你告警事件的服务。你可以通过配置通知器来向最适合采取纠正措施的员工发送告警通知。支持使用 Slack、电子邮件、PagerDuty、微信和 webhook 发送通知。 + +告警是触发这些通知的规则。在接收告警之前,你必须在 Rancher 中配置一个或多个通知器。你可以在集群或项目级别设置告警范围。 + +## Logging + +Logging 支持: + +- 获取和分析集群的状态 +- 在你的环境中发现趋势 +- 将日志保存到集群外部的安全位置 +- 随时了解容器崩溃、pod 驱逐或节点死亡等事件 +- 更轻松地调试和解决问题 + +Rancher 可以与 Elasticsearch、splunk、kafka、syslog 和 fluentd 集成。 + +有关详细信息,请参阅 [Logging](../pages-for-subheaders/logging.md)。 + +## Monitoring + +你可以使用 Rancher,通过业界领先并开源的 [Prometheus](https://prometheus.io/) 来监控集群节点、Kubernetes 组件和软件部署的状态和进程。有关详细信息,请参阅 [Monitoring](../pages-for-subheaders/monitoring-and-alerting.md)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/rancher-security/kubernetes-security-best-practices.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/rancher-security/kubernetes-security-best-practices.md new file mode 100644 index 00000000000..893a78dd830 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/rancher-security/kubernetes-security-best-practices.md @@ -0,0 +1,12 @@ +--- +title: Kubernetes 安全最佳实践 +weight: 5 +--- + +### 限制云元数据 API 访问 + +AWS、Azure、DigitalOcean 或 GCP 等云提供商通常会在本地向实例公开元数据服务。默认情况下,此端点可被运行在云实例上的 pod 访问,包括在托管的 Kubernetes(如 EKS、AKS、DigitalOcean Kubernetes 或 GKE)中的 pod,并且可以包含该节点的云凭证、配置数据(如 kubelet 凭证)以及其他敏感数据。为了降低在云平台上运行的这种风险,请遵循 [Kubernetes 安全建议](https://kubernetes.io/docs/tasks/administer-cluster/securing-a-cluster/#restricting-cloud-metadata-api-access),即限制授予实例凭证的权限,使用网络策略限制 pod 对元数据 API 的访问,并避免使用配置数据来传递密文。 + +建议你参阅你使用的云提供商的安全最佳实践,获取限制对云实例元数据 API 访问的建议和详情。 + +要获取更多参考资料,请参阅 MITRE ATT&CK 知识库 - [不安全凭证:云实例元数据 API](https://attack.mitre.org/techniques/T1552/005/)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/rancher-security/rancher-v2.6-hardening-guides/rke1-hardening-guide-with-cis-v1.6-benchmark.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/rancher-security/rancher-v2.6-hardening-guides/rke1-hardening-guide-with-cis-v1.6-benchmark.md new file mode 100644 index 00000000000..4b4673b7edb --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/rancher-security/rancher-v2.6-hardening-guides/rke1-hardening-guide-with-cis-v1.6-benchmark.md @@ -0,0 +1,647 @@ +--- +title: 使用 CIS 1.6 Benchmark 的 RKE 强化指南 +weight: 100 +aliases: + - /rancher/v2.6/en/security/hardening-guides/1.6-hardening-2.6/ +--- + +本文档提供了用于强化 RKE 集群(使用 Rancher 2.6 进行配置)生产安装的说明。此处概述了遵循 CIS 的 Kubernetes Benchmark 管控所需的配置和控制。 + +:::note + +本强化指南介绍了如何保护集群中的节点。建议你在安装 Kubernetes 之前参考本指南。 + +::: + +本强化指南适用于 RKE 集群,并对应以下 CIS Kubernetes Benchmark、Kubernetes 和 Rancher 版本: + +| Rancher 版本 | CIS Benchmark 版本 | Kubernetes 版本 | +| --------------- | --------------------- | ------------------ | +| Rancher v2.6 | Benchmark v1.6 | Kubernetes v1.18 到 v1.23 | + +[点击此处下载本文档的 PDF 版本](https://releases.rancher.com/documents/security/2.6/Rancher_v2-6_CIS_v1-6_Hardening_Guide.pdf)。 + + +### 概述 + +本文档介绍了强化 RKE 集群的说明,该集群使用 Kubernetes 1.18 至 1.23 版本安装 Rancher 2.6,或在 Rancher 2.6 中配置使用 Kubernetes 1.18 至 1.23 版本的 RKE 集群。此处概述了遵循 CIS 的 Kubernetes Benchmark 管控所需的配置。 + +有关根据官方 CIS Benchmark 评估强化集群的更多详细信息,请参阅 [CIS 1.6 Benchmark - 自我评估指南 - Rancher 2.6](./rke1-self-assessment-guide-with-cis-v1.6-benchmark.md)。 + +#### 已知问题 + +- 如果注册自定义节点时仅提供公共 IP,CIS 1.6 强化设置中用于 Pod 的 Rancher **exec shell** 和 **view logs** 将**不起作用**。此功能要求在注册自定义节点时提供私有 IP。 +- 如果把 `default_pod_security_policy_template_id:` 设置为 `restricted` 或 `restricted-noroot`,根据 Rancher 提供的 [Pod 安全策略 (PSP)](../../../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/create-pod-security-policies.md),Rancher 会在默认 ServiceAccount 上创建 **RoleBindings** 和 **ClusterRoleBindings**。CIS 1.6 检查 5.1.5 时会要求默认 ServiceAccount 除了默认值之外没有绑定到其他角色或集群角色。此外,你还需要配置默认 ServiceAccount,使其不提供 ServiceAccount 令牌并且没有显式分配任何权限。 + +### 配置内核运行时参数 + +建议为集群中所有类型的节点使用以下 `sysctl` 配置。在 `/etc/sysctl.d/90-kubelet.conf` 中设置如下参数: + +```ini +vm.overcommit_memory=1 +vm.panic_on_oom=0 +kernel.panic=10 +kernel.panic_on_oops=1 +kernel.keys.root_maxbytes=25000000 +``` + +运行 `sysctl -p /etc/sysctl.d/90-kubelet.conf` 以启用设置。 + +### 配置 `etcd` 用户和组 + +在安装 RKE 之前,你需要设置 **etcd** 服务的用户账号和组。在安装期间,**etcd** 用户的 **uid** 和 **gid** 将用于在 RKE **config.yml** 中设置适当的文件和目录权限。 + +#### 创建 `etcd` 用户和组 + +要创建 **etcd** 用户和组,请运行以下控制台命令。下面的命令使用 `52034` 作为 **uid** 和 **gid**。该值只是一个示例。你可以使用有效且未被使用的 **uid** 或 **gid** 来代替 `52034`。 + +```bash +groupadd --gid 52034 etcd +useradd --comment "etcd service account" --uid 52034 --gid 52034 etcd --shell /usr/sbin/nologin +``` + +使用 **etcd** 用户的 **uid** 和 **gid** 来更新 RKE **config.yml**: + +```yaml +services: + etcd: + gid: 52034 + uid: 52034 +``` + +### 配置 `default` ServiceAccount + +#### 将 `default` ServiceAccount 的 `automountServiceAccountToken` 设置为 `false` + +Kubernetes 为集群工作负载提供了一个 default ServiceAccount,但没有为 pod 分配特定 ServiceAccount。如果需要从 pod 访问 Kubernetes API,则需要为该 pod 创建一个特定的 ServiceAccount 并授予权限。你还需要配置 default ServiceAccount,使其不提供 ServiceAccount 令牌并且没有任何显式的权限分配。 + +对于标准 RKE 中的每个命名空间(包括 **default** 和 **kube-system**),**default** ServiceAccount 必须包含以下值: + +```yaml +automountServiceAccountToken: false +``` + +将以下配置保存到名为 `account_update.yaml` 的文件中: + +```yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + name: default +automountServiceAccountToken: false +``` + +创建一个名为 `account_update.sh` 的 bash 脚本文件。确保为脚本设置了 `chmod +x account_update.sh`,使脚本具有执行权限: + +```bash +#!/bin/bash -e + +for namespace in $(kubectl get namespaces -A -o=jsonpath="{.items[*]['metadata.name']}"); do + kubectl patch serviceaccount default -n ${namespace} -p "$(cat account_update.yaml)" +done +``` + +### 配置网络策略 + +#### 确保所有命名空间都定义了网络策略 + +如果你在同一个 Kubernetes 集群上运行不同的应用程序,被感染的应用程序可能会攻击相邻的应用程序。要确保容器只进行所需的通信,网络分段非常重要。网络策略指的是如何允许 Pod 与其他 Pod 以及与其他网络端点进行通信。 + +网络策略是命名空间范围的。为某个命名空间配置网络策略后,该策略不允许的所有其他流量都会被拒绝。但是,如果命名空间没有配置网络策略,则所有流量都会允许进出该命名空间中的 Pod。要执行网络策略,你必须启用 CNI(容器网络接口)插件。本指南使用 [Canal](https://github.com/projectcalico/canal) 来执行策略。有关 CNI 网络插件的更多信息,请参阅[这里](https://www.suse.com/c/rancher_blog/comparing-kubernetes-cni-providers-flannel-calico-canal-and-weave/)。 + +在集群上启用了 CNI 网络插件后,你就可以应用默认网络策略了。以下提供了一个供参考的 **permissive** 示例。如果要允许所有流量发送到命名空间中的所有 pod(即使添加了导致某些 pod 被“隔离”的策略),你可以显式创建一个策略来允许该命名空间中的所有流量。将以下配置保存为 `default-allow-all.yaml`。如需查看网络策略相关的其他[文档](https://kubernetes.io/docs/concepts/services-networking/network-policies/),请前往 Kubernetes 网站。 + +:::note + +此 `NetworkPolicy` 只是一个示例,不建议用于生产环境。 + +::: + +```yaml +--- +apiVersion: networking.k8s.io/v1 +kind: NetworkPolicy +metadata: + name: default-allow-all +spec: + podSelector: {} + ingress: + - {} + egress: + - {} + policyTypes: + - Ingress + - Egress +``` + +创建一个名为 `apply_networkPolicy_to_all_ns.sh` 的 bash 脚本文件。确保为脚本设置了 `chmod +x apply_networkPolicy_to_all_ns.sh`,使脚本具有执行权限: + +```bash +#!/bin/bash -e + +for namespace in $(kubectl get namespaces -A -o=jsonpath="{.items[*]['metadata.name']}"); do + kubectl apply -f default-allow-all.yaml -n ${namespace} +done +``` + +执行此脚本能将具有 **permissive** `NetworkPolicy` 的 `default-allow-all.yaml` 配置应用于所有命名空间。 + +### 强化 RKE `cluster.yml` 配置参考 + +RKE CLI 能使用 `cluster.yml` 配置参考,该文件提供了实现 Rancher Kubernetes Engine (RKE) 的强化安装所需的配置。RKE 的[安装文档](https://rancher.com/docs/rke/latest/en/installation/)介绍了有关配置项的其他详细信息。此 `cluster.yml` 参考不包括所需的 **nodes** 参数,该参数会因你的环境而异。如需查看 RKE 中节点配置的文档,请参阅[此处](https://rancher.com/docs/rke/latest/en/config-options/nodes/)。 + +:::note 重要提示: + +对于 Kubernetes 1.18 集群,请从 `PodSecurityPolicy` 中删除 `spec.volumes: 'ephemeral'` 配置,因为此 Kubernetes 版本不支持它。 + +::: + +```yaml +# 如果你打算在离线环境中部署 Kubernetes, +# 请查阅配置自定义 RKE 镜像的文档。 +# https://rancher.com/docs/rke/latest/en/installation/ + +# nodes 参数是必需的,并且会根据你的环境而有所不同。 +# 节点配置的文档可以在这里找到: +# https://rancher.com/docs/rke/latest/en/config-options/nodes/ +nodes: [] +services: + etcd: + image: "" + extra_args: {} + extra_binds: [] + extra_env: [] + win_extra_args: {} + win_extra_binds: [] + win_extra_env: [] + external_urls: [] + ca_cert: "" + cert: "" + key: "" + path: "" + uid: 52034 + gid: 52034 + snapshot: false + retention: "" + creation: "" + backup_config: null + kube-api: + image: "" + extra_args: {} + extra_binds: [] + extra_env: [] + win_extra_args: {} + win_extra_binds: [] + win_extra_env: [] + service_cluster_ip_range: "" + service_node_port_range: "" + pod_security_policy: true + always_pull_images: false + secrets_encryption_config: + enabled: true + custom_config: null + audit_log: + enabled: true + configuration: null + admission_configuration: null + event_rate_limit: + enabled: true + configuration: null + kube-controller: + image: "" + extra_args: + feature-gates: RotateKubeletServerCertificate=true + 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 + bind-address: 127.0.0.1 + extra_binds: [] + extra_env: [] + win_extra_args: {} + win_extra_binds: [] + win_extra_env: [] + cluster_cidr: "" + service_cluster_ip_range: "" + scheduler: + image: "" + extra_args: + 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 + bind-address: 127.0.0.1 + extra_binds: [] + extra_env: [] + win_extra_args: {} + win_extra_binds: [] + win_extra_env: [] + kubelet: + image: "" + extra_args: + feature-gates: RotateKubeletServerCertificate=true + protect-kernel-defaults: true + 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 + extra_binds: [] + extra_env: [] + win_extra_args: {} + win_extra_binds: [] + win_extra_env: [] + cluster_domain: cluster.local + infra_container_image: "" + cluster_dns_server: "" + fail_swap_on: false + generate_serving_certificate: true + kubeproxy: + image: "" + extra_args: {} + extra_binds: [] + extra_env: [] + win_extra_args: {} + win_extra_binds: [] + win_extra_env: [] +network: + plugin: "" + options: {} + mtu: 0 + node_selector: {} + update_strategy: null +authentication: + strategy: "" + sans: [] + webhook: null +addons: | + # Upstream Kubernetes restricted PSP policy + # https://github.com/kubernetes/website/blob/564baf15c102412522e9c8fc6ef2b5ff5b6e766c/content/en/examples/policy/restricted-psp.yaml + apiVersion: policy/v1beta1 + kind: PodSecurityPolicy + metadata: + name: restricted-noroot + spec: + privileged: false + # Required to prevent escalations to root. + allowPrivilegeEscalation: false + requiredDropCapabilities: + - ALL + # Allow core volume types. + volumes: + - 'configMap' + - 'emptyDir' + - 'projected' + - 'secret' + - 'downwardAPI' + # Assume that ephemeral CSI drivers & persistentVolumes set up by the cluster admin are safe to use. + - 'csi' + - 'persistentVolumeClaim' + - 'ephemeral' + hostNetwork: false + hostIPC: false + hostPID: false + runAsUser: + # Require the container to run without root privileges. + rule: 'MustRunAsNonRoot' + seLinux: + # This policy assumes the nodes are using AppArmor rather than SELinux. + rule: 'RunAsAny' + supplementalGroups: + rule: 'MustRunAs' + ranges: + # Forbid adding the root group. + - min: 1 + max: 65535 + fsGroup: + rule: 'MustRunAs' + ranges: + # Forbid adding the root group. + - min: 1 + max: 65535 + readOnlyRootFilesystem: false + --- + apiVersion: rbac.authorization.k8s.io/v1 + kind: ClusterRole + metadata: + name: psp:restricted-noroot + rules: + - apiGroups: + - extensions + resourceNames: + - restricted-noroot + resources: + - podsecuritypolicies + verbs: + - use + --- + apiVersion: rbac.authorization.k8s.io/v1 + kind: ClusterRoleBinding + metadata: + name: psp:restricted-noroot + roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: psp:restricted-noroot + subjects: + - apiGroup: rbac.authorization.k8s.io + kind: Group + name: system:serviceaccounts + - apiGroup: rbac.authorization.k8s.io + kind: Group + name: system:authenticated + --- + apiVersion: networking.k8s.io/v1 + kind: NetworkPolicy + metadata: + name: default-allow-all + spec: + podSelector: {} + ingress: + - {} + egress: + - {} + policyTypes: + - Ingress + - Egress + --- + apiVersion: v1 + kind: ServiceAccount + metadata: + name: default + automountServiceAccountToken: false +addons_include: [] +system_images: + etcd: "" + alpine: "" + nginx_proxy: "" + cert_downloader: "" + kubernetes_services_sidecar: "" + kubedns: "" + dnsmasq: "" + kubedns_sidecar: "" + kubedns_autoscaler: "" + coredns: "" + coredns_autoscaler: "" + nodelocal: "" + kubernetes: "" + flannel: "" + flannel_cni: "" + calico_node: "" + calico_cni: "" + calico_controllers: "" + calico_ctl: "" + calico_flexvol: "" + canal_node: "" + canal_cni: "" + canal_controllers: "" + canal_flannel: "" + canal_flexvol: "" + weave_node: "" + weave_cni: "" + pod_infra_container: "" + ingress: "" + ingress_backend: "" + metrics_server: "" + windows_pod_infra_container: "" +ssh_key_path: "" +ssh_cert_path: "" +ssh_agent_auth: false +authorization: + mode: "" + options: {} +ignore_docker_version: false +kubernetes_version: "" +private_registries: [] +ingress: + provider: "" + options: {} + node_selector: {} + extra_args: {} + dns_policy: "" + extra_envs: [] + extra_volumes: [] + extra_volume_mounts: [] + update_strategy: null + http_port: 0 + https_port: 0 + network_mode: "" +cluster_name: +cloud_provider: + name: "" +prefix_path: "" +win_prefix_path: "" +addon_job_timeout: 0 +bastion_host: + address: "" + port: "" + user: "" + ssh_key: "" + ssh_key_path: "" + ssh_cert: "" + ssh_cert_path: "" +monitoring: + provider: "" + options: {} + node_selector: {} + update_strategy: null + replicas: null +restore: + restore: false + snapshot_name: "" +dns: null +upgrade_strategy: + max_unavailable_worker: "" + max_unavailable_controlplane: "" + drain: null + node_drain_input: null +``` + +### 强化 RKE 模板配置参考 + +RKE 模板参考提供了实现 Kubernetes 强化安装所需的配置。RKE 模板用于配置 Kubernetes 和定义 Rancher 设置。如需了解安装以及 RKE 模板的详细信息,请参阅 Rancher [文档](../../../pages-for-subheaders/installation-and-upgrade.md)。 + +```yaml +# +# Cluster Config +# +default_pod_security_policy_template_id: restricted-noroot +docker_root_dir: /var/lib/docker +enable_cluster_alerting: false +enable_cluster_monitoring: false +enable_network_policy: true +local_cluster_auth_endpoint: + enabled: true +name: '' +# +# Rancher Config +# +rancher_kubernetes_engine_config: + addon_job_timeout: 45 + authentication: + strategy: x509 + dns: + nodelocal: + ip_address: '' + node_selector: null + update_strategy: {} + enable_cri_dockerd: false + ignore_docker_version: true +# +# # 目前仅支持 Nginx ingress provider +# # 要禁用 Ingress controller,设置 `provider: none` +# # 要在指定节点上禁用 Ingress,使用 node_selector,例如: +# provider: nginx +# node_selector: +# app: ingress +# + ingress: + default_backend: false + default_ingress_class: true + http_port: 0 + https_port: 0 + provider: nginx + kubernetes_version: v1.21.8-rancher1-1 + monitoring: + provider: metrics-server + replicas: 1 +# +# 如果你在 AWS 使用 Calico +# +# network: +# plugin: calico +# calico_network_provider: +# cloud_provider: aws +# +# # 要指定 Flannel 接口 +# +# network: +# plugin: flannel +# flannel_network_provider: +# iface: eth1 +# +# # 要为 Canal 插件指定 Flannel 接口 +# +# network: +# plugin: canal +# canal_network_provider: +# iface: eth1 +# + network: + mtu: 0 + options: + flannel_backend_type: vxlan + plugin: canal + rotate_encryption_key: false +# +# services: +# kube-api: +# service_cluster_ip_range: 10.43.0.0/16 +# kube-controller: +# cluster_cidr: 10.42.0.0/16 +# service_cluster_ip_range: 10.43.0.0/16 +# kubelet: +# cluster_domain: cluster.local +# cluster_dns_server: 10.43.0.10 +# + services: + scheduler: + extra_args: + 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 + bind-address: 127.0.0.1 + etcd: + backup_config: + enabled: true + interval_hours: 12 + retention: 6 + safe_timestamp: false + timeout: 300 + creation: 12h + extra_args: + election-timeout: 5000 + heartbeat-interval: 500 + retention: 72h + snapshot: false + uid: 52034 + gid: 52034 + kube_api: + always_pull_images: false + audit_log: + enabled: true + event_rate_limit: + enabled: true + pod_security_policy: true + secrets_encryption_config: + enabled: true + service_node_port_range: 30000-32767 + kube-controller: + extra_args: + feature-gates: RotateKubeletServerCertificate=true + 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 + bind-address: 127.0.0.1 + kubelet: + extra_args: + feature-gates: RotateKubeletServerCertificate=true + protect-kernel-defaults: true + 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 + fail_swap_on: false + generate_serving_certificate: true + ssh_agent_auth: false + upgrade_strategy: + max_unavailable_controlplane: '1' + max_unavailable_worker: 10% +windows_prefered_cluster: false +``` + +### 强化 `cloud-config` 配置参考 + +**cloud-config** 配置文件通常用于云基础设施环境中,能让你管理计算实例的配置。此参考 config 配置了安装 Kubernetes 之前所需的 SUSE Linux Enterprise Server (SLES)、openSUSE Leap、Red Hat Enterprise Linux (RHEL) 和 Ubuntu 操作系统级别的设置。 + +#### 针对 SUSE Linux Enterprise Server 15 (SLES 15) 和 openSUSE Leap 15 的强化 **cloud-config** 参考 + +```yaml +#cloud-config +system_info: + default_user: + groups: + - docker +write_files: +- path: "/etc/sysctl.d/90-kubelet.conf" + owner: root:root + permissions: '0644' + content: | + vm.overcommit_memory=1 + vm.panic_on_oom=0 + kernel.panic=10 + kernel.panic_on_oops=1 + kernel.keys.root_maxbytes=25000000 +package_update: true +ssh_pwauth: false +runcmd: +# Docker 应该已在 SLES 15 SP3 中安装 +- zypper install docker containerd +- systemctl daemon-reload +- systemctl enable docker.service +- systemctl start --no-block docker.service +- sysctl -p /etc/sysctl.d/90-kubelet.conf +- groupadd --gid 52034 etcd +- useradd --comment "etcd service account" --uid 52034 --gid 52034 etcd --shell /usr/sbin/nologin +``` + +#### 针对 Red Hat Enterprise Linux 8 (RHEL 8) 和 Ubuntu 20.04 LTS 的强化 **cloud-config** 参考 + +```yaml +#cloud-config +system_info: + default_user: + groups: + - docker +write_files: +- path: "/etc/sysctl.d/90-kubelet.conf" + owner: root:root + permissions: '0644' + content: | + vm.overcommit_memory=1 + vm.panic_on_oom=0 + kernel.panic=10 + kernel.panic_on_oops=1 + kernel.keys.root_maxbytes=25000000 +package_update: true +ssh_pwauth: false +runcmd: +# 使用 Rancher 的 Docker 安装脚本来安装 Docker - github.com/rancher/install-docker +- curl https://releases.rancher.com/install-docker/20.10.sh | sh +- sysctl -p /etc/sysctl.d/90-kubelet.conf +- groupadd --gid 52034 etcd +- useradd --comment "etcd service account" --uid 52034 --gid 52034 etcd --shell /usr/sbin/nologin +``` diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/rancher-security/rancher-v2.6-hardening-guides/rke1-self-assessment-guide-with-cis-v1.6-benchmark.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/rancher-security/rancher-v2.6-hardening-guides/rke1-self-assessment-guide-with-cis-v1.6-benchmark.md new file mode 100644 index 00000000000..833b0f1677f --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/rancher-security/rancher-v2.6-hardening-guides/rke1-self-assessment-guide-with-cis-v1.6-benchmark.md @@ -0,0 +1,2956 @@ +--- +title: RKE CIS 1.6 Benchmark - 自我评估指南 - Rancher 2.6 +weight: 101 +aliases: + - /rancher/v2.6/en/security/hardening-guides/1.6-benchmark-2.6/ +--- + +### RKE CIS 1.6 Kubernetes Benchmark - Rancher 2.6 与 Kubernetes 1.18 到 1.23 + +[点击此处下载本文档的 PDF 版本](https://releases.rancher.com/documents/security/2.6/Rancher_v2-6_CIS_v1-6_Benchmark_Assessment.pdf)。 + +#### 概述 + +本文档是 [Rancher 2.6 RKE 安全强化指南](rke1-hardening-guide-with-cis-v1.6-benchmark.md)的配套文件。强化指南(Hardening Guide)为 Rancher 的强化生产安装提供了说明,本 Benchmark 指南旨在帮助你根据 Benchmark 来评估强化集群的安全级别。 + +本指南对应以下强化指南、Rancher、CIS Benchmark 和 Kubernetes 版本: + +| 强化指南版本 | Rancher 版本 | CIS Benchmark 版本 | Kubernetes 版本 | +| ----------------------- | --------------- | --------------------- | ------------------- | +| 强化指南 CIS v1.6 Benchmark | Rancher v2.6 | CIS v1.6 | Kubernetes v1.18 到 v1.23 | + +由于 Rancher 和 RKE 将 Kubernetes 服务安装为 Docker 容器,因此 CIS Kubernetes Benchmark 中的许多管控验证检查都不适用,且结果会是 `Not Applicable`。本指南将介绍各种管控,并提供更新的示例命令来审核 Rancher 创建的集群的合规性。 + +本文档供 Rancher 开发、安全团队、审计员和决策者使用。 + +有关各个审核的更多详细信息,包括失败测试的理由和修正措施,你可以参考 CIS Kubernetes Benchmark v1.6 的对应内容。创建免费帐户后,你可以在 [Center for Internet Security (CIS)](https://www.cisecurity.org/benchmark/kubernetes/) 下载 Benchmark。 + +#### 测试管控方法 + +Rancher 和 RKE 通过 Docker 容器来安装 Kubernetes 服务。配置是通过初始化时传递给容器的参数定义的,而不是通过配置文件定义的。 + +如果管控审计与原始 CIS Benchmark 出现差异,针对 Rancher 提供的的审计命令可用于进行测试。执行测试时,你需要访问所有 RKE 节点主机上的命令行。这些命令还使用了测试和评估测试结果所需的 [kubectl](https://kubernetes.io/docs/tasks/tools/)(带有有效的配置文件)和 [jq](https://stedolan.github.io/jq/) 工具。 + +:::note + +本指南仅介绍 `automated` 测试(以前称为 `scored`)。 + +::: + +### 管控 +## 1.1Master 节点配置文件 +### 1.1.1确保 API Server pod 规范文件权限具有 644 或更严格的设置(自动) + + +**结果**:Not Applicable + +**修正措施**: +RKE 配置的集群不需要或维护 kube-apiserver 的配置文件。 +所有配置在容器运行时作为参数传入。 + +### 1.1.2确保 API Server pod 规范文件所有权设置为 root:root(自动) + + +**结果**:Not Applicable + +**修正措施**: +RKE 配置的集群不需要或维护 kube-apiserver 的配置文件。 +所有配置在容器运行时作为参数传入。 + +### 1.1.3确保 Controller Manager pod 规范文件权限具有 644 或更严格的设置(自动) + + +**结果**:Not Applicable + +**修正措施**: +RKE 配置的集群不需要或维护 controller-manager 的配置文件。 +所有配置在容器运行时作为参数传入。 + +### 1.1.4确保 Controller Manager pod 规范文件所有权设置为 root:root(自动) + + +**结果**:Not Applicable + +**修正措施**: +RKE 配置的集群不需要或维护 controller-manager 的配置文件。 +所有配置在容器运行时作为参数传入。 + +### 1.1.5确保 Scheduler pod 规范文件权限具有 644 或更严格的设置(自动) + + +**结果**:Not Applicable + +**修正措施**: +RKE 配置的集群不需要或维护 Scheduler 的配置文件。 +所有配置在容器运行时作为参数传入。 + +### 1.1.6确保 Scheduler pod 规范文件所有权设置为 root:root(自动) + + +**结果**:Not Applicable + +**修正措施**: +RKE 配置的集群不需要或维护 Scheduler 的配置文件。 +所有配置在容器运行时作为参数传入。 + +### 1.1.7确保 etcd pod 规范文件权限具有 644 或更严格的设置(自动) + + +**结果**:Not Applicable + +**修正措施**: +RKE 配置的集群不需要或维护 etcd 的配置文件。 +所有配置在容器运行时作为参数传入。 + +### 1.1.8确保 etcd pod 规范文件所有权设置为 root:root(自动) + + +**结果**:Not Applicable + +**修正措施**: +RKE 配置的集群不需要或维护 etcd 的配置文件。 +所有配置在容器运行时作为参数传入。 + +### 1.1.9确保容器网络接口文件权限设置为 644 或更严格的设置(手动) + + +**结果**:warn + +**修正措施**: +在 Master 节点上运行以下命令(基于系统上的文件位置)。 +例如:chmod 644 + +**审计**: + +```bash +stat -c permissions=%a +``` + +### 1.1.10确保容器网络接口文件所有权设置为 root:root(手动) + + +**结果**:warn + +**修正措施**: +在 Master 节点上运行以下命令(基于系统上的文件位置)。 +例如:chown root:root + +**审计**: + +```bash +stat -c %U:%G +``` + +### 1.1.11确保 etcd 数据目录权限设置为 700 或更严格的设置(自动) + + +**结果**:pass + +**修正措施**: +在 etcd 服务器节点上,通过以下命令获取 etcd 数据目录(作为 `--data-dir` 参数传递)。 +ps -ef | grep etcd +基于上面找到的 etcd 数据目录运行以下命令。例如:chmod 700 /var/lib/etcd + +**审计**: + +```bash +stat -c %a /node/var/lib/etcd +``` + +**预期结果**: + +```console +'700' is equal to '700' +``` + +**返回值**: + +```console +700 +``` + +### 1.1.12确保 etcd 数据目录所有权设置为 etcd:etcd(自动) + + +**结果**:pass + +**修正措施**: +在 etcd 服务器节点上,通过以下命令获取 etcd 数据目录(作为 `--data-dir` 参数传递)。 +ps -ef | grep etcd +基于上面找到的 etcd 数据目录运行以下命令。 +例如:chown etcd:etcd /var/lib/etcd + +etcd 数据目录所有权需要系统 ServiceAccount。 +有关如何配置所有权的更多信息,请参阅 Rancher 的强化指南。 + +**审计**: + +```bash +stat -c %U:%G /node/var/lib/etcd +``` + +**预期结果**: + +```console +'etcd:etcd' is present +``` + +**返回值**: + +```console +etcd:etcd +``` + +### 1.1.13确保 admin.conf 文件权限具有 644 或更严格的设置(自动) + + +**结果**:Not Applicable + +**修正措施**: +RKE 配置的集群不会在节点上存储 kubernetes 的默认 kubeconfig 凭证文件。 + +### 1.1.14确保 admin.conf 文件所有权设置为 root:root(自动) + + +**结果**:Not Applicable + +**修正措施**: +RKE 配置的集群不会在节点上存储 kubernetes 的默认 kubeconfig 凭证文件。 + +### 1.1.15确保 scheduler.conf 文件权限具有 644 或更严格的设置(自动) + + +**结果**:Not Applicable + +**修正措施**: +RKE 配置的集群不需要或维护 Scheduler 的配置文件。 +所有配置在容器运行时作为参数传入。 + +### 1.1.16确保 scheduler.conf 文件所有权设置为 root:root(自动) + + +**结果**:Not Applicable + +**修正措施**: +RKE 配置的集群不需要或维护 Scheduler 的配置文件。 +所有配置在容器运行时作为参数传入。 + +### 1.1.17确保 controller-manager.conf 文件权限具有 644 或更严格的设置(自动) + + +**结果**:Not Applicable + +**修正措施**: +RKE 配置的集群不需要或维护 controller-manager 的配置文件。 +所有配置在容器运行时作为参数传入。 + +### 1.1.18确保将 controller-manager.conf 文件所有权设置为 root:root(自动) + + +**结果**:Not Applicable + +**修正措施**: +RKE 配置的集群不需要或维护 controller-manager 的配置文件。 +所有配置在容器运行时作为参数传入。 + +### 1.1.19确保 Kubernetes PKI 目录和文件所有权设置为 root:root(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上运行以下命令(基于系统上的文件位置)。 +例如:chown -R root:root /etc/kubernetes/pki/ + +**审计脚本**:`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 + +``` + +**审计执行**: + +```bash +./check_files_owner_in_dir.sh /node/etc/kubernetes/ssl +``` + +**预期结果**: + +```console +'true' is equal to 'true' +``` + +**返回值**: + +```console +true +``` + +### 1.1.20确保将 Kubernetes PKI 证书文件权限设置为 644 或更严格的设置(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上运行以下命令(基于系统上的文件位置)。 +例如:chmod -R 644 /etc/kubernetes/pki/*.crt + +**审计脚本**:`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 + +``` + +**审计执行**: + +```bash +./check_files_permissions.sh /node/etc/kubernetes/ssl/!(*key).pem +``` + +**预期结果**: + +```console +'true' is equal to 'true' +``` + +**返回值**: + +```console +true +``` + +### 1.1.21确保 Kubernetes PKI 密钥文件权限设置为 600(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上运行以下命令(基于系统上的文件位置)。 +例如:chmod -R 600 /etc/kubernetes/ssl/*key.pem + +**审计脚本**:`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 + +``` + +**审计执行**: + +```bash +./check_files_permissions.sh /node/etc/kubernetes/ssl/*key.pem +``` + +**预期结果**: + +```console +'true' is equal to 'true' +``` + +**返回值**: + +```console +true +``` + +## 1.2API Server +### 1.2.1确保 --anonymous-auth 参数设置为 false(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上编辑 API Server pod 规范文件 /etc/kubernetes/manifests/kube-apiserver.yaml 并设置以下参数。 +--anonymous-auth=false + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**预期结果**: + +```console +'false' is equal to 'false' +``` + +**返回值**: + +```console +root 121142 121120 7 12:27 ?00:06:27 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --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 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json +``` + +### 1.2.2确保未设置 --basic-auth-file 参数(自动) + + +**结果**:pass + +**修正措施**: +遵循文档并配置身份验证的替代机制。然后,在 Master 节点上编辑 API Server pod 规范文件 /etc/kubernetes/manifests/kube-apiserver.yaml 并移除 `--basic-auth-file=` 参数。 + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**预期结果**: + +```console +'--basic-auth-file' is not present +``` + +**返回值**: + +```console +root 121142 121120 7 12:27 ?00:06:27 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --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 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json +``` + +### 1.2.3确保未设置 --token-auth-file 参数(自动) + + +**结果**:pass + +**修正措施**: +遵循文档并配置身份验证的替代机制。然后,在 Master 节点上编辑 API Server pod 规范文件 /etc/kubernetes/manifests/kube-apiserver.yaml 并移除 `--token-auth-file=` 参数。 + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**预期结果**: + +```console +'--token-auth-file' is not present +``` + +**返回值**: + +```console +root 121142 121120 7 12:27 ?00:06:27 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --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 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json +``` + +### 1.2.4确保 --kubelet-https 参数设置为 true(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上编辑 API Server pod 规范文件 /etc/kubernetes/manifests/kube-apiserver.yaml 并移除 `--kubelet-https` 参数。 + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**预期结果**: + +```console +'--kubelet-https' is not present OR '--kubelet-https' is not present +``` + +**返回值**: + +```console +root 121142 121120 7 12:27 ?00:06:27 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --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 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json +``` + +### 1.2.5确保正确设置了 --kubelet-client-certificate 和 --kubelet-client-key 参数(自动) + + +**结果**:pass + +**修正措施**: +遵循 Kubernetes 文档设置 apiserver 和 kubelets 的 TLS 连接。然后,在 Master 节点上编辑 API Server pod 规范文件 /etc/kubernetes/manifests/kube-apiserver.yaml,并设置以下 kubelet 客户端证书和密钥参数。 +--kubelet-client-certificate= +--kubelet-client-key= + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**预期结果**: + +```console +'--kubelet-client-certificate' is present AND '--kubelet-client-key' is present +``` + +**返回值**: + +```console +root 121142 121120 7 12:27 ?00:06:27 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --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 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json +``` + +### 1.2.6确保根据需要设置 --kubelet-certificate-authority 参数(自动) + + +**结果**:pass + +**修正措施**: +遵循 Kubernetes 文档设置 apiserver 和 kubelets 的 TLS 连接。然后,在 Master 节点上编辑 API Server pod 规范文件 /etc/kubernetes/manifests/kube-apiserver.yaml,并将 `--kubelet-certificate-authority` 参数设置为 CA 证书文件的路径。 +`--kubelet-certificate-authority=` + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**预期结果**: + +```console +'--kubelet-certificate-authority' is present +``` + +**返回值**: + +```console +root 121142 121120 7 12:27 ?00:06:27 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --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 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json +``` + +### 1.2.7确保 --authorization-mode 参数未设置为 AlwaysAllow(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上编辑 API Server pod 规范文件 /etc/kubernetes/manifests/kube-apiserver.yaml,并将 `--authorization-mode` 参数设置为 `AlwaysAllow` 以外的值。 +示例如下。 +--authorization-mode=RBAC + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**预期结果**: + +```console +'Node,RBAC' not have 'AlwaysAllow' +``` + +**返回值**: + +```console +root 121142 121120 7 12:27 ?00:06:27 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --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 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json +``` + +### 1.2.8确保 --authorization-mode 参数包括 Node(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上编辑 API Server pod 规范文件 /etc/kubernetes/manifests/kube-apiserver.yaml,并将 `--authorization-mode` 参数设置为包含 `Node` 的值。 +--authorization-mode=Node,RBAC + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**预期结果**: + +```console +'Node,RBAC' has 'Node' +``` + +**返回值**: + +```console +root 121142 121120 7 12:27 ?00:06:27 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --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 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json +``` + +### 1.2.9确保 --authorization-mode 参数包括 RBAC(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上编辑 API Server pod 规范文件 /etc/kubernetes/manifests/kube-apiserver.yaml,并将 `--authorization-mode` 参数设置为包含 `RBAC` 的值。 +例如:--authorization-mode=Node,RBAC + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**预期结果**: + +```console +'Node,RBAC' has 'RBAC' +``` + +**返回值**: + +```console +root 121142 121120 7 12:27 ?00:06:27 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --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 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json +``` + +### 1.2.10确保设置了准入控制插件 EventRateLimit(自动) + + +**结果**:pass + +**修正措施**: +遵循 Kubernetes 文档并在配置文件中设置所需的限制。 +然后,编辑 API Server pod 规范文件 /etc/kubernetes/manifests/kube-apiserver.yaml,并设置以下参数。 +--enable-admission-plugins=...,EventRateLimit,... +--admission-control-config-file= + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**预期结果**: + +```console +'NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit' has 'EventRateLimit' +``` + +**返回值**: + +```console +root 121142 121120 7 12:27 ?00:06:27 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --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 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json +``` + +### 1.2.11确保未设置准入控制插件 AlwaysAdmit(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上编辑 API Server pod 规范文件 /etc/kubernetes/manifests/kube-apiserver.yaml,并删除 `--enable-admission-plugins` 参数,或将其设置为不包含 `AlwaysAdmit` 的值。 + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**预期结果**: + +```console +'NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit' not have 'AlwaysAdmit' OR '--enable-admission-plugins' is not present +``` + +**返回值**: + +```console +root 121142 121120 7 12:27 ?00:06:27 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --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 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json +``` + +### 1.2.12确保设置了准入控制插件 AlwaysPullImages(手动) + + +**结果**:warn + +**修正措施**: +在 Master 节点上编辑 API Server pod 规范文件 /etc/kubernetes/manifests/kube-apiserver.yaml,并将 `--enable-admission-plugins` 参数设置为包含 `AlwaysPullImages`。 +--enable-admission-plugins=...,AlwaysPullImages,... + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +### 1.2.13如果没有使用 PodSecurityPolicy,请确保设置了准入控制插件 SecurityContextDeny(手动) + + +**结果**:warn + +**修正措施**: +在 Master 节点上编辑 API Server pod 规范文件 /etc/kubernetes/manifests/kube-apiserver.yaml,并将 `--enable-admission-plugins` 参数设置为包括 `SecurityContextDeny`,除非已设置了 PodSecurityPolicy。 +--enable-admission-plugins=...,SecurityContextDeny,... + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +### 1.2.14确保设置了准入控制插件 ServiceAccount(自动) + + +**结果**:pass + +**修正措施**: +遵循文档并根据你的环境创建 ServiceAccount 对象。 +然后,在 Master 节点上编辑 API Server pod 规范文件 /etc/kubernetes/manifests/kube-apiserver.yaml,并确保 `--disable-admission-plugins` 参数设置为不包含 ServiceAccount 的值。 + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**预期结果**: + +```console +'--disable-admission-plugins' is not present OR '--disable-admission-plugins' is not present +``` + +**返回值**: + +```console +root 121142 121120 7 12:27 ?00:06:28 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --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 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json +``` + +### 1.2.15确保设置了准入控制插件 NamespaceLifecycle(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上编辑 API Server pod 规范文件 /etc/kubernetes/manifests/kube-apiserver.yaml,并设置 `--disable-admission-plugins` 参数,确保它不包含 NamespaceLifecycle。 + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**预期结果**: + +```console +'--disable-admission-plugins' is not present OR '--disable-admission-plugins' is not present +``` + +**返回值**: + +```console +root 121142 121120 7 12:27 ?00:06:28 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --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 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json +``` + +### 1.2.16确保设置了准入控制插件 PodSecurityPolicy(自动) + + +**结果**:pass + +**修正措施**: +遵循文档并根据你的环境创建 Pod 安全策略对象。 +然后,在 Master 节点上编辑 API Server pod 规范文件 /etc/kubernetes/manifests/kube-apiserver.yaml,并将 `--enable-admission-plugins` 参数设置为包含 PodSecurityPolicy 的值: +--enable-admission-plugins=...,PodSecurityPolicy,... +然后重新启动 API Server。 + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**预期结果**: + +```console +'NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit' has 'PodSecurityPolicy' +``` + +**返回值**: + +```console +root 121142 121120 7 12:27 ?00:06:28 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --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 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json +``` + +### 1.2.17确保设置了准入控制插件 NodeRestriction(自动) + + +**结果**:pass + +**修正措施**: +按照 Kubernetes 文档,在 kubelets 上配置 NodeRestriction 插件。 +然后,在 Master 节点上编辑 API Server pod 规范文件 /etc/kubernetes/manifests/kube-apiserver.yaml,并将 `--enable-admission-plugins` 参数设置为包含 NodeRestriction 的值。 +--enable-admission-plugins=...,NodeRestriction,... + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**预期结果**: + +```console +'NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit' has 'NodeRestriction' +``` + +**返回值**: + +```console +root 121142 121120 7 12:27 ?00:06:28 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --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 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json +``` + +### 1.2.18确保未设置 --insecure-bind-address 参数(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上编辑 API Server pod 规范文件 /etc/kubernetes/manifests/kube-apiserver.yaml 并移除 `--insecure-bind-address` 参数。 + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**预期结果**: + +```console +'--insecure-bind-address' is not present +``` + +**返回值**: + +```console +root 121142 121120 7 12:27 ?00:06:28 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --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 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json +``` + +### 1.2.19确保 --insecure-port 参数设置为 0(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上编辑 API Server pod 规范文件 /etc/kubernetes/manifests/kube-apiserver.yaml 并设置以下参数。 +--insecure-port=0 + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**预期结果**: + +```console +'0' is equal to '0' +``` + +**返回值**: + +```console +root 121142 121120 7 12:27 ?00:06:28 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --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 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json +``` + +### 1.2.20确保 --secure-port 参数未设置为 0(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上编辑 API Server pod 规范文件 /etc/kubernetes/manifests/kube-apiserver.yaml,并删除 `--secure-port` 参数或将其设置为另一个所需端口(非零)。 + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**预期结果**: + +```console +6443 is greater than 0 OR '--secure-port' is not present +``` + +**返回值**: + +```console +root 121142 121120 7 12:27 ?00:06:28 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --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 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json +``` + +### 1.2.21确保 --profiling 参数设置为 false(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上编辑 API Server pod 规范文件 /etc/kubernetes/manifests/kube-apiserver.yaml 并设置以下参数。 +--profiling=false + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**预期结果**: + +```console +'false' is equal to 'false' +``` + +**返回值**: + +```console +root 121142 121120 7 12:27 ?00:06:28 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --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 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json +``` + +### 1.2.22确保设置了 --audit-log-path 参数(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上编辑 API Server pod 规范文件 /etc/kubernetes/manifests/kube-apiserver.yaml,并将 `--audit-log-path` 参数设置为所需的路径以及要写入审计日志的文件。 +例如:--audit-log-path=/var/log/apiserver/audit.log + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**预期结果**: + +```console +'--audit-log-path' is present +``` + +**返回值**: + +```console +root 121142 121120 7 12:27 ?00:06:28 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --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 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json +``` + +### 1.2.23确保将 --audit-log-maxage 参数设置为 30 或适当的数值(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上编辑 API Server pod 规范文件 /etc/kubernetes/manifests/kube-apiserver.yaml,并将 `--audit-log-maxage` 参数设置为 30 或适当的天数: +--audit-log-maxage=30 + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**预期结果**: + +```console +30 is greater or equal to 30 +``` + +**返回值**: + +```console +root 121142 121120 7 12:27 ?00:06:28 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --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 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json +``` + +### 1.2.24确保 --audit-log-maxbackup 参数设置为 10 或适当的数值(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上编辑 API Server pod 规范文件 /etc/kubernetes/manifests/kube-apiserver.yaml,并将 `--audit-log-maxbackup` 参数设置为 10 或适当的数值。 +--audit-log-maxbackup=10 + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**预期结果**: + +```console +10 is greater or equal to 10 +``` + +**返回值**: + +```console +root 121142 121120 7 12:27 ?00:06:28 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --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 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json +``` + +### 1.2.25确保 --audit-log-maxsize 参数设置为 100 或适当的数值(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上编辑 API Server pod 规范文件 /etc/kubernetes/manifests/kube-apiserver.yaml,并将 `--audit-log-maxsize` 参数设置为适当的大小(以 MB 为单位)。 +例如,要将其设置为 100 MB: +--audit-log-maxsize=100 + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**预期结果**: + +```console +100 is greater or equal to 100 +``` + +**返回值**: + +```console +root 121142 121120 7 12:27 ?00:06:28 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --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 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json +``` + +### 1.2.26确保能根据需要设置 --request-timeout 参数(自动) + + +**结果**:pass + +**修正措施**: +编辑 API Server pod 规范文件 /etc/kubernetes/manifests/kube-apiserver.yaml,并根据需要设置以下参数。 +例如:--request-timeout=300s + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**预期结果**: + +```console +'--request-timeout' is not present OR '--request-timeout' is not present +``` + +**返回值**: + +```console +root 121142 121120 7 12:27 ?00:06:28 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --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 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json +``` + +### 1.2.27确保 --service-account-lookup 参数设置为 true(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上编辑 API Server pod 规范文件 /etc/kubernetes/manifests/kube-apiserver.yaml 并设置以下参数。 +--service-account-lookup=true + +你也可以删除此文件的 --service-account-lookup 参数,从而使默认设置生效。 + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**预期结果**: + +```console +'--service-account-lookup' is not present OR 'true' is equal to 'true' +``` + +**返回值**: + +```console +root 121142 121120 7 12:27 ?00:06:28 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --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 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json +``` + +### 1.2.28确保根据需要设置 --service-account-key-file 参数(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上编辑 API Server pod 规范文件 /etc/kubernetes/manifests/kube-apiserver.yaml,并为 ServiceAccount 将 `--service-account-key-file` 参数设置为公钥文件: +`--service-account-key-file=` + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**预期结果**: + +```console +'--service-account-key-file' is present +``` + +**返回值**: + +```console +root 121142 121120 7 12:27 ?00:06:28 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --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 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json +``` + +### 1.2.29确保根据需要设置 --etcd-certfile 和 --etcd-keyfile 参数(自动) + + +**结果**:pass + +**修正措施**: +遵循 Kubernetes 文档设置 apiserver 和 etcd 的 TLS 连接。 +然后,在 Master 节点上编辑 API Server pod 规范文件 /etc/kubernetes/manifests/kube-apiserver.yaml,并设置 etcd 证书和密钥文件参数。 +`--etcd-certfile=` +`--etcd-keyfile=` + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**预期结果**: + +```console +'--etcd-certfile' is present AND '--etcd-keyfile' is present +``` + +**返回值**: + +```console +root 121142 121120 7 12:27 ?00:06:28 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --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 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json +``` + +### 1.2.30确保根据需要设置 --tls-cert-file 和 --tls-private-key-file 参数(自动) + + +**结果**:pass + +**修正措施**: +遵循 Kubernetes 文档并在 apiserver 上设置 TLS 连接。 +然后,在 Master 节点上编辑 API Server pod 规范文件 /etc/kubernetes/manifests/kube-apiserver.yaml,并设置 TLS 证书和私钥文件参数。 +`--tls-cert-file=` +`--tls-private-key-file=` + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**预期结果**: + +```console +'--tls-cert-file' is present AND '--tls-private-key-file' is present +``` + +**返回值**: + +```console +root 121142 121120 7 12:27 ?00:06:28 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --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 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json +``` + +### 1.2.31确保根据需要设置 --client-ca-file 参数(自动) + + +**结果**:pass + +**修正措施**: +遵循 Kubernetes 文档并在 apiserver 上设置 TLS 连接。 +然后,在 Master 节点上编辑 API Server pod 规范文件 /etc/kubernetes/manifests/kube-apiserver.yaml,并设置客户端 CA 文件。 +`--client-ca-file=` + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**预期结果**: + +```console +'--client-ca-file' is present +``` + +**返回值**: + +```console +root 121142 121120 7 12:27 ?00:06:28 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --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 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json +``` + +### 1.2.32确保 --etcd-cafile 参数设置正确(自动) + + +**结果**:pass + +**修正措施**: +遵循 Kubernetes 文档设置 apiserver 和 etcd 的 TLS 连接。 +然后,在 Master 节点上编辑 API Server pod 规范文件 /etc/kubernetes/manifests/kube-apiserver.yaml,并设置 etcd CA 文件参数。 +`--etcd-cafile=` + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**预期结果**: + +```console +'--etcd-cafile' is present +``` + +**返回值**: + +```console +root 121142 121120 7 12:27 ?00:06:28 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --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 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json +``` + +### 1.2.33确保根据需要设置 --encryption-provider-config 参数(自动) + + +**结果**:pass + +**修正措施**: +按照 Kubernetes 文档并配置 EncryptionConfig 文件。 +然后,在 Master 节点上编辑 API Server pod 规范文件 /etc/kubernetes/manifests/kube-apiserver.yaml,并将 `--encryption-provider-config` 参数设置为该文件的路径: +--encryption-provider-config= + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**预期结果**: + +```console +'--encryption-provider-config' is present +``` + +**返回值**: + +```console +root 121142 121120 7 12:27 ?00:06:28 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --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 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json +``` + +### 1.2.34确保正确配置加密提供程序(自动) + + +**结果**:pass + +**修正措施**: +按照 Kubernetes 文档并配置 EncryptionConfig 文件。 +在此文件中,选择 aescbc、kms 或 secretbox 作为加密提供程序。 + +**审计脚本**:`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 + +``` + +**审计执行**: + +```bash +./check_encryption_provider_config.sh aescbc +``` + +**预期结果**: + +```console +'true' is equal to 'true' +``` + +**返回值**: + +```console +- aescbc: true +``` + +### 1.2.35确保 API Server 仅使用强密码(自动) + + +**结果**:warn + +**修正措施**: +在 Master 节点上编辑 API Server pod 规范文件 /etc/kubernetes/manifests/kube-apiserver.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 + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +## 1.3Controller Manager +### 1.3.1确保正确设置 --terminated-pod-gc-threshold 参数(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上编辑 Controller Manager pod 规范文件 /etc/kubernetes/manifests/kube-controller-manager.yaml,并将 `--terminated-pod-gc-threshold` 设置为适当的阈值。 +例如:--terminated-pod-gc-threshold=10 + +**审计**: + +```bash +/bin/ps -ef | grep kube-controller-manager | grep -v grep +``` + +**预期结果**: + +```console +'--terminated-pod-gc-threshold' is present +``` + +**返回值**: + +```console +root 121366 121346 1 12:27 ?00:01:13 kube-controller-manager --cluster-cidr=10.42.0.0/16 --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --allocate-node-cidrs=true --configure-cloud-routes=false --leader-elect=true --pod-eviction-timeout=5m0s --authentication-kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --feature-gates=RotateKubeletServerCertificate=true --bind-address=127.0.0.1 --enable-hostpath-provisioner=false --address=127.0.0.1 --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 --cloud-provider= --service-account-private-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --service-cluster-ip-range=10.43.0.0/16 --authorization-kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --root-ca-file=/etc/kubernetes/ssl/kube-ca.pem --node-monitor-grace-period=40s --profiling=false --terminated-pod-gc-threshold=1000 --v=2 --allow-untagged-cloud=true --use-service-account-credentials=true +``` + +### 1.3.2确保 --profiling 参数设置为 false(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上编辑 Controller Manager pod 规范文件 /etc/kubernetes/manifests/kube-controller-manager.yaml,并设置以下参数。 +--profiling=false + +**审计**: + +```bash +/bin/ps -ef | grep kube-controller-manager | grep -v grep +``` + +**预期结果**: + +```console +'false' is equal to 'false' +``` + +**返回值**: + +```console +root 121366 121346 1 12:27 ?00:01:13 kube-controller-manager --cluster-cidr=10.42.0.0/16 --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --allocate-node-cidrs=true --configure-cloud-routes=false --leader-elect=true --pod-eviction-timeout=5m0s --authentication-kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --feature-gates=RotateKubeletServerCertificate=true --bind-address=127.0.0.1 --enable-hostpath-provisioner=false --address=127.0.0.1 --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 --cloud-provider= --service-account-private-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --service-cluster-ip-range=10.43.0.0/16 --authorization-kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --root-ca-file=/etc/kubernetes/ssl/kube-ca.pem --node-monitor-grace-period=40s --profiling=false --terminated-pod-gc-threshold=1000 --v=2 --allow-untagged-cloud=true --use-service-account-credentials=true +``` + +### 1.3.3确保 --use-service-account-credentials 参数设置为 true(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上编辑 Controller Manager pod 规范文件 /etc/kubernetes/manifests/kube-controller-manager.yaml,并设置以下参数。 +--use-service-account-credentials=true + +**审计**: + +```bash +/bin/ps -ef | grep kube-controller-manager | grep -v grep +``` + +**预期结果**: + +```console +'true' is not equal to 'false' +``` + +**返回值**: + +```console +root 121366 121346 1 12:27 ?00:01:13 kube-controller-manager --cluster-cidr=10.42.0.0/16 --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --allocate-node-cidrs=true --configure-cloud-routes=false --leader-elect=true --pod-eviction-timeout=5m0s --authentication-kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --feature-gates=RotateKubeletServerCertificate=true --bind-address=127.0.0.1 --enable-hostpath-provisioner=false --address=127.0.0.1 --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 --cloud-provider= --service-account-private-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --service-cluster-ip-range=10.43.0.0/16 --authorization-kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --root-ca-file=/etc/kubernetes/ssl/kube-ca.pem --node-monitor-grace-period=40s --profiling=false --terminated-pod-gc-threshold=1000 --v=2 --allow-untagged-cloud=true --use-service-account-credentials=true +``` + +### 1.3.4确保根据需要设置 --service-account-private-key-file 参数(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上编辑 Controller Manager pod 规范文件 /etc/kubernetes/manifests/kube-controller-manager.yaml,并为 ServiceAccount 将 `--service-account-private-key-file` 参数设置为私钥文件。 +`--service-account-private-key-file=` + +**审计**: + +```bash +/bin/ps -ef | grep kube-controller-manager | grep -v grep +``` + +**预期结果**: + +```console +'--service-account-private-key-file' is present +``` + +**返回值**: + +```console +root 121366 121346 1 12:27 ?00:01:13 kube-controller-manager --cluster-cidr=10.42.0.0/16 --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --allocate-node-cidrs=true --configure-cloud-routes=false --leader-elect=true --pod-eviction-timeout=5m0s --authentication-kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --feature-gates=RotateKubeletServerCertificate=true --bind-address=127.0.0.1 --enable-hostpath-provisioner=false --address=127.0.0.1 --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 --cloud-provider= --service-account-private-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --service-cluster-ip-range=10.43.0.0/16 --authorization-kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --root-ca-file=/etc/kubernetes/ssl/kube-ca.pem --node-monitor-grace-period=40s --profiling=false --terminated-pod-gc-threshold=1000 --v=2 --allow-untagged-cloud=true --use-service-account-credentials=true +``` + +### 1.3.5确保根据需要设置 --root-ca-file 参数(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上编辑 Controller Manager pod 规范文件 /etc/kubernetes/manifests/kube-controller-manager.yaml,并将 `--root-ca-file` 参数设置为证书绑定文件。 +`--root-ca-file=` + +**审计**: + +```bash +/bin/ps -ef | grep kube-controller-manager | grep -v grep +``` + +**预期结果**: + +```console +'--root-ca-file' is present +``` + +**返回值**: + +```console +root 121366 121346 1 12:27 ?00:01:13 kube-controller-manager --cluster-cidr=10.42.0.0/16 --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --allocate-node-cidrs=true --configure-cloud-routes=false --leader-elect=true --pod-eviction-timeout=5m0s --authentication-kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --feature-gates=RotateKubeletServerCertificate=true --bind-address=127.0.0.1 --enable-hostpath-provisioner=false --address=127.0.0.1 --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 --cloud-provider= --service-account-private-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --service-cluster-ip-range=10.43.0.0/16 --authorization-kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --root-ca-file=/etc/kubernetes/ssl/kube-ca.pem --node-monitor-grace-period=40s --profiling=false --terminated-pod-gc-threshold=1000 --v=2 --allow-untagged-cloud=true --use-service-account-credentials=true +``` + +### 1.3.6确保 RotateKubeletServerCertificate 参数设置为 true(自动) + + +**结果**:Not Applicable + +**修正措施**: +在 Master 节点上编辑 Controller Manager pod 规范文件 /etc/kubernetes/manifests/kube-controller-manager.yaml,并将 `--feature-gates` 参数设置为包含 `RotateKubeletServerCertificate=true`。 +--feature-gates=RotateKubeletServerCertificate=true + +RKE 配置的集群直接使用 RKE 处理证书轮换。 + +### 1.3.7确保 --bind-address 参数设置为 127.0.0.1(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上编辑 Controller Manager pod 规范文件 /etc/kubernetes/manifests/kube-controller-manager.yaml,并确保 `--bind-address` 参数的值正确。 + +**审计**: + +```bash +/bin/ps -ef | grep kube-controller-manager | grep -v grep +``` + +**预期结果**: + +```console +'127.0.0.1' is equal to '127.0.0.1' OR '--bind-address' is not present +``` + +**返回值**: + +```console +root 121366 121346 1 12:27 ?00:01:13 kube-controller-manager --cluster-cidr=10.42.0.0/16 --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --allocate-node-cidrs=true --configure-cloud-routes=false --leader-elect=true --pod-eviction-timeout=5m0s --authentication-kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --feature-gates=RotateKubeletServerCertificate=true --bind-address=127.0.0.1 --enable-hostpath-provisioner=false --address=127.0.0.1 --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 --cloud-provider= --service-account-private-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --service-cluster-ip-range=10.43.0.0/16 --authorization-kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --root-ca-file=/etc/kubernetes/ssl/kube-ca.pem --node-monitor-grace-period=40s --profiling=false --terminated-pod-gc-threshold=1000 --v=2 --allow-untagged-cloud=true --use-service-account-credentials=true +``` + +## 1.4Scheduler +### 1.4.1确保 --profiling 参数设置为 false(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上编辑 Scheduler pod 规范文件 /etc/kubernetes/manifests/kube-scheduler.yaml 文件,并设置以下参数。 +--profiling=false + +**审计**: + +```bash +/bin/ps -ef | grep kube-scheduler | grep -v grep +``` + +**预期结果**: + +```console +'false' is equal to 'false' +``` + +**返回值**: + +```console +root 121587 121567 0 12:27 ?00:00:12 kube-scheduler --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-scheduler.yaml --address=127.0.0.1 --leader-elect=true --profiling=false --v=2 --bind-address=127.0.0.1 --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确保 --bind-address 参数设置为 127.0.0.1(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上编辑 Scheduler pod 规范文件 /etc/kubernetes/manifests/kube-scheduler.yaml,并确保 `--bind-address` 参数的值正确。 + +**审计**: + +```bash +/bin/ps -ef | grep kube-scheduler | grep -v grep +``` + +**预期结果**: + +```console +'127.0.0.1' is equal to '127.0.0.1' OR '--bind-address' is not present +``` + +**返回值**: + +```console +root 121587 121567 0 12:27 ?00:00:12 kube-scheduler --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-scheduler.yaml --address=127.0.0.1 --leader-elect=true --profiling=false --v=2 --bind-address=127.0.0.1 --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 Files +### 2.1确保根据需要设置 --cert-file 和 --key-file 参数(自动) + + +**结果**:pass + +**修正措施**: +按照 etcd 服务文档配置 TLS 加密。 +然后,在 Master 节点上编辑 etcd pod 规范文件 /etc/kubernetes/manifests/etcd.yaml,并设置以下参数。 +`--cert-file=` +`--key-file=` + +**审计**: + +```bash +/bin/ps -ef | /bin/grep etcd | /bin/grep -v grep +``` + +**预期结果**: + +```console +'--cert-file' is present AND '--key-file' is present +``` + +**返回值**: + +```console +etcd 120679 120657 1 12:27 ?00:01:17 /usr/local/bin/etcd --trusted-ca-file=/etc/kubernetes/ssl/kube-ca.pem --cert-file=/etc/kubernetes/ssl/kube-etcd-.pem --heartbeat-interval=500 --election-timeout=5000 --initial-cluster-token=etcd-cluster-1 --initial-cluster=etcd-=https://:2380 --peer-trusted-ca-file=/etc/kubernetes/ssl/kube-ca.pem --peer-cert-file=/etc/kubernetes/ssl/kube-etcd-.pem --peer-key-file=/etc/kubernetes/ssl/kube-etcd--key.pem --peer-client-cert-auth=true --data-dir=/var/lib/rancher/etcd/ --initial-advertise-peer-urls=https://:2380 --initial-cluster-state=new --advertise-client-urls=https://:2379 --client-cert-auth=true --enable-v2=true --name=etcd- --listen-client-urls=https://:2379 --listen-peer-urls=https://:2380 --key-file=/etc/kubernetes/ssl/kube-etcd--key.pem --cipher-suites=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 root 120728 120707 0 12:27 ?00:00:00 /opt/rke-tools/rke-etcd-backup etcd-backup save --cacert /etc/kubernetes/ssl/kube-ca.pem --cert /etc/kubernetes/ssl/kube-node.pem --key /etc/kubernetes/ssl/kube-node-key.pem --name etcd-rolling-snapshots --endpoints=:2379 --retention=72h --creation=12h root 121142 121120 7 12:27 ?00:06:27 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --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 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json root 214939 214868 2 13:56 ?00:00:00 kube-bench run --targets etcd --scored --nosummary --noremediations --v=5 --config-dir=/etc/kube-bench/cfg --benchmark rke-cis-1.6-hardened --json --log_dir /tmp/results/logs --outputfile /tmp/results/etcd.json +``` + +### 2.2确保 --client-cert-auth 参数设置为 true(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上编辑 etcd pod 规范文件 /etc/kubernetes/manifests/etcd.yaml,并设置以下参数。 +--client-cert-auth="true" + +**审计**: + +```bash +/bin/ps -ef | /bin/grep etcd | /bin/grep -v grep +``` + +**预期结果**: + +```console +'--client-cert-auth' is present OR 'true' is equal to 'true' +``` + +**返回值**: + +```console +etcd 120679 120657 1 12:27 ?00:01:17 /usr/local/bin/etcd --trusted-ca-file=/etc/kubernetes/ssl/kube-ca.pem --cert-file=/etc/kubernetes/ssl/kube-etcd-.pem --heartbeat-interval=500 --election-timeout=5000 --initial-cluster-token=etcd-cluster-1 --initial-cluster=etcd-=https://:2380 --peer-trusted-ca-file=/etc/kubernetes/ssl/kube-ca.pem --peer-cert-file=/etc/kubernetes/ssl/kube-etcd-.pem --peer-key-file=/etc/kubernetes/ssl/kube-etcd--key.pem --peer-client-cert-auth=true --data-dir=/var/lib/rancher/etcd/ --initial-advertise-peer-urls=https://:2380 --initial-cluster-state=new --advertise-client-urls=https://:2379 --client-cert-auth=true --enable-v2=true --name=etcd- --listen-client-urls=https://:2379 --listen-peer-urls=https://:2380 --key-file=/etc/kubernetes/ssl/kube-etcd--key.pem --cipher-suites=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 root 120728 120707 0 12:27 ?00:00:00 /opt/rke-tools/rke-etcd-backup etcd-backup save --cacert /etc/kubernetes/ssl/kube-ca.pem --cert /etc/kubernetes/ssl/kube-node.pem --key /etc/kubernetes/ssl/kube-node-key.pem --name etcd-rolling-snapshots --endpoints=:2379 --retention=72h --creation=12h root 121142 121120 7 12:27 ?00:06:27 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --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 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json root 214939 214868 2 13:56 ?00:00:00 kube-bench run --targets etcd --scored --nosummary --noremediations --v=5 --config-dir=/etc/kube-bench/cfg --benchmark rke-cis-1.6-hardened --json --log_dir /tmp/results/logs --outputfile /tmp/results/etcd.json +``` + +### 2.3确保 --auto-tls 参数未设置为 true(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上编辑 etcd pod 规范文件 /etc/kubernetes/manifests/etcd.yaml,并删除 `--auto-tls` 参数或将其设置为 false。 +--auto-tls=false + +**审计**: + +```bash +/bin/ps -ef | /bin/grep etcd | /bin/grep -v grep +``` + +**预期结果**: + +```console +'--auto-tls' is not present OR '--auto-tls' is not present +``` + +**返回值**: + +```console +etcd 120679 120657 1 12:27 ?00:01:17 /usr/local/bin/etcd --trusted-ca-file=/etc/kubernetes/ssl/kube-ca.pem --cert-file=/etc/kubernetes/ssl/kube-etcd-.pem --heartbeat-interval=500 --election-timeout=5000 --initial-cluster-token=etcd-cluster-1 --initial-cluster=etcd-=https://:2380 --peer-trusted-ca-file=/etc/kubernetes/ssl/kube-ca.pem --peer-cert-file=/etc/kubernetes/ssl/kube-etcd-.pem --peer-key-file=/etc/kubernetes/ssl/kube-etcd--key.pem --peer-client-cert-auth=true --data-dir=/var/lib/rancher/etcd/ --initial-advertise-peer-urls=https://:2380 --initial-cluster-state=new --advertise-client-urls=https://:2379 --client-cert-auth=true --enable-v2=true --name=etcd- --listen-client-urls=https://:2379 --listen-peer-urls=https://:2380 --key-file=/etc/kubernetes/ssl/kube-etcd--key.pem --cipher-suites=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 root 120728 120707 0 12:27 ?00:00:00 /opt/rke-tools/rke-etcd-backup etcd-backup save --cacert /etc/kubernetes/ssl/kube-ca.pem --cert /etc/kubernetes/ssl/kube-node.pem --key /etc/kubernetes/ssl/kube-node-key.pem --name etcd-rolling-snapshots --endpoints=:2379 --retention=72h --creation=12h root 121142 121120 7 12:27 ?00:06:27 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --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 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json root 214939 214868 1 13:56 ?00:00:00 kube-bench run --targets etcd --scored --nosummary --noremediations --v=5 --config-dir=/etc/kube-bench/cfg --benchmark rke-cis-1.6-hardened --json --log_dir /tmp/results/logs --outputfile /tmp/results/etcd.json +``` + +### 2.4确保根据需要设置 --peer-cert-file 和 --peer-key-file 参数(自动) + + +**结果**:pass + +**修正措施**: +遵循 etcd 服务文档,根据需要为你的 etcd 集群配置对等 TLS 加密。 +然后,在 Master 节点上编辑 etcd pod 规范文件 /etc/kubernetes/manifests/etcd.yaml,并设置以下参数。 +`--peer-client-file=` +`--peer-key-file=` + +**审计**: + +```bash +/bin/ps -ef | /bin/grep etcd | /bin/grep -v grep +``` + +**预期结果**: + +```console +'--peer-cert-file' is present AND '--peer-key-file' is present +``` + +**返回值**: + +```console +etcd 120679 120657 1 12:27 ?00:01:17 /usr/local/bin/etcd --trusted-ca-file=/etc/kubernetes/ssl/kube-ca.pem --cert-file=/etc/kubernetes/ssl/kube-etcd-.pem --heartbeat-interval=500 --election-timeout=5000 --initial-cluster-token=etcd-cluster-1 --initial-cluster=etcd-=https://:2380 --peer-trusted-ca-file=/etc/kubernetes/ssl/kube-ca.pem --peer-cert-file=/etc/kubernetes/ssl/kube-etcd-.pem --peer-key-file=/etc/kubernetes/ssl/kube-etcd--key.pem --peer-client-cert-auth=true --data-dir=/var/lib/rancher/etcd/ --initial-advertise-peer-urls=https://:2380 --initial-cluster-state=new --advertise-client-urls=https://:2379 --client-cert-auth=true --enable-v2=true --name=etcd- --listen-client-urls=https://:2379 --listen-peer-urls=https://:2380 --key-file=/etc/kubernetes/ssl/kube-etcd--key.pem --cipher-suites=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 root 120728 120707 0 12:27 ?00:00:00 /opt/rke-tools/rke-etcd-backup etcd-backup save --cacert /etc/kubernetes/ssl/kube-ca.pem --cert /etc/kubernetes/ssl/kube-node.pem --key /etc/kubernetes/ssl/kube-node-key.pem --name etcd-rolling-snapshots --endpoints=:2379 --retention=72h --creation=12h root 121142 121120 7 12:27 ?00:06:27 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --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 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json root 214939 214868 5 13:56 ?00:00:00 kube-bench run --targets etcd --scored --nosummary --noremediations --v=5 --config-dir=/etc/kube-bench/cfg --benchmark rke-cis-1.6-hardened --json --log_dir /tmp/results/logs --outputfile /tmp/results/etcd.json +``` + +### 2.5确保 --peer-client-cert-auth 参数设置为 true(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上编辑 etcd pod 规范文件 /etc/kubernetes/manifests/etcd.yaml,并设置以下参数。 +--peer-client-cert-auth=true + +**审计**: + +```bash +/bin/ps -ef | /bin/grep etcd | /bin/grep -v grep +``` + +**预期结果**: + +```console +'--peer-client-cert-auth' is present OR 'true' is equal to 'true' +``` + +**返回值**: + +```console +etcd 120679 120657 1 12:27 ?00:01:17 /usr/local/bin/etcd --trusted-ca-file=/etc/kubernetes/ssl/kube-ca.pem --cert-file=/etc/kubernetes/ssl/kube-etcd-.pem --heartbeat-interval=500 --election-timeout=5000 --initial-cluster-token=etcd-cluster-1 --initial-cluster=etcd-=https://:2380 --peer-trusted-ca-file=/etc/kubernetes/ssl/kube-ca.pem --peer-cert-file=/etc/kubernetes/ssl/kube-etcd-.pem --peer-key-file=/etc/kubernetes/ssl/kube-etcd--key.pem --peer-client-cert-auth=true --data-dir=/var/lib/rancher/etcd/ --initial-advertise-peer-urls=https://:2380 --initial-cluster-state=new --advertise-client-urls=https://:2379 --client-cert-auth=true --enable-v2=true --name=etcd- --listen-client-urls=https://:2379 --listen-peer-urls=https://:2380 --key-file=/etc/kubernetes/ssl/kube-etcd--key.pem --cipher-suites=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 root 120728 120707 0 12:27 ?00:00:00 /opt/rke-tools/rke-etcd-backup etcd-backup save --cacert /etc/kubernetes/ssl/kube-ca.pem --cert /etc/kubernetes/ssl/kube-node.pem --key /etc/kubernetes/ssl/kube-node-key.pem --name etcd-rolling-snapshots --endpoints=:2379 --retention=72h --creation=12h root 121142 121120 7 12:27 ?00:06:27 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --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 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json root 214939 214868 4 13:56 ?00:00:00 kube-bench run --targets etcd --scored --nosummary --noremediations --v=5 --config-dir=/etc/kube-bench/cfg --benchmark rke-cis-1.6-hardened --json --log_dir /tmp/results/logs --outputfile /tmp/results/etcd.json +``` + +### 2.6确保 --peer-auto-tls 参数未设置为 true(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上编辑 etcd pod 规范文件 /etc/kubernetes/manifests/etcd.yaml,并删除 `--peer-auto-tls` 参数或将其设置为 false。 +--peer-auto-tls=false + +**审计**: + +```bash +/bin/ps -ef | /bin/grep etcd | /bin/grep -v grep +``` + +**预期结果**: + +```console +'--peer-auto-tls' is not present OR '--peer-auto-tls' is present +``` + +**返回值**: + +```console +etcd 120679 120657 1 12:27 ?00:01:17 /usr/local/bin/etcd --trusted-ca-file=/etc/kubernetes/ssl/kube-ca.pem --cert-file=/etc/kubernetes/ssl/kube-etcd-.pem --heartbeat-interval=500 --election-timeout=5000 --initial-cluster-token=etcd-cluster-1 --initial-cluster=etcd-=https://:2380 --peer-trusted-ca-file=/etc/kubernetes/ssl/kube-ca.pem --peer-cert-file=/etc/kubernetes/ssl/kube-etcd-.pem --peer-key-file=/etc/kubernetes/ssl/kube-etcd--key.pem --peer-client-cert-auth=true --data-dir=/var/lib/rancher/etcd/ --initial-advertise-peer-urls=https://:2380 --initial-cluster-state=new --advertise-client-urls=https://:2379 --client-cert-auth=true --enable-v2=true --name=etcd- --listen-client-urls=https://:2379 --listen-peer-urls=https://:2380 --key-file=/etc/kubernetes/ssl/kube-etcd--key.pem --cipher-suites=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 root 120728 120707 0 12:27 ?00:00:00 /opt/rke-tools/rke-etcd-backup etcd-backup save --cacert /etc/kubernetes/ssl/kube-ca.pem --cert /etc/kubernetes/ssl/kube-node.pem --key /etc/kubernetes/ssl/kube-node-key.pem --name etcd-rolling-snapshots --endpoints=:2379 --retention=72h --creation=12h root 121142 121120 7 12:27 ?00:06:27 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --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 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json root 214939 214868 4 13:56 ?00:00:00 kube-bench run --targets etcd --scored --nosummary --noremediations --v=5 --config-dir=/etc/kube-bench/cfg --benchmark rke-cis-1.6-hardened --json --log_dir /tmp/results/logs --outputfile /tmp/results/etcd.json +``` + +### 2.7确保 etcd 使用唯一的 CA(自动) + + +**结果**:pass + +**修正措施**: +[手动测试] +遵循 etcd 文档,为 etcd 服务创建专用的 CA 设置。 +然后,在 Master 节点上编辑 etcd pod 规范文件 /etc/kubernetes/manifests/etcd.yaml,并设置以下参数。 +`--trusted-ca-file=` + +**审计**: + +```bash +/bin/ps -ef | /bin/grep etcd | /bin/grep -v grep +``` + +**预期结果**: + +```console +'--trusted-ca-file' is present +``` + +**返回值**: + +```console +etcd 120679 120657 1 12:27 ?00:01:17 /usr/local/bin/etcd --trusted-ca-file=/etc/kubernetes/ssl/kube-ca.pem --cert-file=/etc/kubernetes/ssl/kube-etcd-.pem --heartbeat-interval=500 --election-timeout=5000 --initial-cluster-token=etcd-cluster-1 --initial-cluster=etcd-=https://:2380 --peer-trusted-ca-file=/etc/kubernetes/ssl/kube-ca.pem --peer-cert-file=/etc/kubernetes/ssl/kube-etcd-.pem --peer-key-file=/etc/kubernetes/ssl/kube-etcd--key.pem --peer-client-cert-auth=true --data-dir=/var/lib/rancher/etcd/ --initial-advertise-peer-urls=https://:2380 --initial-cluster-state=new --advertise-client-urls=https://:2379 --client-cert-auth=true --enable-v2=true --name=etcd- --listen-client-urls=https://:2379 --listen-peer-urls=https://:2380 --key-file=/etc/kubernetes/ssl/kube-etcd--key.pem --cipher-suites=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 root 120728 120707 0 12:27 ?00:00:00 /opt/rke-tools/rke-etcd-backup etcd-backup save --cacert /etc/kubernetes/ssl/kube-ca.pem --cert /etc/kubernetes/ssl/kube-node.pem --key /etc/kubernetes/ssl/kube-node-key.pem --name etcd-rolling-snapshots --endpoints=:2379 --retention=72h --creation=12h root 121142 121120 7 12:27 ?00:06:27 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --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 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json root 214939 214868 3 13:56 ?00:00:00 kube-bench run --targets etcd --scored --nosummary --noremediations --v=5 --config-dir=/etc/kube-bench/cfg --benchmark rke-cis-1.6-hardened --json --log_dir /tmp/results/logs --outputfile /tmp/results/etcd.json +``` + +## 3.1认证和授权 +### 3.1.1不能将客户端证书身份验证应用于用户(手动) + + +**结果**:warn + +**修正措施**: +Kubernetes 提供的替代机制(例如 OIDC)应该代替客户端证书的实现。 + +## 3.2Logging +### 3.2.1确保创建最小审计策略(自动) + + +**结果**:pass + +**修正措施**: +为你的集群创建一个审计策略文件。 + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**预期结果**: + +```console +'--audit-policy-file' is present +``` + +**返回值**: + +```console +root 121142 121120 7 12:27 ?00:06:28 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --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 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json +``` + +### 3.2.2确保审计策略涵盖关键安全问题(手动) + + +**结果**:warn + +**修正措施**: +考虑修改集群上使用的审计策略,至少要包括这些项目。 + +## 4.1Worker 节点配置文件 +### 4.1.1确保 kubelet 服务文件权限具有 644 或更严格的设置(自动) + + +**结果**:Not Applicable + +**修正措施**: +RKE 配置的集群不需要或维护 kubelet 服务的配置文件。 +所有配置在容器运行时作为参数传入。 + +### 4.1.2确保 kubelet 服务文件所有权设置为 root:root(自动) + + +**结果**:Not Applicable + +**修正措施**: +RKE 配置的集群不需要或维护 kubelet 服务的配置文件。 +所有配置在容器运行时作为参数传入。 + +### 4.1.3如果代理 kubeconfig 文件存在,请确保权限具有 644 或更严格的设置(自动) + + +**结果**:pass + +**修正措施**: +在每个 Worker 节点上运行以下命令(基于系统上的文件位置)。 +例如:chmod 644 $proykubeconfig + +**审计**: + +```bash +/bin/sh -c 'if test -e /node/etc/kubernetes/ssl/kubecfg-kube-proxy.yaml; then stat -c %a /node/etc/kubernetes/ssl/kubecfg-kube-proxy.yaml; fi' +``` + +**预期结果**: + +```console +'644' is present OR '640' is present OR '600' is equal to '600' OR '444' is present OR '440' is present OR '400' is present OR '000' is present +``` + +**返回值**: + +```console +600 +``` + +### 4.1.4确保代理 kubeconfig 文件所有权设置为 root:root(自动) + + +**结果**:pass + +**修正措施**: +在每个 Worker 节点上运行以下命令(基于系统上的文件位置)。 +例如:chown root:root /etc/kubernetes/ssl/kubecfg-kube-proxy.yaml + +**审计**: + +```bash +/bin/sh -c 'if test -e /etc/kubernetes/ssl/kubecfg-kube-proxy.yaml; then stat -c %U:%G /etc/kubernetes/ssl/kubecfg-kube-proxy.yaml; fi' +``` + +**预期结果**: + +```console +'root:root' is not present OR '/etc/kubernetes/ssl/kubecfg-kube-proxy.yaml' is not present +``` + +### 4.1.5确保 --kubeconfig kubelet.conf 文件权限具有 644 或更严格的设置(自动) + + +**结果**:pass + +**修正措施**: +在每个 Worker 节点上运行以下命令(基于系统上的文件位置)。 +例如:chmod 644 /etc/kubernetes/ssl/kubecfg-kube-node.yaml + +**审计**: + +```bash +/bin/sh -c 'if test -e /etc/kubernetes/ssl/kubecfg-kube-node.yaml; then stat -c permissions=%a /etc/kubernetes/ssl/kubecfg-kube-node.yaml; fi' +``` + +**预期结果**: + +```console +'permissions' is not present +``` + +### 4.1.6确保 --kubeconfig kubelet.conf 文件所有权设置为 root:root(自动) + + +**结果**:pass + +**修正措施**: +在每个 Worker 节点上运行以下命令(基于系统上的文件位置)。 +例如:chown root:root /etc/kubernetes/ssl/kubecfg-kube-node.yaml + +**审计**: + +```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' +``` + +**预期结果**: + +```console +'root:root' is equal to 'root:root' +``` + +**返回值**: + +```console +root:root +``` + +### 4.1.7确保 CA 文件权限具有 644 或更严格的设置(自动) + + +**结果**:pass + +**修正措施**: +运行以下命令修改 `--client-ca-file chmod 644 ` 的文件权限。 + +**审计脚本**:`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}') +if test -z $CAFILE; then CAFILE=$kubeletcafile; fi +if test -e $CAFILE; then stat -c permissions=%a $CAFILE; fi + +``` + +**审计执行**: + +```bash +./check_cafile_permissions.sh +``` + +**预期结果**: + +```console +'permissions' is not present +``` + +### 4.1.8确保客户端 CA 文件所有权设置为 root:root(自动) + + +**结果**:pass + +**修正措施**: +运行以下命令来修改 `--client-ca-file` 的所有权。 +`chown root:root ` + +**审计脚本**:`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}') +if test -z $CAFILE; then CAFILE=$kubeletcafile; fi +if test -e $CAFILE; then stat -c %U:%G $CAFILE; fi + +``` + +**审计执行**: + +```bash +./check_cafile_ownership.sh +``` + +**预期结果**: + +```console +'root:root' is not present +``` + +### 4.1.9确保 kubelet --config 配置文件权限具有 644 或更严格的设置(自动) + + +**结果**:Not Applicable + +**修正措施**: +运行以下命令(使用审计步骤中确定的配置文件位置): +chmod 644 /var/lib/kubelet/config.yaml + +RKE 配置的集群不需要或维护 kubelet 的配置文件。 +所有配置在容器运行时作为参数传入。 + +### 4.1.10确保 kubelet --config 配置文件所有权设置为 root:root(自动) + + +**结果**:Not Applicable + +**修正措施**: +运行以下命令(使用审计步骤中确定的配置文件位置): +chown root:root /var/lib/kubelet/config.yaml + +RKE 配置的集群不需要或维护 kubelet 的配置文件。 +所有配置在容器运行时作为参数传入。 + +## 4.2Kubelet +### 4.2.1确保将 anonymous-auth 参数设置为 false(自动) + + +**结果**:pass + +**修正措施**: +如果使用 Kubelet 配置文件,请编辑该文件,将 authentication: anonymous 设置为 `false`。 +如果使用可执行参数,请在每个 Worker 节点中编辑 kubelet 服务文件 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf,并在 `KUBELET_SYSTEM_PODS_ARGS` 变量中设置以下参数。 +--anonymous-auth=false +根据你的系统,重新启动 kubelet 服务。例如: +systemctl daemon-reload +systemctl restart kubelet.service + +**审计**: + +```bash +/bin/ps -fC kubelet +``` + +**审计配置**: + +```bash +/bin/cat /var/lib/kubelet/config.yaml +``` + +**预期结果**: + +```console +'' is not present +``` + +### 4.2.2确保 --authorization-mode 参数未设置为 AlwaysAllow(自动) + + +**结果**:pass + +**修正措施**: +如果使用 Kubelet 配置文件,请编辑该文件,将 authorization: mode 设置为 `Webhook`。如果使用可执行参数,请在每个 Worker 节点中编辑 kubelet 服务文件 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf,并在 `KUBELET_AUTHZ_ARGS` 变量中设置以下参数。 +--authorization-mode=Webhook +根据你的系统,重新启动 kubelet 服务。例如: +systemctl daemon-reload +systemctl restart kubelet.service + +**审计**: + +```bash +/bin/ps -fC kubelet +``` + +**审计配置**: + +```bash +/bin/cat /var/lib/kubelet/config.yaml +``` + +**预期结果**: + +```console +'' is not present +``` + +### 4.2.3确保根据需要设置 --client-ca-file 参数(自动) + + +**结果**:pass + +**修正措施**: +如果使用 Kubelet 配置文件,请编辑文件,将 authentication: x509: clientCAFile 设置为客户端 CA 文件的位置。 +如果使用命令行参数,请在每个 Worker 节点中编辑 kubelet 服务文件 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf,并在 `KUBELET_AUTHZ_ARGS` 变量中设置以下参数。 +`--client-ca-file=` +根据你的系统,重新启动 kubelet 服务。例如: +systemctl daemon-reload +systemctl restart kubelet.service + +**审计**: + +```bash +/bin/ps -fC kubelet +``` + +**审计配置**: + +```bash +/bin/cat /var/lib/kubelet/config.yaml +``` + +**预期结果**: + +```console +'' is not present +``` + +### 4.2.4确保 --read-only-port 参数设置为 0(自动) + + +**结果**:pass + +**修正措施**: +如果使用 Kubelet 配置文件,请编辑该文件,将 `readOnlyPort` 设置为 0。 +如果使用命令行参数,请在每个 Worker 节点中编辑 kubelet 服务文件 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf,并在 `KUBELET_SYSTEM_PODS_ARGS` 变量中设置以下参数。 +--read-only-port=0 +根据你的系统,重新启动 kubelet 服务。例如: +systemctl daemon-reload +systemctl restart kubelet.service + +**审计**: + +```bash +/bin/ps -fC kubelet +``` + +**审计配置**: + +```bash +/bin/cat /var/lib/kubelet/config.yaml +``` + +**预期结果**: + +```console +'' is not present OR '' is not present +``` + +### 4.2.5确保 --streaming-connection-idle-timeout 参数未设置为 0(自动) + + +**结果**:pass + +**修正措施**: +如果使用 Kubelet 配置文件,请编辑该文件,将 `streamingConnectionIdleTimeout` 设置为 0 以外的值。 +如果使用命令行参数,请在每个 Worker 节点中编辑 kubelet 服务文件 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf,并在 `KUBELET_SYSTEM_PODS_ARGS` 变量中设置以下参数。 +--streaming-connection-idle-timeout=5m +根据你的系统,重新启动 kubelet 服务。例如: +systemctl daemon-reload +systemctl restart kubelet.service + +**审计**: + +```bash +/bin/ps -fC kubelet +``` + +**审计配置**: + +```bash +/bin/cat /var/lib/kubelet/config.yaml +``` + +**预期结果**: + +```console +'30m' is not equal to '0' OR '--streaming-connection-idle-timeout' is not present +``` + +**返回值**: + +```console +UID PID PPID C STIME TTY TIME CMD root 121813 121792 4 12:27 ?00:03:37 kubelet --fail-swap-on=false --resolv-conf=/etc/resolv.conf --authorization-mode=Webhook --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-node.yaml --v=2 --volume-plugin-dir=/var/lib/kubelet/volumeplugins --address=0.0.0.0 --make-iptables-util-chains=true --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --hostname-override= --tls-cert-file=/etc/kubernetes/ssl/kube-kubelet-.pem --network-plugin=cni --streaming-connection-idle-timeout=30m --root-dir=/var/lib/kubelet --event-qps=0 --feature-gates=RotateKubeletServerCertificate=true --protect-kernel-defaults=true --cloud-provider= --tls-private-key-file=/etc/kubernetes/ssl/kube-kubelet--key.pem --cgroups-per-qos=True --cni-bin-dir=/opt/cni/bin --cni-conf-dir=/etc/cni/net.d --pod-infra-container-image=rancher/mirrored-pause:3.5 --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 --anonymous-auth=false --authentication-token-webhook=true --node-ip= --cluster-dns=10.43.0.10 --cluster-domain=cluster.local --read-only-port=0 --cgroup-driver=cgroupfs --resolv-conf=/run/systemd/resolve/resolv.conf +``` + +### 4.2.6确保 --protect-kernel-defaults 参数设置为 true(自动) + + +**结果**:pass + +**修正措施**: +如果使用 Kubelet 配置文件,请编辑该文件以设置 `protectKernelDefaults: true`。 +如果使用命令行参数,请在每个 Worker 节点中编辑 kubelet 服务文件 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf,并在 `KUBELET_SYSTEM_PODS_ARGS` 变量中设置以下参数。 +--protect-kernel-defaults=true +根据你的系统,重新启动 kubelet 服务。例如: +systemctl daemon-reload +systemctl restart kubelet.service + +**审计**: + +```bash +/bin/ps -fC kubelet +``` + +**审计配置**: + +```bash +/bin/cat /var/lib/kubelet/config.yaml +``` + +**预期结果**: + +```console +'' is not present +``` + +### 4.2.7确保 --make-iptables-util-chains 参数设置为 true(自动) + + +**结果**:pass + +**修正措施**: +如果使用 Kubelet 配置文件,请编辑该文件以设置 `makeIPTablesUtilChains: true`。 +如果使用命令行参数,请在每个 Worker 节点上编辑 kubelet 服务文件 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf,并删除 `KUBELET_SYSTEM_PODS_ARGS` 变量中的 `--make-iptables-util-chains` 参数。 +根据你的系统,重新启动 kubelet 服务。例如: +systemctl daemon-reload +systemctl restart kubelet.service + +**审计**: + +```bash +/bin/ps -fC kubelet +``` + +**审计配置**: + +```bash +/bin/cat /var/lib/kubelet/config.yaml +``` + +**预期结果**: + +```console +'' is not present OR '' is not present +``` + +### 4.2.8确保未设置 --hostname-override 参数(手动) + + +**结果**:Not Applicable + +**修正措施**: +在每个 Worker 节点上编辑 kubelet 服务文件 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf,并删除 `KUBELET_SYSTEM_PODS_ARGS` 变量中的 `--hostname-override` 参数。 +根据你的系统,重新启动 kubelet 服务。例如: +systemctl daemon-reload +systemctl restart kubelet.service + +RKE 配置的集群会设置 `--hostname-override`,从而避免主机名配置错误。 + +### 4.2.9确保 --event-qps 参数设置为 0 或能适当抓取事件的级别(自动) + + +**结果**:pass + +**修正措施**: +如果使用 Kubelet 配置文件,请编辑该文件以将 `eventRecordQPS` 设置为适当的级别。 +如果使用命令行参数,请在每个 Worker 节点中编辑 kubelet 服务文件 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf,并在 `KUBELET_SYSTEM_PODS_ARGS` 变量中设置以下参数。 +根据你的系统,重新启动 kubelet 服务。例如: +systemctl daemon-reload +systemctl restart kubelet.service + +**审计**: + +```bash +/bin/ps -fC kubelet +``` + +**审计配置**: + +```bash +/bin/cat /var/lib/kubelet/config.yaml +``` + +**预期结果**: + +```console +'' is not present +``` + +### 4.2.10确保根据需要设置 --tls-cert-file 和 --tls-private-key-file 参数(自动) + + +**结果**:pass + +**修正措施**: +如果使用 Kubelet 配置文件,请编辑该文件以将 `tlsCertFile` 设置为证书文件的位置来使用 Kubelet 的标识符,并将 `tlsPrivateKeyFile` 设置为对应的私钥文件的位置。 +如果使用命令行参数,请在每个 Worker 节点中编辑 kubelet 服务文件 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf,并在 `KUBELET_CERTIFICATE_ARGS` 变量中设置以下参数。 +`--tls-cert-file=` +`--tls-private-key-file=` +根据你的系统,重新启动 kubelet 服务。例如: +systemctl daemon-reload +systemctl restart kubelet.service + +**审计**: + +```bash +/bin/ps -fC kubelet +``` + +**审计配置**: + +```bash +/bin/cat /var/lib/kubelet/config.yaml +``` + +**预期结果**: + +```console +'' is not present AND '' is not present +``` + +### 4.2.11确保 --rotate-certificates 参数未设置为 false(自动) + + +**结果**:pass + +**修正措施**: +如果使用 Kubelet 配置文件,请编辑文件以添加行 `rotateCertificates: true`,或完全删除它以使用默认值。 +如果使用命令行参数,请在每个 Worker 节点上编辑 kubelet 服务文件 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf,并删除 `KUBELET_CERTIFICATE_ARGS` 变量中的 `--rotate-certificates=false` 参数。 +根据你的系统,重新启动 kubelet 服务。例如: +systemctl daemon-reload +systemctl restart kubelet.service + +**审计**: + +```bash +/bin/ps -fC kubelet +``` + +**审计配置**: + +```bash +/bin/cat /var/lib/kubelet/config.yaml +``` + +**预期结果**: + +```console +'--rotate-certificates' is not present OR '--rotate-certificates' is not present +``` + +**返回值**: + +```console +UID PID PPID C STIME TTY TIME CMD root 121813 121792 4 12:27 ?00:03:37 kubelet --fail-swap-on=false --resolv-conf=/etc/resolv.conf --authorization-mode=Webhook --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-node.yaml --v=2 --volume-plugin-dir=/var/lib/kubelet/volumeplugins --address=0.0.0.0 --make-iptables-util-chains=true --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --hostname-override= --tls-cert-file=/etc/kubernetes/ssl/kube-kubelet-.pem --network-plugin=cni --streaming-connection-idle-timeout=30m --root-dir=/var/lib/kubelet --event-qps=0 --feature-gates=RotateKubeletServerCertificate=true --protect-kernel-defaults=true --cloud-provider= --tls-private-key-file=/etc/kubernetes/ssl/kube-kubelet--key.pem --cgroups-per-qos=True --cni-bin-dir=/opt/cni/bin --cni-conf-dir=/etc/cni/net.d --pod-infra-container-image=rancher/mirrored-pause:3.5 --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 --anonymous-auth=false --authentication-token-webhook=true --node-ip= --cluster-dns=10.43.0.10 --cluster-domain=cluster.local --read-only-port=0 --cgroup-driver=cgroupfs --resolv-conf=/run/systemd/resolve/resolv.conf +``` + +### 4.2.12验证 RotateKubeletServerCertificate 参数是否设置为 true(自动) + + +**结果**:Not Applicable + +**修正措施**: +在每个 Worker 节点上编辑 kubelet 服务文件 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf,并在 `KUBELET_CERTIFICATE_ARGS` 变量中设置以下参数。 +--feature-gates=RotateKubeletServerCertificate=true +根据你的系统,重新启动 kubelet 服务。例如: +systemctl daemon-reload +systemctl restart kubelet.service + +RKE 配置的集群直接使用 RKE 处理证书轮换。 + +**审计配置**: + +```bash +/bin/cat /var/lib/kubelet/config.yaml +``` + +### 4.2.13确保 Kubelet 仅使用强密码(自动) + + +**结果**:pass + +**修正措施**: +如果使用 Kubelet 配置文件,请编辑该文件以将 `TLSCipherSuites` 设置为 +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 或这些值的子集。 +如果使用可执行参数,请在每个 Worker 节点上编辑 kubelet 服务文件 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf,并将 `--tls-cipher-suites` 参数设置如下值,或这些值的子集。 +--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 +根据你的系统,重新启动 kubelet 服务。例如: +systemctl daemon-reload +systemctl restart kubelet.service + +**审计**: + +```bash +/bin/ps -fC kubelet +``` + +**审计配置**: + +```bash +/bin/cat /var/lib/kubelet/config.yaml +``` + +**预期结果**: + +```console +'' is not present +``` + +## 5.1RBAC 和 ServiceAccount +### 5.1.1确保仅在需要时使用 cluster-admin 角色(手动) + + +**结果**:warn + +**修正措施**: +识别 cluster-admin 角色的所有 clusterrolebindings。检查它们是否被使用,它们是否需要这个角色,或者是否可以使用较低权限的角色。 +在可能的情况下,先将用户绑定到较低权限的角色,然后删除绑定到 cluster-admin 角色的 clusterrolebinding: +kubectl delete clusterrolebinding [name] + +### 5.1.2尽量减少对密文的访问(手动) + + +**结果**:warn + +**修正措施**: +在可能的情况下,删除对集群中密文对象的 get、list 和 watch 访问。 + +### 5.1.3尽量减少角色和 ClusterRoles 中通配符的使用(手动) + + +**结果**:warn + +**修正措施**: +在可能的情况下,将集群角色和角色中的通配符替换为特定的对象或动作。 + +### 5.1.4尽量减少创建 pod 的访问(手动) + + +**结果**:warn + +**修正措施**: +在可能的情况下,删除对集群中 pod 对象的创建访问权限。 + +### 5.1.5确保未主动使用默认 ServiceAccount。(自动) + + +**结果**:pass + +**修正措施**: +在 Kubernetes 工作负载需要对 Kubernetes API Server 进行特定访问时,创建显式的 ServiceAccount。 +修改每个默认 ServiceAccount 的配置以包含此值 +automountServiceAccountToken: false + +**审计脚本**:`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" +``` + +**审计执行**: + +```bash +./check_for_default_sa.sh +``` + +**预期结果**: + +```console +'true' is equal to 'true' +``` + +**返回值**: + +```console +true +``` + +### 5.1.6确保仅在必要时挂载 ServiceAccount 令牌(手动) + + +**结果**:warn + +**修正措施**: +修改不需要挂载 ServiceAccount 令牌的 pod 和 ServiceAccount 的定义,使其禁用。 + +## 5.2Pod 安全策略 +### 5.2.1最小化特权容器的准入(手动) + + +**结果**:warn + +**修正措施**: +按照 Kubernetes 文档中的说明创建 PSP,确保 `.spec.privileged` 字段被省略或设置为 false。 + +### 5.2.2最小化需要共享主机进程 ID 命名空间的容器准入(自动) + + +**结果**:pass + +**修正措施**: +按照 Kubernetes 文档中的说明创建 PSP,确保 `.spec.hostPID` 字段被省略或设置为 false。 + +**审计**: + +```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={}' +``` + +**预期结果**: + +```console +1 is greater than 0 +``` + +**返回值**: + +```console +--count=1 +``` + +### 5.2.3最小化需要共享主机 IPC 命名空间的容器准入(自动) + + +**结果**:pass + +**修正措施**: +按照 Kubernetes 文档中的说明创建 PSP,确保 `.spec.hostIPC` 字段被省略或设置为 false。 + +**审计**: + +```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={}' +``` + +**预期结果**: + +```console +1 is greater than 0 +``` + +**返回值**: + +```console +--count=1 +``` + +### 5.2.4最小化需要共享主机网络命名空间的容器准入(自动) + + +**结果**:pass + +**修正措施**: +按照 Kubernetes 文档中的说明创建 PSP,确保 `.spec.hostNetwork` 字段被省略或设置为 false。 + +**审计**: + +```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={}' +``` + +**预期结果**: + +```console +1 is greater than 0 +``` + +**返回值**: + +```console +--count=1 +``` + +### 5.2.5使用 allowPrivilegeEscalation(自动)最小化容器的准入 + + +**结果**:pass + +**修正措施**: +按照 Kubernetes 文档中的说明创建 PSP,确保 `.spec.allowPrivilegeEscalation` 字段被省略或设置为 false。 + +**审计**: + +```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={}' +``` + +**预期结果**: + +```console +1 is greater than 0 +``` + +**返回值**: + +```console +--count=1 +``` + +### 5.2.6最小化根容器的准入(手动) + + +**结果**:warn + +**修正措施**: +按照 Kubernetes 文档中的说明创建 PSP,确保 `.spec.runAsUser.rule` 设置为 `MustRunAsNonRoot` 或 `MustRunAs`,范围为不包括 0 的 UID。 + +### 5.2.7使用 NET_RAW 功能最大限度地减少容器的准入(手动) + + +**结果**:warn + +**修正措施**: +按照 Kubernetes 文档中的说明创建 PSP,确保 `.spec.requiredDropCapabilities` 包括 `NET_RAW` 或 `ALL`。 + +### 5.2.8使用添加的功能最大限度地减少容器的准入(手动) + + +**结果**:warn + +**修正措施**: +确保集群的 PSP 中不存在 `allowedCapabilities`,除非它被设置为一个空数组。 + +### 5.2.9使用分配的功能最大限度地减少容器的准入(手动) + + +**结果**:warn + +**修正措施**: +查看集群上运行的应用程序中功能的使用情况。如果一个命名空间包含不需要任何 Linux 功能的应用,你可以考虑添加一个 PSP,禁止不丢弃所有功能的容器的准入。 + +## 5.3网络策略和 ​​CNI +### 5.3.1确保使用的 CNI 支持网络策略(手动) + + +**结果**:warn + +**修正措施**: +如果使用的 CNI 插件不支持网络策略,则应考虑使用不同的插件,或在 Kubernetes 集群中寻找替代机制来限制流量。 + +### 5.3.2确保所有命名空间都定义了网络策略(自动) + + +**结果**:pass + +**修正措施**: +遵循文档并根据需要创建 NetworkPolicy 对象。 + +**审计脚本**:`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" + +``` + +**审计执行**: + +```bash +./check_for_network_policies.sh +``` + +**预期结果**: + +```console +'true' is equal to 'true' +``` + +**返回值**: + +```console +true +``` + +## 5.4密文管理 +### 5.4.1优先使用密文文件而不是密文环境变量(手动) + + +**结果**:warn + +**修正措施**: +如果可能,重写应用程序代码,从挂载的密文文件而不是环境变量中读取密文。 + +### 5.4.2考虑外部密文存储(手动) + + +**结果**:warn + +**修正措施**: +请参阅你的云提供商或第三方密文管理解决方案的密文管理选项。 + +## 5.5可扩展准入控制 +### 5.5.1使用 ImagePolicyWebhook 准入控制器配置镜像来源(手动) + + +**结果**:warn + +**修正措施**: +遵循 Kubernetes 文档并设置镜像来源。 + +## 5.7通用策略 +### 5.7.1使用命名空间在资源之间创建管理边界(手动) + + +**结果**:warn + +**修正措施**: +遵循文档并根据需要为 Deployment 中的对象创建命名空间。 + +### 5.7.2确保 seccomp 配置文件在你的 pod 定义中设置为 docker/default(手动) + + +**结果**:warn + +**修正措施**: +Seccomp 目前是一个 alpha 功能。默认情况下,所有 alpha 功能都是禁用的。因此,你需要通过传入 `--feature- +gates=AllAlpha=true` 参数来启用 apiserver 中的 alpha 功能。 +编辑 Master 节点上的 /etc/kubernetes/apiserver 文件,并将 `KUBE_API_ARGS` 参数设置为 `--feature-gates=AllAlpha=true` +KUBE_API_ARGS="--feature-gates=AllAlpha=true" +根据你的系统,重新启动 kube-apiserver 服务。例如:systemctl restart kube-apiserver.service +使用注释在你的 pod 定义中启用 docker/default seccomp 配置文件。以下是一个示例: +apiVersion: v1 +kind: Pod +metadata: +name: trustworthy-pod +annotations: +seccomp.security.alpha.kubernetes.io/pod: docker/default +spec: +containers: +- name: trustworthy-container + image: sotrustworthy:latest + +### 5.7.3将安全上下文应用到你的 Pod 和容器(手动) + + +**结果**:warn + +**修正措施**: +遵循 Kubernetes 文档,将安全上下文应用到你的 pod。关于安全上下文的建议清单,你可以参考 CIS 的 Docker 容器安全 Benchmark。 + +### 5.7.4确保不使用 Default 命名空间(自动) + + +**结果**:pass + +**修正措施**: +确保创建命名空间以允许对 Kubernetes 进行适当的隔离资源,并且所有新资源都创建在特定的命名空间中。 + +**审计脚本**:`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" + + +``` + +**审计执行**: + +```bash +./check_for_default_ns.sh +``` + +**预期结果**: + +```console +'true' is equal to 'true' +``` + +**返回值**: + +```console +true +``` + diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/rancher-security/rancher-v2.6-hardening-guides/rke2-hardening-guide-with-cis-v1.6-benchmark.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/rancher-security/rancher-v2.6-hardening-guides/rke2-hardening-guide-with-cis-v1.6-benchmark.md new file mode 100644 index 00000000000..73da07d0373 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/rancher-security/rancher-v2.6-hardening-guides/rke2-hardening-guide-with-cis-v1.6-benchmark.md @@ -0,0 +1,410 @@ +--- +title: 使用 CIS 1.6 Benchmark 的 RKE2 强化指南 +weight: 100 +--- + +本文档提供了用于强化 RKE2 集群(使用 Rancher 2.6.5 进行配置)生产安装的说明。此处概述了遵循 CIS 的 Kubernetes Benchmark 管控所需的配置和控制。 + +:::note + +本强化指南介绍了如何保护集群中的节点。建议你在安装 Kubernetes 之前参考本指南。 + +::: + +本强化指南适用于 RKE2 集群,并对应以下 CIS Kubernetes Benchmark、Kubernetes 和 Rancher 版本: + +| Rancher 版本 | CIS Benchmark 版本 | Kubernetes 版本 | +| --------------- | --------------------- | ------------------ | +| Rancher v2.6.5+ | Benchmark v1.6 | Kubernetes v1.21 到 v1.23 | + +[点击此处下载本文档的 PDF 版本](https://releases.rancher.com/documents/security/2.6/Rancher_RKE2_v2-6_CIS_v1-6_Hardening_Guide.pdf)。 + + +### 概述 + +本文档提供了强化使用了 Rancher 2.6.5+ 和 Kubernetes 1.21 到 1.23 版本的 RKE2 集群的说明。此处概述了遵循 CIS 的 Kubernetes Benchmark 管控所需的配置。 + +有关根据官方 CIS Benchmark 评估强化 RKE2 集群的更多详细信息,请参阅 [RKE2 - CIS 1.6 Benchmark - 自我评估指南 - Rancher 2.6](rke2-self-assessment-guide-with-cis-v1.6-benchmark.md)。 + +RKE2 是“默认强化”的,因此无需进行修改即可通过大部分 Kubernetes CIS 管控。但是也有一些例外情况是需要人工干预才能完全通过 CIS Benchmark: + +1. RKE2 不会修改主机操作系统。因此,操作人员必须进行一些主机级别的修改。 +2. `PodSecurityPolicies` 和 `NetworkPolicies` 的某些 CIS 策略会限制集群功能。你必须让 RKE2 开箱即用地配置它们。 + +要满足上述要求,你可以在 `profile` 标志设置为 `cis-1.6` 的情况下启动 RKE2。该标志通常执行以下两个操作: + +1. 检查是否满足主机级别的要求。如果没有,RKE2 将退出并显示未满足要求的致命错误描述。 +2. 配置能让集群通过相关管控的运行时 pod 安全策略和网络策略。 + +:::note + +配置文件标志的有效值是 `cis-1.5` 或 `cis-1.6`。它接受一个字符串值以允许以后使用其他配置文件。 + +::: + +以下概述了当 `profile` 标志设置为 `cis-1.6` 时采取的具体操作。 + +### 主机级别要求 + +主机级别的要求有两个方面,分别是内核参数和 etcd 进程/目录配置。本节会概述这些内容。 + +#### 确保设置了 `protect-kernel-defaults` + +这是一个 kubelet 标志,如果所需的内核参数未设置或设置为与 kubelet 默认值不同的值,它会导致 kubelet 退出。 + +如果设置了 `profile` 标志,RKE2 会将标志设置为 `true`。 + +:::caution + +`protect-kernel-defaults` 作为 RKE2 的配置标志公开。如果你已将 `profile` 设置为 `cis-1.x` 并将 `protect-kernel-defaults` 设置为 `false`,则 RKE2 将退出并提示错误。 + +::: + +RKE2 还将检查与 kubelet 相同的内核参数,并按照 kubelet 相同的规则退出并提示错误。这样,操作人员可以更快、更轻松地识别出与 kubelet 默认值不一致的内核参数。 + +`protect-kernel-defaults` 和 `profile` 标志都可以在 RKE2 模板配置文件中设置。 + +```yaml +spec: + rkeConfig: + machineSelectorConfig: + - config: + profile: cis-1.6 + protect-kernel-defaults: true +``` + +#### 确保 etcd 配置正确 + +CIS Benchmark 要求 etcd 数据目录由 `etcd` 用户和组拥有。换言之,它要求 etcd 进程由主机级别的 `etcd` 用户运行。为了实现这一点,RKE2 在使用有效的 `cis-1.x` 配置文件启动时采取了几个步骤: + +1. 检查主机上是否存在 `etcd` 用户和组。如果没有,则退出并提示错误。 +2. 以 `etcd` 作为用户和组所有者来创建 etcd 的数据目录。 +3. 正确设置 etcd 静态 pod 的 `SecurityContext`,从而确保 etcd 进程以 `etcd` 用户和组的身份运行。 + +### 设置主机 + +本节提供了满足上述要求所需的主机配置命令。 + +#### 设置内核参数 + +建议为集群中所有类型的节点使用以下 `sysctl` 配置。在 `/etc/sysctl.d/90-kubelet.conf` 中设置如下参数: + +```ini +vm.panic_on_oom=0 +vm.overcommit_memory=1 +kernel.panic=10 +kernel.panic_on_oops=1 +``` + +运行 `sudo sysctl -p /etc/sysctl.d/90-kubelet.conf` 以启用设置。 + +在通过 Rancher 实际部署 RKE2 之前,请仅在全新安装上执行此步骤。 + +#### 创建 etcd 用户 + +在某些 Linux 发行版上,`useradd` 命令不会创建组。以下命令使用了 `-U` 标志来解决这一问题。这个标志能让 `useradd` 创建一个与用户同名的组。 + +```bash +sudo useradd -r -c "etcd user" -s /sbin/nologin -M etcd -U +``` + +### Kubernetes 运行时要求 + +如果运行时要通过 CIS Benchmark,则需要重视 pod 安全和网络策略。本节会概述这些内容。 + +#### `PodSecurityPolicies` + +RKE2 总是在 `PodSecurityPolicy` 准入控制器打开的情况下运行。但是,当它**不是**使用有效的 `cis-1.x` 配置文件启动时,RKE2 将设置一个不受限制的策略,该策略允许 Kubernetes 像 `PodSecurityPolicy` 准入控制器未启用一样运行。 + +使用有效的 `cis-1.x` 配置文件运行时,RKE2 将设置一组更具限制性的策略。这些策略符合 CIS Benchmark 5.2 节中的要求。 + +> Kubernetes controlplane 组件和关键附加组件(例如 CNI、DNS 和 Ingress)在 `kube-system` 命名空间中作为 pod 运行。因此,此命名空间的策略限制会更低,以便这些组件可以正常运行。 + +#### `NetworkPolicies` + +使用有效的 `cis-1.x` 配置文件运行时,RKE2 将设置 `NetworkPolicies` 以通过 Kubernetes 内置命名空间的 CIS Benchmark。这些命名空间是分别是 `kube-system`、`kube-public`、`kube-node-lease` 和 `default`。 + +使用的 `NetworkPolicy` 只允许同一命名空间内的 Pod 相互通信。一个例外情况是它允许解析 DNS 请求。 + +:::note + +操作人员需要照常管理其他命名空间的网络策略。 + +::: +#### 配置 `default` ServiceAccount + +**将 `default` ServiceAccount 的 `automountServiceAccountToken` 设置为 `false`** + +Kubernetes 为集群工作负载提供了一个 `default` ServiceAccount,但没有为 pod 分配特定 ServiceAccount 。如果需要从 pod 访问 Kubernetes API,则需要为该 pod 创建一个特定的 ServiceAccount 并授予权限。你还需要配置 `default` ServiceAccount,使其不提供 ServiceAccount 令牌并且没有任何显式的权限分配。 + +对于标准 RKE2 中的每个命名空间(包括 `default` 和 `kube-system`),`default` ServiceAccount 必须包含以下值: + +```yaml +automountServiceAccountToken: false +``` + +对于集群操作人员创建的命名空间,你可以使用以下脚本和配置文件来配置 `default` ServiceAccount。 + +请将下面的配置保存到名为 `account_update.yaml` 的文件中: + +```yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + name: default +automountServiceAccountToken: false +``` + +创建一个名为 `account_update.sh` 的 bash 脚本文件。确保为脚本设置了 `sudo chmod +x account_update.sh`,使脚本具有执行权限: + +```bash +#!/bin/bash -e + +for namespace in $(kubectl get namespaces -A -o=jsonpath="{.items[*]['metadata.name']}"); do + echo -n "Patching namespace $namespace - " + kubectl patch serviceaccount default -n ${namespace} -p "$(cat account_update.yaml)" +done +``` + +执行此脚本,将 `account_update.yaml` 配置应用到所有命名空间中的 `default` ServiceAccount。 + +### API Server 审计配置 + +CIS 1.2.22 到 1.2.25 要求为 API Server 配置审计日志。如果 RKE2 在 `profile` 标志设置为 `cis-1.6` 的情况下启动,它会自动在 API Server 中配置强化的 `--audit-log-` 参数来通过这些 CIS 检查。 + +RKE2 的默认审计策略不会在 API Server 中记录请求。这样,集群操作人员就能灵活地定制符合其审计要求和需求的审计策略,从而满足不同用户的不同环境和策略需求。 + +如果启动时 `profile` 标志设置为 `cis-1.6`,RKE2 会创建默认审计策略。该策略在 `/etc/rancher/rke2/audit-policy.yaml` 中定义。 + +```yaml +apiVersion: audit.k8s.io/v1 +kind: Policy +metadata: + creationTimestamp: null +rules: +- level: None +``` + +要开始记录对 API Server 的请求,你至少必须修改 `level` 参数,例如将其修改为 `Metadata`。有关 API Server 策略配置的详细信息,请参阅 [Kubernetes 文档](https://kubernetes.io/docs/tasks/debug-application-cluster/audit/)。 + +调整审计策略后,RKE2 必须重新启动才能加载新配置。 + +```shell +sudo systemctl restart rke2-server.service +``` + +API Server 审计日志将写入 `/var/lib/rancher/rke2/server/logs/audit.log`。 + +### 已知问题 + +以下是 RKE2 目前没有通过的管控。此处将解释各个差距,以及这些差距是否可以通过手动干预或在未来的版本中解决。 + +#### 管控 1.1.12 +确保 etcd 数据目录所有权设置为 `etcd:etcd` + +**原因** +etcd 是 Kubernetes deployment 使用的高可用键值存储,用于持久存储其所有 REST API 对象。你需要保护此数据目录,避免任何未经授权的读取或写入。它的所有者应该是 `etcd:etcd`。 + +**修正措施** +创建如上所述的 `etcd` 用户和组。 + +#### 管控 5.1.5 +确保未主动使用默认 ServiceAccount + +**原因**:Kubernetes 为集群工作负载提供了一个 `default` ServiceAccount,但没有为 pod 分配特定 ServiceAccount 。 + +如果需要从 pod 访问 Kubernetes API,则需要为该 pod 创建一个特定的 ServiceAccount 并授予权限。 + +你还需要配置 `default` ServiceAccount,使其不提供 ServiceAccount 令牌并且没有任何显式的权限分配。 + +可以通过将每个命名空间中 `default` ServiceAccount 的 `automountServiceAccountToken` 字段更新为 `false` 来解决此问题。 + +**修正措施** +手动更新集群中服务账户上的此字段。 + +#### 管控 5.3.2 +确保所有命名空间都定义了网络策略 + +**原因** +如果你在同一个 Kubernetes 集群上运行不同的应用程序,被感染的应用程序可能会攻击相邻的应用程序。要确保容器只进行所需的通信,网络分段非常重要。网络策略指的是如何允许 Pod 与其他 Pod 以及与其他网络端点进行通信。 + +网络策略是命名空间范围的。为某个命名空间配置网络策略后,该策略不允许的所有其他流量都会被拒绝。但是,如果命名空间没有配置网络策略,则所有流量都会允许进出该命名空间中的 Pod。 + +**修正措施** +在 RKE2 模板配置文件中设置 `profile: "cis-1.6"`。你可以在下方找到示例。 + +### 强化 RKE2 模板配置参考 + +模板配置参考可用于在 Rancher 中创建强化的 RKE2 自定义集群。此参考不包括其他必需的**集群配置**参数,该参数会因你的环境而异。 + +```yaml +apiVersion: provisioning.cattle.io/v1 +kind: Cluster +metadata: + name: + annotations: + {} +# key: string + labels: + {} +# key: string + namespace: fleet-default +spec: + defaultPodSecurityPolicyTemplateName: '' + kubernetesVersion: + localClusterAuthEndpoint: + caCerts: '' + enabled: false + fqdn: '' + rkeConfig: + chartValues: + rke2-canal: + {} + etcd: + disableSnapshots: false + s3: +# bucket: string +# cloudCredentialName: string +# endpoint: string +# endpointCA: string +# folder: string +# region: string +# skipSSLVerify: boolean + snapshotRetention: 5 + snapshotScheduleCron: 0 */5 * * * + machineGlobalConfig: + cni: canal + machinePools: +# - cloudCredentialSecretName: string +# controlPlaneRole: boolean +# displayName: string +# drainBeforeDelete: boolean +# etcdRole: boolean +# labels: +# key: string +# machineConfigRef: +# apiVersion: string +# fieldPath: string +# kind: string +# name: string +# namespace: string +# resourceVersion: string +# uid: string +# machineDeploymentAnnotations: +# key: string +# machineDeploymentLabels: +# key: string +# machineOS: string +# maxUnhealthy: string +# name: string +# nodeStartupTimeout: string +# paused: boolean +# quantity: int +# rollingUpdate: +# maxSurge: string +# maxUnavailable: string +# taints: +# - effect: string +# key: string +# timeAdded: string +# value: string +# unhealthyNodeTimeout: string +# unhealthyRange: string +# workerRole: boolean + machineSelectorConfig: + - config: + profile: cis-1.6 + protect-kernel-defaults: true +# - config: +# +# machineLabelSelector: +# matchExpressions: +# - key: string +# operator: string +# values: +# - string +# matchLabels: +# key: string + registries: + configs: + {} + #authConfigSecretName: string +# caBundle: string +# insecureSkipVerify: boolean +# tlsSecretName: string + mirrors: + {} + #endpoint: +# - string +# rewrite: +# key: string + upgradeStrategy: + controlPlaneConcurrency: 10% + controlPlaneDrainOptions: +# deleteEmptyDirData: boolean +# disableEviction: boolean +# enabled: boolean +# force: boolean +# gracePeriod: int +# ignoreDaemonSets: boolean +# ignoreErrors: boolean +# postDrainHooks: +# - annotation: string +# preDrainHooks: +# - annotation: string +# skipWaitForDeleteTimeoutSeconds: int +# timeout: int + workerConcurrency: 10% + workerDrainOptions: +# deleteEmptyDirData: boolean +# disableEviction: boolean +# enabled: boolean +# force: boolean +# gracePeriod: int +# ignoreDaemonSets: boolean +# ignoreErrors: boolean +# postDrainHooks: +# - annotation: string +# preDrainHooks: +# - annotation: string +# skipWaitForDeleteTimeoutSeconds: int +# timeout: int +# additionalManifest: string +# etcdSnapshotCreate: +# generation: int +# etcdSnapshotRestore: +# generation: int +# name: string +# restoreRKEConfig: string +# infrastructureRef: +# apiVersion: string +# fieldPath: string +# kind: string +# name: string +# namespace: string +# resourceVersion: string +# uid: string +# provisionGeneration: int +# rotateCertificates: +# generation: int +# services: +# - string +# rotateEncryptionKeys: +# generation: int + machineSelectorConfig: + - config: {} +# agentEnvVars: +# - name: string +# value: string +# cloudCredentialSecretName: string +# clusterAPIConfig: +# clusterName: string +# defaultClusterRoleForProjectMembers: string +# enableNetworkPolicy: boolean +# redeploySystemAgentGeneration: int +__clone: true +``` + +### 结论 + +如果你遵循本指南,Rancher 配置的 RKE2 自定义集群将能通过 CIS Kubernetes Benchmark。如需了解我们验证 Benchmark 的方式,以及你如何在集群上执行相同的操作,请参阅 Rancher 的 [RKE2 CIS Benchmark 自我评估指南 1.6](rke2-self-assessment-guide-with-cis-v1.6-benchmark.md)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/rancher-security/rancher-v2.6-hardening-guides/rke2-self-assessment-guide-with-cis-v1.6-benchmark.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/rancher-security/rancher-v2.6-hardening-guides/rke2-self-assessment-guide-with-cis-v1.6-benchmark.md new file mode 100644 index 00000000000..2ff5d7af080 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/rancher-security/rancher-v2.6-hardening-guides/rke2-self-assessment-guide-with-cis-v1.6-benchmark.md @@ -0,0 +1,3165 @@ +--- +title: RKE2 CIS 1.6 Benchmark - 自我评估指南 - Rancher 2.6 +weight: 101 +--- + +### CIS 1.6 Kubernetes Benchmark - Rancher 2.6 RKE2 与 Kubernetes 1.21 到 1.23 + +[点击此处下载本文档的 PDF 版本](https://releases.rancher.com/documents/security/2.6/Rancher_RKE2_v2-6_CIS_v1-6_Benchmark_Assessment.pdf)。 + +#### 概述 + +本文档是 [Rancher 2.6 RKE2 安全强化指南](rke2-hardening-guide-with-cis-v1.6-benchmark.md)的配套文件。强化指南(Hardening Guide)为通过 RKE2 配置集群的 Rancher 强化生产安装提供了说明,本 Benchmark 指南旨在帮助你根据 Benchmark 来评估强化集群的安全级别。 + +本指南对应以下强化指南、Rancher、CIS Benchmark 和 Kubernetes 版本: + +| 强化指南版本 | Rancher 版本 | CIS Benchmark 版本 | Kubernetes 版本 | +| ----------------------- | --------------- | --------------------- | ------------------- | +| 强化指南 CIS v1.6 Benchmark | Rancher v2.6.5+ | CIS v1.6 | Kubernetes v1.21 到 v1.23 | + +由于 Rancher 和 RKE2 将 Kubernetes 服务安装为容器,因此 CIS Kubernetes Benchmark 中的许多管控验证检查都不适用,且结果会是 `Not Applicable`。本指南将介绍各种管控,并提供更新的示例命令来审核 Rancher 创建的集群的合规性。 + +本文档供 Rancher 开发、安全团队、审计员和决策者使用。 + +有关各个审核的更多详细信息,包括失败测试的理由和修正措施,你可以参考 CIS Kubernetes Benchmark v1.6 的对应内容。创建免费帐户后,你可以在 [Center for Internet Security (CIS)](https://www.cisecurity.org/benchmark/kubernetes/) 下载 Benchmark。 + +#### 测试管控方法 + +RKE2 将 controlplane 组件作为由 kubelet 管理的静态 pod 启动,并使用 containerd 作为容器运行时。配置是通过初始化时传递给容器的参数或配置文件定义的。 + +如果管控审计与原始 CIS Benchmark 出现差异,针对 Rancher 提供的的审计命令可用于进行测试。执行测试时,你需要访问所有 RKE2 节点主机上的命令行。这些命令还使用了测试和评估测试结果所需的 [kubectl](https://kubernetes.io/docs/tasks/tools/)(带有有效的配置文件)和 [jq](https://stedolan.github.io/jq/) 工具。 + +:::note + +本指南仅介绍 `automated` 测试(以前称为 `scored`)。 + +::: + +### 管控 + +--- +## 1.1Master 节点配置文件 +### 1.1.1确保 API Server pod 规范文件权限具有 644 或更严格的设置(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上运行以下命令(基于系统上的文件位置)。 +例如:chmod 644 /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml + +**审计**: + +```bash +stat -c %a /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml +``` + +**预期结果**: + +```console +'permissions' is not present +``` + +**返回值**: + +```console +644 +``` + +### 1.1.2确保 API Server pod 规范文件所有权设置为 root:root(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上运行以下命令(基于系统上的文件位置)。 +例如:chown root:root /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml + +**审计**: + +```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' +``` + +**预期结果**: + +```console +'root:root' is equal to 'root:root' +``` + +**返回值**: + +```console +root:root +``` + +### 1.1.3确保 Controller Manager pod 规范文件权限具有 644 或更严格的设置(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上运行以下命令(基于系统上的文件位置)。 +例如:chmod 644 /var/lib/rancher/rke2/agent/pod-manifests/kube-controller-manager.yaml + +**审计**: + +```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' +``` + +**预期结果**: + +```console +'644' is equal to '644' +``` + +**返回值**: + +```console +644 +``` + +### 1.1.4确保 Controller Manager pod 规范文件所有权设置为 root:root(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上运行以下命令(基于系统上的文件位置)。 +例如:chown root:root /var/lib/rancher/rke2/agent/pod-manifests/kube-controller-manager.yaml + +**审计**: + +```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' +``` + +**预期结果**: + +```console +'root:root' is equal to 'root:root' +``` + +**返回值**: + +```console +root:root +``` + +### 1.1.5确保 Scheduler pod 规范文件权限具有 644 或更严格的设置(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上运行以下命令(基于系统上的文件位置)。 +例如:chmod 644 /var/lib/rancher/rke2/agent/pod-manifests/kube-scheduler.yaml + +**审计**: + +```bash +/bin/sh -c 'if test -e /var/lib/rancher/rke2/agent/pod-manifests/kube-scheduler.yaml; then stat -c %a /var/lib/rancher/rke2/agent/pod-manifests/kube-scheduler.yaml; fi' +``` + +**预期结果**: + +```console +'permissions' is not present +``` + +**返回值**: + +```console +644 +``` + +### 1.1.6确保 Scheduler pod 规范文件所有权设置为 root:root(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上运行以下命令(基于系统上的文件位置)。 +例如:chown root:root /var/lib/rancher/rke2/agent/pod-manifests/kube-scheduler.yaml + +**审计**: + +```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' +``` + +**预期结果**: + +```console +'root:root' is present +``` + +**返回值**: + +```console +root:root +``` + +### 1.1.7确保 etcd pod 规范文件权限具有 644 或更严格的设置(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上运行以下命令(基于系统上的文件位置)。 +例如:chmod 644 /var/lib/rancher/rke2/agent/pod-manifests/etcd.yaml + +**审计**: + +```bash +/bin/sh -c 'if test -e /var/lib/rancher/rke2/agent/pod-manifests/etcd.yaml; then stat -c %a /var/lib/rancher/rke2/agent/pod-manifests/etcd.yaml; fi' +``` + +**预期结果**: + +```console +'644' is equal to '644' +``` + +**返回值**: + +```console +644 +``` + +### 1.1.8确保 etcd pod 规范文件所有权设置为 root:root(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上运行以下命令(基于系统上的文件位置)。 +例如:chown root:root /var/lib/rancher/rke2/agent/pod-manifests/etcd.yaml + +**审计**: + +```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' +``` + +**预期结果**: + +```console +'root:root' is equal to 'root:root' +``` + +**返回值**: + +```console +root:root +``` + +### 1.1.9确保容器网络接口文件权限设置为 644 或更严格的设置(手动) + + +**结果**:warn + +**修正措施**: +在 Master 节点上运行以下命令(基于系统上的文件位置)。 +例如:chmod 644 + +**审计**: + +```bash +stat -c %a +``` + +### 1.1.10确保容器网络接口文件所有权设置为 root:root(手动) + + +**结果**:warn + +**修正措施**: +在 Master 节点上运行以下命令(基于系统上的文件位置)。 +例如:chown root:root + +**审计**: + +```bash +stat -c %U:%G +``` + +### 1.1.11确保 etcd 数据目录权限设置为 700 或更严格的设置(自动) + + +**结果**:pass + +**修正措施**: +在 etcd 服务器节点上,通过以下命令获取 etcd 数据目录(作为 `--data-dir` 参数传递)。 +ps -ef | grep etcd +基于上面找到的 etcd 数据目录运行以下命令。例如:chmod 700 /var/lib/etcd + +**审计**: + +```bash +stat -c %a /var/lib/rancher/rke2/server/db/etcd +``` + +**预期结果**: + +```console +'permissions' is not present +``` + +**返回值**: + +```console +700 +``` + +### 1.1.12确保 etcd 数据目录所有权设置为 etcd:etcd(自动) + + +**结果**:pass + +**修正措施**: +在 etcd 服务器节点上,通过以下命令获取 etcd 数据目录(作为 `--data-dir` 参数传递)。 +ps -ef | grep etcd +基于上面找到的 etcd 数据目录运行以下命令。 +例如:chown etcd:etcd /var/lib/etcd + +**审计**: + +```bash +stat -c %U:%G /var/lib/rancher/rke2/server/db/etcd +``` + +**预期结果**: + +```console +'etcd:etcd' is present +``` + +**返回值**: + +```console +etcd:etcd +``` + +### 1.1.13确保 admin.conf 文件权限具有 644 或更严格的设置(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上运行以下命令(基于系统上的文件位置)。 +例如:chmod 644 /etc/kubernetes/admin.conf + +**审计**: + +```bash +stat -c %a /var/lib/rancher/rke2/server/cred/admin.kubeconfig +``` + +**预期结果**: + +```console +'permissions' is not present +``` + +**返回值**: + +```console +644 +``` + +### 1.1.14确保 admin.conf 文件所有权设置为 root:root(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上运行以下命令(基于系统上的文件位置)。 +例如:chown root:root /etc/kubernetes/admin.conf + +**审计**: + +```bash +stat -c %U:%G /var/lib/rancher/rke2/server/cred/admin.kubeconfig +``` + +**预期结果**: + +```console +'root:root' is equal to 'root:root' +``` + +**返回值**: + +```console +root:root +``` + +### 1.1.15确保 scheduler.conf 文件权限具有 644 或更严格的设置(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上运行以下命令(基于系统上的文件位置)。 +例如:chmod 644 scheduler + +**审计**: + +```bash +stat -c %a /var/lib/rancher/rke2/server/cred/scheduler.kubeconfig +``` + +**预期结果**: + +```console +'permissions' is not present +``` + +**返回值**: + +```console +644 +``` + +### 1.1.16确保 scheduler.conf 文件所有权设置为 root:root(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上运行以下命令(基于系统上的文件位置)。 +例如:chown root:root scheduler + +**审计**: + +```bash +stat -c %U:%G /var/lib/rancher/rke2/server/cred/scheduler.kubeconfig +``` + +**预期结果**: + +```console +'root:root' is equal to 'root:root' +``` + +**返回值**: + +```console +root:root +``` + +### 1.1.17确保 controller-manager.conf 文件权限具有 644 或更严格的设置(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上运行以下命令(基于系统上的文件位置)。 +例如:chmod 644 controllermanager + +**审计**: + +```bash +stat -c %a /var/lib/rancher/rke2/server/cred/controller.kubeconfig +``` + +**预期结果**: + +```console +'permissions' is not present +``` + +**返回值**: + +```console +644 +``` + +### 1.1.18确保将 controller-manager.conf 文件所有权设置为 root:root(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上运行以下命令(基于系统上的文件位置)。 +例如:chown root:root controllermanager + +**审计**: + +```bash +stat -c %U:%G /var/lib/rancher/rke2/server/cred/controller.kubeconfig +``` + +**预期结果**: + +```console +'root:root' is equal to 'root:root' +``` + +**返回值**: + +```console +root:root +``` + +### 1.1.19确保 Kubernetes PKI 目录和文件所有权设置为 root:root(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上运行以下命令(基于系统上的文件位置)。 +例如:chown -R root:root /etc/kubernetes/pki/ + +**审计**: + +```bash +stat -c %U:%G /var/lib/rancher/rke2/server/tls +``` + +**预期结果**: + +```console +'root:root' is equal to 'root:root' +``` + +**返回值**: + +```console +root:root +``` + +### 1.1.20确保将 Kubernetes PKI 证书文件权限设置为 644 或更严格的设置(手动) + + +**结果**:warn + +**修正措施**: +在 Master 节点上运行以下命令(基于系统上的文件位置)。 +例如:chmod -R 644 /var/lib/rancher/rke2/server/tls/*.crt + +**审计脚本**:`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 + +``` + +**审计执行**: + +```bash +./check_files_permissions.sh /var/lib/rancher/rke2/server/tls/*.crt +``` + +### 1.1.21确保 Kubernetes PKI 密钥文件权限设置为 600(手动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上运行以下命令(基于系统上的文件位置)。 +例如:chmod -R 600 /etc/kubernetes/pki/*.key + +**审计脚本**:`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 + +``` + +**审计执行**: + +```bash +./check_files_permissions.sh /var/lib/rancher/rke2/server/tls/*.key +``` + +**预期结果**: + +```console +'permissions' is not present +``` + +**返回值**: + +```console +true +``` + +## 1.2API Server +### 1.2.1确保 --anonymous-auth 参数设置为 false(手动) + + +**结果**:warn + +**修正措施**: +在 Master 节点上编辑 API Server pod 规范文件 /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml 并设置以下参数。 +--anonymous-auth=false + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +### 1.2.2确保未设置 --basic-auth-file 参数(自动) + + +**结果**:pass + +**修正措施**: +遵循文档并配置身份验证的替代机制。然后,在 Master 节点上编辑 API Server pod 规范文件 /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml 并移除 `--basic-auth-file=` 参数。 + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**预期结果**: + +```console +'--basic-auth-file' is not present +``` + +**返回值**: + +```console +root 5275 5222 15 14:58 ?00:01:26 kube-apiserver --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --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 --enable-admission-plugins=NodeRestriction,PodSecurityPolicy --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 --insecure-port=0 --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 --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.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-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 5522 5416 3 14:58 ?00:00:16 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --address=127.0.0.1 --allocate-node-cidrs=true --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.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.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.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/client-ca.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --configure-cloud-routes=false --controllers=*,-service,-route,-cloud-node-lifecycle --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --port=10252 --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.key --use-service-account-credentials=true +``` + +### 1.2.3确保未设置 --token-auth-file 参数(自动) + + +**结果**:pass + +**修正措施**: +遵循文档并配置身份验证的替代机制。然后,在 Master 节点上编辑 API Server pod 规范文件 /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml 并移除 `--token-auth-file=` 参数。 + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**预期结果**: + +```console +'--token-auth-file' is not present +``` + +**返回值**: + +```console +root 5275 5222 15 14:58 ?00:01:26 kube-apiserver --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --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 --enable-admission-plugins=NodeRestriction,PodSecurityPolicy --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 --insecure-port=0 --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 --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.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-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 5522 5416 3 14:58 ?00:00:16 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --address=127.0.0.1 --allocate-node-cidrs=true --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.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.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.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/client-ca.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --configure-cloud-routes=false --controllers=*,-service,-route,-cloud-node-lifecycle --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --port=10252 --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.key --use-service-account-credentials=true +``` + +### 1.2.4确保 --kubelet-https 参数设置为 true(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上编辑 API Server pod 规范文件 /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml 并移除 `--kubelet-https` 参数。 + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**预期结果**: + +```console +'--kubelet-https' is not present OR '--kubelet-https' is not present +``` + +**返回值**: + +```console +root 5275 5222 15 14:58 ?00:01:26 kube-apiserver --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --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 --enable-admission-plugins=NodeRestriction,PodSecurityPolicy --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 --insecure-port=0 --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 --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.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-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 5522 5416 3 14:58 ?00:00:16 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --address=127.0.0.1 --allocate-node-cidrs=true --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.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.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.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/client-ca.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --configure-cloud-routes=false --controllers=*,-service,-route,-cloud-node-lifecycle --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --port=10252 --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.key --use-service-account-credentials=true +``` + +### 1.2.5确保正确设置了 --kubelet-client-certificate 和 --kubelet-client-key 参数(自动) + + +**结果**:pass + +**修正措施**: +遵循 Kubernetes 文档设置 apiserver 和 kubelets 的 TLS 连接。然后,在 Master 节点上编辑 API Server pod 规范文件 /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml,并设置以下 kubelet 客户端证书和密钥参数。 +--kubelet-client-certificate= +--kubelet-client-key= + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**预期结果**: + +```console +'--kubelet-client-certificate' is present AND '--kubelet-client-key' is present +``` + +**返回值**: + +```console +root 5275 5222 15 14:58 ?00:01:26 kube-apiserver --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --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 --enable-admission-plugins=NodeRestriction,PodSecurityPolicy --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 --insecure-port=0 --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 --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.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-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 5522 5416 3 14:58 ?00:00:16 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --address=127.0.0.1 --allocate-node-cidrs=true --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.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.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.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/client-ca.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --configure-cloud-routes=false --controllers=*,-service,-route,-cloud-node-lifecycle --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --port=10252 --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.key --use-service-account-credentials=true +``` + +### 1.2.6确保根据需要设置 --kubelet-certificate-authority 参数(自动) + + +**结果**:pass + +**修正措施**: +遵循 Kubernetes 文档设置 apiserver 和 kubelets 的 TLS 连接。然后,在 Master 节点上编辑 API Server pod 规范文件 /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml,并将 `--kubelet-certificate-authority` 参数设置为 CA 证书文件的路径。 +`--kubelet-certificate-authority=` + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**预期结果**: + +```console +'--kubelet-certificate-authority' is present +``` + +**返回值**: + +```console +root 5275 5222 15 14:58 ?00:01:26 kube-apiserver --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --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 --enable-admission-plugins=NodeRestriction,PodSecurityPolicy --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 --insecure-port=0 --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 --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.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-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 5522 5416 3 14:58 ?00:00:16 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --address=127.0.0.1 --allocate-node-cidrs=true --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.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.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.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/client-ca.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --configure-cloud-routes=false --controllers=*,-service,-route,-cloud-node-lifecycle --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --port=10252 --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.key --use-service-account-credentials=true +``` + +### 1.2.7确保 --authorization-mode 参数未设置为 AlwaysAllow(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上编辑 API Server pod 规范文件 /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml,并将 `--authorization-mode` 参数设置为 `AlwaysAllow` 以外的值。 +示例如下。 +--authorization-mode=RBAC + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**预期结果**: + +```console +'Node,RBAC' not have 'AlwaysAllow' +``` + +**返回值**: + +```console +root 5275 5222 15 14:58 ?00:01:26 kube-apiserver --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --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 --enable-admission-plugins=NodeRestriction,PodSecurityPolicy --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 --insecure-port=0 --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 --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.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-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 5522 5416 3 14:58 ?00:00:16 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --address=127.0.0.1 --allocate-node-cidrs=true --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.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.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.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/client-ca.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --configure-cloud-routes=false --controllers=*,-service,-route,-cloud-node-lifecycle --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --port=10252 --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.key --use-service-account-credentials=true +``` + +### 1.2.8确保 --authorization-mode 参数包括 Node(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上编辑 API Server pod 规范文件 /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml,并将 `--authorization-mode` 参数设置为包含 `Node` 的值。 +--authorization-mode=Node,RBAC + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**预期结果**: + +```console +'Node,RBAC' has 'Node' +``` + +**返回值**: + +```console +root 5275 5222 15 14:58 ?00:01:26 kube-apiserver --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --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 --enable-admission-plugins=NodeRestriction,PodSecurityPolicy --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 --insecure-port=0 --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 --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.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-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 5522 5416 3 14:58 ?00:00:16 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --address=127.0.0.1 --allocate-node-cidrs=true --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.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.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.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/client-ca.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --configure-cloud-routes=false --controllers=*,-service,-route,-cloud-node-lifecycle --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --port=10252 --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.key --use-service-account-credentials=true +``` + +### 1.2.9确保 --authorization-mode 参数包括 RBAC(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上编辑 API Server pod 规范文件 /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml,并将 `--authorization-mode` 参数设置为包含 `RBAC` 的值。 +例如:--authorization-mode=Node,RBAC + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**预期结果**: + +```console +'Node,RBAC' has 'RBAC' +``` + +**返回值**: + +```console +root 5275 5222 15 14:58 ?00:01:26 kube-apiserver --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --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 --enable-admission-plugins=NodeRestriction,PodSecurityPolicy --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 --insecure-port=0 --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 --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.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-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 5522 5416 3 14:58 ?00:00:16 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --address=127.0.0.1 --allocate-node-cidrs=true --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.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.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.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/client-ca.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --configure-cloud-routes=false --controllers=*,-service,-route,-cloud-node-lifecycle --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --port=10252 --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.key --use-service-account-credentials=true +``` + +### 1.2.10确保设置了准入控制插件 EventRateLimit(手动) + + +**结果**:warn + +**修正措施**: +遵循 Kubernetes 文档并在配置文件中设置所需的限制。 +然后,编辑 API Server pod 规范文件 /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml,并设置以下参数。 +--enable-admission-plugins=...,EventRateLimit,... +--admission-control-config-file= + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +### 1.2.11确保未设置准入控制插件 AlwaysAdmit(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上编辑 API Server pod 规范文件 /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml,并删除 `--enable-admission-plugins` 参数,或将其设置为不包含 `AlwaysAdmit` 的值。 + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**预期结果**: + +```console +'NodeRestriction,PodSecurityPolicy' not have 'AlwaysAdmit' OR '--enable-admission-plugins' is not present +``` + +**返回值**: + +```console +root 5275 5222 15 14:58 ?00:01:26 kube-apiserver --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --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 --enable-admission-plugins=NodeRestriction,PodSecurityPolicy --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 --insecure-port=0 --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 --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.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-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 5522 5416 3 14:58 ?00:00:16 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --address=127.0.0.1 --allocate-node-cidrs=true --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.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.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.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/client-ca.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --configure-cloud-routes=false --controllers=*,-service,-route,-cloud-node-lifecycle --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --port=10252 --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.key --use-service-account-credentials=true +``` + +### 1.2.12确保设置了准入控制插件 AlwaysPullImages(手动) + + +**结果**:warn + +**修正措施**: +在 Master 节点上编辑 API Server pod 规范文件 /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml,并将 `--enable-admission-plugins` 参数设置为包含 `AlwaysPullImages`。 +--enable-admission-plugins=...,AlwaysPullImages,... + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +### 1.2.13如果没有使用 PodSecurityPolicy,请确保设置了准入控制插件 SecurityContextDeny(手动) + + +**结果**:warn + +**修正措施**: +在 Master 节点上编辑 API Server pod 规范文件 /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml,并将 `--enable-admission-plugins` 参数设置为包括 `SecurityContextDeny`,除非已设置了 PodSecurityPolicy。 +--enable-admission-plugins=...,SecurityContextDeny,... + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +### 1.2.14确保设置了准入控制插件 ServiceAccount(自动) + + +**结果**:pass + +**修正措施**: +遵循文档并根据你的环境创建 ServiceAccount 对象。 +然后,在 Master 节点上编辑 API Server pod 规范文件 /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml,并确保 `--disable-admission-plugins` 参数设置为不包含 ServiceAccount 的值。 + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**预期结果**: + +```console +'--disable-admission-plugins' is not present OR '--disable-admission-plugins' is not present +``` + +**返回值**: + +```console +root 5275 5222 15 14:58 ?00:01:26 kube-apiserver --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --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 --enable-admission-plugins=NodeRestriction,PodSecurityPolicy --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 --insecure-port=0 --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 --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.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-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 5522 5416 3 14:58 ?00:00:16 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --address=127.0.0.1 --allocate-node-cidrs=true --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.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.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.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/client-ca.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --configure-cloud-routes=false --controllers=*,-service,-route,-cloud-node-lifecycle --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --port=10252 --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.key --use-service-account-credentials=true +``` + +### 1.2.15确保设置了准入控制插件 NamespaceLifecycle(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上编辑 API Server pod 规范文件 /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml,并设置 `--disable-admission-plugins` 参数,确保它不包含 NamespaceLifecycle。 + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**预期结果**: + +```console +'--disable-admission-plugins' is not present OR '--disable-admission-plugins' is not present +``` + +**返回值**: + +```console +root 5275 5222 15 14:58 ?00:01:26 kube-apiserver --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --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 --enable-admission-plugins=NodeRestriction,PodSecurityPolicy --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 --insecure-port=0 --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 --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.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-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 5522 5416 3 14:58 ?00:00:16 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --address=127.0.0.1 --allocate-node-cidrs=true --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.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.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.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/client-ca.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --configure-cloud-routes=false --controllers=*,-service,-route,-cloud-node-lifecycle --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --port=10252 --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.key --use-service-account-credentials=true +``` + +### 1.2.16确保设置了准入控制插件 PodSecurityPolicy(自动) + + +**结果**:pass + +**修正措施**: +遵循文档并根据你的环境创建 Pod 安全策略对象。 +然后,在 Master 节点上编辑 API Server pod 规范文件 /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml,并将 `--enable-admission-plugins` 参数设置为包含 PodSecurityPolicy 的值: +--enable-admission-plugins=...,PodSecurityPolicy,... +然后重新启动 API Server。 + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**预期结果**: + +```console +'NodeRestriction,PodSecurityPolicy' has 'PodSecurityPolicy' +``` + +**返回值**: + +```console +root 5275 5222 15 14:58 ?00:01:26 kube-apiserver --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --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 --enable-admission-plugins=NodeRestriction,PodSecurityPolicy --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 --insecure-port=0 --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 --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.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-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 5522 5416 3 14:58 ?00:00:16 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --address=127.0.0.1 --allocate-node-cidrs=true --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.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.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.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/client-ca.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --configure-cloud-routes=false --controllers=*,-service,-route,-cloud-node-lifecycle --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --port=10252 --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.key --use-service-account-credentials=true +``` + +### 1.2.17确保设置了准入控制插件 NodeRestriction(自动) + + +**结果**:pass + +**修正措施**: +按照 Kubernetes 文档,在 kubelets 上配置 NodeRestriction 插件。 +然后,在 Master 节点上编辑 API Server pod 规范文件 /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml,并将 `--enable-admission-plugins` 参数设置为包含 NodeRestriction 的值。 +--enable-admission-plugins=...,NodeRestriction,... + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**预期结果**: + +```console +'NodeRestriction,PodSecurityPolicy' has 'NodeRestriction' +``` + +**返回值**: + +```console +root 5275 5222 15 14:58 ?00:01:26 kube-apiserver --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --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 --enable-admission-plugins=NodeRestriction,PodSecurityPolicy --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 --insecure-port=0 --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 --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.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-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 5522 5416 3 14:58 ?00:00:16 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --address=127.0.0.1 --allocate-node-cidrs=true --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.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.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.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/client-ca.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --configure-cloud-routes=false --controllers=*,-service,-route,-cloud-node-lifecycle --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --port=10252 --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.key --use-service-account-credentials=true +``` + +### 1.2.18确保未设置 --insecure-bind-address 参数(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上编辑 API Server pod 规范文件 /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml 并移除 `--insecure-bind-address` 参数。 + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**预期结果**: + +```console +'--insecure-bind-address' is not present +``` + +**返回值**: + +```console +root 5275 5222 15 14:58 ?00:01:26 kube-apiserver --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --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 --enable-admission-plugins=NodeRestriction,PodSecurityPolicy --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 --insecure-port=0 --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 --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.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-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 5522 5416 3 14:58 ?00:00:16 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --address=127.0.0.1 --allocate-node-cidrs=true --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.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.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.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/client-ca.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --configure-cloud-routes=false --controllers=*,-service,-route,-cloud-node-lifecycle --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --port=10252 --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.key --use-service-account-credentials=true +``` + +### 1.2.19确保 --insecure-port 参数设置为 0(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上编辑 API Server pod 规范文件 /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml 并设置以下参数。 +--insecure-port=0 + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**预期结果**: + +```console +'0' is equal to '0' +``` + +**返回值**: + +```console +root 5275 5222 15 14:58 ?00:01:26 kube-apiserver --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --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 --enable-admission-plugins=NodeRestriction,PodSecurityPolicy --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 --insecure-port=0 --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 --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.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-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 5522 5416 3 14:58 ?00:00:16 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --address=127.0.0.1 --allocate-node-cidrs=true --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.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.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.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/client-ca.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --configure-cloud-routes=false --controllers=*,-service,-route,-cloud-node-lifecycle --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --port=10252 --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.key --use-service-account-credentials=true +``` + +### 1.2.20确保 --secure-port 参数未设置为 0(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上编辑 API Server pod 规范文件 /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml,并删除 `--secure-port` 参数或将其设置为另一个所需端口(非零)。 + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**预期结果**: + +```console +6443 is greater than 0 OR '--secure-port' is not present +``` + +**返回值**: + +```console +root 5275 5222 15 14:58 ?00:01:26 kube-apiserver --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --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 --enable-admission-plugins=NodeRestriction,PodSecurityPolicy --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 --insecure-port=0 --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 --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.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-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 5522 5416 3 14:58 ?00:00:16 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --address=127.0.0.1 --allocate-node-cidrs=true --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.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.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.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/client-ca.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --configure-cloud-routes=false --controllers=*,-service,-route,-cloud-node-lifecycle --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --port=10252 --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.key --use-service-account-credentials=true +``` + +### 1.2.21确保 --profiling 参数设置为 false(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上编辑 API Server pod 规范文件 /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml 并设置以下参数。 +--profiling=false + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**预期结果**: + +```console +'false' is equal to 'false' +``` + +**返回值**: + +```console +root 5275 5222 15 14:58 ?00:01:26 kube-apiserver --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --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 --enable-admission-plugins=NodeRestriction,PodSecurityPolicy --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 --insecure-port=0 --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 --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.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-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 5522 5416 3 14:58 ?00:00:16 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --address=127.0.0.1 --allocate-node-cidrs=true --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.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.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.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/client-ca.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --configure-cloud-routes=false --controllers=*,-service,-route,-cloud-node-lifecycle --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --port=10252 --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.key --use-service-account-credentials=true +``` + +### 1.2.22确保设置了 --audit-log-path 参数(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上编辑 API Server pod 规范文件 /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml,并将 `--audit-log-path` 参数设置为所需的路径以及要写入审计日志的文件。 +例如:--audit-log-path=/var/log/apiserver/audit.log + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**预期结果**: + +```console +'--audit-log-path' is present +``` + +**返回值**: + +```console +root 5275 5222 15 14:58 ?00:01:26 kube-apiserver --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --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 --enable-admission-plugins=NodeRestriction,PodSecurityPolicy --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 --insecure-port=0 --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 --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.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-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 5522 5416 3 14:58 ?00:00:16 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --address=127.0.0.1 --allocate-node-cidrs=true --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.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.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.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/client-ca.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --configure-cloud-routes=false --controllers=*,-service,-route,-cloud-node-lifecycle --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --port=10252 --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.key --use-service-account-credentials=true +``` + +### 1.2.23确保将 --audit-log-maxage 参数设置为 30 或适当的数值(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上编辑 API Server pod 规范文件 /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml,并将 `--audit-log-maxage` 参数设置为 30 或适当的天数: +--audit-log-maxage=30 + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**预期结果**: + +```console +30 is greater or equal to 30 +``` + +**返回值**: + +```console +root 5275 5222 15 14:58 ?00:01:26 kube-apiserver --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --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 --enable-admission-plugins=NodeRestriction,PodSecurityPolicy --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 --insecure-port=0 --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 --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.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-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 5522 5416 3 14:58 ?00:00:16 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --address=127.0.0.1 --allocate-node-cidrs=true --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.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.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.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/client-ca.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --configure-cloud-routes=false --controllers=*,-service,-route,-cloud-node-lifecycle --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --port=10252 --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.key --use-service-account-credentials=true +``` + +### 1.2.24确保 --audit-log-maxbackup 参数设置为 10 或适当的数值(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上编辑 API Server pod 规范文件 /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml,并将 `--audit-log-maxbackup` 参数设置为 10 或适当的数值。 +--audit-log-maxbackup=10 + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**预期结果**: + +```console +10 is greater or equal to 10 +``` + +**返回值**: + +```console +root 5275 5222 15 14:58 ?00:01:26 kube-apiserver --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --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 --enable-admission-plugins=NodeRestriction,PodSecurityPolicy --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 --insecure-port=0 --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 --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.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-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 5522 5416 3 14:58 ?00:00:16 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --address=127.0.0.1 --allocate-node-cidrs=true --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.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.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.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/client-ca.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --configure-cloud-routes=false --controllers=*,-service,-route,-cloud-node-lifecycle --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --port=10252 --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.key --use-service-account-credentials=true +``` + +### 1.2.25确保 --audit-log-maxsize 参数设置为 100 或适当的数值(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上编辑 API Server pod 规范文件 /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml,并将 `--audit-log-maxsize` 参数设置为适当的大小(以 MB 为单位)。 +例如,要将其设置为 100 MB: +--audit-log-maxsize=100 + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**预期结果**: + +```console +100 is greater or equal to 100 +``` + +**返回值**: + +```console +root 5275 5222 15 14:58 ?00:01:26 kube-apiserver --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --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 --enable-admission-plugins=NodeRestriction,PodSecurityPolicy --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 --insecure-port=0 --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 --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.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-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 5522 5416 3 14:58 ?00:00:16 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --address=127.0.0.1 --allocate-node-cidrs=true --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.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.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.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/client-ca.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --configure-cloud-routes=false --controllers=*,-service,-route,-cloud-node-lifecycle --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --port=10252 --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.key --use-service-account-credentials=true +``` + +### 1.2.26确保能根据需要设置 --request-timeout 参数(自动) + + +**结果**:pass + +**修正措施**: +编辑 API Server pod 规范文件 /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml,并根据需要设置以下参数。 +例如:--request-timeout=300s + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**预期结果**: + +```console +'--request-timeout' is not present OR '--request-timeout' is not present +``` + +**返回值**: + +```console +root 5275 5222 15 14:58 ?00:01:26 kube-apiserver --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --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 --enable-admission-plugins=NodeRestriction,PodSecurityPolicy --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 --insecure-port=0 --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 --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.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-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 5522 5416 3 14:58 ?00:00:16 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --address=127.0.0.1 --allocate-node-cidrs=true --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.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.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.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/client-ca.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --configure-cloud-routes=false --controllers=*,-service,-route,-cloud-node-lifecycle --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --port=10252 --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.key --use-service-account-credentials=true +``` + +### 1.2.27确保 --service-account-lookup 参数设置为 true(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上编辑 API Server pod 规范文件 /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml 并设置以下参数。 +--service-account-lookup=true + +你也可以删除此文件的 --service-account-lookup 参数,从而使默认设置生效。 + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**预期结果**: + +```console +'--service-account-lookup' is not present OR '--service-account-lookup' is not present +``` + +**返回值**: + +```console +root 5275 5222 15 14:58 ?00:01:26 kube-apiserver --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --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 --enable-admission-plugins=NodeRestriction,PodSecurityPolicy --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 --insecure-port=0 --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 --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.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-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 5522 5416 3 14:58 ?00:00:16 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --address=127.0.0.1 --allocate-node-cidrs=true --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.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.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.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/client-ca.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --configure-cloud-routes=false --controllers=*,-service,-route,-cloud-node-lifecycle --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --port=10252 --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.key --use-service-account-credentials=true +``` + +### 1.2.28确保根据需要设置 --service-account-key-file 参数(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上编辑 API Server pod 规范文件 /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml,并为 ServiceAccount 将 `--service-account-key-file` 参数设置为公钥文件: +`--service-account-key-file=` + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**预期结果**: + +```console +'--service-account-key-file' is present +``` + +**返回值**: + +```console +root 5275 5222 15 14:58 ?00:01:26 kube-apiserver --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --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 --enable-admission-plugins=NodeRestriction,PodSecurityPolicy --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 --insecure-port=0 --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 --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.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-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 5522 5416 3 14:58 ?00:00:16 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --address=127.0.0.1 --allocate-node-cidrs=true --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.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.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.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/client-ca.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --configure-cloud-routes=false --controllers=*,-service,-route,-cloud-node-lifecycle --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --port=10252 --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.key --use-service-account-credentials=true +``` + +### 1.2.29确保根据需要设置 --etcd-certfile 和 --etcd-keyfile 参数(自动) + + +**结果**:pass + +**修正措施**: +遵循 Kubernetes 文档设置 apiserver 和 etcd 的 TLS 连接。 +然后,在 Master 节点上编辑 API Server pod 规范文件 /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml,并设置 etcd 证书和密钥文件参数。 +`--etcd-certfile=` +`--etcd-keyfile=` + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**预期结果**: + +```console +'--etcd-certfile' is present AND '--etcd-keyfile' is present +``` + +**返回值**: + +```console +root 5275 5222 15 14:58 ?00:01:26 kube-apiserver --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --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 --enable-admission-plugins=NodeRestriction,PodSecurityPolicy --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 --insecure-port=0 --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 --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.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-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 5522 5416 3 14:58 ?00:00:16 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --address=127.0.0.1 --allocate-node-cidrs=true --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.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.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.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/client-ca.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --configure-cloud-routes=false --controllers=*,-service,-route,-cloud-node-lifecycle --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --port=10252 --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.key --use-service-account-credentials=true +``` + +### 1.2.30确保根据需要设置 --tls-cert-file 和 --tls-private-key-file 参数(自动) + + +**结果**:pass + +**修正措施**: +遵循 Kubernetes 文档并在 apiserver 上设置 TLS 连接。 +然后,在 Master 节点上编辑 API Server pod 规范文件 /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml,并设置 TLS 证书和私钥文件参数。 +`--tls-cert-file=` +`--tls-private-key-file=` + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**预期结果**: + +```console +'--tls-cert-file' is present AND '--tls-private-key-file' is present +``` + +**返回值**: + +```console +root 5275 5222 15 14:58 ?00:01:26 kube-apiserver --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --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 --enable-admission-plugins=NodeRestriction,PodSecurityPolicy --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 --insecure-port=0 --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 --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.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-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 5522 5416 3 14:58 ?00:00:16 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --address=127.0.0.1 --allocate-node-cidrs=true --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.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.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.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/client-ca.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --configure-cloud-routes=false --controllers=*,-service,-route,-cloud-node-lifecycle --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --port=10252 --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.key --use-service-account-credentials=true +``` + +### 1.2.31确保根据需要设置 --client-ca-file 参数(自动) + + +**结果**:pass + +**修正措施**: +遵循 Kubernetes 文档并在 apiserver 上设置 TLS 连接。 +然后,在 Master 节点上编辑 API Server pod 规范文件 /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml,并设置客户端 CA 文件。 +`--client-ca-file=` + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**预期结果**: + +```console +'--client-ca-file' is present +``` + +**返回值**: + +```console +root 5275 5222 15 14:58 ?00:01:26 kube-apiserver --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --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 --enable-admission-plugins=NodeRestriction,PodSecurityPolicy --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 --insecure-port=0 --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 --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.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-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 5522 5416 3 14:58 ?00:00:16 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --address=127.0.0.1 --allocate-node-cidrs=true --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.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.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.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/client-ca.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --configure-cloud-routes=false --controllers=*,-service,-route,-cloud-node-lifecycle --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --port=10252 --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.key --use-service-account-credentials=true +``` + +### 1.2.32确保 --etcd-cafile 参数设置正确(自动) + + +**结果**:pass + +**修正措施**: +遵循 Kubernetes 文档设置 apiserver 和 etcd 的 TLS 连接。 +然后,在 Master 节点上编辑 API Server pod 规范文件 /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml,并设置 etcd CA 文件参数。 +`--etcd-cafile=` + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**预期结果**: + +```console +'--etcd-cafile' is present +``` + +**返回值**: + +```console +root 5275 5222 15 14:58 ?00:01:26 kube-apiserver --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --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 --enable-admission-plugins=NodeRestriction,PodSecurityPolicy --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 --insecure-port=0 --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 --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.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-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 5522 5416 3 14:58 ?00:00:16 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --address=127.0.0.1 --allocate-node-cidrs=true --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.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.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.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/client-ca.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --configure-cloud-routes=false --controllers=*,-service,-route,-cloud-node-lifecycle --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --port=10252 --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.key --use-service-account-credentials=true +``` + +### 1.2.33确保根据需要设置 --encryption-provider-config 参数(自动) + + +**结果**:pass + +**修正措施**: +按照 Kubernetes 文档并配置 EncryptionConfig 文件。 +然后,在 Master 节点上编辑 API Server pod 规范文件 /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml,并将 `--encryption-provider-config` 参数设置为该文件的路径: +--encryption-provider-config= + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**预期结果**: + +```console +'--encryption-provider-config' is present +``` + +**返回值**: + +```console +root 5275 5222 15 14:58 ?00:01:26 kube-apiserver --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --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 --enable-admission-plugins=NodeRestriction,PodSecurityPolicy --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 --insecure-port=0 --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 --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.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-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 5522 5416 3 14:58 ?00:00:16 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --address=127.0.0.1 --allocate-node-cidrs=true --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.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.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.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/client-ca.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --configure-cloud-routes=false --controllers=*,-service,-route,-cloud-node-lifecycle --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --port=10252 --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.key --use-service-account-credentials=true +``` + +### 1.2.34确保正确配置加密提供程序(自动) + + +**结果**:pass + +**修正措施**: +按照 Kubernetes 文档并配置 EncryptionConfig 文件。 +在此文件中,选择 aescbc、kms 或 secretbox 作为加密提供程序。 + +**审计**: + +```bash +/bin/sh -c 'if grep aescbc /var/lib/rancher/rke2/server/cred/encryption-config.json; then echo 0; fi' +``` + +**预期结果**: + +```console +'0' is present +``` + +**返回值**: + +```console +{"kind":"EncryptionConfiguration","apiVersion":"apiserver.config.k8s.io/v1","resources":[{"resources":["secrets"],"providers":[{"aescbc":{"keys":[{"name":"aescbckey","secret":"ZP3yNnlCjzcKMBXfmNBmpGbiY+oXne+WP6EM42lZIbE="}]}},{"identity":{}}]}]} 0 +``` + +### 1.2.35确保 API Server 仅使用强密码(手动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上编辑 API Server pod 规范文件 /etc/kubernetes/manifests/kube-apiserver.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 + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**预期结果**: + +```console +'--tls-cipher-suites' is not present +``` + +**返回值**: + +```console +root 5275 5222 15 14:58 ?00:01:26 kube-apiserver --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --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 --enable-admission-plugins=NodeRestriction,PodSecurityPolicy --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 --insecure-port=0 --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 --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.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-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 5522 5416 3 14:58 ?00:00:16 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --address=127.0.0.1 --allocate-node-cidrs=true --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.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.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.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/client-ca.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --configure-cloud-routes=false --controllers=*,-service,-route,-cloud-node-lifecycle --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --port=10252 --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.key --use-service-account-credentials=true +``` + +## 1.3Controller Manager +### 1.3.1确保正确设置 --terminated-pod-gc-threshold 参数(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上编辑 Controller Manager pod 规范文件 /var/lib/rancher/rke2/agent/pod-manifests/kube-controller-manager.yaml,并将 `--terminated-pod-gc-threshold` 设置为适当的阈值。 +例如:--terminated-pod-gc-threshold=10 + +**审计**: + +```bash +/bin/ps -ef | grep kube-controller-manager | grep -v grep +``` + +**预期结果**: + +```console +'--terminated-pod-gc-threshold' is present +``` + +**返回值**: + +```console +root 5522 5416 3 14:58 ?00:00:16 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --address=127.0.0.1 --allocate-node-cidrs=true --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.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.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.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/client-ca.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --configure-cloud-routes=false --controllers=*,-service,-route,-cloud-node-lifecycle --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --port=10252 --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.key --use-service-account-credentials=true +``` + +### 1.3.2确保 --profiling 参数设置为 false(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上编辑 Controller Manager pod 规范文件 /var/lib/rancher/rke2/agent/pod-manifests/kube-controller-manager.yaml,并设置以下参数。 +--profiling=false + +**审计**: + +```bash +/bin/ps -ef | grep kube-controller-manager | grep -v grep +``` + +**预期结果**: + +```console +'false' is equal to 'false' +``` + +**返回值**: + +```console +root 5522 5416 3 14:58 ?00:00:16 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --address=127.0.0.1 --allocate-node-cidrs=true --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.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.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.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/client-ca.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --configure-cloud-routes=false --controllers=*,-service,-route,-cloud-node-lifecycle --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --port=10252 --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.key --use-service-account-credentials=true +``` + +### 1.3.3确保 --use-service-account-credentials 参数设置为 true(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上编辑 Controller Manager pod 规范文件 /var/lib/rancher/rke2/agent/pod-manifests/kube-controller-manager.yaml 以设置以下参数。 +--use-service-account-credentials=true + +**审计**: + +```bash +/bin/ps -ef | grep kube-controller-manager | grep -v grep +``` + +**预期结果**: + +```console +'true' is not equal to 'false' +``` + +**返回值**: + +```console +root 5522 5416 3 14:58 ?00:00:16 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --address=127.0.0.1 --allocate-node-cidrs=true --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.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.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.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/client-ca.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --configure-cloud-routes=false --controllers=*,-service,-route,-cloud-node-lifecycle --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --port=10252 --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.key --use-service-account-credentials=true +``` + +### 1.3.4确保根据需要设置 --service-account-private-key-file 参数(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上编辑 Controller Manager pod 规范文件 /var/lib/rancher/rke2/agent/pod-manifests/kube-controller-manager.yaml,并为 ServiceAccount 将 `--service-account-private-key-file` 参数设置为私钥文件。 +`--service-account-private-key-file=` + +**审计**: + +```bash +/bin/ps -ef | grep kube-controller-manager | grep -v grep +``` + +**预期结果**: + +```console +'--service-account-private-key-file' is present +``` + +**返回值**: + +```console +root 5522 5416 3 14:58 ?00:00:16 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --address=127.0.0.1 --allocate-node-cidrs=true --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.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.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.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/client-ca.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --configure-cloud-routes=false --controllers=*,-service,-route,-cloud-node-lifecycle --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --port=10252 --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.key --use-service-account-credentials=true +``` + +### 1.3.5确保根据需要设置 --root-ca-file 参数(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上编辑 Controller Manager pod 规范文件 /var/lib/rancher/rke2/agent/pod-manifests/kube-controller-manager.yaml,并将 `--root-ca-file` 参数设置为证书绑定文件。 +`--root-ca-file=` + +**审计**: + +```bash +/bin/ps -ef | grep kube-controller-manager | grep -v grep +``` + +**预期结果**: + +```console +'--root-ca-file' is present +``` + +**返回值**: + +```console +root 5522 5416 3 14:58 ?00:00:16 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --address=127.0.0.1 --allocate-node-cidrs=true --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.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.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.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/client-ca.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --configure-cloud-routes=false --controllers=*,-service,-route,-cloud-node-lifecycle --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --port=10252 --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.key --use-service-account-credentials=true +``` + +### 1.3.6确保 RotateKubeletServerCertificate 参数设置为 true(自动) + + +**结果**:Not Applicable + +**修正措施**: +在 Master 节点上编辑 Controller Manager pod 规范文件 /var/lib/rancher/rke2/agent/pod-manifests/kube-controller-manager.yaml,并将 `--feature-gates` 参数设置为包含 `RotateKubeletServerCertificate=true`。 +--feature-gates=RotateKubeletServerCertificate=true + +### 1.3.7确保 --bind-address 参数设置为 127.0.0.1(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上编辑 Controller Manager pod 规范文件 /var/lib/rancher/rke2/agent/pod-manifests/kube-controller-manager.yaml,并确保 `--bind-address` 参数的值正确。 + +**审计**: + +```bash +/bin/ps -ef | grep kube-controller-manager | grep -v grep +``` + +**预期结果**: + +```console +'127.0.0.1' is equal to '127.0.0.1' OR '--bind-address' is not present +``` + +**返回值**: + +```console +root 5522 5416 3 14:58 ?00:00:16 kube-controller-manager --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --permit-port-sharing=true --address=127.0.0.1 --allocate-node-cidrs=true --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.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.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.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/client-ca.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --configure-cloud-routes=false --controllers=*,-service,-route,-cloud-node-lifecycle --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --port=10252 --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.key --use-service-account-credentials=true +``` + +## 1.4Scheduler +### 1.4.1确保 --profiling 参数设置为 false(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上编辑 Scheduler pod 规范文件 /var/lib/rancher/rke2/agent/pod-manifests/kube-scheduler.yaml 文件,并设置以下参数。 +--profiling=false + +**审计**: + +```bash +/bin/ps -ef | grep kube-scheduler | grep -v grep +``` + +**预期结果**: + +```console +'false' is equal to 'false' +``` + +**返回值**: + +```console +root 5533 5414 0 14:58 ?00:00:02 kube-scheduler --permit-port-sharing=true --address=127.0.0.1 --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 --port=10251 --profiling=false --secure-port=10259 +``` + +### 1.4.2确保 --bind-address 参数设置为 127.0.0.1(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上编辑 Scheduler pod 规范文件 /var/lib/rancher/rke2/agent/pod-manifests/kube-scheduler.yaml,并确保 `--bind-address` 参数的值正确。 + +**审计**: + +```bash +/bin/ps -ef | grep kube-scheduler | grep -v grep +``` + +**预期结果**: + +```console +'127.0.0.1' is equal to '127.0.0.1' OR '--bind-address' is not present +``` + +**返回值**: + +```console +root 5533 5414 0 14:58 ?00:00:02 kube-scheduler --permit-port-sharing=true --address=127.0.0.1 --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 --port=10251 --profiling=false --secure-port=10259 +``` + +## 2 Etcd Node Configuration Files +### 2.1确保根据需要设置 --cert-file 和 --key-file 参数(自动) + + +**结果**:Not Applicable + +**修正措施**: +按照 etcd 服务文档配置 TLS 加密。 +然后,在 Master 节点上编辑 etcd pod 规范文件 /etc/kubernetes/manifests/etcd.yaml,并设置以下参数。 +`--cert-file=` +`--key-file=` + +### 2.2确保 --client-cert-auth 参数设置为 true(自动) + + +**结果**:Not Applicable + +**修正措施**: +在 Master 节点上编辑 etcd pod 规范文件 /var/lib/rancher/rke2/agent/pod-manifests/etcd.yaml,并设置以下参数。 +--client-cert-auth="true" + +### 2.3确保 --auto-tls 参数未设置为 true(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上编辑 etcd pod 规范文件 /var/lib/rancher/rke2/agent/pod-manifests/etcd.yaml,并删除 `--auto-tls` 参数或将其设置为 false。 +--auto-tls=false + +**审计**: + +```bash +/bin/ps -ef | /bin/grep etcd | /bin/grep -v grep +``` + +**预期结果**: + +```console +'--auto-tls' is not present OR '--auto-tls' is not present +``` + +**返回值**: + +```console +etcd 5059 5033 0 14:58 ?00:00:00 /pause etcd 5121 5033 3 14:58 ?00:00:18 etcd --config-file=/var/lib/rancher/rke2/server/db/etcd/config root 5275 5222 15 14:58 ?00:01:26 kube-apiserver --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --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 --enable-admission-plugins=NodeRestriction,PodSecurityPolicy --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 --insecure-port=0 --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 --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.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-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 16473 16413 0 15:07 ?00:00:00 kube-bench run --targets etcd --scored --nosummary --noremediations --v=5 --config-dir=/etc/kube-bench/cfg --benchmark rke2-cis-1.6-hardened --json --log_dir /tmp/results/logs --outputfile /tmp/results/etcd.json +``` + +### 2.4确保根据需要设置 --peer-cert-file 和 --peer-key-file 参数(自动) + + +**结果**:Not Applicable + +**修正措施**: +遵循 etcd 服务文档,根据需要为你的 etcd 集群配置对等 TLS 加密。 +然后,在 Master 节点上编辑 etcd pod 规范文件 /var/lib/rancher/rke2/agent/pod-manifests/etcd.yaml,并设置以下参数。 +`--peer-client-file=` +`--peer-key-file=` + +### 2.5确保 --peer-client-cert-auth 参数设置为 true(自动) + + +**结果**:Not Applicable + +**修正措施**: +在 Master 节点上编辑 etcd pod 规范文件 /var/lib/rancher/rke2/agent/pod-manifests/etcd.yaml,并设置以下参数。 +--peer-client-cert-auth=true + +### 2.6确保 --peer-auto-tls 参数未设置为 true(自动) + + +**结果**:pass + +**修正措施**: +在 Master 节点上编辑 etcd pod 规范文件 /var/lib/rancher/rke2/agent/pod-manifests/etcd.yaml,并删除 `--peer-auto-tls` 参数或将其设置为 false。 +--peer-auto-tls=false + +**审计**: + +```bash +/bin/ps -ef | /bin/grep etcd | /bin/grep -v grep +``` + +**预期结果**: + +```console +'--peer-auto-tls' is not present OR '--peer-auto-tls' is not present +``` + +**返回值**: + +```console +etcd 5059 5033 0 14:58 ?00:00:00 /pause etcd 5121 5033 3 14:58 ?00:00:18 etcd --config-file=/var/lib/rancher/rke2/server/db/etcd/config root 5275 5222 15 14:58 ?00:01:26 kube-apiserver --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --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 --enable-admission-plugins=NodeRestriction,PodSecurityPolicy --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 --insecure-port=0 --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 --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.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-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 16473 16413 6 15:07 ?00:00:00 kube-bench run --targets etcd --scored --nosummary --noremediations --v=5 --config-dir=/etc/kube-bench/cfg --benchmark rke2-cis-1.6-hardened --json --log_dir /tmp/results/logs --outputfile /tmp/results/etcd.json +``` + +### 2.7确保 etcd 使用唯一的 CA(手动) + + +**结果**:pass + +**修正措施**: +[手动测试] +遵循 etcd 文档,为 etcd 服务创建专用的 CA 设置。 +然后,在 Master 节点上编辑 etcd pod 规范文件 /var/lib/rancher/rke2/agent/pod-manifests/etcd.yaml,并设置以下参数。 +`--trusted-ca-file=` + +**审计**: + +```bash +/bin/ps -ef | /bin/grep etcd | /bin/grep -v grep +``` + +**预期结果**: + +```console +'--trusted-ca-file' is not present +``` + +**返回值**: + +```console +etcd 5059 5033 0 14:58 ?00:00:00 /pause etcd 5121 5033 3 14:58 ?00:00:18 etcd --config-file=/var/lib/rancher/rke2/server/db/etcd/config root 5275 5222 15 14:58 ?00:01:26 kube-apiserver --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --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 --enable-admission-plugins=NodeRestriction,PodSecurityPolicy --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 --insecure-port=0 --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 --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.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-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key root 16473 16413 3 15:07 ?00:00:00 kube-bench run --targets etcd --scored --nosummary --noremediations --v=5 --config-dir=/etc/kube-bench/cfg --benchmark rke2-cis-1.6-hardened --json --log_dir /tmp/results/logs --outputfile /tmp/results/etcd.json +``` + +## 3.1认证和授权 +### 3.1.1不能将客户端证书身份验证应用于用户(手动) + + +**结果**:warn + +**修正措施**: +Kubernetes 提供的替代机制(例如 OIDC)应该代替客户端证书的实现。 + +## 3.2Logging +### 3.2.1确保创建最小审计策略(自动) + + +**结果**:pass + +**修正措施**: +为你的集群创建一个审计策略文件。 + +**审计**: + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep | grep -o audit-policy-file +``` + +**预期结果**: + +```console +'audit-policy-file' is equal to 'audit-policy-file' +``` + +**返回值**: + +```console +audit-policy-file +``` + +### 3.2.2确保审计策略涵盖关键安全问题(手动) + + +**结果**:warn + +**修正措施**: +考虑修改集群上使用的审计策略,至少要包括这些项目。 + +## 4.1Worker 节点配置文件 +### 4.1.1确保 kubelet 服务文件权限具有 644 或更严格的设置(自动) + + +**结果**:pass + +**修正措施**: +在每个 Worker 节点上运行以下命令(基于系统上的文件位置)。 +例如:chmod 644 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf + +**审计**: + +```bash +/bin/sh -c 'if test -e /etc/systemd/system/kubelet.service.d/10-kubeadm.conf; then stat -c permissions=%a /etc/systemd/system/kubelet.service.d/10-kubeadm.conf; fi' +``` + +**预期结果**: + +```console +'permissions' is not present +``` + +### 4.1.2确保 kubelet 服务文件所有权设置为 root:root(自动) + + +**结果**:Not Applicable + +**修正措施**: +在每个 Worker 节点上运行以下命令(基于系统上的文件位置)。 +例如:chown root:root /etc/systemd/system/kubelet.service.d/10-kubeadm.conf + +### 4.1.3如果代理 kubeconfig 文件存在,请确保权限具有 644 或更严格的设置(手动) + + +**结果**:pass + +**修正措施**: +在每个 Worker 节点上运行以下命令(基于系统上的文件位置)。 +例如:chmod 644 /var/lib/rancher/rke2/agent/kubeproxy.kubeconfig + +**审计**: + +```bash +/bin/sh -c 'if test -e /node/var/lib/rancher/rke2/agent/kubeproxy.kubeconfig; then stat -c %a /node/var/lib/rancher/rke2/agent/kubeproxy.kubeconfig; fi' +``` + +**预期结果**: + +```console +'permissions' is present OR '/var/lib/rancher/rke2/agent/kubeproxy.kubeconfig' is not present +``` + +**返回值**: + +```console +644 +``` + +### 4.1.4确保代理 kubeconfig 文件所有权设置为 root:root(手动) + + +**结果**:pass + +**修正措施**: +在每个 Worker 节点上运行以下命令(基于系统上的文件位置)。 +例如:chown root:root /var/lib/rancher/rke2/agent/kubeproxy.kubeconfig + +**审计**: + +```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' +``` + +**预期结果**: + +```console +'root:root' is not present OR '/var/lib/rancher/rke2/agent/kubeproxy.kubeconfig' is not present +``` + +**返回值**: + +```console +root:root +``` + +### 4.1.5确保 --kubeconfig kubelet.conf 文件权限具有 644 或更严格的设置(自动) + + +**结果**:pass + +**修正措施**: +在每个 Worker 节点上运行以下命令(基于系统上的文件位置)。 +例如:chmod 644 /var/lib/rancher/rke2/agent/kubelet.kubeconfig + +**审计**: + +```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' +``` + +**预期结果**: + +```console +'644' is equal to '644' +``` + +**返回值**: + +```console +permissions=644 +``` + +### 4.1.6确保 --kubeconfig kubelet.conf 文件所有权设置为 root:root(自动) + + +**结果**:pass + +**修正措施**: +在每个 Worker 节点上运行以下命令(基于系统上的文件位置)。 +例如:chown root:root /var/lib/rancher/rke2/agent/kubelet.kubeconfig + +**审计**: + +```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' +``` + +**预期结果**: + +```console +'root:root' is equal to 'root:root' +``` + +**返回值**: + +```console +root:root +``` + +### 4.1.7确保 CA 文件权限具有 644 或更严格的设置(手动) + + +**结果**:warn + +**修正措施**: +运行以下命令修改 `--client-ca-file chmod 644 ` 的文件权限。 + +**审计**: + +```bash +stat -c %a /var/lib/rancher/rke2/server/tls/server-ca.crt +``` + +### 4.1.8确保客户端 CA 文件所有权设置为 root:root(自动) + + +**结果**:pass + +**修正措施**: +运行以下命令来修改 `--client-ca-file` 的所有权。 +`chown root:roset: trueot ` + +**审计**: + +```bash +/bin/sh -c 'if test -e /var/lib/rancher/rke2/agent/client-ca.crt; then stat -c %U:%G /var/lib/rancher/rke2/agent/client-ca.crt; fi' +``` + +**预期结果**: + +```console +'root:root' is equal to 'root:root' +``` + +**返回值**: + +```console +root:root +``` + +### 4.1.9确保 kubelet --config 配置文件权限具有 644 或更严格的设置(自动) + + +**结果**:pass + +**修正措施**: +运行以下命令(使用审计步骤中确定的配置文件位置): +chmod 644 /var/lib/rancher/rke2/agent/kubelet.kubeconfig + +**审计**: + +```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' +``` + +**预期结果**: + +```console +'644' is equal to '644' +``` + +**返回值**: + +```console +permissions=644 +``` + +### 4.1.10确保 kubelet --config 配置文件所有权设置为 root:root(自动) + + +**结果**:pass + +**修正措施**: +运行以下命令(使用审计步骤中确定的配置文件位置): +chown root:root /var/lib/rancher/rke2/agent/kubelet.kubeconfig + +**审计**: + +```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' +``` + +**预期结果**: + +```console +'root:root' is present +``` + +**返回值**: + +```console +root:root +``` + +## 4.2Kubelet +### 4.2.1确保将 anonymous-auth 参数设置为 false(自动) + + +**结果**:pass + +**修正措施**: +如果使用 Kubelet 配置文件,请编辑该文件,将 authentication: anonymous 设置为 `false`。 +如果使用可执行参数,请在每个 Worker 节点中编辑 kubelet 服务文件 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf,并在 `KUBELET_SYSTEM_PODS_ARGS` 变量中设置以下参数。 +--anonymous-auth=false +根据你的系统,重新启动 kubelet 服务。例如: +systemctl daemon-reload +systemctl restart kubelet.service + +**审计**: + +```bash +/bin/ps -fC kubelet +``` + +**审计配置**: + +```bash +/bin/cat /var/lib/rancher/rke2/agent/kubelet.kubeconfig +``` + +**预期结果**: + +```console +'false' is equal to 'false' +``` + +**返回值**: + +```console +UID PID PPID C STIME TTY TIME CMD root 4785 4751 3 14:58 ?00:00:21 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=cgroupfs --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 --container-runtime=remote --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= --kubeconfig=/var/lib/rancher/rke2/agent/kubelet.kubeconfig --log-file-max-size=50 --log-file=/var/lib/rancher/rke2/agent/logs/kubelet.log --logtostderr=false --node-labels=cattle.io/os=linux,rke.cattle.io/machine=7c32844c-359f-45f7-88c5-a7173d27690a --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确保 --authorization-mode 参数未设置为 AlwaysAllow(自动) + + +**结果**:pass + +**修正措施**: +如果使用 Kubelet 配置文件,请编辑该文件,将 authorization: mode 设置为 `Webhook`。如果使用可执行参数,请在每个 Worker 节点中编辑 kubelet 服务文件 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf,并在 `KUBELET_AUTHZ_ARGS` 变量中设置以下参数。 +--authorization-mode=Webhook +根据你的系统,重新启动 kubelet 服务。例如: +systemctl daemon-reload +systemctl restart kubelet.service + +**审计**: + +```bash +/bin/ps -fC kubelet +``` + +**审计配置**: + +```bash +/bin/cat /var/lib/rancher/rke2/agent/kubelet.kubeconfig +``` + +**预期结果**: + +```console +'' is not present +``` + +**返回值**: + +```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.3确保根据需要设置 --client-ca-file 参数(自动) + + +**结果**:pass + +**修正措施**: +如果使用 Kubelet 配置文件,请编辑文件,将 authentication: x509: clientCAFile 设置为客户端 CA 文件的位置。 +如果使用命令行参数,请在每个 Worker 节点中编辑 kubelet 服务文件 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf,并在 `KUBELET_AUTHZ_ARGS` 变量中设置以下参数。 +`--client-ca-file=` +根据你的系统,重新启动 kubelet 服务。例如: +systemctl daemon-reload +systemctl restart kubelet.service + +**审计**: + +```bash +/bin/ps -fC kubelet +``` + +**审计配置**: + +```bash +/bin/cat /var/lib/rancher/rke2/agent/kubelet.kubeconfig +``` + +**预期结果**: + +```console +'' is not present +``` + +**返回值**: + +```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.4确保 --read-only-port 参数设置为 0(自动) + + +**结果**:pass + +**修正措施**: +如果使用 Kubelet 配置文件,请编辑该文件,将 `readOnlyPort` 设置为 0。 +如果使用命令行参数,请在每个 Worker 节点中编辑 kubelet 服务文件 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf,并在 `KUBELET_SYSTEM_PODS_ARGS` 变量中设置以下参数。 +--read-only-port=0 +根据你的系统,重新启动 kubelet 服务。例如: +systemctl daemon-reload +systemctl restart kubelet.service + +**审计**: + +```bash +/bin/ps -fC kubelet +``` + +**审计配置**: + +```bash +/bin/cat /var/lib/rancher/rke2/agent/kubelet.kubeconfig +``` + +**预期结果**: + +```console +'0' is equal to '0' AND '--read-only-port' is present +``` + +**返回值**: + +```console +UID PID PPID C STIME TTY TIME CMD root 4785 4751 3 14:58 ?00:00:21 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=cgroupfs --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 --container-runtime=remote --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= --kubeconfig=/var/lib/rancher/rke2/agent/kubelet.kubeconfig --log-file-max-size=50 --log-file=/var/lib/rancher/rke2/agent/logs/kubelet.log --logtostderr=false --node-labels=cattle.io/os=linux,rke.cattle.io/machine=7c32844c-359f-45f7-88c5-a7173d27690a --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确保 --streaming-connection-idle-timeout 参数未设置为 0(自动) + + +**结果**:pass + +**修正措施**: +如果使用 Kubelet 配置文件,请编辑该文件,将 `streamingConnectionIdleTimeout` 设置为 0 以外的值。 +如果使用命令行参数,请在每个 Worker 节点中编辑 kubelet 服务文件 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf,并在 `KUBELET_SYSTEM_PODS_ARGS` 变量中设置以下参数。 +--streaming-connection-idle-timeout=5m +根据你的系统,重新启动 kubelet 服务。例如: +systemctl daemon-reload +systemctl restart kubelet.service + +**审计**: + +```bash +/bin/ps -fC kubelet +``` + +**审计配置**: + +```bash +/bin/cat /var/lib/rancher/rke2/agent/kubelet.kubeconfig +``` + +**预期结果**: + +```console +'--streaming-connection-idle-timeout' is not present OR '--streaming-connection-idle-timeout' is present +``` + +**返回值**: + +```console +UID PID PPID C STIME TTY TIME CMD root 4785 4751 3 14:58 ?00:00:21 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=cgroupfs --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 --container-runtime=remote --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= --kubeconfig=/var/lib/rancher/rke2/agent/kubelet.kubeconfig --log-file-max-size=50 --log-file=/var/lib/rancher/rke2/agent/logs/kubelet.log --logtostderr=false --node-labels=cattle.io/os=linux,rke.cattle.io/machine=7c32844c-359f-45f7-88c5-a7173d27690a --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.6确保 --protect-kernel-defaults 参数设置为 true(自动) + + +**结果**:pass + +**修正措施**: +如果使用 Kubelet 配置文件,请编辑该文件以设置 `protectKernelDefaults: true`。 +如果使用命令行参数,请在每个 Worker 节点中编辑 kubelet 服务文件 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf,并在 `KUBELET_SYSTEM_PODS_ARGS` 变量中设置以下参数。 +--protect-kernel-defaults=true +根据你的系统,重新启动 kubelet 服务。例如: +systemctl daemon-reload +systemctl restart kubelet.service + +**审计**: + +```bash +/bin/ps -fC kubelet +``` + +**审计配置**: + +```bash +/bin/cat /var/lib/rancher/rke2/agent/kubelet.kubeconfig +``` + +**预期结果**: + +```console +'' is not present +``` + +**返回值**: + +```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确保 --make-iptables-util-chains 参数设置为 true(自动) + + +**结果**:pass + +**修正措施**: +如果使用 Kubelet 配置文件,请编辑该文件以设置 `makeIPTablesUtilChains: true`。 +如果使用命令行参数,请在每个 Worker 节点上编辑 kubelet 服务文件 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf,并删除 `KUBELET_SYSTEM_PODS_ARGS` 变量中的 `--make-iptables-util-chains` 参数。 +根据你的系统,重新启动 kubelet 服务。例如: +systemctl daemon-reload +systemctl restart kubelet.service + +**审计**: + +```bash +/bin/ps -fC kubelet +``` + +**审计配置**: + +```bash +/bin/cat /var/lib/rancher/rke2/agent/kubelet.kubeconfig +``` + +**预期结果**: + +```console +'--make-iptables-util-chains' is not present OR '--make-iptables-util-chains' is not present +``` + +**返回值**: + +```console +UID PID PPID C STIME TTY TIME CMD root 4785 4751 3 14:58 ?00:00:21 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=cgroupfs --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 --container-runtime=remote --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= --kubeconfig=/var/lib/rancher/rke2/agent/kubelet.kubeconfig --log-file-max-size=50 --log-file=/var/lib/rancher/rke2/agent/logs/kubelet.log --logtostderr=false --node-labels=cattle.io/os=linux,rke.cattle.io/machine=7c32844c-359f-45f7-88c5-a7173d27690a --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.8确保未设置 --hostname-override 参数(手动) + + +**结果**:warn + +**修正措施**: +在每个 Worker 节点上编辑 kubelet 服务文件 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf,并删除 `KUBELET_SYSTEM_PODS_ARGS` 变量中的 `--hostname-override` 参数。 +根据你的系统,重新启动 kubelet 服务。例如: +systemctl daemon-reload +systemctl restart kubelet.service + +**审计**: + +```bash +/bin/ps -fC kubelet +``` + +### 4.2.9确保 --event-qps 参数设置为 0 或能适当抓取事件的级别(手动) + + +**结果**:pass + +**修正措施**: +如果使用 Kubelet 配置文件,请编辑该文件以将 `eventRecordQPS` 设置为适当的级别。 +如果使用命令行参数,请在每个 Worker 节点中编辑 kubelet 服务文件 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf,并在 `KUBELET_SYSTEM_PODS_ARGS` 变量中设置以下参数。 +根据你的系统,重新启动 kubelet 服务。例如: +systemctl daemon-reload +systemctl restart kubelet.service + +**审计**: + +```bash +/bin/ps -fC kubelet +``` + +**审计配置**: + +```bash +/bin/cat /var/lib/rancher/rke2/agent/kubelet.kubeconfig +``` + +**预期结果**: + +```console +'--event-qps' is not present +``` + +**返回值**: + +```console +UID PID PPID C STIME TTY TIME CMD root 4785 4751 3 14:58 ?00:00:21 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=cgroupfs --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 --container-runtime=remote --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= --kubeconfig=/var/lib/rancher/rke2/agent/kubelet.kubeconfig --log-file-max-size=50 --log-file=/var/lib/rancher/rke2/agent/logs/kubelet.log --logtostderr=false --node-labels=cattle.io/os=linux,rke.cattle.io/machine=7c32844c-359f-45f7-88c5-a7173d27690a --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确保根据需要设置 --tls-cert-file 和 --tls-private-key-file 参数(自动) + + +**结果**:pass + +**修正措施**: +如果使用 Kubelet 配置文件,请编辑该文件以将 `tlsCertFile` 设置为证书文件的位置来使用 Kubelet 的标识符,并将 `tlsPrivateKeyFile` 设置为对应的私钥文件的位置。 +如果使用命令行参数,请在每个 Worker 节点中编辑 kubelet 服务文件 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf,并在 `KUBELET_CERTIFICATE_ARGS` 变量中设置以下参数。 +`--tls-cert-file=` +`--tls-private-key-file=` +根据你的系统,重新启动 kubelet 服务。例如: +systemctl daemon-reload +systemctl restart kubelet.service + +**审计**: + +```bash +/bin/ps -fC kubelet +``` + +**审计配置**: + +```bash +/bin/cat /var/lib/rancher/rke2/agent/kubelet.kubeconfig +``` + +**预期结果**: + +```console +'--tls-cert-file' is present AND '--tls-private-key-file' is present +``` + +**返回值**: + +```console +UID PID PPID C STIME TTY TIME CMD root 4785 4751 3 14:58 ?00:00:21 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=cgroupfs --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 --container-runtime=remote --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= --kubeconfig=/var/lib/rancher/rke2/agent/kubelet.kubeconfig --log-file-max-size=50 --log-file=/var/lib/rancher/rke2/agent/logs/kubelet.log --logtostderr=false --node-labels=cattle.io/os=linux,rke.cattle.io/machine=7c32844c-359f-45f7-88c5-a7173d27690a --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确保 --rotate-certificates 参数未设置为 false(手动) + + +**结果**:pass + +**修正措施**: +如果使用 Kubelet 配置文件,请编辑文件以添加行 `rotateCertificates: true`,或完全删除它以使用默认值。 +如果使用命令行参数,请在每个 Worker 节点上编辑 kubelet 服务文件 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf,并删除 `KUBELET_CERTIFICATE_ARGS` 变量中的 `--rotate-certificates=false` 参数。 +根据你的系统,重新启动 kubelet 服务。例如: +systemctl daemon-reload +systemctl restart kubelet.service + +**审计**: + +```bash +/bin/ps -fC kubelet +``` + +**审计配置**: + +```bash +/bin/cat /var/lib/rancher/rke2/agent/kubelet.kubeconfig +``` + +**预期结果**: + +```console +'--rotate-certificates' is not present OR '--rotate-certificates' is not present +``` + +**返回值**: + +```console +UID PID PPID C STIME TTY TIME CMD root 4785 4751 3 14:58 ?00:00:21 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=cgroupfs --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 --container-runtime=remote --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= --kubeconfig=/var/lib/rancher/rke2/agent/kubelet.kubeconfig --log-file-max-size=50 --log-file=/var/lib/rancher/rke2/agent/logs/kubelet.log --logtostderr=false --node-labels=cattle.io/os=linux,rke.cattle.io/machine=7c32844c-359f-45f7-88c5-a7173d27690a --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.12验证 RotateKubeletServerCertificate 参数是否设置为 true(手动) + + +**结果**:pass + +**修正措施**: +在每个 Worker 节点上编辑 kubelet 服务文件 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf,并在 `KUBELET_CERTIFICATE_ARGS` 变量中设置以下参数。 +--feature-gates=RotateKubeletServerCertificate=true +根据你的系统,重新启动 kubelet 服务。例如: +systemctl daemon-reload +systemctl restart kubelet.service + +**审计**: + +```bash +/bin/ps -fC kubelet +``` + +**审计配置**: + +```bash +/bin/cat /var/lib/rancher/rke2/agent/kubelet.kubeconfig +``` + +**预期结果**: + +```console +'RotateKubeletServerCertificate' is not present +``` + +**返回值**: + +```console +UID PID PPID C STIME TTY TIME CMD root 4785 4751 3 14:58 ?00:00:21 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=cgroupfs --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 --container-runtime=remote --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= --kubeconfig=/var/lib/rancher/rke2/agent/kubelet.kubeconfig --log-file-max-size=50 --log-file=/var/lib/rancher/rke2/agent/logs/kubelet.log --logtostderr=false --node-labels=cattle.io/os=linux,rke.cattle.io/machine=7c32844c-359f-45f7-88c5-a7173d27690a --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.13确保 Kubelet 仅使用强密码(手动) + + +**结果**:pass + +**修正措施**: +如果使用 Kubelet 配置文件,请编辑该文件以将 `TLSCipherSuites` 设置为 +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 或这些值的子集。 +如果使用可执行参数,请在每个 Worker 节点上编辑 kubelet 服务文件 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf,并将 `--tls-cipher-suites` 参数设置如下值,或这些值的子集。 +--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 +根据你的系统,重新启动 kubelet 服务。例如: +systemctl daemon-reload +systemctl restart kubelet.service + +**审计**: + +```bash +/bin/ps -fC kubelet +``` + +**审计配置**: + +```bash +/bin/cat /var/lib/rancher/rke2/agent/kubelet.kubeconfig +``` + +**预期结果**: + +```console +'--tls-cipher-suites' is not present +``` + +**返回值**: + +```console +UID PID PPID C STIME TTY TIME CMD root 4785 4751 3 14:58 ?00:00:21 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=cgroupfs --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 --container-runtime=remote --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= --kubeconfig=/var/lib/rancher/rke2/agent/kubelet.kubeconfig --log-file-max-size=50 --log-file=/var/lib/rancher/rke2/agent/logs/kubelet.log --logtostderr=false --node-labels=cattle.io/os=linux,rke.cattle.io/machine=7c32844c-359f-45f7-88c5-a7173d27690a --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 +``` + +## 5.1RBAC 和 ServiceAccount +### 5.1.1确保仅在需要时使用 cluster-admin 角色(手动) + + +**结果**:warn + +**修正措施**: +识别 cluster-admin 角色的所有 clusterrolebindings。检查它们是否被使用,它们是否需要这个角色,或者是否可以使用较低权限的角色。 +在可能的情况下,先将用户绑定到较低权限的角色,然后删除绑定到 cluster-admin 角色的 clusterrolebinding: +kubectl delete clusterrolebinding [name] + +### 5.1.2尽量减少对密文的访问(手动) + + +**结果**:warn + +**修正措施**: +在可能的情况下,删除对集群中密文对象的 get、list 和 watch 访问。 + +### 5.1.3尽量减少角色和 ClusterRoles 中通配符的使用(手动) + + +**结果**:warn + +**修正措施**: +在可能的情况下,将集群角色和角色中的通配符替换为特定的对象或动作。 + +### 5.1.4尽量减少创建 pod 的访问(手动) + + +**结果**:warn + +**修正措施**: +在可能的情况下,删除对集群中 pod 对象的创建访问权限。 + +### 5.1.5确保未主动使用默认 ServiceAccount。(自动) + + +**结果**:pass + +**修正措施**: +在 Kubernetes 工作负载需要对 Kubernetes API Server 进行特定访问时,创建显式的 ServiceAccount。 +修改每个默认 ServiceAccount 的配置以包含此值 +automountServiceAccountToken: false + +**审计脚本**:`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" +``` + +**审计执行**: + +```bash +./check_for_default_sa.sh +``` + +**预期结果**: + +```console +'true' is equal to 'true' +``` + +**返回值**: + +```console +true +``` + +### 5.1.6确保仅在必要时挂载 ServiceAccount 令牌(手动) + + +**结果**:warn + +**修正措施**: +修改不需要挂载 ServiceAccount 令牌的 pod 和 ServiceAccount 的定义,使其禁用。 + +## 5.2Pod 安全策略 +### 5.2.1最小化特权容器的准入(自动) + + +**结果**:pass + +**修正措施**: +按照 Kubernetes 文档中的说明创建 PSP,确保 `.spec.privileged` 字段被省略或设置为 false。 + +**审计**: + +```bash +kubectl get psp global-restricted-psp -o json | jq -r '.spec.runAsUser.rule' +``` + +**预期结果**: + +```console +'MustRunAsNonRoot' is equal to 'MustRunAsNonRoot' +``` + +**返回值**: + +```console +MustRunAsNonRoot +``` + +### 5.2.2最小化需要共享主机进程 ID 命名空间的容器准入(自动) + + +**结果**:pass + +**修正措施**: +按照 Kubernetes 文档中的说明创建 PSP,确保 `.spec.hostPID` 字段被省略或设置为 false。 + +**审计**: + +```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={}' +``` + +**预期结果**: + +```console +1 is greater than 0 +``` + +**返回值**: + +```console +--count=1 +``` + +### 5.2.3最小化需要共享主机 IPC 命名空间的容器准入(自动) + + +**结果**:pass + +**修正措施**: +按照 Kubernetes 文档中的说明创建 PSP,确保 `.spec.hostIPC` 字段被省略或设置为 false。 + +**审计**: + +```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={}' +``` + +**预期结果**: + +```console +1 is greater than 0 +``` + +**返回值**: + +```console +--count=1 +``` + +### 5.2.4最小化需要共享主机网络命名空间的容器准入(自动) + + +**结果**:pass + +**修正措施**: +按照 Kubernetes 文档中的说明创建 PSP,确保 `.spec.hostNetwork` 字段被省略或设置为 false。 + +**审计**: + +```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={}' +``` + +**预期结果**: + +```console +1 is greater than 0 +``` + +**返回值**: + +```console +--count=1 +``` + +### 5.2.5使用 allowPrivilegeEscalation(自动)最小化容器的准入 + + +**结果**:pass + +**修正措施**: +按照 Kubernetes 文档中的说明创建 PSP,确保 `.spec.allowPrivilegeEscalation` 字段被省略或设置为 false。 + +**审计**: + +```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={}' +``` + +**预期结果**: + +```console +1 is greater than 0 +``` + +**返回值**: + +```console +--count=1 +``` + +### 5.2.6最小化根容器的准入(自动) + + +**结果**:pass + +**修正措施**: +按照 Kubernetes 文档中的说明创建 PSP,确保 `.spec.runAsUser.rule` 设置为 `MustRunAsNonRoot` 或 `MustRunAs`,范围为不包括 0 的 UID。 + +**审计**: + +```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={}' +``` + +**预期结果**: + +```console +1 is greater than 0 +``` + +**返回值**: + +```console +--count=1 +``` + +### 5.2.7使用 NET_RAW 功能最大限度地减少容器的准入(手动) + + +**结果**:pass + +**修正措施**: +按照 Kubernetes 文档中的说明创建 PSP,确保 `.spec.requiredDropCapabilities` 包括 `NET_RAW` 或 `ALL`。 + +**审计**: + +```bash +kubectl get psp global-restricted-psp -o json | jq -r .spec.requiredDropCapabilities[] +``` + +**预期结果**: + +```console +'ALL' is equal to 'ALL' +``` + +**返回值**: + +```console +ALL +``` + +### 5.2.8使用添加的功能最大限度地减少容器的准入(手动) + + +**结果**:warn + +**修正措施**: +确保集群的 PSP 中不存在 `allowedCapabilities`,除非它被设置为一个空数组。 + +### 5.2.9使用分配的功能最大限度地减少容器的准入(手动) + + +**结果**:warn + +**修正措施**: +查看集群上运行的应用程序中功能的使用情况。如果一个命名空间包含不需要任何 Linux 功能的应用,你可以考虑添加一个 PSP,禁止不丢弃所有功能的容器的准入。 + +## 5.3网络策略和 ​​CNI +### 5.3.1确保使用的 CNI 支持网络策略(自动) + + +**结果**:pass + +**修正措施**: +如果使用的 CNI 插件不支持网络策略,则应考虑使用不同的插件,或在 Kubernetes 集群中寻找替代机制来限制流量。 + +**审计**: + +```bash +kubectl get pods -n kube-system -l k8s-app=canal -o json | jq .items[] | jq .metadata.name | wc -l | xargs -I {} echo '--count={}' +``` + +**预期结果**: + +```console +1 is greater than 0 +``` + +**返回值**: + +```console +--count=1 +``` + +### 5.3.2确保所有命名空间都定义了网络策略(自动) + + +**结果**:pass + +**修正措施**: +遵循文档并根据需要创建 NetworkPolicy 对象。 + +**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" + +``` + +**审计执行**: + +```bash +./check_for_rke2_network_policies.sh +``` + +**预期结果**: + +```console +'true' is equal to 'true' +``` + +**返回值**: + +```console +true +``` + +## 5.4密文管理 +### 5.4.1优先使用密文文件而不是密文环境变量(手动) + + +**结果**:warn + +**修正措施**: +如果可能,重写应用程序代码,从挂载的密文文件而不是环境变量中读取密文。 + +### 5.4.2考虑外部密文存储(手动) + + +**结果**:warn + +**修正措施**: +请参阅你的云提供商或第三方密文管理解决方案的密文管理选项。 + +## 5.5可扩展准入控制 +### 5.5.1使用 ImagePolicyWebhook 准入控制器配置镜像来源(手动) + + +**结果**:warn + +**修正措施**: +遵循 Kubernetes 文档并设置镜像来源。 + +## 5.6v1.5.1 指南跳过 5.6 并从 5.5 转到 5.7。我们将它包含在这里只是为了进行解释。 +## 5.7通用策略 +### 5.7.1使用命名空间在资源之间创建管理边界(手动) + + +**结果**:warn + +**修正措施**: +遵循文档并根据需要为 Deployment 中的对象创建命名空间。 + +### 5.7.2确保 seccomp 配置文件在你的 pod 定义中设置为 docker/default(手动) + + +**结果**:warn + +**修正措施**: +Seccomp 目前是一个 alpha 功能。默认情况下,所有 alpha 功能都是禁用的。因此,你需要通过传入 `--feature- +gates=AllAlpha=true` 参数来启用 apiserver 中的 alpha 功能。 +编辑 Master 节点上的 /etc/kubernetes/apiserver 文件,并将 `KUBE_API_ARGS` 参数设置为 `--feature-gates=AllAlpha=true` +KUBE_API_ARGS="--feature-gates=AllAlpha=true" +根据你的系统,重新启动 kube-apiserver 服务。例如:systemctl restart kube-apiserver.service +使用注释在你的 pod 定义中启用 docker/default seccomp 配置文件。以下是一个示例: +apiVersion: v1 +kind: Pod +metadata: +name: trustworthy-pod +annotations: +seccomp.security.alpha.kubernetes.io/pod: docker/default +spec: +containers: +- name: trustworthy-container + image: sotrustworthy:latest + +### 5.7.3将安全上下文应用到你的 Pod 和容器(自动) + + +**结果**:warn + +**修正措施**: +遵循 Kubernetes 文档,将安全上下文应用到你的 pod。关于安全上下文的建议清单,你可以参考 CIS 的 Docker 容器安全 Benchmark。 + +### 5.7.4确保不使用 Default 命名空间(手动) + + +**结果**:warn + +**修正措施**: +确保创建命名空间以允许对 Kubernetes 进行适当的隔离资源,并且所有新资源都创建在特定的命名空间中。 + diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/rancher-security/security-advisories-and-cves.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/rancher-security/security-advisories-and-cves.md new file mode 100644 index 00000000000..b7c295fbaed --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/rancher-security/security-advisories-and-cves.md @@ -0,0 +1,34 @@ +--- +title: 安全公告和 CVE +weight: 300 +aliases: + - /rancher/v2.x/en/security/cve/ +--- + +Rancher 致力于向社区披露我们产品的安全问题。我们会针对已解决的问题发布安全公告和 CVE(Common Vulnerabilities and Exposures,通用漏洞披露)。Rancher GitHub 上的[安全页面](https://github.com/rancher/rancher/security/advisories)也会发布新的安全公告。 + +| ID | 描述 | 日期 | 解决 | +|----|-------------|------|------------| +| [CVE-2022-31247](https://github.com/rancher/rancher/security/advisories/GHSA-6x34-89p7-95wg) | 在 2.5.15(包括)到 2.6.6(包括)的 Rancher 版本中发现了一个问题,其中的授权逻辑缺陷允许在下游集群中通过集群角色模板绑定 (CRTB) 和项目角色模板绑定 (PRTB) 来提升权限。任何有权限创建/编辑 CRTB 或 PRTB 的用户(例如 `cluster-owner`、`manage cluster members`、`project-owner` 和 `manage project members`)都可以利用该漏洞,在同一集群的另一个项目或不同下游集群的另一个项目中获得所有者权限。 | 2022 年 8 月 18 日 | [Rancher 2.6.7](https://github.com/rancher/rancher/releases/tag/v2.6.7) 和 [Rancher 2.5.16](https://github.com/rancher/rancher/releases/tag/v2.5.16) | +| [CVE-2021-36783](https://github.com/rancher/rancher/security/advisories/GHSA-8w87-58w6-hfv8) | 2.5.12 到 2.6.3 的 Rancher 版本无法正确清理集群模板 answer 中的凭证。此错误可能会导致明文存储以及凭证、密码和 API 令牌被暴露。在 Rancher 中,已认证的 `Cluster Owner`、`Cluster Member`、`Project Owner` 和 `Project Member` 可以在 `/v1/management.cattle.io.clusters`、`/v3/clusters` 和 `/k8s/clusters/local/apis/management.cattle.io/v3/clusters` 端点上看到暴露的凭证。 | 2022 年 8 月 18 日 | [Rancher 2.6.7](https://github.com/rancher/rancher/releases/tag/v2.6.7) 和 [Rancher 2.5.16](https://github.com/rancher/rancher/releases/tag/v2.5.16) | +| [CVE-2021-36782](https://github.com/rancher/rancher/security/advisories/GHSA-g7j7-h4q8-8w2f) | 在 2.5.15 到 2.6.6 的 Rancher 版本中发现了一个问题,其中密码、API 密钥和 Rancher 的 ServiceAccount 令牌(用于配置集群)等敏感字段直接以明文形式存储在 `Cluster` 等 Kubernetes 对象上(例如,`cluster.management.cattle.io`)。任何能够读取 Kubernetes API 中的对象的用户都可以检索这些敏感数据的明文版本。该问题由 Florian Struck(来自 [Continum AG](https://www.continum.net/))和 [Marco Stuurman](https://github.com/fe-ax)(来自 [Shock Media B.V.](https://www.shockmedia.nl/))发现并报告。 | 2022 年 8 月 18 日 | [Rancher 2.6.7](https://github.com/rancher/rancher/releases/tag/v2.6.7) 和 [Rancher 2.5.16](https://github.com/rancher/rancher/releases/tag/v2.5.16) | +| [CVE-2022-21951](https://github.com/rancher/rancher/security/advisories/GHSA-vrph-m5jj-c46c) | 此漏洞仅影响通过 [RKE 模板](https://rancher.com/docs/rancher/v2.6/en/admin-settings/rke-templates/)配置 [Weave](https://rancher.com/docs/rancher/v2.6/en/faq/networking/cni-providers/#weave) 容器网络接口 (CNI) 的客户。在 Rancher 2.5.0 到 2.5.13 和 Rancher 2.6.0 到 2.6.4 版本中发现了一个漏洞。如果将 CNI 选为 Weave,RKE 模板的用户界面 (UI) 不包括 Weave 密码的值。如果基于上述模板创建集群,并且将 Weave 配置为 CNI,则 Weave 中不会为[网络加密](https://www.weave.works/docs/net/latest/tasks/manage/security-untrusted-networks/)创建密码。因此,集群中的网络流量将不加密发送。 | 2022 年 5 月 24 日 | [Rancher 2.6.5](https://github.com/rancher/rancher/releases/tag/v2.6.5) 和 [Rancher 2.5.14](https://github.com/rancher/rancher/releases/tag/v2.5.14) | +| [CVE-2021-36784](https://github.com/rancher/rancher/security/advisories/GHSA-jwvr-vv7p-gpwq) | 在 Rancher 2.5.0 到 2.5.12 和 Rancher 2.6.0 到 2.6.3 中发现了一个漏洞,该漏洞允许能创建或更新[全局角色](https://rancher.com/docs/rancher/v2.6/en/admin-settings/rbac/)的用户将他们或其他用户升级为管理员。全局角色能授予用户 Rancher 级别的权限,例如能创建集群。在已识别的 Rancher 版本中,如果用户被授予了编辑或创建全局角色的权限,他们不仅仅能授予他们已经拥有的权限。此漏洞影响使用能够创建或编辑全局角色的非管理员用户的客户。此场景最常见的用例是 `restricted-admin` 角色。 | 2022 年 4 月 14 日 | [Rancher 2.6.4](https://github.com/rancher/rancher/releases/tag/v2.6.4) 和 [Rancher 2.5.13](https://github.com/rancher/rancher/releases/tag/v2.5.13) | +| [CVE-2021-4200](https://github.com/rancher/rancher/security/advisories/GHSA-hx8w-ghh8-r4xf) | 此漏洞仅影响在 Rancher 中使用 `restricted-admin` 角色的客户。在 Rancher 2.5.0 到 2.5.12 和 2.6.0 到 2.6.3 中发现了一个漏洞,其中 `cattle-global-data` 命名空间中的 `global-data` 角色授予了应用商店的写权限。由于具有任何级别的应用商店访问权限的用户都会绑定到 `global-data` 角色,因此这些用户都能写入模板 `CatalogTemplates`) 和模板版本 (`CatalogTemplateVersions`)。在 Rancher 中创建的新用户默认分配到 `user` 角色(普通用户),该角色本不该具有写入应用商店的权限。此漏洞提升了能写入应用商店模板和应用商店模板版本资源的用户的权限。 | 2022 年 4 月 14 日 | [Rancher 2.6.4](https://github.com/rancher/rancher/releases/tag/v2.6.4) 和 [Rancher 2.5.13](https://github.com/rancher/rancher/releases/tag/v2.5.13) | +| [GHSA-wm2r-rp98-8pmh](https://github.com/rancher/rancher/security/advisories/GHSA-wm2r-rp98-8pmh) | 此漏洞仅影响使用经过认证的 Git 和/或 Helm 仓库通过 [Fleet](https://rancher.com/docs/rancher/v2.6/en/deploy-across-clusters/fleet/) 进行持续交付的客户。在 [`v1.5.11`](https://github.com/hashicorp/go-getter/releases/tag/v1.5.11) 之前版本中的 `go-getter` 库中发现了一个问题,错误消息中没有删除 Base64 编码的 SSH 私钥,导致该信息暴露。Rancher 中 [`v0.3.9`](https://github.com/rancher/fleet/releases/tag/v0.3.9) 之前的 Fleet 版本使用了该库的漏洞版本。此问题影响 Rancher 2.5.0 到 2.5.12(包括 2.5.12)以及 2.6.0 到 2.6.3(包括 2.6.3)。该问题由 Raft Engineering 的 Dagan Henderson 发现并报告。 | 2022 年 4 月 14 日 | [Rancher 2.6.4](https://github.com/rancher/rancher/releases/tag/v2.6.4) 和 [Rancher 2.5.13](https://github.com/rancher/rancher/releases/tag/v2.5.13) | +| [CVE-2021-36778](https://github.com/rancher/rancher/security/advisories/GHSA-4fc7-hc63-7fjg) | 在 Rancher 2.5.0 到 2.5.11 和 Rancher 2.6.0 到 2.6.2 中发现了一个漏洞,当从配置的私有仓库下载 Helm Chart 时,对同源策略的检查不足可能导致仓库凭证暴露给第三方提供商。仅当用户在 Rancher 的`应用 & 应用市场 > 仓库`中配置私有仓库的访问凭证时才会出现此问题。该问题由 Martin Andreas Ullrich 发现并报告。 | 2022 年 4 月 14 日 | [Rancher 2.6.3](https://github.com/rancher/rancher/releases/tag/v2.6.3) 和 [Rancher 2.5.12](https://github.com/rancher/rancher/releases/tag/v2.5.12) | +| [GHSA-hwm2-4ph6-w6m5](https://github.com/rancher/rancher/security/advisories/GHSA-hwm2-4ph6-w6m5) | 在 Rancher 2.0 到 2.6.3 中发现了一个漏洞。Rancher 提供的 `restricted` Pod 安全策略(PSP)与 Kubernetes 提供的上游 `restricted` 策略有差别,因此 Rancher 的 PSP 将 `runAsUser` 设置为 `runAsAny`,而上游将 `runAsUser` 设置为 `MustRunAsNonRoot`。因此,即使 Rancher 的 `restricted` 策略是在项目或集群级别上强制执行的,容器也可以以任何用户身份运行,包括特权用户 (`root`)。 | 2022 年 3 月 31 日 | [Rancher 2.6.4](https://github.com/rancher/rancher/releases/tag/v2.6.4) | +| [CVE-2021-36775](https://github.com/rancher/rancher/security/advisories/GHSA-28g7-896h-695v) | 在 Rancher 2.4.17、2.5.11 和 2.6.2 以及更高的版本中发现了一个漏洞。从项目中删除与某个组关联的`项目角色`后,能让这些使用者访问集群级别资源的绑定(Binding)不会被删除。导致问题的原因是不完整的授权逻辑检查。如果用户是受影响组中的成员,且能对 Rancher 进行认证访问,那么用户可以利用此漏洞访问他们不应该能访问的资源。暴露级别取决于受影响项目角色的原始权限级别。此漏洞仅影响在 Rancher 中基于组进行身份验证的客户。 | 2022 年 3 月 31 日 | [Rancher 2.6.3](https://github.com/rancher/rancher/releases/tag/v2.6.3)、[Rancher 2.5.12](https://github.com/rancher/rancher/releases/tag/v2.5.12) 和 [Rancher 2.4.18](https://github.com/rancher/rancher/releases/tag/v2.4.18) | +| [CVE-2021-36776](https://github.com/rancher/rancher/security/advisories/GHSA-gvh9-xgrq-r8hw) | 在 Rancher 2.5.0 到 2.5.9 中发现了一个漏洞,该漏洞允许经过认证用户通过 API 代理模拟集群上的任何用户,而无需知道被模拟用户的凭证。问题的原因是 API 代理在将请求发送到 Kubernetes API 之前未删除模拟标头。能认证访问 Rancher 的恶意用户可以冒充另一个在 Rancher 认证用户,从而对集群进行管理员级别的访问。 | 2022 年 3 月 31 日 | [Rancher 2.6.0](https://github.com/rancher/rancher/releases/tag/v2.6.0) 和 [Rancher 2.5.10](https://github.com/rancher/rancher/releases/tag/v2.5.10) | +| [CVE-2021-25318](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-25318) | Rancher 2.0 的不可编辑版本发现了一个漏洞,在该版本中,无论资源的 API 组如何,用户都可以访问资源。例如,Rancher 应该允许用户访问 `apps.catalog.cattle.io`,但却错误地授予了对 `apps.*` 的访问权限。你可以在[这里](https://github.com/rancher/rancher/security/advisories/GHSA-f9xf-jq4j-vqw4)找到**下游集群**和 **Rancher 管理集群**中受影响的资源。除了升级到打了补丁的 Rancher 版本之外,暂时没有直接的缓解措施。 | 2021 年 7 月 14 日 | [Rancher 2.5.9](https://github.com/rancher/rancher/releases/tag/v2.5.9) 和 [Rancher 2.4.16](https://github.com/rancher/rancher/releases/tag/v2.4.16) | +| [CVE-2021-31999](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-31999) | Rancher 2.0.0 的补丁版本发现了一个漏洞,恶意的 Rancher 用户可以针对托管集群的 Kubernetes API 的代理发起一个 API 请求,以获取他们无权访问的信息。这是通过在 Connection 标头中传递 “Impersonate-User” 或 “Impersonate-Group” 标头来实现的,然后代理会删除该标头。此时,请求不会模拟用户及其权限,而是会类似 Rancher management server 的请求,并错误地返回信息。该漏洞仅影响对集群具有一定级别权限的 Rancher 用户。除了升级到打了补丁的 Rancher 版本之外,暂时没有直接的缓解措施。 | 2021 年 7 月 14 日 | [Rancher 2.5.9](https://github.com/rancher/rancher/releases/tag/v2.5.9) 和 [Rancher 2.4.16](https://github.com/rancher/rancher/releases/tag/v2.4.16) | +| [CVE-2021-25320](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-25320) | Rancher 2.2.0 的补丁版本发现了一个漏洞,云凭证没有正确通过 Rancher API 验证。具体地说,是通过用于与云提供商通信的代理。任何登录并具有有效云提供商云凭证 ID 的 Rancher 用户都可以通过代理 API 调用该云提供商的 API,并且云凭证会被绑定。该漏洞仅影响有效的 Rancher 用户。除了升级到打了补丁的 Rancher 版本之外,暂时没有直接的缓解措施。 | 2021 年 7 月 14 日 | [Rancher 2.5.9](https://github.com/rancher/rancher/releases/tag/v2.5.9) 和 [Rancher 2.4.16](https://github.com/rancher/rancher/releases/tag/v2.4.16) | +| [CVE-2021-25313](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-25313) | 所有 Rancher 2 版本上都发现了一个安全漏洞。使用浏览器访问 Rancher API 时,URL 没有正确转义,导致它容易受到 XSS 攻击。这些 API 端点的特制 URL 可能包括嵌入页面并在浏览器中执行的 JavaScript。暂时没有直接的缓解措施。请不要单击指向 Rancher Server 的不受信任链接。 | 2021 年 3 月 2 日 | [Rancher v2.5.6](https://github.com/rancher/rancher/releases/tag/v2.5.6)、[Rancher v2.4.14](https://github.com/rancher/rancher/releases/tag/v2.4.14) 和 [Rancher v2.3.11](https://github.com/rancher/rancher/releases/tag/v2.3.11) | +| [CVE-2019-14435](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-14435) | 此漏洞让已验证的用户可以通过 Rancher 使用的系统服务容器可访问的 IP 提取私有数据。这包括但不限于云提供商元数据服务等服务。虽然 Rancher 允许用户为系统服务配置白名单域,但这个漏洞仍然可以被精心设计的 HTTP 请求利用。该问题由 Workiva 的 Matt Belisle 和 Alex Stevenson 发现并报告。 | 2019 年 8 月 5 日 | [Rancher 2.2.7](https://github.com/rancher/rancher/releases/tag/v2.2.7) 和 [Rancher 2.1.12](https://github.com/rancher/rancher/releases/tag/v2.1.12) | +| [CVE-2019-14436](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-14436) | 该漏洞允许有权编辑角色绑定的项目成员为自己或其他用户分配集群级别的角色,从而授予他们对该集群的管理员访问权限。该问题由 Nokia 的 Michal Lipinski 发现并报告。 | 2019 年 8 月 5 日 | [Rancher 2.2.7](https://github.com/rancher/rancher/releases/tag/v2.2.7) 和 [Rancher 2.1.12](https://github.com/rancher/rancher/releases/tag/v2.1.12) | +| [CVE-2019-13209](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-13209) | 该漏洞被称为[跨网页 Websocket 劫持攻击](https://www.christian-schneider.net/CrossSiteWebSocketHijacking.html)。该攻击允许攻击者以受害用户的角色/权限访问由 Rancher 管理的集群。它让受害用户登录到 Rancher Server,然后访问由攻击者托管的第三方站点。完成后,攻击者就可以使用受害用户的权限和身份对 Kubernetes API 执行命令。该问题由 Workiva 的 Matt Belisle 和 Alex Stevenson 报告。 | 2019 年 7 月 15 日 | [Rancher 2.2.5](https://github.com/rancher/rancher/releases/tag/v2.2.5)、[Rancher 2.1.11](https://github.com/rancher/rancher/releases/tag/v2.1.11) 和 [Rancher 2.0.16](https://github.com/rancher/rancher/releases/tag/v2.0.16) | +| [CVE-2019-12303](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-12303) | 项目所有者可以注入额外的 fluentd 日志配置,从而在 fluentd 容器内读取文件或执行任意命令。该问题由 Untamed Theory 的 Tyler Welton 报告。 | 2019 年 6 月 5 日 | [Rancher 2.2.4](https://github.com/rancher/rancher/releases/tag/v2.2.4)、[Rancher 2.1.10](https://github.com/rancher/rancher/releases/tag/v2.1.10) 和 [Rancher 2.0.15](https://github.com/rancher/rancher/releases/tag/v2.0.15) | +| [CVE-2019-12274](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-12274) | 如果节点使用的内置主机驱动使用了文件路径选项,则节点可以读取 Rancher Server 容器内的任意文件,包括敏感文件。 | 2019 年 6 月 5 日 | [Rancher 2.2.4](https://github.com/rancher/rancher/releases/tag/v2.2.4)、[Rancher 2.1.10](https://github.com/rancher/rancher/releases/tag/v2.1.10) 和 [Rancher 2.0.15](https://github.com/rancher/rancher/releases/tag/v2.0.15) | +| [CVE-2019-11202](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-11202) | 即使已被显式删除,Rancher 的默认管理员会在 Rancher 重启时重新创建。 | 2019 年 4 月 16 日 | [Rancher 2.2.2](https://github.com/rancher/rancher/releases/tag/v2.2.2)、[Rancher 2.1.9](https://github.com/rancher/rancher/releases/tag/v2.1.9) 和 [Rancher 2.0.14](https://github.com/rancher/rancher/releases/tag/v2.0.14) | +| [CVE-2019-6287](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-6287) | 如果将项目成员添加到多个项目中,则成员还能继续访问被删除的项目中的命名空间。 | 2019 年 1 月 29 日 | [Rancher 2.1.6](https://github.com/rancher/rancher/releases/tag/v2.1.6) 和 [Rancher 2.0.11](https://github.com/rancher/rancher/releases/tag/v2.0.11) | +| [CVE-2018-20321](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-20321) | 任何有权访问 `default` 命名空间的项目成员都可以在 pod 中挂载 `netes-default` ServiceAccount,然后使用该 pod 对 Kubernetes 集群执行管理特权命令。 | 2019 年 1 月 29 日 | [Rancher 2.1.6](https://github.com/rancher/rancher/releases/tag/v2.1.6) 和 [Rancher 2.0.11](https://github.com/rancher/rancher/releases/tag/v2.0.11) - 对于这些版本或更高版本,我们有对应的[回滚说明](../../getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/rollbacks.md)。 | diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/rancher-security/selinux-rpm/about-rancher-selinux.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/rancher-security/selinux-rpm/about-rancher-selinux.md new file mode 100644 index 00000000000..5146e3aeb0c --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/rancher-security/selinux-rpm/about-rancher-selinux.md @@ -0,0 +1,66 @@ +--- +title: 关于 rancher-selinux +--- + +要让 Rancher 使用 SELinux,你必须手动为 SELinux 节点启用一些功能。为了解决这个问题,Rancher 提供了一个 SELinux RPM。 + +`rancher-selinux` RPM 仅包含 [rancher-logging 应用程序](https://github.com/rancher/charts/tree/dev-v2.5/charts/rancher-logging)的策略。 + +`rancher-selinux` 的 GitHub 仓库在[这里](https://github.com/rancher/rancher-selinux)。 + +## 安装 rancher-selinux RPM + +:::note 要求 + +rancher-selinux RPM 已在 CentOS 7 和 8 上进行了测试。 + +::: + +### 1. 设置 yum 仓库 + +设置 yum 仓库,从而直接在集群中的所有主机上安装 `rancher-selinux`。 + +要使用 RPM 仓库,在 CentOS 7 或 RHEL 7 系统上运行以下 bash 代码片段: + +``` +# cat << EOF > /etc/yum.repos.d/rancher.repo +[rancher] +name=Rancher +baseurl=https://rpm.rancher.io/rancher/production/centos/7/noarch +enabled=1 +gpgcheck=1 +gpgkey=https://rpm.rancher.io/public.key +EOF +``` + +要使用 RPM 仓库,在 CentOS 8 或 RHEL 8 系统上运行以下 bash 代码片段: + +``` +# cat << EOF > /etc/yum.repos.d/rancher.repo +[rancher] +name=Rancher +baseurl=https://rpm.rancher.io/rancher/production/centos/8/noarch +enabled=1 +gpgcheck=1 +gpgkey=https://rpm.rancher.io/public.key +EOF +``` +### 2. 安装 RPM + +安装 RPM: + +``` +yum -y install rancher-selinux +``` + +## 配置 Logging 应用程序以使用 SELinux + +:::note 要求 + +Logging v2 已在 RHEL/CentOS 7 和 8 上使用 SELinux 进行了测试。 + +::: + +在主机上安装 `rancher-selinux` RPM 后,应用程序不会自动运行。它们需要在 RPM 提供的允许的 SELinux 容器域中运行。 + +要将 `rancher-logging` Chart 配置为支持 SELinux,请在安装 Chart 时将 `values.yaml` 中的 `global.seLinux.enabled` 更改为 true。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/rancher-security/selinux-rpm/about-rke2-selinux.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/rancher-security/selinux-rpm/about-rke2-selinux.md new file mode 100644 index 00000000000..b6541749f59 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/rancher-security/selinux-rpm/about-rke2-selinux.md @@ -0,0 +1,9 @@ +--- +title: 关于 rke2-selinux +--- + +`rke2-selinux` 为 RKE2 提供策略。如果 RKE2 安装程序脚本检测到它运行在基于 RPM 的发行版上,它会自动安装。 + +`rke2-selinux` 的 GitHub 仓库在[这里](https://github.com/rancher/rke2-selinux)。 + +有关在启用 SELinux 的主机上安装 RKE2 的更多信息,请参阅 [RKE2 文档](https://docs.rke2.io/install/methods/#rpm)。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/rke1-template-example-yaml.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/rke1-template-example-yaml.md new file mode 100644 index 00000000000..4c556cc93a6 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/rke1-template-example-yaml.md @@ -0,0 +1,112 @@ +--- +title: RKE1 示例 YAML +weight: 60 +--- + +以下是一个供参考的 RKE 模板配置文件示例。 + +RKE 模板中的 YAML 使用与创建 RKE 集群时相同的自定义项。但是,由于 YAML 位于 Rancher 配置的 RKE 集群的上下文中,因此 RKE 文档中的自定义项需要嵌套在 `rancher_kubernetes_engine` 指令下。 + +```yaml +# +# Cluster Config +# +docker_root_dir: /var/lib/docker + +enable_cluster_alerting: false +# This setting is not enforced. Clusters +# created with this sample template +# would have alerting turned off by default, +# but end users could still turn alerting +# on or off. + +enable_cluster_monitoring: true +# This setting is not enforced. Clusters +# created with this sample template +# would have monitoring turned on +# by default, but end users could still +# turn monitoring on or off. + +enable_network_policy: false +local_cluster_auth_endpoint: + enabled: true +# +# Rancher Config +# +rancher_kubernetes_engine_config: # Your RKE template config goes here. + addon_job_timeout: 30 + authentication: + strategy: x509 + ignore_docker_version: true +# +# # 目前仅支持 Nginx Ingress 提供商。 +# # 要禁用 Ingress controller,设置 `provider: none` +# # 要在指定节点上禁用 Ingress,使用 node_selector,例如: +# provider: nginx +# node_selector: +# app: ingress +# + ingress: + provider: nginx + kubernetes_version: v1.15.3-rancher3-1 + monitoring: + provider: metrics-server +# +# If you are using calico on AWS +# +# network: +# plugin: calico +# calico_network_provider: +# cloud_provider: aws +# +# # To specify flannel interface +# +# network: +# plugin: flannel +# flannel_network_provider: +# iface: eth1 +# +# # To specify flannel interface for canal plugin +# +# network: +# plugin: canal +# canal_network_provider: +# iface: eth1 +# + network: + options: + flannel_backend_type: vxlan + plugin: canal +# +# services: +# kube-api: +# service_cluster_ip_range: 10.43.0.0/16 +# kube-controller: +# cluster_cidr: 10.42.0.0/16 +# service_cluster_ip_range: 10.43.0.0/16 +# kubelet: +# cluster_domain: cluster.local +# cluster_dns_server: 10.43.0.10 +# + services: + etcd: + backup_config: + enabled: true + interval_hours: 12 + retention: 6 + safe_timestamp: false + creation: 12h + extra_args: + election-timeout: 5000 + heartbeat-interval: 500 + gid: 0 + retention: 72h + snapshot: false + uid: 0 + kube_api: + always_pull_images: false + pod_security_policy: false + service_node_port_range: 30000-32767 + ssh_agent_auth: false +windows_prefered_cluster: false +``` diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/single-node-rancher-in-docker/advanced-options.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/single-node-rancher-in-docker/advanced-options.md new file mode 100644 index 00000000000..15f80582a24 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/single-node-rancher-in-docker/advanced-options.md @@ -0,0 +1,107 @@ +--- +title: Docker 安装高级选项 +weight: 5 +--- + + +### 自定义 CA 证书 + +如需 Rancher 在验证服务时使用 CA 根证书,请在启动 Rancher 容器时共享包含 CA 根证书的目录。 + +使用命令示例来启动挂载了私有 CA 证书的 Rancher 容器。 + +- 卷标志 (`-v`) 应指定包含 CA 根证书的主机目录。 +- 环境变量标志 (`-e`) 与 `SSL_CERT_DIR` 和目录共同声明一个环境变量,该变量指定容器内挂载了 CA 根证书的目录位置。 +- 你可使用 `-e KEY=VALUE` 或 `--env KEY=VALUE`将环境变量传给 Rancher 容器。 +- 你可使用 `-v host-source-directory:container-destination-directory` 或 `--volume host-source-directory:container-destination-directory`在容器内挂载主机目录。 + +在以下示例将位于 `/host/certs` 主机目录中的 CA 证书,挂载到 Rancher 容器内的 `/container/certs` 上。 + +特权访问是[必须](../../pages-for-subheaders/rancher-on-a-single-node-with-docker.md#rancher-特权访问)的。 + +``` +docker run -d --restart=unless-stopped \ + -p 80:80 -p 443:443 \ + -v /host/certs:/container/certs \ + -e SSL_CERT_DIR="/container/certs" \ + --privileged \ + rancher/rancher:latest +``` + +### API 审计日志 + +API 审计日志记录了通过 Rancher Server 进行的所有用户和系统事务。 + +默认情况下,API 审计日志会写入到 Rancher 容器内的 `/var/log/auditlog`。你可将此目录共享为卷,并设置 `AUDIT_LEVEL` 以启用日志。 + +有关更多信息和选项,请参见 [API 审计日志](../../getting-started/installation-and-upgrade/advanced-options/advanced-use-cases/enable-api-audit-log.md)。 + +特权访问是[必须](../../pages-for-subheaders/rancher-on-a-single-node-with-docker.md#rancher-特权访问)的。 + +``` +docker run -d --restart=unless-stopped \ + -p 80:80 -p 443:443 \ + -v /var/log/rancher/auditlog:/var/log/auditlog \ + -e AUDIT_LEVEL=1 \ + --privileged \ + rancher/rancher:latest +``` + +### TLS 设置 + +如需使用不同的 TLS 配置,你可使用 `CATTLE_TLS_MIN_VERSION` 和 `CATTLE_TLS_CIPHERS` 环境变量。例如,将 TLS 1.0 设为可接受的最低 TLS 版本,如下: + +``` +docker run -d --restart=unless-stopped \ + -p 80:80 -p 443:443 \ + -e CATTLE_TLS_MIN_VERSION="1.0" \ + --privileged \ + rancher/rancher:latest +``` + +特权访问是[必须](../../pages-for-subheaders/rancher-on-a-single-node-with-docker.md#rancher-特权访问)的。 + +参见 [TLS 设置](../installation-references/tls-settings.md)了解更多信息和选项。 + +### 离线环境 + +如果要访问此页面以完成离线安装,在运行安装命令时,你必须把私有镜像仓库的 URL 添加到 Server 标志前面。例如,将带有私有镜像仓库 URL 的 `` 添加到 `rancher/rancher:latest` 前面。 + +**示例**: + + /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 +``` + +特权访问是[必须](../../pages-for-subheaders/rancher-on-a-single-node-with-docker.md#rancher-特权访问)的。 + +### 在同一个节点中运行 `rancher/rancher` 和 `rancher/rancher-agent` + +如需使用单个节点运行 Rancher 并将同一个节点添加到集群,你必须调整映射给 `rancher/rancher` 容器的主机端口。 + +如果将节点添加到集群中,节点将部署使用端口 80 和 443 的 NGINX Ingress Controller。而这将与我们建议用于暴露 `rancher/rancher` 容器的默认端口冲突。 + +请知悉我们不建议将此设置用于生产环境,这种方式仅用来方便进行开发/演示。 + +如需更改主机端口映射,将 `-p 80:80 -p 443:443` 替换为 `-p 8080:80 -p 8443:443`: + +``` +docker run -d --restart=unless-stopped \ + -p 8080:80 -p 8443:443 \ + --privileged \ + rancher/rancher:latest +``` + +特权访问是[必须](../../pages-for-subheaders/rancher-on-a-single-node-with-docker.md#rancher-特权访问)的。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/single-node-rancher-in-docker/http-proxy-configuration.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/single-node-rancher-in-docker/http-proxy-configuration.md new file mode 100644 index 00000000000..07106d65fd5 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/single-node-rancher-in-docker/http-proxy-configuration.md @@ -0,0 +1,64 @@ +--- +title: HTTP 代理配置 +weight: 251 +--- + +如果你通过代理来操作 Rancher,并想要通过代理访问服务(例如拉取应用商店),你需要提供 Rancher 代理的信息。由于 Rancher 是用 Go 编写的,Rancher 使用如下常见的代理环境变量。 + +请确保 `NO_PROXY` 包含不使用代理的网络地址,网络地址范围和域名。 + +| 环境变量 | 用途 | +| -------------------- | ----------------------------------------------------------------------------------------------------------------------- | +| HTTP_PROXY | 发起 HTTP 连接的代理地址 | +| HTTPS_PROXY | 发起 HTTPS 连接的代理地址 | +| NO_PROXY | 发起连接时不使用代理的网络地址,网络地址范围和域名 | + +:::note 重要提示: + +`NO_PROXY` 必须大写才能使用网络范围 CIDR 表示法。 + +::: + +## 基于 Docker 安装 + +你可使用 `-e KEY=VALUE` 或 `--env KEY=VALUE`将环境变量传给 Rancher 容器。在 [Docker 安装](../../pages-for-subheaders/rancher-on-a-single-node-with-docker.md)中,`NO_PROXY` 必须的值为: + +- `localhost` +- `127.0.0.1` +- `0.0.0.0` +- `10.0.0.0/8` +- `cattle-system.svc` +- `.svc` +- `.cluster.local` + +以下示例中,代理服务器可以通过 `http://192.168.0.1:3128` 访问。此外,在访问 `192.168.10.0/24` 网络范围以及 `example.com` 域名下的每个主机名时均不使用代理服务器。 + +``` +docker run -d --restart=unless-stopped \ + -p 80:80 -p 443:443 \ + -e HTTP_PROXY="http://192.168.10.1:3128" \ + -e HTTPS_PROXY="http://192.168.10.1:3128" \ + -e NO_PROXY="localhost,127.0.0.1,0.0.0.0,10.0.0.0/8,cattle-system.svc,192.168.10.0/24,.svc,.cluster.local,example.com" \ + --privileged \ + rancher/rancher:latest +``` + +特权访问是[必须](../../pages-for-subheaders/rancher-on-a-single-node-with-docker.md#rancher-特权访问)的。 + +### 离线代理配置 + +_v2.6.4 的新功能_ + +你现在可以在配置的离线集群中配置主机驱动集群,以使用代理进行出站连接。 + +除了如上为代理服务器设置默认规则外,你还需要额外添加如下所示的规则,以从代理的 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 +``` diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/system-tools.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/system-tools.md new file mode 100644 index 00000000000..56e75101df4 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/system-tools.md @@ -0,0 +1,31 @@ +--- +title: 系统工具 +weight: 22 +--- + +:::note + +系统工具(System Tools)自 2022 年 6 月起已弃用。 + +::: +# 日志 + +请使用 [logs-collector](https://github.com/rancherlabs/support-tools/tree/master/collection/rancher/v2.x/logs-collector) 来收集你的集群日志。 + +# Stats + +如果要复制 stats 命令,你可以在集群节点上运行以下命令: + +:::note + +以下命令需要集群节点上的 `sysstat` 包。 + +::: + +``` +/usr/bin/sar -u -r -F 1 1 +``` + +# Remove + +请使用 [Rancher Cleanup](https://github.com/rancher/rancher-cleanup) 工具。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/user-settings/api-keys.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/user-settings/api-keys.md new file mode 100644 index 00000000000..fbea65b383e --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/user-settings/api-keys.md @@ -0,0 +1,60 @@ +--- +title: API 密钥 +weight: 7005 +--- + +## API 密钥和用户身份验证 + +如果你想通过外部应用程序来访问 Rancher 集群、项目或其他对象,你可以使用 Rancher API。但是,在你的应用程序可以访问 API 之前,你必须为应用程序提供用于向 Rancher 进行身份验证的密钥。你可以通过 Rancher UI 获取密钥。 + +使用 Rancher CLI 也需要 API 密钥。 + +API 密钥由四个组件组成: + +- **端点**:其他应用程序用来向 Rancher API 发送请求的 IP 地址和路径。 +- **访问密钥**:Token 的用户名。 +- **密文密钥**:Token 的密码。如果应用程序提示你输入两个不同的字符串进行 API 身份验证,你通常需要将两个密钥一起输入。 +- **持有者令牌**:连接在一起的令牌用户名和密码。如果应用程序提示你输入一个身份验证字符串,则使用此字符串。 + +:::note + +用户可以选择启用[令牌哈希(token hashing)](../about-the-api/api-tokens.md)。 + +::: + +## 创建 API 密钥 + +1. 从右上角选择**用户头像 > 账号 & API 密钥**。 + +2. 单击**创建 API 密钥**。 + +3. **可选**:输入 API 密钥的描述并选择有效期或范围。我们建议设置到期日期。 + + API 密钥过期后将失效。有效期短一点会更安全。 + + 有效期将受 `v3/settings/auth-token-max-ttl-minutes` 约束。如果超过 max-ttl,则会以 max-ttl 为有效期创建 API 密钥。 + + 范围将限制 API 密钥,使其仅适用于指定集群的 Kubernetes API。如果集群配置了授权集群端点,你将能够直接针对集群的 API 使用设定了范围的令牌,而无需通过 Rancher Server 进行代理。有关详细信息,请参阅[授权集群端点](../../pages-for-subheaders/rancher-manager-architecture.md#4-授权集群端点)。 + +4. 单击**创建**。 + + **步骤结果**:已创建 API 密钥。将会显示你的 API **端点**、**访问密钥**、**密文密钥**和**持有者令牌**。 + + 使用**持有者令牌**通过 Rancher CLI 进行身份验证。 + +5. 将显示的信息复制到安全位置。此信息仅显示一次,因此如果你丢失了密钥,则必须制作一个新的。 + +## 后续操作 + +- 将 API 密钥信息输入到将向 Rancher API 发送请求的应用程序中。 +- 要了解 Rancher 端点和参数的更多信息,你可以为 Rancher UI 中的对象选择**在 API 中查看**。 +- API 密钥可用于 API 调用和 [Rancher CLI](../../pages-for-subheaders/cli-with-rancher.md)。 + +## 删除 API 密钥 + +如果要撤销 API 密钥,请将其删除。如果出现以下情况,你需要删除 API 密钥: + +- API 密钥可能已经泄露。 +- API 密钥已过期。 + +要删除 API,选择密钥并单击**删除**。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/user-settings/manage-cloud-credentials.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/user-settings/manage-cloud-credentials.md new file mode 100644 index 00000000000..ce0a04e3bd7 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/user-settings/manage-cloud-credentials.md @@ -0,0 +1,52 @@ +--- +title: 管理云凭证 +weight: 7011 +--- + +如果要创建[由基础设施提供商托管](../../pages-for-subheaders/use-new-nodes-in-an-infra-provider.md)的集群,则可以使用[节点模板](../../pages-for-subheaders/use-new-nodes-in-an-infra-provider.md#节点模板)来配置集群节点。这些模板使用 Docker Machine 配置选项来定义节点的操作系统镜像以及设置/参数。 + +节点模板可以使用云凭证来访问在基础设施提供商中配置节点所需的凭证信息。多个节点模板可以使用相同的云凭证。云凭证省去了为同一云提供商重新输入访问密钥的麻烦。云凭证存储在 Kubernetes 密文中。 + +只有存在标记为 `password` 的字段时,节点模板才会使用云凭证。默认的 `active` 主机驱动将其账号访问字段标记为 `password`,但可能有一些 `inactive` 主机驱动没有使用它们。这些主机驱动不会使用云凭证。 + +你可以在两种情况下创建云凭证: + +- [在为集群创建节点模板期间](../../pages-for-subheaders/use-new-nodes-in-an-infra-provider.md#节点模板)。 +- 在**用户设置**中。 + +所有云凭证都绑定到创建者的用户配置文件。**不能**与其他用户共享。 + +## 使用用户设置创建云凭证 + +1. 点击 **☰ > 集群管理**。 +1. 单击**云凭证**。 +1. 单击**创建**。 +1. 单击云凭证类型。下拉列表中的选项取决于 Rancher 中的 `active` [主机驱动](../../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-provisioning-drivers/manage-node-drivers.md)。 +1. 输入云凭证的名称。 +1. 根据所选的云凭证类型输入所需的值,从而向基础设施提供商进行身份验证。 +1. 单击**创建**。 + +**结果**:已创建云凭证,它可以立即用于[创建节点模板](../../pages-for-subheaders/use-new-nodes-in-an-infra-provider.md#节点模板)。 + +## 更新云凭证 + +如果访问凭证更改或泄露了,你可以通过更新云凭证来进行轮换,同时保留相同的节点模板。 + +1. 点击 **☰ > 集群管理**。 +1. 单击**云凭证**。 +1. 选择要编辑的云凭证,然后单击 **⋮ > 编辑配置**。 +1. 更新凭证信息并单击**保存**。 + +**结果**:已使用新的访问凭证更新云凭证。[添加新节点](../../pages-for-subheaders/use-new-nodes-in-an-infra-provider.md)时,所有使用此云凭证的现有节点模板都会自动使用更新的信息。 + +## 删除云凭证 + +如果要删除云凭证,云凭证不能有关联的节点模板。如果你无法删除云凭证,请[删除与该云凭证关联的所有节点模板](manage-node-templates.md#删除节点模板)。 + +1. 点击 **☰ > 集群管理**。 +1. 单击**云凭证**。 +1. 你可以删除单个云凭证或进行批量删除。 + + - 要单独删除一个云凭证,请选择你要编辑的云凭证,然后单击 **⋮ > 删除**。 + - 要批量删除云凭证,请从列表中选择一个或多个云凭证。单击**删除**。 +1. 确认你需要删除这些云凭证。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/user-settings/manage-node-templates.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/user-settings/manage-node-templates.md new file mode 100644 index 00000000000..4b77803b0c3 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/user-settings/manage-node-templates.md @@ -0,0 +1,55 @@ +--- +title: 管理节点模板 +weight: 7010 +--- + +如果要配置[由基础设施提供商托管](../../pages-for-subheaders/use-new-nodes-in-an-infra-provider.md)的集群,则可以使用[节点模板](../../pages-for-subheaders/use-new-nodes-in-an-infra-provider.md#节点模板)来配置集群节点。这些模板使用 Docker Machine 配置选项来定义节点的操作系统镜像以及设置/参数。你可以在两种情况下创建节点模板: + +- [配置节点池集群](../../pages-for-subheaders/use-new-nodes-in-an-infra-provider.md)。 +- 在任何时间使用[用户设置](#使用用户设置创建云凭证)。 + +创建节点模板时,它会绑定到你的用户配置文件。节点模板不能在用户之间共享。你可以从用户设置中删除不再使用的旧节点模板。 + +## 创建节点模板 + +1. 点击 **☰ > 集群管理**。 +1. 单击 **RKE1 配置 > 节点模板**。 +1. 单击**添加模板**。 +1. 选择一个可用的云提供商。然后按照屏幕上的说明配置模板。 + +**结果**:模板已配置。你可以稍后在[配置节点池集群](../../pages-for-subheaders/use-new-nodes-in-an-infra-provider.md)时使用该模板。 + +## 更新节点模板 + +1. 点击 **☰ > 集群管理**。 +1. 单击 **RKE1 配置 > 节点模板**。 +1. 选择要编辑的节点模板并单击 **⋮ > 编辑**。 + + :::note + + 默认的 `active` [主机驱动](../../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/about-provisioning-drivers/manage-node-drivers.md) 和任何标记了 `password` 字段的主机驱动都需要使用[云凭证](../../pages-for-subheaders/use-new-nodes-in-an-infra-provider.md#云凭证)。 + + ::: + +1. 编辑所需信息并单击**保存**。 + +**结果**:节点模板已更新。添加新节点时,使用此节点模板的所有节点池都会自动使用更新的信息。 + +## 克隆节点模板 + +通过用户设置创建新的节点模板时,可以克隆现有模板并快速更新其设置,而无需从头开始创建新的模板。克隆模板避免了为云提供商重新输入访问密钥的麻烦。 + +1. 点击 **☰ > 集群管理**。 +1. 单击 **RKE1 配置 > 节点模板**。 +1. 找到要克隆的模板。然后选择 **⋮ > 克隆**。 +1. 填写表单的其余部分。 + +**结果**:已克隆和配置模板。你可以稍后在[配置节点池集群](../../pages-for-subheaders/use-new-nodes-in-an-infra-provider.md)时使用该模板。 + +## 删除节点模板 + +不再使用节点模板时,你可以将其从用户设置中删除。 + +1. 点击 **☰ > 集群管理**。 +1. 单击 **RKE1 配置 > 节点模板**。 +1. 从列表中选择一个或多个模板。然后点击**删除**。出现提示时确认删除。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/user-settings/user-preferences.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/user-settings/user-preferences.md new file mode 100644 index 00000000000..f6dae3cc8cb --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/user-settings/user-preferences.md @@ -0,0 +1,18 @@ +--- +title: 用户偏好 +weight: 7012 +--- + +每个用户都可以设置自己的偏好,从而按照自己的喜好调整 Rancher UI 界面。要更改偏好设置,请打开**用户设置**菜单,然后选择**偏好设置**。 + +## 主题 + +选择 Rancher UI 的背景颜色。如果选择**自动**,背景颜色会在下午 6 点从浅色变为深色,然后在早上 6 点变回浅色。 + +## 我的账号 + +此部分显示用于会话的**名称**(你的显示名称)和**用户名**(你的登录名)。要更改你当前的密码,请单击**更改密码**按钮。 + +## 每页表格行 + +在使用表格来显示系统对象(如集群或 deployment)的页面中,你可以设置每页显示的最大对象数量。默认设置为 `50`。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/security/security-scan/security-scan.md b/i18n/zh/docusaurus-plugin-content-docs/current/security/security-scan/security-scan.md new file mode 100644 index 00000000000..9f1983b7f52 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/security/security-scan/security-scan.md @@ -0,0 +1,6 @@ +--- +title: 安全扫描 +weight: 299 +--- + +CIS 安全扫描的文档已移至[此处](../../pages-for-subheaders/cis-scan-guides.md)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/shared-files/_cluster-capabilities-table.md b/i18n/zh/docusaurus-plugin-content-docs/current/shared-files/_cluster-capabilities-table.md new file mode 100644 index 00000000000..6688033b21d --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/shared-files/_cluster-capabilities-table.md @@ -0,0 +1,24 @@ +| 操作 | Rancher 启动的 Kubernetes 集群 | EKS、GKE 和 AKS 集群1 | 其他托管的 Kubernetes 集群 | 非 EKS 或 GKE 注册集群 | +| --- | --- | ---| ---|----| +| [使用 kubectl 和 kubeconfig 文件来访问集群](../how-to-guides/advanced-user-guides/manage-clusters/access-clusters/use-kubectl-and-kubeconfig.md) | ✓ | ✓ | ✓ | ✓ | +| [管理集群成员](../how-to-guides/advanced-user-guides/manage-clusters/access-clusters/add-users-to-clusters.md) | ✓ | ✓ | ✓ | ✓ | +| [编辑和升级集群](../pages-for-subheaders/cluster-configuration.md) | ✓ | ✓ | ✓ | ✓2 | +| [管理节点](../how-to-guides/advanced-user-guides/manage-clusters/nodes-and-node-pools.md) | ✓ | ✓ | ✓ | ✓3 | +| [管理持久卷和存储类](../pages-for-subheaders/create-kubernetes-persistent-storage.md) | ✓ | ✓ | ✓ | ✓ | +| [管理项目、命名空间和工作负载](../how-to-guides/advanced-user-guides/manage-clusters/projects-and-namespaces.md) | ✓ | ✓ | ✓ | ✓ | +| [使用应用目录](../pages-for-subheaders/helm-charts-in-rancher.md) | ✓ | ✓ | ✓ | ✓ | +| 配置工具([Alerts、Notifiers、Monitoring](../pages-for-subheaders/monitoring-and-alerting.md)、[Logging](../pages-for-subheaders/logging.md) 和 [Istio](../pages-for-subheaders/istio.md)) | ✓ | ✓ | ✓ | ✓ | +| [运行安全扫描](../pages-for-subheaders/cis-scan-guides.md) | ✓ | ✓ | ✓ | ✓ | +| [使用现有配置来创建其他集群](../how-to-guides/advanced-user-guides/manage-clusters/clone-cluster-configuration.md) | ✓ | ✓ | ✓ | | +| [轮换证书](../how-to-guides/advanced-user-guides/manage-clusters/rotate-certificates.md) | ✓ | ✓ | | | +| [备份](../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) Rancher 启动的集群 | ✓ | ✓ | | ✓4 | +| [在 Rancher 无法访问集群时清理 Kubernetes 组件](../how-to-guides/advanced-user-guides/manage-clusters/clean-cluster-nodes.md) | ✓ | | | | +| [配置 Pod 安全策略](../how-to-guides/advanced-user-guides/manage-clusters/add-a-pod-security-policy.md) | ✓ | ✓ | | + +1. 注册的 GKE 和 EKS 集群与从 Rancher UI 创建的 GKE 和 EKS 集群的可用选项一致。不同之处是,从 Rancher UI 中删除已注册的集群后,集群不会被销毁。 + +2. 无法编辑已注册的集群的集群配置选项([K3s 和 RKE2 集群](../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/register-existing-clusters.md)除外)。 + +3. Rancher UI 为已注册的集群节点提供了封锁、清空和编辑节点的功能。 + +4. 对于使用 etcd 作为 controlplane 的注册集群,必须在 Rancher UI 之外手动创建快照以用于备份和恢复。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/shared-files/_common-ports-table.md b/i18n/zh/docusaurus-plugin-content-docs/current/shared-files/_common-ports-table.md new file mode 100644 index 00000000000..b37d40dc276 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/shared-files/_common-ports-table.md @@ -0,0 +1,19 @@ +| 协议 | 端口 | 描述 | +|:--------: |:----------------: |---------------------------------------------------------------------------------- | +| TCP | 22 | Node Driver SSH 配置 | +| TCP | 179 | Calico BGP 端口 | +| TCP | 2376 | Node Driver Docker daemon TLS 端口 | +| TCP | 2379 | etcd 客户端请求 | +| TCP | 2380 | etcd 对等通信 | +| UDP | 8472 | Canal/Flannel VXLAN 覆盖网络 | +| UDP | 4789 | Windows 集群中的 Flannel VXLAN 覆盖网络 | +| TCP | 8443 | Rancher webhook | +| TCP | 9099 | Canal/Flannel livenessProbe/readinessProbe | +| TCP | 9100 | Monitoring 从 Linux node-exporter 中抓取指标所需的默认端口 | +| TCP | 9443 | Rancher webhook | +| TCP | 9796 | Monitoring 从 Windows node-exporter 中抓取指标所需的默认端口 | +| TCP | 6783 | Weave 端口 | +| UDP | 6783-6784 | Weave UDP 端口 | +| TCP | 10250 | Metrics Server 与所有节点 API 的通信 | +| TCP | 10254 | Ingress controller livenessProbe/readinessProbe | +| TCP/UDP | 30000-32767 | NodePort 端口范围 | diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/troubleshooting.md b/i18n/zh/docusaurus-plugin-content-docs/current/troubleshooting.md new file mode 100644 index 00000000000..f99bd413cb3 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/troubleshooting.md @@ -0,0 +1,45 @@ +--- +title: 故障排除 +weight: 600 +--- + +本文用于帮助你解决使用 Rancher 时遇到的问题。 + +- [Kubernetes 组件](pages-for-subheaders/kubernetes-components.md) + + 对以下核心 Kubernetes 集群组件进行故障排除: + * `etcd` + * `kube-apiserver` + * `kube-controller-manager` + * `kube-scheduler` + * `kubelet` + * `kube-proxy` + * `nginx-proxy` + +- [Kubernetes resources](troubleshooting/other-troubleshooting-tips/kubernetes-resources.md) + + 本节介绍了对节点、Ingress Controller 和 Rancher Agent 等 Kubernetes 资源进行故障排除的选项。 + +- [网络](troubleshooting/other-troubleshooting-tips/networking.md) + + 介绍了解决网络问题的步骤。 + +- [DNS](troubleshooting/other-troubleshooting-tips/dns.md) + + 解决集群的名称解析问题。 + +- [对安装在 Kubernetes 上的 Rancher 进行故障排除](troubleshooting/other-troubleshooting-tips/rancher-ha.md) + + 解决[安装在 Kubernetes 上的 Rancher Server](pages-for-subheaders/install-upgrade-on-a-kubernetes-cluster.md) 的问题。 + +- [Logging](troubleshooting/other-troubleshooting-tips/logging.md) + + 了解可以配置哪些日志级别,以及如何配置日志级别。 + +- [审计日志中的用户 ID 跟踪](troubleshooting/other-troubleshooting-tips/user-id-tracking-in-audit-logs.md) + + 了解 Rancher 管理员如何通过外部身份提供程序用户名从 Rancher 审计日志和 Kubernetes 审计日志中跟踪事件。 + +- [过期的 Webhook 证书](troubleshooting/other-troubleshooting-tips/expired-webhook-certificate-rotation.md) + + 了解如何在每年到期后轮换 Rancher webhook 证书密钥。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/troubleshooting/kubernetes-components/troubleshooting-controlplane-nodes.md b/i18n/zh/docusaurus-plugin-content-docs/current/troubleshooting/kubernetes-components/troubleshooting-controlplane-nodes.md new file mode 100644 index 00000000000..0fdd57666fc --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/troubleshooting/kubernetes-components/troubleshooting-controlplane-nodes.md @@ -0,0 +1,52 @@ +--- +title: Controlplane 节点故障排除 +weight: 2 +--- + +本文适用于具有 `controlplane` 角色的节点。 + +# 检查 controlplane 容器是否正在运行 + +具有 `controlplane` 角色的节点上启动了三个容器: + +* `kube-apiserver` +* `kube-controller-manager` +* `kube-scheduler` + +容器的状态应该是 **Up**。**Up** 后面显示的时间指的是容器运行的时间。 + +``` +docker ps -a -f=name='kube-apiserver|kube-controller-manager|kube-scheduler' +``` + +输出示例: +``` +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +26c7159abbcc rancher/hyperkube:v1.11.5-rancher1 "/opt/rke-tools/en..." 3 hours ago Up 3 hours kube-apiserver +f3d287ca4549 rancher/hyperkube:v1.11.5-rancher1 "/opt/rke-tools/en..." 3 hours ago Up 3 hours kube-scheduler +bdf3898b8063 rancher/hyperkube:v1.11.5-rancher1 "/opt/rke-tools/en..." 3 hours ago Up 3 hours kube-controller-manager +``` + +# controlplane 容器日志记录 + +:::note + +如果你添加了多个具有 `controlplane` 角色的节点,`kube-controller-manager` 和 `kube-scheduler` 会通过 leader 选举来确定 leader。只有当前 leader 会记录执行的操作。有关检索当前的 leader 的更多信息,请参阅 [Kubernetes leader 选举](../other-troubleshooting-tips/kubernetes-resources.md#kubernetes-leader-选举)。 + +::: + +容器的日志记录可能包含问题的信息。 + +``` +docker logs kube-apiserver +docker logs kube-controller-manager +docker logs kube-scheduler +``` + +# RKE2 Server 日志 + +如果 Rancher 配置的 RKE2 集群无法与 Rancher 通信,你可以在下游集群中的 Server 节点上运行此命令,从而获取 RKE2 Server 日志: + +``` +journalctl -u rke2-server -f +``` diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/troubleshooting/kubernetes-components/troubleshooting-etcd-nodes.md b/i18n/zh/docusaurus-plugin-content-docs/current/troubleshooting/kubernetes-components/troubleshooting-etcd-nodes.md new file mode 100644 index 00000000000..0351ab0bed8 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/troubleshooting/kubernetes-components/troubleshooting-etcd-nodes.md @@ -0,0 +1,348 @@ +--- +title: etcd 节点故障排除 +weight: 1 +--- + +本文介绍了对具有 `etcd` 角色的节点进行故障排除的命令和提示。 + + +## 检查 etcd 容器是否正在运行 + +etcd 容器的状态应该是 **Up**。**Up** 后面显示的时间指的是容器运行的时间。 + +``` +docker ps -a -f=name=etcd$ +``` + +输出示例: +``` +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +605a124503b9 rancher/coreos-etcd:v3.2.18 "/usr/local/bin/et..." 2 hours ago Up 2 hours etcd +``` + +## etcd 容器日志记录 + +容器的日志记录可能包含问题的信息。 + +``` +docker logs etcd +``` +| 日志 | 解释 | +|-----|------------------| +| `health check for peer xxx could not connect: dial tcp IP:2380: getsockopt: connection refused` | 无法连接到端口 2380 上显示的地址。检查 etcd 容器是否在显示地址的主机上运行。 | +| `xxx is starting a new election at term x` | etcd 集群失去了集群仲裁数量,并正在尝试建立一个新的 leader。运行 etcd 的大多数节点关闭/无法访问时,可能会发生这种情况。 | +| `connection error: desc = "transport: Error while dialing dial tcp 0.0.0.0:2379: i/o timeout"; Reconnecting to {0.0.0.0:2379 0 }` | 主机防火墙正在阻止网络通信。 | +| `rafthttp: request cluster ID mismatch` | 具有 etcd 实例日志 `rafthttp: request cluster ID mismatch` 的节点正在尝试加入已经添加另一个对等节点(peer)的集群。你需要从集群中删除该节点,然后再重新添加。 | +| `rafthttp: failed to find member` | 集群状态(`/var/lib/etcd`)包含加入集群的错误信息。你需要从集群中删除该节点,清理状态目录,然后再重新添加。 | + +## etcd 集群和连接检查 + +运行 etcd 的主机的地址配置决定了 etcd 监听的地址。如果为运行 etcd 的主机配置了内部地址,则需要显式指定 `etcdctl` 的端点。如果任何命令的响应是 `Error: context deadline exceeded`,则 etcd 实例不健康(仲裁丢失或实例未正确加入集群)。 + +### 检查所有节点上的 etcd 成员 + +输出应包含具有 `etcd` 角色的所有节点,而且所有节点上的输出应该是相同的。 + +命令: +``` +docker exec etcd etcdctl member list +``` + +如果 etcd 版本低于 3.3.x(Kubernetes 1.13.x 及更低版本)且添加节点时指定了 `--internal-address`,则使用以下命令: +``` +docker exec etcd sh -c "etcdctl --endpoints=\$ETCDCTL_ENDPOINT member list" +``` + +输出示例: +``` +xxx, started, etcd-xxx, https://IP:2380, https://IP:2379,https://IP:4001 +xxx, started, etcd-xxx, https://IP:2380, https://IP:2379,https://IP:4001 +xxx, started, etcd-xxx, https://IP:2380, https://IP:2379,https://IP:4001 +``` + +### 检查端点状态 + +`RAFT TERM` 的值应该是相等的,而且 `RAFT INDEX` 相差不能太大。 + +命令: +``` +docker exec -e ETCDCTL_ENDPOINTS=$(docker exec etcd /bin/sh -c "etcdctl member list | cut -d, -f5 | sed -e 's/ //g' | paste -sd ','") etcd etcdctl endpoint status --write-out table +``` + +如果 etcd 版本低于 3.3.x(Kubernetes 1.13.x 及更低版本)且添加节点时指定了 `--internal-address`,则使用以下命令: +``` +docker exec etcd etcdctl endpoint status --endpoints=$(docker exec etcd /bin/sh -c "etcdctl --endpoints=\$ETCDCTL_ENDPOINT member list | cut -d, -f5 | sed -e 's/ //g' | paste -sd ','") --write-out table +``` + +输出示例: +``` ++-----------------+------------------+---------+---------+-----------+-----------+------------+ +| ENDPOINT | ID | VERSION | DB SIZE | IS LEADER | RAFT TERM | RAFT INDEX | ++-----------------+------------------+---------+---------+-----------+-----------+------------+ +| https://IP:2379 | 333ef673fc4add56 | 3.2.18 | 24 MB | false | 72 | 66887 | +| https://IP:2379 | 5feed52d940ce4cf | 3.2.18 | 24 MB | true | 72 | 66887 | +| https://IP:2379 | db6b3bdb559a848d | 3.2.18 | 25 MB | false | 72 | 66887 | ++-----------------+------------------+---------+---------+-----------+-----------+------------+ +``` + +### 检查端点健康 + +命令: +``` +docker exec -e ETCDCTL_ENDPOINTS=$(docker exec etcd /bin/sh -c "etcdctl member list | cut -d, -f5 | sed -e 's/ //g' | paste -sd ','") etcd etcdctl endpoint health +``` + +如果 etcd 版本低于 3.3.x(Kubernetes 1.13.x 及更低版本)且添加节点时指定了 `--internal-address`,则使用以下命令: +``` +docker exec etcd etcdctl endpoint health --endpoints=$(docker exec etcd /bin/sh -c "etcdctl --endpoints=\$ETCDCTL_ENDPOINT member list | cut -d, -f5 | sed -e 's/ //g' | paste -sd ','") +``` + +输出示例: +``` +https://IP:2379 is healthy: successfully committed proposal: took = 2.113189ms +https://IP:2379 is healthy: successfully committed proposal: took = 2.649963ms +https://IP:2379 is healthy: successfully committed proposal: took = 2.451201ms +``` + +### 检查端口 TCP/2379 上的连接 + +命令: +``` +for endpoint in $(docker exec etcd /bin/sh -c "etcdctl member list | cut -d, -f5"); do + echo "Validating connection to ${endpoint}/health" + docker run --net=host -v $(docker inspect kubelet --format '{{ range .Mounts }}{{ if eq .Destination "/etc/kubernetes" }}{{ .Source }}{{ end }}{{ end }}')/ssl:/etc/kubernetes/ssl:ro appropriate/curl -s -w "\n" --cacert $(docker exec etcd printenv ETCDCTL_CACERT) --cert $(docker exec etcd printenv ETCDCTL_CERT) --key $(docker exec etcd printenv ETCDCTL_KEY) "${endpoint}/health" +done +``` + +如果 etcd 版本低于 3.3.x(Kubernetes 1.13.x 及更低版本)且添加节点时指定了 `--internal-address`,则使用以下命令: +``` +for endpoint in $(docker exec etcd /bin/sh -c "etcdctl --endpoints=\$ETCDCTL_ENDPOINT member list | cut -d, -f5"); do + echo "Validating connection to ${endpoint}/health"; + docker run --net=host -v $(docker inspect kubelet --format '{{ range .Mounts }}{{ if eq .Destination "/etc/kubernetes" }}{{ .Source }}{{ end }}{{ end }}')/ssl:/etc/kubernetes/ssl:ro appropriate/curl -s -w "\n" --cacert $(docker exec etcd printenv ETCDCTL_CACERT) --cert $(docker exec etcd printenv ETCDCTL_CERT) --key $(docker exec etcd printenv ETCDCTL_KEY) "${endpoint}/health" +done +``` + +输出示例: +``` +Validating connection to https://IP:2379/health +{"health": "true"} +Validating connection to https://IP:2379/health +{"health": "true"} +Validating connection to https://IP:2379/health +{"health": "true"} +``` + +### 检查端口 TCP/2380 上的连接 + +命令: +``` +for endpoint in $(docker exec etcd /bin/sh -c "etcdctl member list | cut -d, -f4"); do + echo "Validating connection to ${endpoint}/version"; + docker run --net=host -v $(docker inspect kubelet --format '{{ range .Mounts }}{{ if eq .Destination "/etc/kubernetes" }}{{ .Source }}{{ end }}{{ end }}')/ssl:/etc/kubernetes/ssl:ro appropriate/curl --http1.1 -s -w "\n" --cacert $(docker exec etcd printenv ETCDCTL_CACERT) --cert $(docker exec etcd printenv ETCDCTL_CERT) --key $(docker exec etcd printenv ETCDCTL_KEY) "${endpoint}/version" +done +``` + +如果 etcd 版本低于 3.3.x(Kubernetes 1.13.x 及更低版本)且添加节点时指定了 `--internal-address`,则使用以下命令: +``` +for endpoint in $(docker exec etcd /bin/sh -c "etcdctl --endpoints=\$ETCDCTL_ENDPOINT member list | cut -d, -f4"); do + echo "Validating connection to ${endpoint}/version"; + docker run --net=host -v $(docker inspect kubelet --format '{{ range .Mounts }}{{ if eq .Destination "/etc/kubernetes" }}{{ .Source }}{{ end }}{{ end }}')/ssl:/etc/kubernetes/ssl:ro appropriate/curl --http1.1 -s -w "\n" --cacert $(docker exec etcd printenv ETCDCTL_CACERT) --cert $(docker exec etcd printenv ETCDCTL_CERT) --key $(docker exec etcd printenv ETCDCTL_KEY) "${endpoint}/version" +done +``` + +输出示例: +``` +Validating connection to https://IP:2380/version +{"etcdserver":"3.2.18","etcdcluster":"3.2.0"} +Validating connection to https://IP:2380/version +{"etcdserver":"3.2.18","etcdcluster":"3.2.0"} +Validating connection to https://IP:2380/version +{"etcdserver":"3.2.18","etcdcluster":"3.2.0"} +``` + +## etcd 告警 + +etcd 会触发告警(例如空间不足时)。 + +命令: +``` +docker exec etcd etcdctl alarm list +``` + +如果 etcd 版本低于 3.3.x(Kubernetes 1.13.x 及更低版本)且添加节点时指定了 `--internal-address`,则使用以下命令: +``` +docker exec etcd sh -c "etcdctl --endpoints=\$ETCDCTL_ENDPOINT alarm list" +``` + +触发 NOSPACE 告警的输出示例: +``` +memberID:x alarm:NOSPACE +memberID:x alarm:NOSPACE +memberID:x alarm:NOSPACE +``` + +## etcd 空间错误 + +相关的错误消息是 `etcdserver: mvcc: database space exceeded` 或 `applying raft message exceeded backend quota`。告警 `NOSPACE` 会被触发。 + +解决: + +- [压缩键空间](#压缩键空间) +- [对所有 etcd 成员进行碎片整理](#对所有-etcd-成员进行碎片整理) +- [检查端点状态](#检查端点状态) +- [解除告警](#解除告警) + +### 压缩键空间 + +命令: +``` +rev=$(docker exec etcd etcdctl endpoint status --write-out json | egrep -o '"revision":[0-9]*' | egrep -o '[0-9]*') +docker exec etcd etcdctl compact "$rev" +``` + +如果 etcd 版本低于 3.3.x(Kubernetes 1.13.x 及更低版本)且添加节点时指定了 `--internal-address`,则使用以下命令: +``` +rev=$(docker exec etcd sh -c "etcdctl --endpoints=\$ETCDCTL_ENDPOINT endpoint status --write-out json | egrep -o '\"revision\":[0-9]*' | egrep -o '[0-9]*'") +docker exec etcd sh -c "etcdctl --endpoints=\$ETCDCTL_ENDPOINT compact \"$rev\"" +``` + +输出示例: +``` +compacted revision xxx +``` + +### 对所有 etcd 成员进行碎片整理 + +命令: +``` +docker exec -e ETCDCTL_ENDPOINTS=$(docker exec etcd /bin/sh -c "etcdctl member list | cut -d, -f5 | sed -e 's/ //g' | paste -sd ','") etcd etcdctl defrag +``` + +如果 etcd 版本低于 3.3.x(Kubernetes 1.13.x 及更低版本)且添加节点时指定了 `--internal-address`,则使用以下命令: +``` +docker exec etcd sh -c "etcdctl defrag --endpoints=$(docker exec etcd /bin/sh -c "etcdctl --endpoints=\$ETCDCTL_ENDPOINT member list | cut -d, -f5 | sed -e 's/ //g' | paste -sd ','")" +``` + +输出示例: +``` +Finished defragmenting etcd member[https://IP:2379] +Finished defragmenting etcd member[https://IP:2379] +Finished defragmenting etcd member[https://IP:2379] +``` + +### 检查端点状态 + +命令: +``` +docker exec -e ETCDCTL_ENDPOINTS=$(docker exec etcd /bin/sh -c "etcdctl member list | cut -d, -f5 | sed -e 's/ //g' | paste -sd ','") etcd etcdctl endpoint status --write-out table +``` + +如果 etcd 版本低于 3.3.x(Kubernetes 1.13.x 及更低版本)且添加节点时指定了 `--internal-address`,则使用以下命令: +``` +docker exec etcd sh -c "etcdctl endpoint status --endpoints=$(docker exec etcd /bin/sh -c "etcdctl --endpoints=\$ETCDCTL_ENDPOINT member list | cut -d, -f5 | sed -e 's/ //g' | paste -sd ','") --write-out table" +``` + +输出示例: +``` ++-----------------+------------------+---------+---------+-----------+-----------+------------+ +| ENDPOINT | ID | VERSION | DB SIZE | IS LEADER | RAFT TERM | RAFT INDEX | ++-----------------+------------------+---------+---------+-----------+-----------+------------+ +| https://IP:2379 | e973e4419737125 | 3.2.18 | 553 kB | false | 32 | 2449410 | +| https://IP:2379 | 4a509c997b26c206 | 3.2.18 | 553 kB | false | 32 | 2449410 | +| https://IP:2379 | b217e736575e9dd3 | 3.2.18 | 553 kB | true | 32 | 2449410 | ++-----------------+------------------+---------+---------+-----------+-----------+------------+ +``` + +### 解除告警 + +如果压缩和整理碎片后确定数据库大小下降了,则需要解除告警来允许 etcd 再次写入。 + +命令: +``` +docker exec etcd etcdctl alarm list +docker exec etcd etcdctl alarm disarm +docker exec etcd etcdctl alarm list +``` + +如果 etcd 版本低于 3.3.x(Kubernetes 1.13.x 及更低版本)且添加节点时指定了 `--internal-address`,则使用以下命令: +``` +docker exec etcd sh -c "etcdctl --endpoints=\$ETCDCTL_ENDPOINT alarm list" +docker exec etcd sh -c "etcdctl --endpoints=\$ETCDCTL_ENDPOINT alarm disarm" +docker exec etcd sh -c "etcdctl --endpoints=\$ETCDCTL_ENDPOINT alarm list" +``` + +输出示例: +``` +docker exec etcd etcdctl alarm list +memberID:x alarm:NOSPACE +memberID:x alarm:NOSPACE +memberID:x alarm:NOSPACE +docker exec etcd etcdctl alarm disarm +docker exec etcd etcdctl alarm list +``` + +## 日志级别 + +etcd 的日志级别可以通过 API 来动态更改。你可以使用以下命令来配置调试日志。 + +命令: +``` +docker run --net=host -v $(docker inspect kubelet --format '{{ range .Mounts }}{{ if eq .Destination "/etc/kubernetes" }}{{ .Source }}{{ end }}{{ end }}')/ssl:/etc/kubernetes/ssl:ro appropriate/curl -s -XPUT -d '{"Level":"DEBUG"}' --cacert $(docker exec etcd printenv ETCDCTL_CACERT) --cert $(docker exec etcd printenv ETCDCTL_CERT) --key $(docker exec etcd printenv ETCDCTL_KEY) $(docker exec etcd printenv ETCDCTL_ENDPOINTS)/config/local/log +``` + +如果 etcd 版本低于 3.3.x(Kubernetes 1.13.x 及更低版本)且添加节点时指定了 `--internal-address`,则使用以下命令: +``` +docker run --net=host -v $(docker inspect kubelet --format '{{ range .Mounts }}{{ if eq .Destination "/etc/kubernetes" }}{{ .Source }}{{ end }}{{ end }}')/ssl:/etc/kubernetes/ssl:ro appropriate/curl -s -XPUT -d '{"Level":"DEBUG"}' --cacert $(docker exec etcd printenv ETCDCTL_CACERT) --cert $(docker exec etcd printenv ETCDCTL_CERT) --key $(docker exec etcd printenv ETCDCTL_KEY) $(docker exec etcd printenv ETCDCTL_ENDPOINT)/config/local/log +``` + +要将日志级别重置回默认值 (`INFO`),你可以使用以下命令。 + +命令: +``` +docker run --net=host -v $(docker inspect kubelet --format '{{ range .Mounts }}{{ if eq .Destination "/etc/kubernetes" }}{{ .Source }}{{ end }}{{ end }}')/ssl:/etc/kubernetes/ssl:ro appropriate/curl -s -XPUT -d '{"Level":"INFO"}' --cacert $(docker exec etcd printenv ETCDCTL_CACERT) --cert $(docker exec etcd printenv ETCDCTL_CERT) --key $(docker exec etcd printenv ETCDCTL_KEY) $(docker exec etcd printenv ETCDCTL_ENDPOINTS)/config/local/log +``` + +如果 etcd 版本低于 3.3.x(Kubernetes 1.13.x 及更低版本)且添加节点时指定了 `--internal-address`,则使用以下命令: +``` +docker run --net=host -v $(docker inspect kubelet --format '{{ range .Mounts }}{{ if eq .Destination "/etc/kubernetes" }}{{ .Source }}{{ end }}{{ end }}')/ssl:/etc/kubernetes/ssl:ro appropriate/curl -s -XPUT -d '{"Level":"INFO"}' --cacert $(docker exec etcd printenv ETCDCTL_CACERT) --cert $(docker exec etcd printenv ETCDCTL_CERT) --key $(docker exec etcd printenv ETCDCTL_KEY) $(docker exec etcd printenv ETCDCTL_ENDPOINT)/config/local/log +``` + +## etcd 内容 + +如果要查看 etcd 的内容,你可以查看流事件,也可以直接查询 etcd。详情请参阅以下示例。 + +### 查看流事件 + +命令: +``` +docker exec etcd etcdctl watch --prefix /registry +``` + +如果 etcd 版本低于 3.3.x(Kubernetes 1.13.x 及更低版本)且添加节点时指定了 `--internal-address`,则使用以下命令: +``` +docker exec etcd etcdctl --endpoints=\$ETCDCTL_ENDPOINT watch --prefix /registry +``` + +如果你只想查看受影响的键(而不是二进制数据),你可以将 `| grep -a ^/registry` 尾附到该命令来过滤键。 + +### 直接查询 etcd + +命令: +``` +docker exec etcd etcdctl get /registry --prefix=true --keys-only +``` + +如果 etcd 版本低于 3.3.x(Kubernetes 1.13.x 及更低版本)且添加节点时指定了 `--internal-address`,则使用以下命令: +``` +docker exec etcd etcdctl --endpoints=\$ETCDCTL_ENDPOINT get /registry --prefix=true --keys-only +``` + +你可以使用以下命令来处理数据,从而获取每个键的计数摘要: + +``` +docker exec etcd etcdctl get /registry --prefix=true --keys-only | grep -v ^$ | awk -F'/' '{ if ($3 ~ /cattle.io/) {h[$3"/"$4]++} else { h[$3]++ }} END { for(k in h) print h[k], k }' | sort -nr +``` + +## 更换不健康的 etcd 节点 + +如果你 etcd 集群中的某个节点变得不健康,在将新的 etcd 节点添加到集群之前,我们建议你修复或删除故障/不健康的节点。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/troubleshooting/kubernetes-components/troubleshooting-nginx-proxy.md b/i18n/zh/docusaurus-plugin-content-docs/current/troubleshooting/kubernetes-components/troubleshooting-nginx-proxy.md new file mode 100644 index 00000000000..78b711c2e9b --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/troubleshooting/kubernetes-components/troubleshooting-nginx-proxy.md @@ -0,0 +1,69 @@ +--- +title: nginx-proxy 故障排除 +weight: 3 +--- + +每个没有 `controlplane` 角色的节点上都部署了 `nginx-proxy` 容器。`nginx-proxy` 基于具有 `controlplane` 角色的可用节点来动态生成 NGINX 配置,从而提供对这些 `controlplane` 角色节点的访问。 + +# 检查容器是否正在运行 + +该容器称为 `nginx-proxy`,它的状态应该是 `Up`。`Up` 后面显示的时间指的是容器运行的时间。 + +``` +docker ps -a -f=name=nginx-proxy +``` + +输出示例: + +``` +docker ps -a -f=name=nginx-proxy +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +c3e933687c0e rancher/rke-tools:v0.1.15 "nginx-proxy CP_HO..." 3 hours ago Up 3 hours nginx-proxy +``` + +# 检查生成的 NGINX 配置 + +生成的配置包括了具有 `controlplane` 角色的节点的 IP 地址。你可以使用以下命令来检查配置: + +``` +docker exec nginx-proxy cat /etc/nginx/nginx.conf +``` + +输出示例: +``` +error_log stderr notice; + +worker_processes auto; +events { + multi_accept on; + use epoll; + worker_connections 1024; +} + +stream { + upstream kube_apiserver { + + server ip_of_controlplane_node1:6443; + + server ip_of_controlplane_node2:6443; + + } + + server { + listen 6443; + proxy_pass kube_apiserver; + proxy_timeout 30; + proxy_connect_timeout 2s; + + } + +} +``` + +# nginx-proxy 容器日志记录 + +容器的日志记录可能包含问题的信息。 + +``` +docker logs nginx-proxy +``` diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/troubleshooting/kubernetes-components/troubleshooting-worker-nodes-and-generic-components.md b/i18n/zh/docusaurus-plugin-content-docs/current/troubleshooting/kubernetes-components/troubleshooting-worker-nodes-and-generic-components.md new file mode 100644 index 00000000000..a7d69b970be --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/troubleshooting/kubernetes-components/troubleshooting-worker-nodes-and-generic-components.md @@ -0,0 +1,35 @@ +--- +title: Worker 节点和通用组件故障排除 +weight: 4 +--- + +本文包括了运行在所有角色节点上的组件,因此适用于每个节点。 + +# 检查容器是否正在运行 + +具有 `worker` 角色的节点上启动了两个容器: + +* kubelet +* kube-proxy + +容器的状态应该是 `Up`。`Up` 后面显示的时间指的是容器运行的时间。 + +``` +docker ps -a -f=name='kubelet|kube-proxy' +``` + +输出示例: +``` +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +158d0dcc33a5 rancher/hyperkube:v1.11.5-rancher1 "/opt/rke-tools/en..." 3 hours ago Up 3 hours kube-proxy +a30717ecfb55 rancher/hyperkube:v1.11.5-rancher1 "/opt/rke-tools/en..." 3 hours ago Up 3 hours kubelet +``` + +# 容器日志记录 + +容器的日志记录可能包含问题的信息。 + +``` +docker logs kubelet +docker logs kube-proxy +``` diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/troubleshooting/other-troubleshooting-tips/dns.md b/i18n/zh/docusaurus-plugin-content-docs/current/troubleshooting/other-troubleshooting-tips/dns.md new file mode 100644 index 00000000000..eb0563447cf --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/troubleshooting/other-troubleshooting-tips/dns.md @@ -0,0 +1,221 @@ +--- +title: DNS +weight: 103 +--- + +本文列出的命令/步骤可用于检查集群中的名称解析问题。 + +请确保你配置了正确的 kubeconfig(例如,为 Rancher HA 配置了 `export KUBECONFIG=$PWD/kube_config_cluster.yml`)或通过 UI 使用了嵌入式 kubectl。 + +在运行 DNS 检查之前,请检查集群的[默认 DNS 提供商](../../reference-guides/cluster-configuration/rancher-server-configuration/rke1-cluster-configuration.md#默认-dns-提供商),并确保[覆盖网络正常运行](networking.md#检查覆盖网络是否正常运行),因为这也可能导致 DNS 解析(部分)失败。 + +### 检查 DNS pod 是否正在运行 + +``` +kubectl -n kube-system get pods -l k8s-app=kube-dns +``` + +使用 CoreDNS 时的示例输出: +``` +NAME READY STATUS RESTARTS AGE +coredns-799dffd9c4-6jhlz 1/1 Running 0 76m +``` + +使用 kube-dns 时的示例输出: +``` +NAME READY STATUS RESTARTS AGE +kube-dns-5fd74c7488-h6f7n 3/3 Running 0 4m13s +``` + +### 检查 DNS 服务是否显示正确的 cluster-ip + +``` +kubectl -n kube-system get svc -l k8s-app=kube-dns +``` + +``` +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +service/kube-dns ClusterIP 10.43.0.10 53/UDP,53/TCP 4m13s +``` + +### 检查是否正在解析域名 + +检查是否正在解析内部集群名称(在本例中为 `kubernetes.default`),`Server:` 后面显示的 IP 应与 `kube-dns` 服务的 `CLUSTER-IP` 一致。 + +``` +kubectl run -it --rm --restart=Never busybox --image=busybox:1.28 -- nslookup kubernetes.default +``` + +输出示例: +``` +Server: 10.43.0.10 +Address 1: 10.43.0.10 kube-dns.kube-system.svc.cluster.local + +Name: kubernetes.default +Address 1: 10.43.0.1 kubernetes.default.svc.cluster.local +pod "busybox" deleted +``` + +检查是否正在解析外部名称(在本例中为 `www.google.com`): + +``` +kubectl run -it --rm --restart=Never busybox --image=busybox:1.28 -- nslookup www.google.com +``` + +输出示例: +``` +Server: 10.43.0.10 +Address 1: 10.43.0.10 kube-dns.kube-system.svc.cluster.local + +Name: www.google.com +Address 1: 2a00:1450:4009:80b::2004 lhr35s04-in-x04.1e100.net +Address 2: 216.58.211.100 ams15s32-in-f4.1e100.net +pod "busybox" deleted +``` + +如果要检查所有主机的域名解析,请执行以下步骤: + +1. 将以下文件另存为 `ds-dnstest.yml`: + + ``` + apiVersion: apps/v1 + kind: DaemonSet + metadata: + name: dnstest + spec: + selector: + matchLabels: + name: dnstest + template: + metadata: + labels: + name: dnstest + spec: + tolerations: + - operator: Exists + containers: + - image: busybox:1.28 + imagePullPolicy: Always + name: alpine + command: ["sh", "-c", "tail -f /dev/null"] + terminationMessagePath: /dev/termination-log + ``` + +2. 通过运行 `kubectl create -f ds-dnstest.yml` 启动它。 +3. 等待 `kubectl rollout status ds/dnstest -w` 返回 `daemon set "dnstest" successfully rolled out`。 +4. 将环境变量 `DOMAIN` 配置为主机能够解析的完全限定域名(Fully Qualified Domain Name,FQDN),例如 `www.google.com`,并运行以下命令让每个主机上的各个容器解析配置的域名(它是单行命令): + + ``` + export DOMAIN=www.google.com; echo "=> Start DNS resolve test"; kubectl get pods -l name=dnstest --no-headers -o custom-columns=NAME:.metadata.name,HOSTIP:.status.hostIP | while read pod host; do kubectl exec $pod -- /bin/sh -c "nslookup $DOMAIN > /dev/null 2>&1"; RC=$?; if [ $RC -ne 0 ]; then echo $host cannot resolve $DOMAIN; fi; done; echo "=> End DNS resolve test" + ``` + +5. 完成此命令后,如果一切正确,则输出如下: + + ``` + => Start DNS resolve test + => End DNS resolve test + ``` + +如果你在输出中看到错误,则表示主机无法解析给定的 FQDN。 + +在以下错误输出示例中,IP 为 209.97.182.150 的主机阻止了 UDP 端口: + +``` +=> Start DNS resolve test +command terminated with exit code 1 +209.97.182.150 cannot resolve www.google.com +=> End DNS resolve test +``` + +运行 `kubectl delete ds/dnstest` 清理 alpine DaemonSet。 + +### CoreDNS 相关 + +#### 检查 CoreDNS 日志记录 + +``` +kubectl -n kube-system logs -l k8s-app=kube-dns +``` + +#### 检查配置 + +CoreDNS 配置存储在 `kube-system` 命名空间中 configmap 的 `coredns` 中。 + +``` +kubectl -n kube-system get configmap coredns -o go-template={{.data.Corefile}} +``` + +#### 检查 resolv.conf 中的上游名称服务器 + +默认情况下,配置在主机(在 `/etc/resolv.conf` 里)上的名称服务器会用作 CoreDNS 的上游名称服务器。你可以在主机上检查此文件,或将 `dnsPolicy` 设置为 `Default`(将继承其主机的 `/etc/resolv.conf`)并运行以下 Pod: + +``` +kubectl run -i --restart=Never --rm test-${RANDOM} --image=ubuntu --overrides='{"kind":"Pod", "apiVersion":"v1", "spec": {"dnsPolicy":"Default"}}' -- sh -c 'cat /etc/resolv.conf' +``` + +#### 启用日志查询 + +你可以通过在 configmap `coredns` 的 Corefile 配置中启用 [log plugin](https://coredns.io/plugins/log/) 来启用日志查询。为此,你可以使用 `kubectl -n kube-system edit configmap coredns`,或运行以下命令来替换配置: + +``` +kubectl get configmap -n kube-system coredns -o json | sed -e 's_loadbalance_log\\n loadbalance_g' | kubectl apply -f - +``` + +这样,所有查询都会记入日志,并且可以使用[检查 CoreDNS 日志记录](#检查-coredns-日志记录)中的命令进行检查。 + +### kube-dns 相关 + +#### 检查 kubedns 容器中的上游名称服务器 + +默认情况下,配置在主机(在 `/etc/resolv.conf` 里)上的名称服务器会用作 kube-dns 的上游名称服务器。有时,主机会运行本地缓存 DNS 名称服务器,这意味着 `/etc/resolv.conf` 中的地址将指向 Loopback 范围(`127.0.0.0/8`)内的地址,而容器将无法访问该范围。对于 Ubuntu 18.04,这是由 `systemd-resolved` 进行的。我们会检测 `systemd-resolved` 是否正在运行,并自动使用具有正确上游名称服务器的 `/etc/resolv.conf` 文件(位于 `/run /systemd/resolve/resolv.conf`)。 + +使用以下命令检查 kubedns 容器使用的上游名称服务器: + +``` +kubectl -n kube-system get pods -l k8s-app=kube-dns --no-headers -o custom-columns=NAME:.metadata.name,HOSTIP:.status.hostIP | while read pod host; do echo "Pod ${pod} on host ${host}"; kubectl -n kube-system exec $pod -c kubedns cat /etc/resolv.conf; done +``` + +输出示例: +``` +Pod kube-dns-667c7cb9dd-z4dsf on host x.x.x.x +nameserver 1.1.1.1 +nameserver 8.8.4.4 +``` + +如果输出显示 Loopback 范围(`127.0.0.0/8`)内的地址 ,你可以通过以下两种方式解决此问题: + +* 确保在集群节点上的 `/etc/resolv.conf` 列出了正确的名称服务器。如果需要了解如何进行操作,请参阅你的操作系统文档。请确保你在配置集群之前执行此操作,或在修改后重启节点。 +* 通过配置 `kubelet` 来使用不同的文件进行名称解析,你可以使用如下的 `extra_args`(其中 `/run/resolvconf/resolv.conf` 是具有正确名称服务器的文件): + +``` +services: + kubelet: + extra_args: + resolv-conf: "/run/resolvconf/resolv.conf" +``` + +:::note + +由于 `kubelet` 在容器内运行,因此 `/etc` 和 `/usr` 中文件的路径位于 `kubelet` 容器内的 `/host/etc` 和 `/host/usr` 中。 + +::: + +请参阅[使用 YAML 编辑集群](../../pages-for-subheaders/cluster-configuration.md#使用-yaml-编辑集群)了解如何应用此修改。集群配置完成后,你必须删除 kube-dns pod 以激活 pod 中的新设置: + +``` +kubectl delete pods -n kube-system -l k8s-app=kube-dns +pod "kube-dns-5fd74c7488-6pwsf" deleted +``` + +你可以[检查是否正在解析域名](#检查是否正在解析域名)来尝试再次解析名称。 + +如果要检查集群中的 kube-dns 配置(例如,检查是否配置了不同的上游名称服务器),你可以运行以下命令来列出 kube-dns 配置: + +``` +kubectl -n kube-system get configmap kube-dns -o go-template='{{range $key, $value := .data}}{{ $key }}{{":"}}{{ $value }}{{"\n"}}{{end}}' +``` + +输出示例: +``` +upstreamNameservers:["1.1.1.1"] +``` diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/troubleshooting/other-troubleshooting-tips/expired-webhook-certificate-rotation.md b/i18n/zh/docusaurus-plugin-content-docs/current/troubleshooting/other-troubleshooting-tips/expired-webhook-certificate-rotation.md new file mode 100644 index 00000000000..3a420b15a54 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/troubleshooting/other-troubleshooting-tips/expired-webhook-certificate-rotation.md @@ -0,0 +1,29 @@ +--- +title: 过期 Webhook 证书轮换 +weight: 120 +--- + +如果你的 Rancher 版本安装了 `rancher-webhook`,某些版本创建的证书将在一年后过期。如果证书未续订,你需要轮换你的 webhook 证书。 + +在 Rancher v2.6.3 及更高版本中,rancher-webhook deployments 将在到期日期后 30 天或更短的时间内自动更新其 TLS 证书。如果你使用的是 v2.6.2 或更低版本,你可以通过下面两种方法来解决这个问题。 + +##### 1. 如果用户具有集群访问权限,运行以下命令: +``` +kubectl delete secret -n cattle-system cattle-webhook-tls +kubectl delete mutatingwebhookconfigurations.admissionregistration.k8s.io --ignore-not-found=true rancher.cattle.io +kubectl delete pod -n cattle-system -l app=rancher-webhook +``` + +##### 2. 如果用户没有集群访问权限,使用 `kubectl`: + +1. 删除 local 集群 `cattle-system` 命名空间中的 `cattle-webhook-tls` 密文。 + +2. 删除 `rancher.cattle.io` mutating webhook。 + +3. 删除 local 集群 `cattle-system` 命名空间中的 `rancher-webhook` pod。 + +:::note + +webhook 证书过期问题不止示例中列出的 `cattle-webhook-tls`。你需要相应地填写你过期的证书密文。 + +::: \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/troubleshooting/other-troubleshooting-tips/kubernetes-resources.md b/i18n/zh/docusaurus-plugin-content-docs/current/troubleshooting/other-troubleshooting-tips/kubernetes-resources.md new file mode 100644 index 00000000000..f61ad4e479b --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/troubleshooting/other-troubleshooting-tips/kubernetes-resources.md @@ -0,0 +1,256 @@ +--- +title: Kubernetes 资源 +weight: 101 +--- + +本文列出的命令/步骤可用于检查最重要的 Kubernetes 资源,并应用于 [Rancher 启动的 Kubernetes](../../pages-for-subheaders/launch-kubernetes-with-rancher.md) 集群。 + +请确保你配置了正确的 kubeconfig(例如,为 Rancher HA 配置了 `export KUBECONFIG=$PWD/kube_config_cluster.yml`)或通过 UI 使用了嵌入式 kubectl。 + + +## 节点 + +### 获取节点 + +运行以下命令并检查以下内容: + +- 集群中的所有节点都已列出,没有缺失的节点。 +- 所有节点的状态都是 **Ready**(如果未处于 **Ready** 状态,请运行 `docker logs kubelet` 检查该节点上的 `kubelet` 容器日志) +- 检查所有节点是否报告了正确的版本。 +- 检查 OS/Kernel/Docker 值是否按预期显示(此问题可能与升级 OS/Kernel/Docker 相关)。 + + +``` +kubectl get nodes -o wide +``` + +输出示例: + +``` +NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME +controlplane-0 Ready controlplane 31m v1.13.5 138.68.188.91 Ubuntu 18.04.2 LTS 4.15.0-47-generic docker://18.9.5 +etcd-0 Ready etcd 31m v1.13.5 138.68.180.33 Ubuntu 18.04.2 LTS 4.15.0-47-generic docker://18.9.5 +worker-0 Ready worker 30m v1.13.5 139.59.179.88 Ubuntu 18.04.2 LTS 4.15.0-47-generic docker://18.9.5 +``` + +### 获取节点状况 + +运行以下命令列出具有 [Node Conditions](https://kubernetes.io/docs/concepts/architecture/nodes/#condition) 的节点: + +``` +kubectl get nodes -o go-template='{{range .items}}{{$node := .}}{{range .status.conditions}}{{$node.metadata.name}}{{": "}}{{.type}}{{":"}}{{.status}}{{"\n"}}{{end}}{{end}}' +``` + +运行以下命令,列出具有 active [Node Conditions](https://kubernetes.io/docs/concepts/architecture/nodes/#condition) 的节点,这些节点可能阻止正常操作: + +``` +kubectl get nodes -o go-template='{{range .items}}{{$node := .}}{{range .status.conditions}}{{if ne .type "Ready"}}{{if eq .status "True"}}{{$node.metadata.name}}{{": "}}{{.type}}{{":"}}{{.status}}{{"\n"}}{{end}}{{else}}{{if ne .status "True"}}{{$node.metadata.name}}{{": "}}{{.type}}{{": "}}{{.status}}{{"\n"}}{{end}}{{end}}{{end}}{{end}}' +``` + +输出示例: + +``` +worker-0: DiskPressure:True +``` + +## Kubernetes leader 选举 + +### Kubernetes Controller 管理器 leader + +Leader 由 Leader 选举确定。确定 Leader 后,Leader(`holderIdentity`)会保存在 `kube-controller-manager` 端点中(在本例中为 `controlplane-0`)。 + +``` +kubectl -n kube-system get endpoints kube-controller-manager -o jsonpath='{.metadata.annotations.control-plane\.alpha\.kubernetes\.io/leader}' +{"holderIdentity":"controlplane-0_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx","leaseDurationSeconds":15,"acquireTime":"2018-12-27T08:59:45Z","renewTime":"2018-12-27T09:44:57Z","leaderTransitions":0}> +``` + +### Kubernetes 调度器 Leader + +Leader 由 Leader 选举确定。确定 Leader 后,Leader(`holderIdentity`)会保存在 `kube-scheduler` 端点中(在本例中为 `controlplane-0`)。 + +``` +kubectl -n kube-system get endpoints kube-scheduler -o jsonpath='{.metadata.annotations.control-plane\.alpha\.kubernetes\.io/leader}' +{"holderIdentity":"controlplane-0_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx","leaseDurationSeconds":15,"acquireTime":"2018-12-27T08:59:45Z","renewTime":"2018-12-27T09:44:57Z","leaderTransitions":0}> +``` + +## Ingress Controller + +默认的 Ingress Controller 是 NGINX,作为 DaemonSet 部署在 `ingress-nginx` 命名空间中。Pod 仅会调度到具有 `worker` 角色的节点。 + +检查 pod 是否运行在所有节点上: + +``` +kubectl -n ingress-nginx get pods -o wide +``` + +输出示例: + +``` +kubectl -n ingress-nginx get pods -o wide +NAME READY STATUS RESTARTS AGE IP NODE +default-http-backend-797c5bc547-kwwlq 1/1 Running 0 17m x.x.x.x worker-1 +nginx-ingress-controller-4qd64 1/1 Running 0 14m x.x.x.x worker-1 +nginx-ingress-controller-8wxhm 1/1 Running 0 13m x.x.x.x worker-0 +``` + +如果 pod 无法运行(即状态不是 **Running**,Ready 状态未显示 `1/1`,或者有大量 Restarts),请检查 pod 详细信息,日志和命名空间事件。 + +### Pod 详细信息 + +``` +kubectl -n ingress-nginx describe pods -l app=ingress-nginx +``` + +### Pod 容器日志 + +下面的命令可以显示所有标记为 “app=ingress-nginx” 的 pod 的日志,但是由于 `kubectl logs` 命令的限制,它只会显示 10 行日志。有关详细信息,请参阅 `kubectl logs -h` 的 `--tail`。 + +``` +kubectl -n ingress-nginx logs -l app=ingress-nginx +``` + +如果需要查看完整的日志,请在命令中尾随 pod 名称: + +``` +kubectl -n ingress-nginx logs +``` + +### 命名空间事件 + +``` +kubectl -n ingress-nginx get events +``` + +### 调试日志 + +要启用调试日志: + +``` +kubectl -n ingress-nginx patch ds nginx-ingress-controller --type='json' -p='[{"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value": "--v=5"}]' +``` + +### 检查配置 + +在每个 pod 中检索生成的配置: + +``` +kubectl -n ingress-nginx get pods -l app=ingress-nginx --no-headers -o custom-columns=.NAME:.metadata.name | while read pod; do kubectl -n ingress-nginx exec $pod -- cat /etc/nginx/nginx.conf; done +``` + +## Rancher Agents + +Rancher Agent 用于实现与集群的通信(通过 `cattle-cluster-agent` 的 Kubernetes API)和与节点的通信(通过 `cattle-node-agent` 的集群配置)。 + +#### cattle-node-agent + +检查每个节点上是否存在 cattle-node-agent pod,状态是否为 **Running**,并且重启次数不多: + +``` +kubectl -n cattle-system get pods -l app=cattle-agent -o wide +``` + +输出示例: + +``` +NAME READY STATUS RESTARTS AGE IP NODE +cattle-node-agent-4gc2p 1/1 Running 0 2h x.x.x.x worker-1 +cattle-node-agent-8cxkk 1/1 Running 0 2h x.x.x.x etcd-1 +cattle-node-agent-kzrlg 1/1 Running 0 2h x.x.x.x etcd-0 +cattle-node-agent-nclz9 1/1 Running 0 2h x.x.x.x controlplane-0 +cattle-node-agent-pwxp7 1/1 Running 0 2h x.x.x.x worker-0 +cattle-node-agent-t5484 1/1 Running 0 2h x.x.x.x controlplane-1 +cattle-node-agent-t8mtz 1/1 Running 0 2h x.x.x.x etcd-2 +``` + +检查特定或所有 cattle-node-agent pod 的日志记录: + +``` +kubectl -n cattle-system logs -l app=cattle-agent +``` + +#### cattle-cluster-agent + +检查 cattle-cluster-agent pod 是否存在于集群中,状态是否为 **Running**,并且重启次数不多: + +``` +kubectl -n cattle-system get pods -l app=cattle-cluster-agent -o wide +``` + +输出示例: + +``` +NAME READY STATUS RESTARTS AGE IP NODE +cattle-cluster-agent-54d7c6c54d-ht9h4 1/1 Running 0 2h x.x.x.x worker-1 +``` + +检查 cattle-cluster-agent pod 的日志记录: + +``` +kubectl -n cattle-system logs -l app=cattle-cluster-agent +``` + +## Jobs 和 Pods + +### 检查 Pod 或 Job 的状态是否为 **Running**/**Completed** + +运行以下命令进行检查: + +``` +kubectl get pods --all-namespaces +``` + +如果 Pod 的状态不是 **Running**,你可以通过运行命令来找到根本原因。 + +### 描述 Pod + +``` +kubectl describe pod POD_NAME -n NAMESPACE +``` + +### Pod 容器日志 + +``` +kubectl logs POD_NAME -n NAMESPACE +``` + +如果 Job 的状态不是 **Completed**,你可以通过运行命令来找到根本原因。 + +### 描述 Job + +``` +kubectl describe job JOB_NAME -n NAMESPACE +``` + +### Job Pod 容器的日志 + +``` +kubectl logs -l job-name=JOB_NAME -n NAMESPACE +``` + +### 驱逐的 Pod + +可以根据 [eviction 信号](https://kubernetes.io/docs/tasks/administer-cluster/out-of-resource/#eviction-policy)来驱逐 Pod。 + +检索被驱逐的 Pod 列表(podname 和命名空间): + +``` +kubectl get pods --all-namespaces -o go-template='{{range .items}}{{if eq .status.phase "Failed"}}{{if eq .status.reason "Evicted"}}{{.metadata.name}}{{" "}}{{.metadata.namespace}}{{"\n"}}{{end}}{{end}}{{end}}' +``` + +要删除所有被驱逐的 pod: + +``` +kubectl get pods --all-namespaces -o go-template='{{range .items}}{{if eq .status.phase "Failed"}}{{if eq .status.reason "Evicted"}}{{.metadata.name}}{{" "}}{{.metadata.namespace}}{{"\n"}}{{end}}{{end}}{{end}}' | while read epod enamespace; do kubectl -n $enamespace delete pod $epod; done +``` + +检索被驱逐的 pod 列表、调度节点以及原因: + +``` +kubectl get pods --all-namespaces -o go-template='{{range .items}}{{if eq .status.phase "Failed"}}{{if eq .status.reason "Evicted"}}{{.metadata.name}}{{" "}}{{.metadata.namespace}}{{"\n"}}{{end}}{{end}}{{end}}' | while read epod enamespace; do kubectl -n $enamespace get pod $epod -o=custom-columns=NAME:.metadata.name,NODE:.spec.nodeName,MSG:.status.message; done +``` + +### Job 未完成 + +如果你启用了 Istio 而且你部署的 Job 未完成,你需要按照[这些步骤](../../how-to-guides/advanced-user-guides/istio-setup-guide/enable-istio-in-namespace.md)将注释添加到 Pod 中。 + +由于 Istio Sidecars 会一直运行,因此即使任务完成了,也不能认为 Job 已完成。这是一个临时的解决方法,它禁止了 Istio 和添加了注释的 Pod 之间的通信。如果你使用了这个方法,由于这个 Job 无法访问服务网格,因此你将不能继续使用 Job 进行集成测试。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/troubleshooting/other-troubleshooting-tips/logging.md b/i18n/zh/docusaurus-plugin-content-docs/current/troubleshooting/other-troubleshooting-tips/logging.md new file mode 100644 index 00000000000..e68038ea7e2 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/troubleshooting/other-troubleshooting-tips/logging.md @@ -0,0 +1,48 @@ +--- +title: Logging +weight: 110 +--- + +Rancher 使用了以下日志级别: + +| 名称 | 描述 | +|---------|-------------| +| `info` | 记录信息性消息。这是默认的日志级别。 | +| `debug` | 记录可用于调试的更详细消息。 | +| `trace` | 记录内部功能的非常详细的消息。非常冗长,并且可能包含敏感信息。 | + +### 如何配置日志级别 + +* Kubernetes 安装 +* 配置 debug 日志级别 +``` +$ KUBECONFIG=./kube_config_cluster.yml +$ kubectl -n cattle-system get pods -l app=rancher --no-headers -o custom-columns=name:.metadata.name | while read rancherpod; do kubectl -n cattle-system exec $rancherpod -c rancher -- loglevel --set debug; done +OK +OK +OK +$ kubectl -n cattle-system logs -l app=rancher -c rancher +``` + +* 配置 info 日志级别 +``` +$ KUBECONFIG=./kube_config_cluster.yml +$ kubectl -n cattle-system get pods -l app=rancher --no-headers -o custom-columns=name:.metadata.name | while read rancherpod; do kubectl -n cattle-system exec $rancherpod -c rancher -- loglevel --set info; done +OK +OK +OK +``` + +* Docker 安装 +* 配置 debug 日志级别 +``` +$ docker exec -ti loglevel --set debug +OK +$ docker logs -f +``` + +* 配置 info 日志级别 +``` +$ docker exec -ti loglevel --set info +OK +``` diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/troubleshooting/other-troubleshooting-tips/networking.md b/i18n/zh/docusaurus-plugin-content-docs/current/troubleshooting/other-troubleshooting-tips/networking.md new file mode 100644 index 00000000000..6a2032d3480 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/troubleshooting/other-troubleshooting-tips/networking.md @@ -0,0 +1,122 @@ +--- +title: 网络 +weight: 102 +--- + +本文列出的命令/步骤可用于检查集群中的网络问题。 + +请确保你配置了正确的 kubeconfig(例如,为 Rancher HA 配置了 `export KUBECONFIG=$PWD/kube_config_cluster.yml`)或通过 UI 使用了嵌入式 kubectl。 + +### 仔细检查你的(主机)防火墙中是否打开了所有必需的端口 + +仔细检查你的(主机)防火墙中是否打开了所有[必需的端口](../../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/node-requirements-for-rancher-managed-clusters.md#网络要求)。其他所需的端口都使用 TCP,而覆盖网络使用 UDP。 +### 检查覆盖网络是否正常运行 + +你可以将 Pod 调度到集群中的任何主机,但是 NGINX Ingress Controller 需要能够将 `NODE_1` 请求路由到 `NODE_2`。这会在覆盖网络上进行。如果覆盖网络无法正常工作,由于 NGINX Ingress Controller 无法路由到 pod,因此 TCP/HTTP 连接会间歇性失败。 + +要测试覆盖网络,你可以启动以下 `DaemonSet` 定义。这样,每台主机上都会运行一个 `swiss-army-knife` 容器(镜像由 Rancher 工程师开发,可在[此处](https://github.com/rancherlabs/swiss-army-knife)找到),我们使用该镜像在所有主机上的容器之间运行 `ping` 测试。 + +:::note + +此容器[不支持 ARM 节点](https://github.com/leodotcloud/swiss-army-knife/issues/18)(例如 Raspberry Pi)。Pod 日志会显示为 `exec user process caused: exec format error`。 + +::: + +1. 将以下内容另存为 `overlaytest.yml`: + + ``` + apiVersion: apps/v1 + kind: DaemonSet + metadata: + name: overlaytest + spec: + selector: + matchLabels: + name: overlaytest + template: + metadata: + labels: + name: overlaytest + spec: + tolerations: + - operator: Exists + containers: + - image: rancherlabs/swiss-army-knife + imagePullPolicy: Always + name: overlaytest + command: ["sh", "-c", "tail -f /dev/null"] + terminationMessagePath: /dev/termination-log + + ``` + +2. 使用 `kubectl create -f overlaytest.yml` 启动它。 +3. 等待 `kubectl rollout status ds/overlaytest -w` 返回 `daemon set "overlaytest" successfully rolled out`。 +4. 从同一位置运行以下脚本。它会让每个主机上的所有 `overlaytest` 容器相互 ping 通: + ``` + #!/bin/bash + echo "=> Start network overlay test" + kubectl get pods -l name=overlaytest -o jsonpath='{range .items[*]}{@.metadata.name}{" "}{@.spec.nodeName}{"\n"}{end}' | + while read spod shost + do kubectl get pods -l name=overlaytest -o jsonpath='{range .items[*]}{@.status.podIP}{" "}{@.spec.nodeName}{"\n"}{end}' | + while read tip thost + do kubectl --request-timeout='10s' exec $spod -c overlaytest -- /bin/sh -c "ping -c2 $tip > /dev/null 2>&1" + RC=$? + if [ $RC -ne 0 ] + then echo FAIL: $spod on $shost cannot reach pod IP $tip on $thost + else echo $shost can reach $thost + fi + done + done + echo "=> End network overlay test" + ``` + +5. 命令运行完成后,它会输出每条路由的状态: + + ``` + => Start network overlay test + Error from server (NotFound): pods "wk2" not found + FAIL: overlaytest-5bglp on wk2 cannot reach pod IP 10.42.7.3 on wk2 + Error from server (NotFound): pods "wk2" not found + FAIL: overlaytest-5bglp on wk2 cannot reach pod IP 10.42.0.5 on cp1 + Error from server (NotFound): pods "wk2" not found + FAIL: overlaytest-5bglp on wk2 cannot reach pod IP 10.42.2.12 on wk1 + command terminated with exit code 1 + FAIL: overlaytest-v4qkl on cp1 cannot reach pod IP 10.42.7.3 on wk2 + cp1 can reach cp1 + cp1 can reach wk1 + command terminated with exit code 1 + FAIL: overlaytest-xpxwp on wk1 cannot reach pod IP 10.42.7.3 on wk2 + wk1 can reach cp1 + wk1 can reach wk1 + => End network overlay test + ``` + 如果你在输出中看到错误,则说明两台主机上的 Pod 路由存在问题。在上面的输出中,节点 `wk2` 在覆盖网络上没有连接。原因可能是没有为 `wk2` 打开覆盖网络的[必需端口](../../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/node-requirements-for-rancher-managed-clusters.md#网络要求)。 +6. 你现在可以通过运行 `kubectl delete ds/overlaytest` 来清理 DaemonSet。 + + +### 检查主机和对等/隧道设备/设备上的 MTU 是否正确配置 + +如果 MTU 在运行 Rancher 的主机、创建/导入集群中的节点或两者之间的设备上配置不正确,Rancher 和 Agent 会记录类似以下的错误信息: + +* `websocket: bad handshake` +* `Failed to connect to proxy` +* `read tcp: i/o timeout` + +有关在 Rancher 和集群节点之间使用 Google Cloud VPN 时如何正确配置 MTU 的示例,请参阅 [Google Cloud VPN:MTU 注意事项](https://cloud.google.com/vpn/docs/concepts/mtu-considerations#gateway_mtu_vs_system_mtu)。 + +### 已解决的问题 + +#### 由于缺少节点注释,使用 Canal/Flannel 时覆盖网络中断 + +| | | +|------------|------------| +| GitHub issue | [#13644](https://github.com/rancher/rancher/issues/13644) | +| 解决于 | v2.1.2 | + +要检查你的集群是否受到影响,运行以下命令来列出损坏的节点(此命令要求安装 `jq`): + +``` +kubectl get nodes -o json | jq '.items[].metadata | select(.annotations["flannel.alpha.coreos.com/public-ip"] == null or .annotations["flannel.alpha.coreos.com/kube-subnet-manager"] == null or .annotations["flannel.alpha.coreos.com/backend-type"] == null or .annotations["flannel.alpha.coreos.com/backend-data"] == null) | .name' +``` + +如果没有输出,则集群没有影响。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/troubleshooting/other-troubleshooting-tips/rancher-ha.md b/i18n/zh/docusaurus-plugin-content-docs/current/troubleshooting/other-troubleshooting-tips/rancher-ha.md new file mode 100644 index 00000000000..11050647d19 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/troubleshooting/other-troubleshooting-tips/rancher-ha.md @@ -0,0 +1,80 @@ +--- +title: Rancher HA +weight: 104 +--- + +本文列出的命令/步骤可用于检查你的 Rancher Kubernetes 安装。 + +请确保你配置了正确的 kubeconfig(例如,`export KUBECONFIG=$PWD/kube_config_cluster.yml`)。 + +### 检查 Rancher Pod + +Rancher pod 会部署为 `cattle-system` 命名空间中的一个 Deployment。 + +检查 pod 是否运行在所有节点上: + +``` +kubectl -n cattle-system get pods -l app=rancher -o wide +``` + +输出示例: + +``` +NAME READY STATUS RESTARTS AGE IP NODE +rancher-7dbd7875f7-n6t5t 1/1 Running 0 8m x.x.x.x x.x.x.x +rancher-7dbd7875f7-qbj5k 1/1 Running 0 8m x.x.x.x x.x.x.x +rancher-7dbd7875f7-qw7wb 1/1 Running 0 8m x.x.x.x x.x.x.x +``` + +如果 pod 无法运行(即状态不是 **Running**,Ready 状态未显示 `1/1`,或者有大量 Restarts),请检查 pod 详细信息,日志和命名空间事件。 + +#### Pod 详细信息 + +``` +kubectl -n cattle-system describe pods -l app=rancher +``` + +#### Pod 容器日志 + +``` +kubectl -n cattle-system logs -l app=rancher +``` + +#### 命名空间事件 + +``` +kubectl -n cattle-system get events +``` + +### 检查 Ingress + +Ingress 应该具有正确的 `HOSTS`(显示配置的 FQDN)和 `ADDRESS`(将被路由到该主机地址): + +``` +kubectl -n cattle-system get ingress +``` + +输出示例: + +``` +NAME HOSTS ADDRESS PORTS AGE +rancher rancher.yourdomain.com x.x.x.x,x.x.x.x,x.x.x.x 80, 443 2m +``` + +### 检查 Ingress Controller 日志 + +如果访问你配置的 Rancher FQDN 时没有显示 UI,请检查 Ingress Controller 日志以查看尝试访问 Rancher 时发生了什么: + +``` +kubectl -n ingress-nginx logs -l app=ingress-nginx +``` + +### Leader 选举 + +Leader 由 Leader 选举确定。确定 Leader 后,Leader(`holderIdentity`)会保存在 `cattle-controllers` ConfigMap 中(在本例中为 `rancher-7dbd7875f7-qbj5k`): + +``` +kubectl -n kube-system get configmap cattle-controllers -o jsonpath='{.metadata.annotations.control-plane\.alpha\.kubernetes\.io/leader}' +{"holderIdentity":"rancher-7dbd7875f7-qbj5k","leaseDurationSeconds":45,"acquireTime":"2019-04-04T11:53:12Z","renewTime":"2019-04-04T12:24:08Z","leaderTransitions":0} +``` + diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/troubleshooting/other-troubleshooting-tips/registered-clusters.md b/i18n/zh/docusaurus-plugin-content-docs/current/troubleshooting/other-troubleshooting-tips/registered-clusters.md new file mode 100644 index 00000000000..c3fbde8f4d8 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/troubleshooting/other-troubleshooting-tips/registered-clusters.md @@ -0,0 +1,68 @@ +--- +title: 注册集群 +weight: 105 +--- + +本文列出的命令/步骤可用于检查你正在注册或已在 Rancher 中注册的集群。 + +请确保你配置了正确的 kubeconfig(例如,`export KUBECONFIG=$PWD/kubeconfig_from_imported_cluster.yml`)。 + +### Rancher Agents + +Rancher Agent 用于实现与集群的通信(通过 cattle-cluster-agent 的 Kubernetes API)和与节点的通信。 + +如果 cattle-cluster-agent 无法连接到配置的 `server-url`,集群将保持在 **Pending** 状态并显示 `Waiting for full cluster configuration`。 + +#### cattle-node-agent + +:::note + +cattle-node-agents 只会在使用 RKE 在 Rancher 创建的集群中显示。 + +::: + +检查每个节点上是否存在 cattle-node-agent pod,状态是否为 **Running**,并且重启次数不多: + +``` +kubectl -n cattle-system get pods -l app=cattle-agent -o wide +``` + +输出示例: + +``` +NAME READY STATUS RESTARTS AGE IP NODE +cattle-node-agent-4gc2p 1/1 Running 0 2h x.x.x.x worker-1 +cattle-node-agent-8cxkk 1/1 Running 0 2h x.x.x.x etcd-1 +cattle-node-agent-kzrlg 1/1 Running 0 2h x.x.x.x etcd-0 +cattle-node-agent-nclz9 1/1 Running 0 2h x.x.x.x controlplane-0 +cattle-node-agent-pwxp7 1/1 Running 0 2h x.x.x.x worker-0 +cattle-node-agent-t5484 1/1 Running 0 2h x.x.x.x controlplane-1 +cattle-node-agent-t8mtz 1/1 Running 0 2h x.x.x.x etcd-2 +``` + +检查特定或所有 cattle-node-agent pod 的日志记录: + +``` +kubectl -n cattle-system logs -l app=cattle-agent +``` + +#### cattle-cluster-agent + +检查 cattle-cluster-agent pod 是否存在于集群中,状态是否为 **Running**,并且重启次数不多: + +``` +kubectl -n cattle-system get pods -l app=cattle-cluster-agent -o wide +``` + +输出示例: + +``` +NAME READY STATUS RESTARTS AGE IP NODE +cattle-cluster-agent-54d7c6c54d-ht9h4 1/1 Running 0 2h x.x.x.x worker-1 +``` + +检查 cattle-cluster-agent pod 的日志记录: + +``` +kubectl -n cattle-system logs -l app=cattle-cluster-agent +``` diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/troubleshooting/other-troubleshooting-tips/user-id-tracking-in-audit-logs.md b/i18n/zh/docusaurus-plugin-content-docs/current/troubleshooting/other-troubleshooting-tips/user-id-tracking-in-audit-logs.md new file mode 100644 index 00000000000..520664beb5e --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/troubleshooting/other-troubleshooting-tips/user-id-tracking-in-audit-logs.md @@ -0,0 +1,23 @@ +--- +title: 审计日志中的用户 ID 跟踪 +weight: 110 +--- + +Rancher 使用以下审计日志来跟踪本地和下游集群中发生的事件: + +* [Kubernetes 审计日志](https://rancher.com/docs/rke/latest/en/config-options/audit-log/) +* [Rancher API 审核日志](../../getting-started/installation-and-upgrade/advanced-options/advanced-use-cases/enable-api-audit-log.md) + +Rancher 2.6 增强了审计日志,在 Rancher 和下游 Kubernetes 审计日志中都包含了外部身份提供程序名称(即外部身份提供程序中用户的通用名称)。 + +在 Rancher 2.6 之前,如果管理员不知道外部身份提供程序中的用户名和 Rancher 中的 userId (`u-xXXX`) 之间的映射,则无法通过 Rancher 审计日志和 Kubernetes 审计日志来追踪事件。 +要知道这个映射,集群管理员需要能够访问 Rancher API、UI 和 local 管理集群。 + +有了这个功能之后,下游集群管理员就能够查看 Kubernetes 审计日志,并且可以不在 Rancher 中查看任何内容就能知道哪个外部身份提供程序 (IDP) 用户执行了某项操作。 +如果集群传出了审计日志,日志系统的用户就能够识别外部身份提供程序中的用户。 +Rancher 管理员现在能够查看 Rancher 审计日志,并使用外部身份提供程序用户名来跟踪 Kubernetes 审计日志。 + +### 功能描述 + +- 在下游集群启用了 Kubernetes 审计日志后,会在“元数据”级别为每个请求记录外部身份提供程序的用户名。 +- 在 Rancher 启用 Rancher API 审计日志后,每个到达 Rancher API Server 的请求记录(包括登录请求)对应的外部身份提供程序用户名也会记录在 `auditLog.level=1` 中。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.0-2.4.json b/i18n/zh/docusaurus-plugin-content-docs/version-2.0-2.4.json new file mode 100644 index 00000000000..8fbfbd2cdeb --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.0-2.4.json @@ -0,0 +1,410 @@ +{ + "version.label": { + "message": "v2.0-v2.4", + "description": "The label for version 2.0-2.4" + }, + "sidebar.tutorialSidebar.category.Getting Started": { + "message": "Getting Started", + "description": "The label for category Getting Started in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Introduction": { + "message": "Introduction", + "description": "The label for category Introduction in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Quick Start Guides": { + "message": "Quick Start Guides", + "description": "The label for category Quick Start Guides in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Deploy Rancher Manager": { + "message": "Deploy Rancher Manager", + "description": "The label for category Deploy Rancher Manager in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Deploy Rancher Workloads": { + "message": "Deploy Rancher Workloads", + "description": "The label for category Deploy Rancher Workloads in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Installation and Upgrade": { + "message": "Installation and Upgrade", + "description": "The label for category Installation and Upgrade in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Installation Requirements": { + "message": "Installation Requirements", + "description": "The label for category Installation Requirements in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Install/Upgrade on a Kubernetes Cluster": { + "message": "Install/Upgrade on a Kubernetes Cluster", + "description": "The label for category Install/Upgrade on a Kubernetes Cluster in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Upgrades": { + "message": "Upgrades", + "description": "The label for category Upgrades in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Other Installation Methods": { + "message": "Other Installation Methods", + "description": "The label for category Other Installation Methods in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Air-Gapped Helm CLI Install": { + "message": "Air-Gapped Helm CLI Install", + "description": "The label for category Air-Gapped Helm CLI Install in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Rancher on a Single Node with Docker": { + "message": "Rancher on a Single Node with Docker", + "description": "The label for category Rancher on a Single Node with Docker in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Rancher Behind an HTTP Proxy": { + "message": "Rancher Behind an HTTP Proxy", + "description": "The label for category Rancher Behind an HTTP Proxy in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Resources": { + "message": "Resources", + "description": "The label for category Resources in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Advanced Options": { + "message": "Advanced Options", + "description": "The label for category Advanced Options in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Enable Experimental Features": { + "message": "Enable Experimental Features", + "description": "The label for category Enable Experimental Features in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Advanced Use Cases": { + "message": "Advanced Use Cases", + "description": "The label for category Advanced Use Cases in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Kubernetes Installation Using Helm 2": { + "message": "Kubernetes Installation Using Helm 2", + "description": "The label for category Kubernetes Installation Using Helm 2 in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Create Nodes and Load Balancer": { + "message": "Create Nodes and Load Balancer", + "description": "The label for category Create Nodes and Load Balancer in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Install Kubernetes with RKE": { + "message": "Install Kubernetes with RKE", + "description": "The label for category Install Kubernetes with RKE in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Initialize Helm: Install the Tiller Service": { + "message": "Initialize Helm: Install the Tiller Service", + "description": "The label for category Initialize Helm: Install the Tiller Service in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Install Rancher": { + "message": "Install Rancher", + "description": "The label for category Install Rancher in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.RKE Add-On Install": { + "message": "RKE Add-On Install", + "description": "The label for category RKE Add-On Install in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Kubernetes Install with External Load Balancer (TCP/Layer 4)": { + "message": "Kubernetes Install with External Load Balancer (TCP/Layer 4)", + "description": "The label for category Kubernetes Install with External Load Balancer (TCP/Layer 4) in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Kubernetes Install with External Load Balancer (HTTPS/Layer 7)": { + "message": "Kubernetes Install with External Load Balancer (HTTPS/Layer 7)", + "description": "The label for category Kubernetes Install with External Load Balancer (HTTPS/Layer 7) in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Troubleshooting HA RKE Add-On Install": { + "message": "Troubleshooting HA RKE Add-On Install", + "description": "The label for category Troubleshooting HA RKE Add-On Install in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Installing Rancher in an Air Gapped Environment with Helm 2": { + "message": "Installing Rancher in an Air Gapped Environment with Helm 2", + "description": "The label for category Installing Rancher in an Air Gapped Environment with Helm 2 in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.cluster.yml Templates for RKE add-on installs": { + "message": "cluster.yml Templates for RKE add-on installs", + "description": "The label for category cluster.yml Templates for RKE add-on installs in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.RKE Add-On": { + "message": "RKE Add-On", + "description": "The label for category RKE Add-On in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.How-to Guides": { + "message": "How-to Guides", + "description": "The label for category How-to Guides in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.New User Guides": { + "message": "New User Guides", + "description": "The label for category New User Guides in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Kubernetes Cluster Setup": { + "message": "Kubernetes Cluster Setup", + "description": "The label for category Kubernetes Cluster Setup in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Infrastructure Setup": { + "message": "Infrastructure Setup", + "description": "The label for category Infrastructure Setup in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Kubernetes Clusters in Rancher Setup": { + "message": "Kubernetes Clusters in Rancher Setup", + "description": "The label for category Kubernetes Clusters in Rancher Setup in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Checklist for Production-Ready Clusters": { + "message": "Checklist for Production-Ready Clusters", + "description": "The label for category Checklist for Production-Ready Clusters in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Set Up Clusters from Hosted Kubernetes Providers": { + "message": "Set Up Clusters from Hosted Kubernetes Providers", + "description": "The label for category Set Up Clusters from Hosted Kubernetes Providers in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Launch Kubernetes with Rancher": { + "message": "Launch Kubernetes with Rancher", + "description": "The label for category Launch Kubernetes with Rancher in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Use New Nodes in an Infra Provider": { + "message": "Use New Nodes in an Infra Provider", + "description": "The label for category Use New Nodes in an Infra Provider in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.vSphere": { + "message": "vSphere", + "description": "The label for category vSphere in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Use Windows Clusters": { + "message": "Use Windows Clusters", + "description": "The label for category Use Windows Clusters in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Set Up Cloud Providers": { + "message": "Set Up Cloud Providers", + "description": "The label for category Set Up Cloud Providers in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Other Cloud Providers": { + "message": "Other Cloud Providers", + "description": "The label for category Other Cloud Providers in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Kubernetes Resources Setup": { + "message": "Kubernetes Resources Setup", + "description": "The label for category Kubernetes Resources Setup in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Workloads and Pods": { + "message": "Workloads and Pods", + "description": "The label for category Workloads and Pods in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Horizontal Pod Autoscaler": { + "message": "Horizontal Pod Autoscaler", + "description": "The label for category Horizontal Pod Autoscaler in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Load Balancer and Ingress Controller": { + "message": "Load Balancer and Ingress Controller", + "description": "The label for category Load Balancer and Ingress Controller in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Helm Charts in Rancher": { + "message": "Helm Charts in Rancher", + "description": "The label for category Helm Charts in Rancher in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Backup, Restore, and Disaster Recovery": { + "message": "Backup, Restore, and Disaster Recovery", + "description": "The label for category Backup, Restore, and Disaster Recovery in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Migrating from v1.6 to v2.x": { + "message": "Migrating from v1.6 to v2.x", + "description": "The label for category Migrating from v1.6 to v2.x in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Advanced User Guides": { + "message": "Advanced User Guides", + "description": "The label for category Advanced User Guides in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Authentication, Permissions, and Global Configuration": { + "message": "Authentication, Permissions, and Global Configuration", + "description": "The label for category Authentication, Permissions, and Global Configuration in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.About Authentication": { + "message": "About Authentication", + "description": "The label for category About Authentication in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Authentication Config": { + "message": "Authentication Config", + "description": "The label for category Authentication Config in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Configure Microsoft AD Federation Service (SAML)": { + "message": "Configure Microsoft AD Federation Service (SAML)", + "description": "The label for category Configure Microsoft AD Federation Service (SAML) in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Configure Shibboleth (SAML)": { + "message": "Configure Shibboleth (SAML)", + "description": "The label for category Configure Shibboleth (SAML) in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Manage Role-Based Access Control (RBAC)": { + "message": "Manage Role-Based Access Control (RBAC)", + "description": "The label for category Manage Role-Based Access Control (RBAC) in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.About Provisioning Drivers": { + "message": "About Provisioning Drivers", + "description": "The label for category About Provisioning Drivers in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.About RKE1 Templates": { + "message": "About RKE1 Templates", + "description": "The label for category About RKE1 Templates in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Manage Clusters": { + "message": "Manage Clusters", + "description": "The label for category Manage Clusters in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Access Clusters": { + "message": "Access Clusters", + "description": "The label for category Access Clusters in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Install Cluster Autoscaler": { + "message": "Install Cluster Autoscaler", + "description": "The label for category Install Cluster Autoscaler in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Create Kubernetes Persistent Storage": { + "message": "Create Kubernetes Persistent Storage", + "description": "The label for category Create Kubernetes Persistent Storage in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Manage Persistent Storage": { + "message": "Manage Persistent Storage", + "description": "The label for category Manage Persistent Storage in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Provisioning Storage Examples": { + "message": "Provisioning Storage Examples", + "description": "The label for category Provisioning Storage Examples in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Manage Projects": { + "message": "Manage Projects", + "description": "The label for category Manage Projects in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Manage Project Resource Quotas": { + "message": "Manage Project Resource Quotas", + "description": "The label for category Manage Project Resource Quotas in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Istio Setup Guide": { + "message": "Istio Setup Guide", + "description": "The label for category Istio Setup Guide in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.CIS Scan Guides": { + "message": "CIS Scan Guides", + "description": "The label for category CIS Scan Guides in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Reference Guides": { + "message": "Reference Guides", + "description": "The label for category Reference Guides in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Best Practices": { + "message": "Best Practices", + "description": "The label for category Best Practices in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Rancher Manager Architecture": { + "message": "Rancher Manager Architecture", + "description": "The label for category Rancher Manager Architecture in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Cluster Configuration": { + "message": "Cluster Configuration", + "description": "The label for category Cluster Configuration in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Rancher Server Configuration": { + "message": "Rancher Server Configuration", + "description": "The label for category Rancher Server Configuration in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Use Existing Nodes": { + "message": "Use Existing Nodes", + "description": "The label for category Use Existing Nodes in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Downstream Cluster Configuration": { + "message": "Downstream Cluster Configuration", + "description": "The label for category Downstream Cluster Configuration in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Node Template Configuration": { + "message": "Node Template Configuration", + "description": "The label for category Node Template Configuration in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Creating a vSphere Cluster": { + "message": "Creating a vSphere Cluster", + "description": "The label for category Creating a vSphere Cluster in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Single-Node Rancher in Docker": { + "message": "Single-Node Rancher in Docker", + "description": "The label for category Single-Node Rancher in Docker in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Installation References": { + "message": "Installation References", + "description": "The label for category Installation References in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Configure OpenLDAP": { + "message": "Configure OpenLDAP", + "description": "The label for category Configure OpenLDAP in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.User Settings": { + "message": "User Settings", + "description": "The label for category User Settings in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.CLI with Rancher": { + "message": "CLI with Rancher", + "description": "The label for category CLI with Rancher in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.About the API": { + "message": "About the API", + "description": "The label for category About the API in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Project Tools": { + "message": "Project Tools", + "description": "The label for category Project Tools in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Pipelines": { + "message": "Pipelines", + "description": "The label for category Pipelines in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Rancher Security": { + "message": "Rancher Security", + "description": "The label for category Rancher Security in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Rancher v2.1 Hardening Guides": { + "message": "Rancher v2.1 Hardening Guides", + "description": "The label for category Rancher v2.1 Hardening Guides in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Rancher v2.2 Hardening Guides": { + "message": "Rancher v2.2 Hardening Guides", + "description": "The label for category Rancher v2.2 Hardening Guides in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Rancher v2.3 Hardening Guides": { + "message": "Rancher v2.3 Hardening Guides", + "description": "The label for category Rancher v2.3 Hardening Guides in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Rancher v2.4 Hardening Guides": { + "message": "Rancher v2.4 Hardening Guides", + "description": "The label for category Rancher v2.4 Hardening Guides in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Explanations": { + "message": "Explanations", + "description": "The label for category Explanations in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Integrations in Rancher": { + "message": "Integrations in Rancher", + "description": "The label for category Integrations in Rancher in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.CIS Scans": { + "message": "CIS Scans", + "description": "The label for category CIS Scans in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Istio": { + "message": "Istio", + "description": "The label for category Istio in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Logging": { + "message": "Logging", + "description": "The label for category Logging in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Alerting": { + "message": "Alerting", + "description": "The label for category Alerting in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Monitoring": { + "message": "Monitoring", + "description": "The label for category Monitoring in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.FAQ": { + "message": "FAQ", + "description": "The label for category FAQ in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Troubleshooting": { + "message": "Troubleshooting", + "description": "The label for category Troubleshooting in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Kubernetes Components": { + "message": "Kubernetes Components", + "description": "The label for category Kubernetes Components in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Other Troubleshooting Tips": { + "message": "Other Troubleshooting Tips", + "description": "The label for category Other Troubleshooting Tips in sidebar tutorialSidebar" + } +} diff --git a/i18n/zh/docusaurus-plugin-content-docs/version-2.5.json b/i18n/zh/docusaurus-plugin-content-docs/version-2.5.json new file mode 100644 index 00000000000..9b7a6c4b85b --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/version-2.5.json @@ -0,0 +1,386 @@ +{ + "version.label": { + "message": "v2.5", + "description": "The label for version 2.5" + }, + "sidebar.tutorialSidebar.category.Getting Started": { + "message": "Getting Started", + "description": "The label for category Getting Started in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Introduction": { + "message": "Introduction", + "description": "The label for category Introduction in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Quick Start Guides": { + "message": "Quick Start Guides", + "description": "The label for category Quick Start Guides in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Deploy Rancher Manager": { + "message": "Deploy Rancher Manager", + "description": "The label for category Deploy Rancher Manager in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Deploy Rancher Workloads": { + "message": "Deploy Rancher Workloads", + "description": "The label for category Deploy Rancher Workloads in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Installation and Upgrade": { + "message": "Installation and Upgrade", + "description": "The label for category Installation and Upgrade in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Installation Requirements": { + "message": "Installation Requirements", + "description": "The label for category Installation Requirements in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Install/Upgrade on a Kubernetes Cluster": { + "message": "Install/Upgrade on a Kubernetes Cluster", + "description": "The label for category Install/Upgrade on a Kubernetes Cluster in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Other Installation Methods": { + "message": "Other Installation Methods", + "description": "The label for category Other Installation Methods in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Air-Gapped Helm CLI Install": { + "message": "Air-Gapped Helm CLI Install", + "description": "The label for category Air-Gapped Helm CLI Install in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Rancher on a Single Node with Docker": { + "message": "Rancher on a Single Node with Docker", + "description": "The label for category Rancher on a Single Node with Docker in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Rancher Behind an HTTP Proxy": { + "message": "Rancher Behind an HTTP Proxy", + "description": "The label for category Rancher Behind an HTTP Proxy in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Install/Upgrade Rancher with RancherD": { + "message": "Install/Upgrade Rancher with RancherD", + "description": "The label for category Install/Upgrade Rancher with RancherD in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Resources": { + "message": "Resources", + "description": "The label for category Resources in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Advanced Options": { + "message": "Advanced Options", + "description": "The label for category Advanced Options in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Enable Experimental Features": { + "message": "Enable Experimental Features", + "description": "The label for category Enable Experimental Features in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Advanced Use Cases": { + "message": "Advanced Use Cases", + "description": "The label for category Advanced Use Cases in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.How-to Guides": { + "message": "How-to Guides", + "description": "The label for category How-to Guides in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.New User Guides": { + "message": "New User Guides", + "description": "The label for category New User Guides in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Kubernetes Cluster Setup": { + "message": "Kubernetes Cluster Setup", + "description": "The label for category Kubernetes Cluster Setup in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Infrastructure Setup": { + "message": "Infrastructure Setup", + "description": "The label for category Infrastructure Setup in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Kubernetes Clusters in Rancher Setup": { + "message": "Kubernetes Clusters in Rancher Setup", + "description": "The label for category Kubernetes Clusters in Rancher Setup in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Checklist for Production-Ready Clusters": { + "message": "Checklist for Production-Ready Clusters", + "description": "The label for category Checklist for Production-Ready Clusters in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Set Up Clusters from Hosted Kubernetes Providers": { + "message": "Set Up Clusters from Hosted Kubernetes Providers", + "description": "The label for category Set Up Clusters from Hosted Kubernetes Providers in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Launch Kubernetes with Rancher": { + "message": "Launch Kubernetes with Rancher", + "description": "The label for category Launch Kubernetes with Rancher in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Use New Nodes in an Infra Provider": { + "message": "Use New Nodes in an Infra Provider", + "description": "The label for category Use New Nodes in an Infra Provider in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.vSphere": { + "message": "vSphere", + "description": "The label for category vSphere in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Use Windows Clusters": { + "message": "Use Windows Clusters", + "description": "The label for category Use Windows Clusters in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Set Up Cloud Providers": { + "message": "Set Up Cloud Providers", + "description": "The label for category Set Up Cloud Providers in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Other Cloud Providers": { + "message": "Other Cloud Providers", + "description": "The label for category Other Cloud Providers in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Kubernetes Resources Setup": { + "message": "Kubernetes Resources Setup", + "description": "The label for category Kubernetes Resources Setup in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Workloads and Pods": { + "message": "Workloads and Pods", + "description": "The label for category Workloads and Pods in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Horizontal Pod Autoscaler": { + "message": "Horizontal Pod Autoscaler", + "description": "The label for category Horizontal Pod Autoscaler in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Load Balancer and Ingress Controller": { + "message": "Load Balancer and Ingress Controller", + "description": "The label for category Load Balancer and Ingress Controller in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Deploy Apps Across Clusters": { + "message": "Deploy Apps Across Clusters", + "description": "The label for category Deploy Apps Across Clusters in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Backup, Restore, and Disaster Recovery": { + "message": "Backup, Restore, and Disaster Recovery", + "description": "The label for category Backup, Restore, and Disaster Recovery in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Advanced User Guides": { + "message": "Advanced User Guides", + "description": "The label for category Advanced User Guides in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Authentication, Permissions, and Global Configuration": { + "message": "Authentication, Permissions, and Global Configuration", + "description": "The label for category Authentication, Permissions, and Global Configuration in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.About Authentication": { + "message": "About Authentication", + "description": "The label for category About Authentication in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Authentication Config": { + "message": "Authentication Config", + "description": "The label for category Authentication Config in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Configure Microsoft AD Federation Service (SAML)": { + "message": "Configure Microsoft AD Federation Service (SAML)", + "description": "The label for category Configure Microsoft AD Federation Service (SAML) in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Configure Shibboleth (SAML)": { + "message": "Configure Shibboleth (SAML)", + "description": "The label for category Configure Shibboleth (SAML) in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Manage Role-Based Access Control (RBAC)": { + "message": "Manage Role-Based Access Control (RBAC)", + "description": "The label for category Manage Role-Based Access Control (RBAC) in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.About Provisioning Drivers": { + "message": "About Provisioning Drivers", + "description": "The label for category About Provisioning Drivers in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.About RKE1 Templates": { + "message": "About RKE1 Templates", + "description": "The label for category About RKE1 Templates in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Manage Clusters": { + "message": "Manage Clusters", + "description": "The label for category Manage Clusters in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Access Clusters": { + "message": "Access Clusters", + "description": "The label for category Access Clusters in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Install Cluster Autoscaler": { + "message": "Install Cluster Autoscaler", + "description": "The label for category Install Cluster Autoscaler in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Create Kubernetes Persistent Storage": { + "message": "Create Kubernetes Persistent Storage", + "description": "The label for category Create Kubernetes Persistent Storage in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Manage Persistent Storage": { + "message": "Manage Persistent Storage", + "description": "The label for category Manage Persistent Storage in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Provisioning Storage Examples": { + "message": "Provisioning Storage Examples", + "description": "The label for category Provisioning Storage Examples in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Manage Projects": { + "message": "Manage Projects", + "description": "The label for category Manage Projects in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Manage Project Resource Quotas": { + "message": "Manage Project Resource Quotas", + "description": "The label for category Manage Project Resource Quotas in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Monitoring/Alerting Guides": { + "message": "Monitoring/Alerting Guides", + "description": "The label for category Monitoring/Alerting Guides in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Monitoring V2 Configuration Guides": { + "message": "Monitoring V2 Configuration Guides", + "description": "The label for category Monitoring V2 Configuration Guides in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Advanced Configuration": { + "message": "Advanced Configuration", + "description": "The label for category Advanced Configuration in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Istio Setup Guide": { + "message": "Istio Setup Guide", + "description": "The label for category Istio Setup Guide in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.CIS Scan Guides": { + "message": "CIS Scan Guides", + "description": "The label for category CIS Scan Guides in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Reference Guides": { + "message": "Reference Guides", + "description": "The label for category Reference Guides in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Best Practices": { + "message": "Best Practices", + "description": "The label for category Best Practices in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Rancher Server": { + "message": "Rancher Server", + "description": "The label for category Rancher Server in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Rancher-Managed Clusters": { + "message": "Rancher-Managed Clusters", + "description": "The label for category Rancher-Managed Clusters in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Rancher Manager Architecture": { + "message": "Rancher Manager Architecture", + "description": "The label for category Rancher Manager Architecture in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Cluster Configuration": { + "message": "Cluster Configuration", + "description": "The label for category Cluster Configuration in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Rancher Server Configuration": { + "message": "Rancher Server Configuration", + "description": "The label for category Rancher Server Configuration in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.GKE Cluster Configuration": { + "message": "GKE Cluster Configuration", + "description": "The label for category GKE Cluster Configuration in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Use Existing Nodes": { + "message": "Use Existing Nodes", + "description": "The label for category Use Existing Nodes in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Downstream Cluster Configuration": { + "message": "Downstream Cluster Configuration", + "description": "The label for category Downstream Cluster Configuration in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Node Template Configuration": { + "message": "Node Template Configuration", + "description": "The label for category Node Template Configuration in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Single-Node Rancher in Docker": { + "message": "Single-Node Rancher in Docker", + "description": "The label for category Single-Node Rancher in Docker in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Installation References": { + "message": "Installation References", + "description": "The label for category Installation References in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Amazon EKS Permissions": { + "message": "Amazon EKS Permissions", + "description": "The label for category Amazon EKS Permissions in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Backup & Restore Configuration": { + "message": "Backup & Restore Configuration", + "description": "The label for category Backup & Restore Configuration in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Configure OpenLDAP": { + "message": "Configure OpenLDAP", + "description": "The label for category Configure OpenLDAP in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Monitoring V2 Configuration": { + "message": "Monitoring V2 Configuration", + "description": "The label for category Monitoring V2 Configuration in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.User Settings": { + "message": "User Settings", + "description": "The label for category User Settings in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.CLI with Rancher": { + "message": "CLI with Rancher", + "description": "The label for category CLI with Rancher in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.About the API": { + "message": "About the API", + "description": "The label for category About the API in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Pipelines": { + "message": "Pipelines", + "description": "The label for category Pipelines in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Rancher Security": { + "message": "Rancher Security", + "description": "The label for category Rancher Security in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Rancher v2.6 Hardening Guides": { + "message": "Rancher v2.6 Hardening Guides", + "description": "The label for category Rancher v2.6 Hardening Guides in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.SELinux RPM": { + "message": "SELinux RPM", + "description": "The label for category SELinux RPM in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Explanations": { + "message": "Explanations", + "description": "The label for category Explanations in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Integrations in Rancher": { + "message": "Integrations in Rancher", + "description": "The label for category Integrations in Rancher in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.CIS Scans": { + "message": "CIS Scans", + "description": "The label for category CIS Scans in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Fleet - GitOps at Scale": { + "message": "Fleet - GitOps at Scale", + "description": "The label for category Fleet - GitOps at Scale in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Istio": { + "message": "Istio", + "description": "The label for category Istio in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Configuration Options": { + "message": "Configuration Options", + "description": "The label for category Configuration Options in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Logging": { + "message": "Logging", + "description": "The label for category Logging in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Custom Resource Configuration": { + "message": "Custom Resource Configuration", + "description": "The label for category Custom Resource Configuration in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Monitoring and Alerting": { + "message": "Monitoring and Alerting", + "description": "The label for category Monitoring and Alerting in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.FAQ": { + "message": "FAQ", + "description": "The label for category FAQ in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Troubleshooting": { + "message": "Troubleshooting", + "description": "The label for category Troubleshooting in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Kubernetes Components": { + "message": "Kubernetes Components", + "description": "The label for category Kubernetes Components in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Other Troubleshooting Tips": { + "message": "Other Troubleshooting Tips", + "description": "The label for category Other Troubleshooting Tips in sidebar tutorialSidebar" + } +} diff --git a/i18n/zh/docusaurus-theme-classic/footer.json b/i18n/zh/docusaurus-theme-classic/footer.json new file mode 100644 index 00000000000..0d890f0b09e --- /dev/null +++ b/i18n/zh/docusaurus-theme-classic/footer.json @@ -0,0 +1,6 @@ +{ + "copyright": { + "message": "Copyright © 2022 SUSE Rancher. All Rights Reserved.", + "description": "The footer copyright" + } +} diff --git a/i18n/zh/docusaurus-theme-classic/navbar.json b/i18n/zh/docusaurus-theme-classic/navbar.json new file mode 100644 index 00000000000..fdfb4530e71 --- /dev/null +++ b/i18n/zh/docusaurus-theme-classic/navbar.json @@ -0,0 +1,10 @@ +{ + "item.label.Docs": { + "message": "文档", + "description": "Navbar item with label Docs" + }, + "item.label.GitHub": { + "message": "GitHub", + "description": "Navbar item with label GitHub" + } +} From 45914de3a442e5f2aff4c102d0e6f979ab5807e2 Mon Sep 17 00:00:00 2001 From: vickyhella Date: Tue, 13 Sep 2022 18:20:09 +0800 Subject: [PATCH 2/2] Change versioning links to absolute for CN docs --- .../enable-experimental-features/rancher-on-arm64.md | 2 +- .../air-gapped-upgrades.md | 2 +- .../install-upgrade-on-a-kubernetes-cluster/rollbacks.md | 4 ++-- .../install-upgrade-on-a-kubernetes-cluster/upgrades.md | 4 ++-- .../upgrade-docker-installed-rancher.md | 2 +- .../resources/helm-version-requirements.md | 2 +- .../current/pages-for-subheaders/gke-cluster-configuration.md | 2 +- .../reference-guides/pipelines/pipeline-configuration.md | 2 +- 8 files changed, 10 insertions(+), 10 deletions(-) diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/advanced-options/enable-experimental-features/rancher-on-arm64.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/advanced-options/enable-experimental-features/rancher-on-arm64.md index 0096c84b12c..3ea25743ae8 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/advanced-options/enable-experimental-features/rancher-on-arm64.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/advanced-options/enable-experimental-features/rancher-on-arm64.md @@ -12,7 +12,7 @@ weight: 3 如果你的节点使用 ARM64 架构,你可以使用以下选项: - 在 ARM64 架构的节点上运行 Rancher - - 此选项仅适用于 Docker 安装。请知悉,以下安装命令取代了 [Docker 安装](../../../../../versioned_docs/version-2.0-2.4/pages-for-subheaders/rancher-on-a-single-node-with-docker.md)链接中的示例: + - 此选项仅适用于 Docker 安装。请知悉,以下安装命令取代了 [Docker 安装](/versioned_docs/version-2.0-2.4/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`。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/air-gapped-upgrades.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/air-gapped-upgrades.md index 683570efe8a..cda68934edf 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/air-gapped-upgrades.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/air-gapped-upgrades.md @@ -82,7 +82,7 @@ kubectl -n cattle-system apply -R -f ./rancher 升级后出现网络问题 -请参见[恢复集群网络](../../../../versioned_docs/version-2.0-2.4/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/upgrades/namespace-migration.md)。 +请参见[恢复集群网络](/versioned_docs/version-2.0-2.4/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/upgrades/namespace-migration.md)。 ::: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/rollbacks.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/rollbacks.md index 771fa67e711..a758a474dc8 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/rollbacks.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/rollbacks.md @@ -101,7 +101,7 @@ 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 的版本以及状态均会恢复回到快照时的版本和状态。 +要回滚到 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)。 @@ -113,4 +113,4 @@ helm rollback rancher 3 -n cattle-system ## 回滚到 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 的情况。 +我们不再支持回滚到 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/current/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/upgrades.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/upgrades.md index 6a36ce1eea9..a59b995fc69 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/upgrades.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/upgrades.md @@ -29,7 +29,7 @@ kubeconfig 也可以通过 `--kubeconfig` 标签(详情请参见 https://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 升级的旧升级指南。 +如果你使用 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 升级的旧升级指南。 ### 离线安装:推送镜像到私有镜像仓库 @@ -172,7 +172,7 @@ helm upgrade rancher rancher-/rancher \ 升级后出现网络问题 -请参见[恢复集群网络](../../../../versioned_docs/version-2.0-2.4/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/upgrades/namespace-migration.md)。 +请参见[恢复集群网络](/versioned_docs/version-2.0-2.4/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/upgrades/namespace-migration.md)。 ::: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/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/current/getting-started/installation-and-upgrade/other-installation-methods/rancher-on-a-single-node-with-docker/upgrade-docker-installed-rancher.md index bc25b33f336..5528dc7afb2 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/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/current/getting-started/installation-and-upgrade/other-installation-methods/rancher-on-a-single-node-with-docker/upgrade-docker-installed-rancher.md @@ -384,7 +384,7 @@ docker run -d --volumes-from rancher-data \ :::note 升级后下游集群出现网络问题? -请参见[恢复集群网络](../../../../../versioned_docs/version-2.0-2.4/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/upgrades/namespace-migration.md)。 +请参见[恢复集群网络](/versioned_docs/version-2.0-2.4/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/upgrades/namespace-migration.md)。 ::: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/resources/helm-version-requirements.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/resources/helm-version-requirements.md index 2df7f9d42ba..c3a07d14aad 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/resources/helm-version-requirements.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation-and-upgrade/resources/helm-version-requirements.md @@ -5,7 +5,7 @@ weight: 3 本文介绍 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,可以使用这个说明安装。 +> 我们已针对 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 版本。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/gke-cluster-configuration.md b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/gke-cluster-configuration.md index 5853b741cd2..0c2a9cb12dd 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/gke-cluster-configuration.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/pages-for-subheaders/gke-cluster-configuration.md @@ -202,7 +202,7 @@ _可变:是_ :::note -默认选项是 “Container-Optimized OS with Docker”。GCP Container-Optimized OS 上的只读文件系统与 Rancher 中的 [legacy logging](../../versioned_docs/version-2.0-2.4/pages-for-subheaders/cluster-logging.md) 实现不兼容。如果你需要使用旧版日志管理功能,请选择 “Ubuntu with Docker” 或 “Ubuntu with Containerd”。[current logging feature](logging.md) 与 Container-Optimized OS 镜像兼容。 +默认选项是 “Container-Optimized OS with Docker”。GCP Container-Optimized OS 上的只读文件系统与 Rancher 中的 [legacy logging](/versioned_docs/version-2.0-2.4/pages-for-subheaders/cluster-logging.md) 实现不兼容。如果你需要使用旧版日志管理功能,请选择 “Ubuntu with Docker” 或 “Ubuntu with Containerd”。[current logging feature](logging.md) 与 Container-Optimized OS 镜像兼容。 ::: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/pipelines/pipeline-configuration.md b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/pipelines/pipeline-configuration.md index 1d6da18a33e..b8f5388e9a8 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/pipelines/pipeline-configuration.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/reference-guides/pipelines/pipeline-configuration.md @@ -291,7 +291,7 @@ timeout: 30 1. 选择通知的条件。你可以选择接收以下状态的通知:`失败`、`成功`或`已更改`。例如,如果你想在执行失败时接收通知,请选择**失败**。 -1. 如果你没有现有的通知器,Rancher 会提示未设置通知器的警告,并显示跳转到通知器页面的链接。你可以按照[说明](../../../versioned_docs/version-2.0-2.4/explanations/integrations-in-rancher/notifiers.md)添加通知器。如果你已经有通知器,你可以单击**添加收件人**按钮,将他们添加到通知中。 +1. 如果你没有现有的通知器,Rancher 会提示未设置通知器的警告,并显示跳转到通知器页面的链接。你可以按照[说明](/versioned_docs/version-2.0-2.4/explanations/integrations-in-rancher/notifiers.md)添加通知器。如果你已经有通知器,你可以单击**添加收件人**按钮,将他们添加到通知中。 :::note