华为云用户手册

  • 使用须知 UCS的权限管理功能与当前联邦RBAC授权互不影响。使用UCS API时,前者生效;使用KubeConfig直接操作联邦时,后者生效。 在集群联邦和成员集群上分别创建的RBAC资源互相不感知、不影响。通过集群联邦入口配置的RBAC权限仅直接访问联邦时生效;直接访问成员集群时,仅成员集群上配置的RBAC生效。 在分配细粒度鉴权时,谨慎使用ClusterRole、ClusterRoleBinding等相关权限和角色配置,避免将资源查看权限赋予“Karmada-”为前缀的命名空间;建议使用Role、RoleBinding对指定用户命名空间的资源赋予权限。
  • 策略中心概述 随着公司不断增加开发和生产集群的数量,确保在日益扩大的环境中创建和执行一致的配置和安全策略变得越来越具挑战性,这可能会阻碍运维效率。为了解决这个问题,华为云UCS推出了基于OPA(Open Policy Agent)的Gatekeeper实现的策略中心功能。这一功能可以帮助您在多个集群中定义和执行一致的策略,统一资源的合规性状态。 通过策略中心,您可以创建、管理和监控跨多个集群(容器舰队)的策略实施情况。这样,您可以确保所有集群都遵循相同的安全和合规要求,从而提高运维效率。这种集中式策略管理能力使您能够更容易地应对复杂的企业环境,同时确保所有资源在任何时候都处于合规状态。华为云UCS策略中心将帮助您实现更高的运维效率和更强的安全性。 UCS策略中心的主要优势包括: 一致的策略管理 以集中、一致的方式将一组安全合规策略应用到多个容器舰队、集群中。 确保资源安全性 持续审计资源,以确保资源满足安全合规要求并且不出现违反策略的行为。 全局资源合规性视图 涵盖所有资源的全面合规性视图,大规模保护和管理集群资源。 父主题: 策略中心
  • 不符合策略实例的资源定义 示例中hostNetwork设置成了true,但是端口未在指定范围内,不符合策略实例。 apiVersion: v1 kind: Pod metadata: name: nginx-host-networking-ports-disallowed labels: app: nginx-host-networking-ports spec: hostNetwork: true containers: - name: nginx image: nginx ports: - containerPort: 9001 hostPort: 9001
  • 策略实例示例 以下策略实例展示了策略定义生效的资源类型,parameters中hostNetwork为true时,使用的端口必须在指定的端口范围内。 apiVersion: constraints.gatekeeper.sh/v1beta1 kind: K8sPSPHostNetworkingPorts metadata: name: psp-host-network-ports spec: match: kinds: - apiGroups: [""] kinds: ["Pod"] parameters: hostNetwork: bool min: 80 max: 9000
  • 符合策略实例的资源定义 示例中hostNetwork设置成了false,符合策略实例。 apiVersion: v1 kind: Pod metadata: name: nginx-host-networking-ports-allowed labels: app: nginx-host-networking-ports spec: hostNetwork: false containers: - name: nginx image: nginx ports: - containerPort: 9000 hostPort: 80
  • 相关操作 通过UCS控制台,您还可以执行表2中的操作。 表2 相关操作 操作 说明 YAML创建 单击右上角“YAML创建”,可使用已有的YAML创建配置项。 查看详情 单击配置项名称即可查看配置项数据详情。 编辑YAML 单击配置项名称后的“编辑YAML”,可查看并编辑当前配置项的YAML文件。 更新 单击配置项名称后的“更新”。 根据表1更改信息。 单击“确认”提交已修改的信息。 删除 单击配置项名称后的“删除”,并单击“是”进行确认。 批量删除 勾选需要删除的配置项。 单击左上角的“批量删除”。 单击“是”进行确认。
  • 创建配置项 登录UCS控制台,在左侧导航栏中选择“容器舰队”。 在“容器舰队”页签下找到已开通集群联邦的舰队,单击名称进入详情页。 在左侧导航栏中选择“配置项与密钥”,切换至“配置项”页签。 选择需要创建配置项的命名空间,并单击右上角“创建配置项”。 参照表1设置新增配置参数。 表1 新建配置参数说明 参数 参数说明 名称 新建的配置项名称,同一个命名空间里命名必须唯一。 命名空间 新建配置项所在的命名空间,默认为当前查看的命名空间。 描述 配置项的描述信息。 配置项数据 工作负载配置的数据可以在容器中使用,或被用来存储配置数据。 单击 ,输入键、值。其中,“键”代表配置名;“值”代表配置内容。 配置标签 标签以Key/value键值对的形式附加到各种对象上(如工作负载、节点、服务等)。 标签定义了这些对象的可识别属性,用来对它们进行管理和选择。 输入标签键、值。 单击“添加” 。 配置完成后,单击“确定”。
  • 策略实例示例 以下策略实例展示了策略定义生效的资源类型。 apiVersion: constraints.gatekeeper.sh/v1beta1 kind: K8sImageDigests metadata: name: container-image-must-have-digest spec: match: kinds: - apiGroups: [""] kinds: ["Pod"] namespaces: - "default"
  • 符合策略实例的资源定义 容器镜像包含digest,符合策略实例。 apiVersion: v1 kind: Pod metadata: name: opa-allowed spec: containers: - name: opa image: openpolicyagent/opa:0.9.2@sha256:04ff8fce2afd1a3bc26260348e5b290e8d945b1fad4b4c16d22834c2f3a1814a
  • k8clone备份使用方法 k8clone工具支持在Linux(x86、arm)和Windows环境中运行,使用方法相似。本文将以Linux(x86)环境为例进行介绍。 若使用Linux(arm)或Windows环境,请将下述命令中的k8clone-linux-amd64分别替换为k8clone-linux-arm64或k8clone-windows-amd64.exe。 在k8clone工具所在目录下执行./k8clone-linux-amd64 backup -h,可以查看k8clone工具备份的使用方法。 -k, --kubeconfig:指定kubectl的KubeConfig位置,默认是$HOME/.kube/config。kubeConfig文件:用于配置对Kubernetes集群的访问,KubeConfig文件中包含访问注册kubernetes集群所需要的认证凭据以及Endpoint(访问地址),详细介绍可参见Kubernetes文档。 -s, --api-server:Kubernetes API Server URL,默认是""。 -q, --context:Kubernetes Configuration Context,默认是""。 -n, --namespace:备份指定命名空间的云原生应用,多个命名空间用逗号分隔(如:ns1,ns2,ns3),默认是"",表示备份整个集群。 -e, --exclude-namespaces:排除指定命名空间对象的备份,不能和--namespace一起使用。 -x, --exclude-kind:排除指定资源类型的备份。 -y, --exclude-object:排除指定资源对象的备份。 -w, --exclude-having-owner-ref:排除拥有ownerReferences资源对象的备份,默认是false。 -d, --local-dir:备份数据放置的路径,默认是当前目录下k8clone-dump文件夹。 $ ./k8clone-linux-amd64 backup -h Backup Workload Data as yaml files Usage: k8clone backup [flags] Flags: -s, --api-server string Kubernetes api-server url -q, --context string Kubernetes configuration context -w, --exclude-having-owner-ref Exclude all objects having an Owner Reference -x, --exclude-kind strings Ressource kind to exclude. Eg. 'deployment' -e, --exclude-namespaces strings Namespaces to exclude. Eg. 'temp.*' as regexes. This collects all namespaces and then filters them. Don't use it with the namespace flag. -y, --exclude-object strings Object to exclude. Eg. 'configmap:kube-system/kube-dns' -h, --help help for backup -k, --kubeconfig string The kubeconfig of k8s cluster's. Default is the $HOME/.kube/config. -d, --local-dir string Where to dump yaml files (default "./k8clone-dump") -n, --namespace string Only dump objects from this namespace 示例如下: 整个集群对象的备份,默认路径为当前目录下“k8clone-dump”文件夹 ./k8clone-linux-amd64 backup 整个集群对象的备份,并指定备份数据路径 ./k8clone-linux-amd64 backup -d ./xxxx 指定命名空间对象的备份 ./k8clone-linux-amd64 backup -n default 排除命名空间对象的备份 ./k8clone-linux-amd64 backup -e kube-system,kube-public,kube-node-lease 排除指定资源类型的备份 ./k8clone-linux-amd64 backup -x endpoints,endpointslice 排除指定资源对象的备份 ./k8clone-linux-amd64 backup -y configmap:kube-system/kube-dns 排除拥有ownerReferences资源对象的备份 ./k8clone-linux-amd64 backup -w true
  • 策略实例示例 以下策略实例展示了策略定义生效的资源类型,pararmeters中表示不允许容器镜像tag为latest。 apiVersion: constraints.gatekeeper.sh/v1beta1 kind: K8sDisallowedTags metadata: name: container-image-must-not-have-latest-tag spec: match: kinds: - apiGroups: [""] kinds: ["Pod"] namespaces: - "default" parameters: tags: ["latest"] exemptImages: ["openpolicyagent/opa-exp:latest", "openpolicyagent/opa-exp2:latest"]
  • 符合策略实例的资源定义 容器镜像tag不为latest,符合策略实例。 apiVersion: v1 kind: Pod metadata: name: opa-allowed spec: containers: - name: opa image: openpolicyagent/opa:0.9.2 args: - "run" - "--server" - "--addr=localhost:8080"
  • 不符合策略实例的资源定义 容器镜像tag为latest,不符合策略实例。 apiVersion: v1 kind: Pod metadata: name: opa-disallowed-2 spec: containers: - name: opa image: openpolicyagent/opa:latest args: - "run" - "--server" - "--addr=localhost:8080"
  • 安装插件 进入UCS内的集群控制台。 如果是未加入舰队集群,直接单击集群名即可进入集群控制台。 如果是已加入容器舰队的集群,先进入对应容器舰队控制台,选择左侧 “集群管理”内的“容器集群”,再进入对应集群控制台。 左侧导航栏内选择“插件管理”,在“可安装插件”中单击metrics-server的安装按钮。 在“安装插件”页面进行规格配置,该插件可配置“单实例”、“高可用”和“自定义”三种规格,选择后单击“安装”。 在本地集群中,metrics-server插件的最大实例数依赖manage节点数量,如果想要使用“自定义”规格创建更多的metrics-server实例,请先对manage节点进行扩容。 manage节点在本地集群内使用tag和taint进行管理,因此对manage节点进行扩容只需要为集群内非manage节点打上标签和污点即可,具体步骤如下: 进入UCS集群控制台,单击左侧导航栏内的“节点管理”。 选中待转的非manage节点并单击“标签与污点管理”。 单击新增批量操作,新增一条更新内容:“添加/更新”-“K8S标签”-“cop.manage”-“manage”。 单击新增批量操作,新增一条更新内容:“添加/更新”-“污点(Taints)”-“role”-“manage”-“NoSchedule”。 完成上述两条后,单击确定即可完成manage节点的扩容。 插件安装完成后,在已安装插件内单击metrics-server插件,可以看到具体的插件实例在集群内的部署情况。
  • 升级插件 登录UCS内的集群控制台,在左侧导航栏里选择“插件管理”。 在“已安装插件”内,如果版本标签旁边显示“存在新版请升级”提示,那就可用单击metrics-server下的升级按钮对插件进行升级。 如果升级按钮处于冻结状态,则说明当前插件版本是最新的版本,不需要进行升级操作。 升级“metrics-server”插件时,会替换原先节点上的旧版本的“metrics-server”插件,安装最新版本的“metrics-server”插件以实现功能的快速升级。 参考安装插件内的参数说明配置参数后,单击“升级”即可升级metrics-server插件。
  • 相关操作 通过UCS控制台,您还可以执行表2中的操作。 表2 相关操作 操作 说明 YAML创建 单击右上角“YAML创建”,可使用已有的YAML创建工作负载。 查看工作负载详情 单击已创建工作负载的名称,在“实例列表”页签下,可以查看Pod相关详情信息。 事件:可以设置查询条件,比如设置事件产生的时间段或搜索事件名称,查看相关事件。 容器列表:可以查看相应实例的容器名称、状态、镜像以及启停次数等。 查看YAML:可以查看相应实例的YAML文件。 编辑YAML 单击工作负载名称后的“编辑YAML”,可查看并编辑当前工作负载的YAML文件。 升级 单击工作负载名称后的“升级”。 更改工作负载信息,操作步骤与创建工作负载时一致。 单击“提交”,升级工作负载。 删除 单击工作负载名称后的“删除”,并单击“是”进行确认。 批量删除 勾选需要删除的工作负载。 单击左上角的“批量删除”。 单击“是”进行确认。
  • 策略实例示例 以下策略实例展示了策略定义生效的资源类型。 apiVersion: constraints.gatekeeper.sh/v1beta1 kind: K8sPSPReadOnlyRootFilesystem metadata: name: psp-readonlyrootfilesystem spec: match: kinds: - apiGroups: [""] kinds: ["Pod"]
  • 符合策略实例的资源定义 示例中readOnlyRootFilesystem字段为true,符合策略实例。 apiVersion: v1 kind: Pod metadata: name: nginx-readonlyrootfilesystem-allowed labels: app: nginx-readonlyrootfilesystem spec: containers: - name: nginx image: nginx securityContext: readOnlyRootFilesystem: true
  • 不符合策略实例的资源定义 示例中readOnlyRootFilesystem字段为false,不符合策略实例。 apiVersion: v1 kind: Pod metadata: name: nginx-readonlyrootfilesystem-disallowed labels: app: nginx-readonlyrootfilesystem spec: containers: - name: nginx image: nginx securityContext: readOnlyRootFilesystem: false
  • 策略实例示例 以下策略实例展示了策略定义生效的资源类型,parameters中指定了提示信息message以及label的约束定义。 apiVersion: constraints.gatekeeper.sh/v1beta1 kind: K8sRequiredLabels metadata: name: all-must-have-owner spec: match: kinds: - apiGroups: [""] kinds: ["Namespace"] parameters: message: "All namespaces must have an `owner` label that points to your company username" labels: - key: owner allowedRegex: "^[a-zA-Z]+.agilebank.demo$"
  • 基本信息 策略类型:合规 推荐级别:L1 生效资源类型:* 参数: labels: 键值对数组,key/ allowedRegex key: a8r.io/owner # Matches email address or github user allowedRegex: ^([A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}|[a-z]{1,39})$
  • 符合策略实例的资源定义 Pod的automountServiceAccountToken字段设为false,符合策略实例。 apiVersion: v1 kind: Pod metadata: name: nginx-automountserviceaccounttoken-allowed labels: app: nginx-not-automountserviceaccounttoken spec: automountServiceAccountToken: false containers: - name: nginx image: nginx
  • 不符合策略实例的资源定义 Pod的automountServiceAccountToken字段设为true,不符合策略实例。 apiVersion: v1 kind: Pod metadata: name: nginx-automountserviceaccounttoken-disallowed labels: app: nginx-automountserviceaccounttoken spec: automountServiceAccountToken: true containers: - name: nginx image: nginx
  • 策略实例示例 示例声明了match匹配的对象不能把automountServiceAccountToken字段设为true。 apiVersion: constraints.gatekeeper.sh/v1beta1 kind: K8sPSPAutomountServiceAccountTokenPod metadata: name: psp-automount-serviceaccount-token-pod spec: match: kinds: - apiGroups: [""] kinds: ["Pod"] excludedNamespaces: ["kube-system"]
  • 不符合策略实例的资源定义 示例中ClusterRole的生效对象中有endpoints,不符合策略实例。 kind: ClusterRole metadata: annotations: rbac.authorization.kubernetes.io/autoupdate: "true" creationTimestamp: null labels: kubernetes.io/bootstrapping: rbac-defaults rbac.authorization.k8s.io/aggregate-to-edit: "true" name: system:aggregate-to-edit rules: - apiGroups: - apps resources: - endpoints verbs: - create - delete - deletecollection - patch - update
  • 符合策略实例的资源定义 示例中ClusterRole的生效对象中没有endpoints,符合策略实例。 apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: annotations: rbac.authorization.kubernetes.io/autoupdate: "true" creationTimestamp: null labels: kubernetes.io/bootstrapping: rbac-defaults rbac.authorization.k8s.io/aggregate-to-edit: "true" name: system:aggregate-to-edit rules: - apiGroups: - "" resources: - pods/attach - pods/exec - secrets - services/proxy verbs: - get - list - watch
  • 策略实例示例 以下策略实例展示了策略定义生效的资源类型。 apiVersion: constraints.gatekeeper.sh/v1beta1 kind: K8sBlockEndpointEditDefaultRole metadata: name: block-endpoint-edit-default-role spec: match: kinds: - apiGroups: ["rbac.authorization.k8s.io"] kinds: ["ClusterRole"]
  • 本地资源清理 该操作可能导致与该集群有绑定关系的资源(比如指定调度集群的负载等)无法正常使用,请谨慎操作,避免对运行中的业务造成影响。 在控制台注销并没有真正删除本地集群,您需要手动进入集群内完成删除过程。 复制卸载之后控制台返回的卸载命令。 进入本地集群中的节点内,执行卸载命令。 ./ucs-ctl delete cluster cluster_name cluster_name取决于集群具体的名字。
  • 在控制台注销本地集群 仅在控制台进行注销操作,不会删除集群。 进入 UCS 界面,左侧导航栏选择“容器舰队”。 找到待删除的本地集群: 已加入容器舰队的本地集群,先进入对应的容器舰队控制台,然后再左侧导航栏选择容器集群。 未加入容器舰队的本地集群,单击容器舰队列表最上面的“未加入舰队的集群”即可。 单击本地集群右上角红色的注销按钮,会弹出注销确认框。 确认待注销的集群名称等信息,并勾选“我已阅读并知晓上述信息”,单击“确定”即可在控制台注销本地集群。
  • 流水线发布流程 图1 流水线发布流程 流水线发布的流程如图1所示,具体步骤如下: 配置项目与扩展点。在该小节,您将会为应用开通新的流水线项目,并为该项目配置跨服务权限。 新建发布环境。在该小节,您将会为应用建立新的代码仓库,并配置环境信息以及关联的UCS集群舰队信息。 配置发布策略。在该小节,您将会根据预置的发布模板,配置应用的发布策略。 配置流水线及参数。在该小节,您将会对发布流程进行图形化编排,通过发布插件选择环境级别、发布环境以及产物地址。 发布舰队应用。在该小节,您将会通过流水线,结合上述步骤的调测、编排,实现从源码构建到舰队应用发布全流程的自动化体验。
共100000条