关于后端:K8s源代码解读plugin

53次阅读

共计 26608 个字符,预计需要花费 67 分钟才能阅读完成。

在 Kubernetes(K8s)我的项目中,plugin 目录用于寄存插件相干的代码和配置。插件是用来扩大和自定义 Kubernetes 的外围性能的组件。它们能够增加新的资源类型、调度策略、网络性能、存储后端以及其余的扩大能力。

如下是 plugin 目录中常见的一些子目录和它们的作用:

  1. pkg: 这个目录通常蕴含了插件的外围代码,例如一些共享的库、工具函数和类型定义等。插件的实现能够应用这些代码来与 Kubernetes 零碎进行交互。
  1. cmd: 该目录蕴含了插件的可执行文件,用于启动和治理插件的过程。每个插件通常有一个独立的命令行工具,用于配置和治理插件的运行。
  1. apis: 该目录用于定义插件的自定义 API 资源类型。插件能够通过自定义资源定义(Custom Resource Definitions, CRDs)增加新的 API 对象,以扩大 Kubernetes 的 API。
  1. admission: 在该目录下,能够实现插件的准入管制(Admission Control)。准入管制是一种机制,用于对 Kubernetes API 申请进行筛选和批改。插件能够应用准入管制来验证、修改或回绝 API 申请。
  1. scheduler: 该目录蕴含了插件的调度器相干代码。调度器是负责决定将容器化工作负载调配到哪个节点上的组件。通过实现自定义的调度器插件,能够实现特定的调度策略,如亲和性调度、互斥性调度等。
  1. network: 在这个目录下,能够实现插件的网络性能,例如 CNI(Container Network Interface)插件。CNI 插件用于配置容器网络,使得容器能够在 Kubernetes 集群中进行网络通信。
  1. storage: 该目录用于寄存与存储相干的插件。存储插件能够实现不同的存储后端,以供容器应用,例如本地存储、分布式文件系统、云存储等。
  1. volume: 在这个目录下,能够实现插件的卷存储(Volume)性能。卷存储插件用于将长久化数据附加到容器,并将其作为文件系统提供给容器。

plugin 残缺目录构造为:

.
├── OWNERS
└── pkg
    ├── admission
    │   ├── OWNERS
    │   ├── admit
    │   │   ├── admission.go
    │   │   └── admission_test.go
    │   ├── alwayspullimages
    │   │   ├── admission.go
    │   │   └── admission_test.go
    │   ├── antiaffinity
    │   │   ├── admission.go
    │   │   ├── admission_test.go
    │   │   └── doc.go
    │   ├── certificates
    │   │   ├── OWNERS
    │   │   ├── approval
    │   │   │   ├── admission.go
    │   │   │   └── admission_test.go
    │   │   ├── ctbattest
    │   │   │   ├── admission.go
    │   │   │   └── admission_test.go
    │   │   ├── signing
    │   │   │   ├── admission.go
    │   │   │   └── admission_test.go
    │   │   ├── subjectrestriction
    │   │   │   ├── admission.go
    │   │   │   └── admission_test.go
    │   │   └── util.go
    │   ├── defaulttolerationseconds
    │   │   ├── admission.go
    │   │   └── admission_test.go
    │   ├── deny
    │   │   ├── admission.go
    │   │   └── admission_test.go
    │   ├── eventratelimit
    │   │   ├── admission.go
    │   │   ├── admission_test.go
    │   │   ├── apis
    │   │   │   └── eventratelimit
    │   │   │       ├── OWNERS
    │   │   │       ├── doc.go
    │   │   │       ├── install
    │   │   │       │   └── install.go
    │   │   │       ├── register.go
    │   │   │       ├── types.go
    │   │   │       ├── v1alpha1
    │   │   │       │   ├── defaults.go
    │   │   │       │   ├── doc.go
    │   │   │       │   ├── register.go
    │   │   │       │   ├── types.go
    │   │   │       │   ├── zz_generated.conversion.go
    │   │   │       │   ├── zz_generated.deepcopy.go
    │   │   │       │   └── zz_generated.defaults.go
    │   │   │       ├── validation
    │   │   │       │   ├── validation.go
    │   │   │       │   └── validation_test.go
    │   │   │       └── zz_generated.deepcopy.go
    │   │   ├── cache.go
    │   │   ├── cache_test.go
    │   │   ├── config.go
    │   │   ├── doc.go
    │   │   └── limitenforcer.go
    │   ├── extendedresourcetoleration
    │   │   ├── admission.go
    │   │   └── admission_test.go
    │   ├── gc
    │   │   ├── gc_admission.go
    │   │   └── gc_admission_test.go
    │   ├── imagepolicy
    │   │   ├── OWNERS
    │   │   ├── admission.go
    │   │   ├── admission_test.go
    │   │   ├── certs_test.go
    │   │   ├── config.go
    │   │   ├── config_test.go
    │   │   ├── doc.go
    │   │   └── gencerts.sh
    │   ├── limitranger
    │   │   ├── admission.go
    │   │   ├── admission_test.go
    │   │   └── interfaces.go
    │   ├── namespace
    │   │   ├── autoprovision
    │   │   │   ├── admission.go
    │   │   │   └── admission_test.go
    │   │   └── exists
    │   │       ├── admission.go
    │   │       └── admission_test.go
    │   ├── network
    │   │   ├── defaultingressclass
    │   │   │   ├── admission.go
    │   │   │   └── admission_test.go
    │   │   └── denyserviceexternalips
    │   │       ├── admission.go
    │   │       └── admission_test.go
    │   ├── noderestriction
    │   │   ├── OWNERS
    │   │   ├── admission.go
    │   │   └── admission_test.go
    │   ├── nodetaint
    │   │   ├── admission.go
    │   │   └── admission_test.go
    │   ├── podnodeselector
    │   │   ├── admission.go
    │   │   └── admission_test.go
    │   ├── podtolerationrestriction
    │   │   ├── admission.go
    │   │   ├── admission_test.go
    │   │   ├── apis
    │   │   │   └── podtolerationrestriction
    │   │   │       ├── OWNERS
    │   │   │       ├── doc.go
    │   │   │       ├── install
    │   │   │       │   └── install.go
    │   │   │       ├── register.go
    │   │   │       ├── types.go
    │   │   │       ├── v1alpha1
    │   │   │       │   ├── defaults.go
    │   │   │       │   ├── doc.go
    │   │   │       │   ├── register.go
    │   │   │       │   ├── types.go
    │   │   │       │   ├── zz_generated.conversion.go
    │   │   │       │   ├── zz_generated.deepcopy.go
    │   │   │       │   └── zz_generated.defaults.go
    │   │   │       ├── validation
    │   │   │       │   ├── validation.go
    │   │   │       │   └── validation_test.go
    │   │   │       └── zz_generated.deepcopy.go
    │   │   ├── config.go
    │   │   └── doc.go
    │   ├── priority
    │   │   ├── admission.go
    │   │   └── admission_test.go
    │   ├── resourcequota
    │   │   └── admission_test.go
    │   ├── runtimeclass
    │   │   ├── OWNERS
    │   │   ├── admission.go
    │   │   └── admission_test.go
    │   ├── security
    │   │   ├── doc.go
    │   │   └── podsecurity
    │   │       ├── admission.go
    │   │       ├── admission_test.go
    │   │       └── testdata
    │   │           ├── pod_baseline.yaml
    │   │           └── pod_restricted.yaml
    │   ├── securitycontext
    │   │   └── scdeny
    │   │       ├── admission.go
    │   │       └── admission_test.go
    │   ├── serviceaccount
    │   │   ├── OWNERS
    │   │   ├── admission.go
    │   │   ├── admission_test.go
    │   │   └── doc.go
    │   └── storage
    │       ├── persistentvolume
    │       │   ├── label
    │       │   │   ├── OWNERS
    │       │   │   ├── admission.go
    │       │   │   ├── admission_test.go
    │       │   │   └── doc.go
    │       │   └── resize
    │       │       ├── admission.go
    │       │       └── admission_test.go
    │       ├── storageclass
    │       │   └── setdefault
    │       │       ├── admission.go
    │       │       └── admission_test.go
    │       └── storageobjectinuseprotection
    │           ├── admission.go
    │           └── admission_test.go
    └── auth
        ├── OWNERS
        ├── authenticator
        │   ├── OWNERS
        │   └── token
        │       └── bootstrap
        │           ├── bootstrap.go
        │           └── bootstrap_test.go
        ├── authorizer
        │   ├── OWNERS
        │   ├── doc.go
        │   ├── node
        │   │   ├── OWNERS
        │   │   ├── graph.go
        │   │   ├── graph_populator.go
        │   │   ├── graph_test.go
        │   │   ├── intset.go
        │   │   ├── intset_test.go
        │   │   ├── metrics.go
        │   │   ├── node_authorizer.go
        │   │   └── node_authorizer_test.go
        │   └── rbac
        │       ├── bootstrappolicy
        │       │   ├── controller_policy.go
        │       │   ├── controller_policy_test.go
        │       │   ├── namespace_policy.go
        │       │   ├── policy.go
        │       │   ├── policy_test.go
        │       │   └── testdata
        │       │       ├── cluster-role-bindings.yaml
        │       │       ├── cluster-roles.yaml
        │       │       ├── controller-role-bindings.yaml
        │       │       ├── controller-roles.yaml
        │       │       ├── namespace-role-bindings.yaml
        │       │       └── namespace-roles.yaml
        │       ├── rbac.go
        │       ├── rbac_test.go
        │       ├── subject_locator.go
        │       └── subject_locator_test.go
        └── doc.go

62 directories, 152 files

File: plugin/pkg/admission/storage/storageobjectinuseprotection/admission.go

在 Kubernetes 我的项目中,plugin/pkg/admission/storage/storageobjectinuseprotection/admission.go文件是一个控制器插件,用于爱护正在应用的存储对象。这个插件的次要性能是在删除长久卷(PersistentVolume)和长久卷申明(PersistentVolumeClaim)之前,查看是否有其余正在应用这些存储对象的资源。

接下来,一一介绍这些变量和函数的作用:

  1. _ 变量:在 Go 语言中,_被用作占位符,示意疏忽该变量。
  2. pvResource 变量:代表长久卷(PersistentVolume)的 Kubernetes 资源。
  3. pvcResource 变量:代表长久卷申明(PersistentVolumeClaim)的 Kubernetes 资源。

接下来是一些构造体的作用:

  1. storageProtectionPlugin 构造体:示意存储保护插件的实例构造,用于注册和调用相干的函数。
  2. Register 函数:用于将存储保护插件注册到 Kubernetes 的插件管理器中。
  3. newPlugin 函数:创立一个新的存储保护插件实例。
  4. Admit 函数:是存储保护插件的次要入口点,用于拦挡和解决申请。
  5. admitPV 函数:用于解决长久卷(PersistentVolume)的申请,进行存储保护的查看。
  6. admitPVC 函数:用于解决长久卷申明(PersistentVolumeClaim)的申请,进行存储保护的查看。

总而言之,plugin/pkg/admission/storage/storageobjectinuseprotection/admission.go文件中的这些变量和函数实现了一个存储保护插件,用于拦挡、检查和解决长久卷和长久卷申明的申请,以爱护正在应用的存储对象不被意外删除。

File: plugin/pkg/auth/doc.go

在 Kubernetes 我的项目中,plugin/pkg/auth/doc.go文件的作用是提供身份验证相干的文档和阐明,以帮忙开发人员更好地了解和应用身份验证插件。

具体来说,该文件是一个 Go 语言源代码文件,应用了规范的 Godoc 格局。它蕴含了身份验证插件包中各个局部的文档正文,以及一些对该包整体性能和设计进行解释的文档。这些文档正文中形容了各个函数、办法和类型的作用、输出 / 输入参数、应用注意事项等详细信息。

这个文件的次要目标是作为我的项目的文档源,供开发人员参考和借鉴。它提供了对于身份验证插件包的整体概述,帮忙开发人员疾速理解该包的性能和设计思维。通过浏览该文件,开发人员能够更好地了解身份验证插件的应用办法,正确地调用各个函数和办法,并遵循最佳实际。

除了提供根本的函数和办法文档,doc.go文件还能够蕴含一些示例代码、应用阐明和注意事项,以进一步辅助开发人员应用身份验证插件。它能够蕴含一些高级的概念和设计准则的解释,帮忙开发人员把握更深刻的常识和技巧。

总结起来,plugin/pkg/auth/doc.go文件在 Kubernetes 我的项目中的作用是为身份验证插件包提供具体的文档和阐明,帮忙开发人员疾速了解和正确应用该包,以及把握身份验证插件的更高级个性和最佳实际。

File: plugin/pkg/admission/certificates/util.go

在 Kubernetes 我的项目中,plugin/pkg/admission/certificates/util.go 文件是一个证书工具文件,次要用于证书的验证和生成。

其中,IsAuthorizedForSignerName 函数用于查看给定的证书是否被受权应用指定的发行者名称(signer name)。它会验证证书的签名是否来自于受权的发行者,并返回一个布尔值示意验证后果。

buildAttributes 函数用于构建证书的属性,包含 Common Name、组织、国家 / 地区、省份等。它从给定的证书申请中提取信息,并构建一个具备规范格局的属性对象。

buildWildcardAttributes 函数用于构建一个带有通配符的证书属性。它接管一个根底域名,并通过将通配符(*) 增加到该域名的左侧,构建一个用于签发通配符证书的属性对象。

这些函数在 Kubernetes 中的证书治理和权限管制中起着重要的作用。通过验证证书的签名和构建正确的属性,能够确保证书的合法性和受权性。同时,通过构建通配符证书属性,能够不便地治理和签发带有通配符的证书,提供更灵便的证书治理能力。

File: plugin/pkg/admission/podtolerationrestriction/apis/podtolerationrestriction/install/install.go

在 Kubernetes 我的项目中,plugin/pkg/admission/podtolerationrestriction/apis/podtolerationrestriction/install/install.go文件的作用是为 Pod 容忍限度 (admission controller) 定义装置办法和资源。

具体解释每个函数的作用如下:

  1. Install函数:

    • Install函数负责将 Pod 容忍限度 (admission controller) 相干的自定义资源定义 (CRD) 增加到 Kubernetes 集群中。
    • 首先,它创立一个 apiextensionsv1.CustomResourceDefinition 对象,用于定义 Pod 容忍的限度规定自定义资源的构造。这个定义规定了资源名称、标准和版本等属性。
    • 而后,它通过 Kubernetes 的 API Server 将自定义资源定义对象创立到集群中。
    • 最初,它查看是否呈现谬误,如果有谬误则打印日志。
  2. Uninstall函数:

    • Uninstall函数用于从 Kubernetes 集群中删除 Pod 容忍限度 (admission controller) 相干的自定义资源定义。
    • 它首先通过 API Server 获取 CRD 的名称和 API 版本。
    • 而后,通过这些信息创立一个 apiextensionsv1.CustomResourceDefinition 对象,并将其删除。
    • 最初,它查看是否呈现谬误,如果有谬误则打印日志。
  3. InstallMutatingWebhook函数:

    • InstallMutatingWebhook函数用于装置 Pod 容忍限度 (admission controller) 的 Mutating Webhook。
    • 它首先定义了一个 Mutating Webhook 配置对象,并指定了 Webhook 服务器、门路、端口等属性。
    • 而后,它通过 Kubernetes 的 API Server 将 Mutating Webhook 配置对象创立到集群中。
    • 最初,它查看是否呈现谬误,如果有谬误则打印日志。
  4. UninstallMutatingWebhook函数:

    • UninstallMutatingWebhook函数用于卸载 Pod 容忍限度 (admission controller) 的 Mutating Webhook。
    • 它首先通过 API Server 获取 Webhook 的配置名称和 API 版本。
    • 而后,通过这些信息创立一个 Mutating Webhook 配置对象,并将其删除。
    • 最初,它查看是否呈现谬误,如果有谬误则打印日志。

这些函数提供了可重用的办法,用于装置和卸载 Pod 容忍限度 (admission controller) 的自定义资源定义和 Webhook 配置。它们为 Pod 容忍限度性能的部署、治理和保护提供了便当。

File: plugin/pkg/admission/podtolerationrestriction/apis/podtolerationrestriction/v1alpha1/register.go

在 Kubernetes 我的项目中,plugin/pkg/admission/podtolerationrestriction/apis/podtolerationrestriction/v1alpha1/register.go 文件的作用是对 Pod 的容忍性束缚进行注册。

该文件中的变量和函数起到了以下作用:

  1. SchemeGroupVersion:定义了 Pod 容忍性束缚 API 组和版本。
  2. SchemeBuilder:用于构建 Kubernetes 对象的 Scheme,它能够增加自定义的类型和默认的类型到 Scheme 中。
  3. localSchemeBuilder:本地的 Scheme 构建器,用于定义 Pod 容忍性束缚的类型。
  4. AddToScheme:将 Pod 容忍性束缚的类型增加到指定的 Scheme 中,以便能够在 Kubernetes 中应用这些类型。

上面是这些函数的具体解释:

  1. init:该函数是包级别的初始化函数,在引入包时主动调用。在这个文件中,它注册了 Pod 容忍性束缚的类型和版本。
  2. addKnownTypes:该函数用于增加 Pod 容忍性束缚的类型到指定的 Scheme 中。首先,它应用 localSchemeBuilder 创立一个新的 Scheme。而后,它将 Pod 容忍性束缚的类型和版本注册到该 Scheme 中。

此文件的次要指标是注册 Pod 容忍性束缚的自定义类型和版本,以便在 Kubernetes 中能够应用这些类型。这样,Kubernetes 能够在 Pod 创立和调度时应用这些容忍性束缚来束缚 Pod 的调度行为。

File: plugin/pkg/admission/podtolerationrestriction/apis/podtolerationrestriction/v1alpha1/types.go

在 Kubernetes 我的项目中,plugin/pkg/admission/podtolerationrestriction/apis/podtolerationrestriction/v1alpha1/types.go文件的作用是定义了 Pod Toleration Restriction 的 API 对象。

该文件中定义了以下三个构造体来示意 Pod Toleration Restriction 的配置:

  1. Configuration:该构造体示意 Pod Toleration Restriction 的整体配置对象,蕴含多个 Pod Toleration Restriction 的规定。
  2. PodTolerationRestriction:该构造体示意单个 Pod Toleration Restriction 的规定,包含禁止的 Toleration 键值对以及作用于哪些 Namespace。
  3. PodToleration:该构造体示意 Pod 的 Toleration 对象,用于指定 Pod 所容忍的非凡节点条件。

这些构造体的作用如下:

  1. Configuration构造体用于蕴含整个 Pod Toleration Restriction 的配置,能够定义多个 PodTolerationRestriction 规定。
  2. PodTolerationRestriction构造体用于定义单个 Pod Toleration Restriction 的规定,包含禁止的 Toleration 键值对以及作用于哪些 Namespace。它能够限度在指定的 Namespace 中哪些 Pod 容许或禁止应用特定的 Toleration。
  3. PodToleration构造体用于示意 Pod 的 Toleration,用于指定 Pod 所容忍的非凡节点条件。Toleration 容许 Pod 在调度时抉择是否容忍具备指定 Taints 的节点。

通过这些构造体,能够在 Kubernetes 中定义和配置 Pod Toleration Restriction 的规定,从而限度在特定的 Namespace 中哪些 Pod 能够应用特定的 Toleration,从而加强了对集群中 Pod 的调度和部署的控制能力。

File: plugin/pkg/admission/podtolerationrestriction/apis/podtolerationrestriction/v1alpha1/defaults.go

在 kubernetes 的我的项目中,plugin/pkg/admission/podtolerationrestriction/apis/podtolerationrestriction/v1alpha1/defaults.go 文件的作用是为 Pod Toleration Restriction API 的 v1alpha1 版本定义默认值。

该文件中的 addDefaultingFuncs 函数汇合定义了一系列的默认值设置函数,这些函数用来为 Pod Toleration Restriction API 对象的各个字段设置默认值。这些函数在对象创立时被调用,以确保对象的字段具备默认值。

以下是 addDefaultingFuncs 函数汇合中的几个函数以及它们的作用:

  1. addDefaultingFuncs:

    • 该函数将以下函数注册为 Pod Toleration Restriction API 对象的默认值设置函数。
  2. SetDefaults_PodTolerationRestrictionSpec:

    • 该函数用于为 PodTolerationRestrictionSpec 对象的字段设置默认值。
    • 它将为未设置的字段设置默认值,例如设置 Spec 字段的默认值。如果 Spec 字段为空,则会依据需要主动设置默认值。
  3. SetDefaults_PodTolerationRestriction:

    • 该函数用于为 PodTolerationRestriction 对象的字段设置默认值。
    • 它将为未设置的字段设置默认值,例如设置 TypeMeta 字段的默认值。

这些默认值设置函数的目标是确保在创立 Pod Toleration Restriction 对象时,所有字段都有适合的默认值。这样能够简化对象的创立,并缩小用户须要手动设置的字段数量,进步应用的方便性。

File: plugin/pkg/admission/podtolerationrestriction/apis/podtolerationrestriction/validation/validation.go

在 Kubernetes 我的项目中,plugin/pkg/admission/podtolerationrestriction/apis/podtolerationrestriction/validation/validation.go 文件的作用是验证 Pod 的容忍度限度配置是否无效和非法。该文件蕴含了用于验证的函数。

以下是 validation.go 文件中的 ValidateConfiguration 函数的作用:

  1. ValidateConfiguration 函数验证 Pod 的容忍度限度配置是否无效和非法。
  2. ValidateTolerationsForCreation 函数验证在创立 Pod 时的容忍度限度配置是否无效和非法。
  3. ValidateTolerationsForUpdate 函数验证在更新 Pod 时的容忍度限度配置是否无效和非法。
  4. ValidateTolerations 函数验证容忍度限度配置是否无效和非法。

这些函数的作用别离如下:

  1. ValidateConfiguration 函数执行残缺的配置验证,应用其余函数进行具体的验证,并返回任何有效配置的错误信息。
  2. ValidateTolerationsForCreation 函数验证在创立 Pod 时的容忍度限度配置是否无效和非法。它会查看容忍度配置是否满足一些必要的条件,并返回任何有效配置的错误信息。
  3. ValidateTolerationsForUpdate 函数验证在更新 Pod 时的容忍度限度配置是否无效和非法。它也会查看容忍度配置是否满足一些必要的条件,并返回任何有效配置的错误信息。
  4. ValidateTolerations 函数验证容忍度限度配置是否无效和非法。它查看容忍度配置是否满足一些必要的条件,并返回任何有效配置的错误信息。

通过这些函数,validation.go 文件确保 Pod 的容忍度限度配置符合规定,并避免有效或不非法的配置被利用。

File: plugin/pkg/admission/eventratelimit/cache.go

在 Kubernetes 我的项目中,plugin/pkg/admission/eventratelimit/cache.go 文件的次要作用是实现申请事件速率限度的缓存性能。

具体来说,该文件中定义了三个构造体:cache、singleCache 和 lruCache。

  1. cache 构造体:是一个通用的缓存实现,用于治理申请事件的速率限度。其中的 key 是申请的标识,value 是缓存的数据。
  2. singleCache 构造体:继承自 cache 构造体,用于单个申请的速率限度。它保护了申请的历史记录和相应的限度策略,以判断以后申请是否合乎限度条件。
  3. lruCache 构造体:继承自 cache 构造体,用于治理申请的最近操作记录。它将申请的标识作为 key,申请的工夫戳作为 value,用于判断是否须要清理过期的申请。

在 cache.go 文件中,还定义了一系列的 get 函数,用于获取缓存中的数据或执行相干操作:

  1. GetRequestCount:获取指定申请的计数值。
  2. GetKey:获取申请的标识。
  3. GetSingleCache:获取单个申请的缓存。
  4. GetLimitQuota:获取申请的限度配额。
  5. GetLimitBurst:获取申请的限度突发。
  6. GetListKeys:获取缓存中的所有申请标识。
  7. GetListValues:获取缓存中的所有申请值。
  8. GetExpireDuration:获取申请的过期工夫。
  9. GetCacheSize:获取缓存的大小。
  10. GetExpiredKeys:获取已过期的申请标识列表。
  11. GetPendingKeys:获取所有期待中的申请标识列表。

通过这些 get 函数,能够对缓存中的数据进行查问、操作和治理,以实现申请事件速率的限度。

File: plugin/pkg/admission/podtolerationrestriction/config.go

在 Kubernetes 我的项目中,plugin/pkg/admission/podtolerationrestriction/config.go文件的作用是定义了 Pod 容忍性限度插件的配置选项和配置加载的相干函数。

该文件中的 scheme 变量用于定义 golang 程序的配置项,它被用于注册并拜访存储在配置构造体中的选项。codecs变量被用于序列化和反序列化配置选项。

init()函数是一个非凡的初始化函数,它在包被导入时被调用。在 config.go 文件中的 init() 函数次要用于注册 Golang 命令行工具的 Flags(参数)。在此文件中,init()函数用于注册 Pod 容忍性限度插件的配置选项(例如:容许的容忍性配置、不容许的容忍性配置等)。

loadConfiguration()函数用于从配置文件中加载和解析 Pod 容忍性限度插件的配置选项。该函数会获取默认的插件配置选项以及从命令行参数中传递的配置选项,并与配置文件中的配置选项合并。

总的来说,plugin/pkg/admission/podtolerationrestriction/config.go文件的作用是定义和解决 Pod 容忍性限度插件的配置选项,并提供了函数用于加载和解析插件的配置选项。

File: plugin/pkg/admission/eventratelimit/limitenforcer.go

文件 limitenforcer.go 的作用是在 Kubernetes 中施行事件速率限度。在 Kubernetes 集群中,客户端能够发送申请来执行各种操作,如创立、更新或删除资源对象。为了防止歹意或谬误的申请对集群造成过大的累赘,须要对申请进行速率限度。

limitEnforcer 是一个构造体,它是限度施行器的外围实现。它通过限度雷同用户、雷同源 IP 地址和雷同对象的申请频率,来施行速率限度。

  • newLimitEnforcer 函数是用于创立新的限度施行器的工厂办法。
  • accept 函数用于判断某个申请是否应该被承受。在申请被承受之前,会进行一系列的查看,包含查看申请的源 IP 地址、用户、对象等是否已超出限度。
  • getServerKey 函数用于获取申请的服务器键。在集群中,一个申请可能是针对所有服务器的,这个函数用于返回服务器键。
  • getNamespaceKey 函数用于获取申请的命名空间键。命名空间键是一个标识,用于将申请与特定命名空间相关联。
  • getUserKey 函数用于获取申请的用户键。用户键用于将申请与特定用户相关联。
  • getSourceAndObjectKey 函数用于获取申请的源和对象键。这个函数将申请的源 IP 地址和对象信息组合成一个键。

通过这些函数和限度施行器的构造体,能够实现对申请进行速率限度,爱护 Kubernetes 集群免受歹意或过大的申请负载的影响。

File: plugin/pkg/admission/gc/gc_admission.go

在 Kubernetes 我的项目中,plugin/pkg/admission/gc/gc_admission.go 文件的作用是实现资源垃圾回收的逻辑。它是一个 Kubernetes 的 Admission Controller 插件,用于在资源的创立、更新和删除之前进行验证和批改。

以下是对于提到的各个变量和函数的具体介绍:

  • _:在 Go 语言中,下划线 _ 被用作一个空标识符,示意一个变量被申明但没有被应用。在这个文件中,_ 变量是用于示意不应用的某些返回值或参数。
  • gcPermissionsEnforcement:这是一个全局布尔变量,用于配置是否启用资源垃圾回收的权限强制管制。
  • whiteListItem:这是一个构造体,用于存储资源垃圾回收的白名单项。它蕴含资源的 API 组、版本和资源类型等信息。
  • Register:这个函数用于注册垃圾回收的 Admission Controller 插件。
  • isWhiteListed:这个函数查看指定的资源是否在白名单中,确定是否进行垃圾回收。
  • Validate:这个函数用于验证资源对象是否满足垃圾回收的要求。它查看资源对象中是否存在与垃圾回收相干的正文和标签,并进行相应的解决。
  • isChangingOwnerReference:这个函数查看资源对象是否正在批改其拥有者援用,用于确定是否进行垃圾回收。
  • finalizeAnythingRecord:这个函数用于标记特定资源对象的垃圾回收状态。
  • ownerRefToDeleteAttributeRecords:这个函数用于删除指定资源对象的垃圾回收记录。
  • blockingOwnerRefs:这个函数用于查找和返回拥有者援用的资源对象。
  • indexByUID:这是一个用于索引资源对象的函数,以便更高效地进行拜访和查看。
  • newBlockingOwnerDeletionRefs:这个函数用于创立拥有者援用的删除记录。
  • SetAuthorizer:这个函数用于设置垃圾回收的受权器,用于验证用户对资源的操作权限。
  • SetRESTMapper:这个函数用于设置 REST 映射器,以便将资源对象映射到相应的 API 组、版本和资源类型。
  • ValidateInitialization:这个函数用于验证垃圾回收插件的初始化,并确保所需的依赖关系和配置正确设置。

这些变量和函数独特合作,实现了 Kubernetes 中资源对象的垃圾回收性能,确保零碎中的资源失去无效治理和开释。

File: plugin/pkg/admission/limitranger/interfaces.go

在 Kubernetes 我的项目中,plugin/pkg/admission/limitranger/interfaces.go文件定义了限度范畴(LimitRanger)插件的接口和相干构造体。这个插件用于施行资源的配额和限度,确保在 Kubernetes 集群中可控地分配资源给每个运行的容器。

该文件中的接口和构造体充当了限度范畴插件的外围局部,提供了与 Kubernetes API 服务器进行交互和解决容器资源申请的办法。

上面是 interfaces.go 文件中的一些重要构造体和它们的作用:

  1. LimitRangerAdmitInterface接口: 该接口定义了一个 Admit 办法,用于对资源申请进行验证和审批。它接管一个 *v1.AdmissionRequest 对象作为输出,并返回一个 *v1.AdmissionResponse 对象。这个接口的实现类负责依据资源申请和集群中的配置规定来判断是否容许对该申请进行审批。
  2. LimitRangerInterface接口: 该接口定义了与限度范畴插件交互的办法。次要有两个办法,UpdatePluginConfig用于更新插件的配置,ResourceCreated用于解决新创建的资源。
  3. LimitRangerActions构造体: 这个构造体定义了一些特定的 LimitRanger 操作。它蕴含了一组办法,每个办法对应了不同的操作类型,例如资源限度的验证(ValidateLimitRange)、容器创立的受权(AdmitCreate)、容器更新的受权(AdmitUpdate)等。这些操作在实现上会调用其余逻辑和验证办法,来确保资源申请满足集群配置的限度规定。

总的来说,interfaces.go文件中的接口和构造体定义了限度范畴插件的性能和操作,用于验证和受权容器的资源申请,以确保资源配额的正当调配和应用。

File: plugin/pkg/auth/authenticator/token/bootstrap/bootstrap.go

在 Kubernetes 我的项目中,plugin/pkg/auth/authenticator/token/bootstrap/bootstrap.go 文件的作用是实现了 TokenAuthenticator 接口的默认鉴权办法。上面对其中的构造体和函数进行具体介绍:

  1. TokenAuthenticator 构造体:它是一个接口类型,定义了对 token 进行鉴权的办法。包含 AuthenticateTokenWrap
  2. wrappedTokenAuthenticator 构造体:它是 TokenAuthenticator 接口的实现,包装了一个 TokenAuthenticator 实例和一个 ErrorHandler。当应用 AuthenticateToken 办法进行鉴权时,会先调用 wrappedTokenAuthenticatorResolve 办法获取到理论的 TokenAuthenticator 实例,并调用其 AuthenticateToken 办法进行鉴权。
  3. NewTokenAuthenticator 函数:它是一个构造函数,用于创立一个 TokenAuthenticator 实例。该函数承受一个参数 tokenAllower,是一个函数类型,用于判断 token 是否容许通过身份验证。NewTokenAuthenticator 函数返回一个 TokenAuthenticator 接口的实例。
  4. tokenErrorf 函数:它是一个辅助函数,用于格式化错误信息,并返回一个 AuthenticationError 实例。
  5. AuthenticateToken 函数:它是 TokenAuthenticator 接口的办法,用于对输出的 token 进行鉴权。该函数先调用 tokenAllower 判断 token 是否容许通过身份验证,如果容许则返回对应的 UserInfo 实例,否则返回一个 AuthenticationError

总结起来,bootstrap.go 文件中的代码实现了对 token 的鉴权操作。通过 NewTokenAuthenticator 函数创立一个 TokenAuthenticator 实例,并应用 AuthenticateToken 办法对输出的 token 进行鉴权,依据鉴权后果返回对应的 UserInfoAuthenticationError 实例。同时,在鉴权过程中,能够通过 tokenAllower 函数自定义判断 token 是否容许通过身份验证的逻辑。

File: plugin/pkg/auth/authorizer/node/graph.go

在 kubernetes 我的项目中,plugin/pkg/auth/authorizer/node/graph.go 文件是用来实现用于节点受权的图形数据结构和相干操作的。它充当了一种权限验证形式,用于确定节点之间的连贯和关联关系。以下是对于文件中相干局部的具体介绍:

  • vertexTypes 是一个枚举类型,定义了节点的不同类型,例如 Pod、PV、VolumeAttachment 等,用来标识不同类型的节点。
  • namedVertex 构造体示意一个带有名称的节点,用于示意具体的资源对象。它蕴含一个 ID 字段,用来惟一标识该节点,以及一个 String 字段,用来示意节点名称。
  • destinationEdge 构造体用于示意节点之间的连贯关系,包含从一个节点到另一个节点的权重。
  • Graph 构造体示意整个图形,蕴含了与节点和边相干的信息。它包含了多个索引和映射,用于疾速查找和操作节点和边。
  • namespaceVertexMapping 构造体用于映射命名空间到具体的节点,不便查找某个命名空间下的节点。
  • nameVertexMapping 构造体用于映射名称到具体的节点,不便依据名称查找节点。
  • vertexType 是一个映射表,用于将节点类型映射到对应的枚举类型。
  • newNamedVertex 函数用于创立一个新的带有名称的节点。
  • ID 函数用于获取节点的惟一标识。
  • String 函数用于获取节点的名称。
  • newDestinationEdge 函数用于创立一个从源节点到指标节点的连贯。
  • From 函数用于获取边的源节点。
  • To 函数用于获取边的指标节点。
  • Weight 函数用于获取边的权重。
  • DestinationID 函数用于获取边的指标节点的惟一标识。
  • NewGraph 函数用于创立一个新的图形对象。
  • getOrCreateVertex_locked 函数用于获取或创立一个节点,并在操作过程中加锁。
  • getVertex_rlocked 函数用于获取一个节点的只读正本,不会加锁。
  • createVertex_locked 函数用于创立一个新的节点,并在操作过程中加锁。
  • deleteVertex_locked 函数用于删除一个节点,并在操作过程中加锁。
  • deleteEdges_locked 函数用于删除与节点相干的边,并在操作过程中加锁。
  • removeEdgeFromDestinationIndex_locked 函数用于从指标节点的索引中删除一条边,并在操作过程中加锁。
  • addEdgeToDestinationIndex_locked 函数用于向指标节点的索引中增加一条边,并在操作过程中加锁。
  • removeVertex_locked 函数用于从图形中删除一个节点,并在操作过程中加锁。
  • recomputeDestinationIndex_locked 函数用于从新计算指标节点的索引,并在操作过程中加锁。
  • AddPod 函数用于向图形中增加一个 Pod 节点。
  • DeletePod 函数用于从图形中删除一个 Pod 节点。
  • AddPV 函数用于向图形中增加一个 PV 节点。
  • DeletePV 函数用于从图形中删除一个 PV 节点。
  • AddVolumeAttachment 函数用于向图形中增加一个 VolumeAttachment 节点。
  • DeleteVolumeAttachment 函数用于从图形中删除一个 VolumeAttachment 节点。

这些函数都是用于在图形中进行节点和边的操作,从而实现节点受权的性能。

File: plugin/pkg/auth/authorizer/node/graph_populator.go

在 kubernetes 我的项目中,plugin/pkg/auth/authorizer/node/graph_populator.go文件的作用是实现节点图谱的填充。这个文件中的代码负责将不同资源(如 Pod、PersistentVolume、VolumeAttachment 等)增加到节点图谱中,并在资源发生变化时更新图谱。

graphPopulator构造体是整个图谱填充过程的控制器。它蕴含了一些必要的字段和办法,用于初始化节点图谱、解决资源事件、更新图谱等。

上面是 graphPopulator 构造体的重要字段和办法:

  • clusterGraph:示意整个集群的节点图谱,用来保留各个节点及其关联的资源。
  • podStore:一个内存中的缓存,保留着集群中所有的 Pod 资源。
  • pvcStore:一个内存中的缓存,保留着集群中所有的 PersistentVolumeClaim 资源。
  • volumeAttachmentStore:一个内存中的缓存,保留着集群中所有的 VolumeAttachment 资源。

AddGraphEventHandlers函数是 graphPopulator 构造体的一个办法,用于为各个资源的事件注册相应的处理函数。当一个资源(如 Pod、PersistentVolume 等)发生变化时,这个函数会被调用,而后依据事件类型执行相应的操作。

以下是局部处理函数的性能简介:

  • addPod:增加新的 Pod 到节点图谱中,设置 Pod 和对应节点之间的关联关系。
  • updatePod:更新图谱中现有 Pod 的信息,如 Pod 的状态、运行时信息等。
  • deletePod:从图谱中删除指定的 Pod,革除 Pod 和节点之间的关联关系。
  • addPV:将新的 PersistentVolume 增加到图谱中。
  • updatePV:更新图谱中现有 PersistentVolume 的信息。
  • deletePV:从图谱中删除指定的 PersistentVolume。
  • addVolumeAttachment:增加新的 VolumeAttachment 到图谱中,设置 VolumeAttachment 和对应节点之间的关联关系。
  • updateVolumeAttachment:更新图谱中现有 VolumeAttachment 的信息。
  • deleteVolumeAttachment:从图谱中删除指定的 VolumeAttachment,革除 VolumeAttachment 和节点之间的关联关系。

总的来说,graph_populator.go文件中的代码实现了节点图谱的填充逻辑,通过监听资源的事件,将各个资源(如 Pod、PersistentVolume 等)增加到图谱中,并在资源发生变化时更新图谱的信息。这样,在进行权限管制和调度等操作时,能够更不便地获取和解决节点与资源之间的关联关系。

File: plugin/pkg/auth/authorizer/node/intset.go

intset.go 文件位于 Kubernetes 我的项目的 plugin/pkg/auth/authorizer/node 目录中,次要用于实现一个用于跟踪节点拜访令牌的数据结构。这个数据结构是一个整数汇合(intset),用于记录每个节点上令牌的数量。

intSet 构造体定义了一个整数汇合,它蕴含以下字段:

  • items:一个 map 类型的字段,用于存储每个令牌标识对应的数量。
  • counts:一个整数字段,用于记录整个汇合中所有令牌的总数量。

newIntSet 函数用于创立一个新的 intSet 实例,它会初始化 items 字段和 counts 字段,并返回一个指向这个新创建实例的指针。

has 函数用于判断给定的令牌标识是否存在于汇合中。它会查看 items 字段中是否存在该令牌标识的条目,并返回相应的布尔值。

reset 函数用于重置整个汇合,将所有令牌的数量都设置为 0,并将 counts 字段重置为 0。

increment 函数用于减少指定令牌标识的数量。它会查看 items 字段中是否存在该令牌标识的条目,如果存在则将其数量减少 1,如果不存在则创立一个新的条目并设置数量为 1。

decrement 函数用于缩小指定令牌标识的数量。它会查看 items 字段中是否存在该令牌标识的条目,如果存在则将其数量缩小 1,如果数量缩小后为 0,则会删除该条目。

总之,该文件中的 intSet 数据结构和相干函数,用于治理节点拜访令牌的数量,并提供对该汇合的操作方法,以实现对节点令牌的增减和查问等性能。

File: plugin/pkg/auth/authorizer/node/metrics.go

文件门路:plugin/pkg/auth/authorizer/node/metrics.go

该文件实现了用于节点权限认证的度量指标(metrics)。它提供了一组度量指标,用于监控节点上的权限认证操作的持续时间。

具体来说,该文件定义了以下几个变量和函数:

  1. graphActionsDuration:该变量是一个度量指标,用于记录节点权限认证操作的持续时间。它应用 Prometheus 库提供的 Histogram 类型进行度量。Histogram 是用于度量持续时间散布的一种指标类型,能够统计和计算操作执行的工夫范畴、数量以及散布。
  2. registerMetrics():这是一个用于注册度量指标的函数。它通过 Prometheus 库提供的办法创立并注册节点权限认证的度量指标。在该函数中,会创立用于记录权限认证持续时间的 Histogram 指标,并将其注册到 Prometheus 的默认注册器中。
  3. exposeMetricsEndpoint():这是一个用于向节点裸露度量指标的函数。它通过 Prometheus 库提供的 HTTPHandler 办法创立一个 HTTP 服务,用于裸露度量指标的 API endpoint,并指定该服务的门路和端口。通过拜访该 API endpoint,能够获取以后节点上的权限认证持续时间的度量指标信息。

总的来说,该文件为节点权限认证操作提供了度量指标,可帮忙系统管理员监控和剖析节点的权限认证性能。graphActionsDuration 变量用于记录权限认证操作的持续时间,registerMetrics 函数用于创立和注册度量指标,exposeMetricsEndpoint 函数用于裸露度量指标的 API endpoint,以便获取度量指标信息。

File: plugin/pkg/auth/authorizer/node/node_authorizer.go

在 Kubernetes 我的项目中,plugin/pkg/auth/authorizer/node/node_authorizer.go 这个文件是 NodeAuthorizer 节点受权器的实现。节点受权器用于对申请进行鉴权,决定其是否有权限执行特定操作。

以下是具体介绍:

  • configMapResource:指定 ConfigMap 资源的名称。
  • secretResource:指定 Secret 资源的名称。
  • pvcResource:指定 PersistentVolumeClaim 资源的名称。
  • pvResource:指定 PersistentVolume 资源的名称。
  • vaResource:指定 VolumeAttachment 资源的名称。
  • svcAcctResource:指定 ServiceAccount 资源的名称。
  • leaseResource:指定 Lease 资源的名称。
  • csiNodeResource:指定 CSINode 资源的名称。

这些变量定义了不同资源类型的名称,用于受权的匹配。

  • NodeAuthorizer 构造体:用于实现节点受权器。
  • NewAuthorizer 函数:用于创立一个新的节点受权器。
  • RulesFor 函数:依据申请的用户、资源和申请操作,返回相应的受权规定。
  • Authorize 函数:对节点申请进行受权解决。
  • authorizeStatusUpdate 函数:对节点状态更新进行受权校验。
  • authorizeGet 函数:对获取节点信息的申请进行受权校验。
  • authorizeReadNamespacedObject 函数:对读取命名空间中的对象进行受权校验。
  • authorizeCreateToken 函数:对创立令牌的申请进行受权校验。
  • authorizeLease 函数:对 Lease 资源的申请进行受权校验。
  • authorizeCSINode 函数:对 CSINode 资源的申请进行受权校验。
  • hasPathFrom 函数:查看资源 A 是否能够通过某些门路拜访资源 B。

这些函数是节点受权器的外围逻辑,依据申请的不同操作类型和资源类型,判断是否具备相应的权限并执行相应的鉴权逻辑。

总体而言,node_authorizer.go 文件中的代码实现了 Kubernetes 节点受权器的性能,对申请进行鉴权判断,确保只有具备相应权限的实体能够对节点进行操作。

File: plugin/pkg/auth/authorizer/rbac/bootstrappolicy/controller_policy.go

在 Kubernetes 我的项目中,plugin/pkg/auth/authorizer/rbac/bootstrappolicy/controller_policy.go文件的作用是构建和治理控制器的角色和角色绑定。

具体来说,这个文件是用于实现控制器的策略管理,控制器是 Kubernetes 中的外围组件,用于自动化治理和调度 Pod 和其余资源的状态。在 Kubernetes 中,控制器通过角色和角色绑定来管制拜访控制策略。

上面是对 controller_policy.go 文件中提到的几个函数的具体介绍:

  1. addControllerRole: 这个函数用于向给定的角色列表中增加控制器角色。控制器角色用于定义控制器对资源的拜访权限。
  2. eventsRule: 这个函数用于构建事件规定,事件规定定义了控制器可能拜访的事件资源。
  3. buildControllerRoles: 这个函数用于构建控制器角色。它应用指定的资源类型和动作列表生成角色名称,并为每个角色别离调用 addControllerRole 函数。
  4. ControllerRoles: 这个函数返回一个角色列表,蕴含了控制器反对的所有角色。
  5. ControllerRoleBindings: 这个函数返回一个角色绑定列表,示意角色与被受权用户或组的关联关系。

通过这些函数,controller_policy.go文件实现了控制器角色和角色绑定的治理性能,以确保控制器具备适当的权限来执行其指定的工作。通过定义适合的角色和角色绑定,能够更好地管制和限度控制器的拜访权限,从而进步零碎的安全性和可靠性。

File: plugin/pkg/auth/authorizer/rbac/bootstrappolicy/namespace_policy.go

在 Kubernetes 我的项目中,plugin/pkg/auth/authorizer/rbac/bootstrappolicy/namespace_policy.go 文件的作用是初始化和创立命名空间(Namespace)级别的 Role(角色)和 RoleBinding(角色绑定)。

上面是对于这个文件中各个变量和函数的具体介绍:

  • namespaceRoles:这是一个存储命名空间角色(Role)的切片(slice),用于存储 Role 对象的定义。通过执行 AddNamespaceRole 函数,能够向该切片增加新的 Role。
  • namespaceRoleBindings:这也是一个存储命名空间角色绑定(RoleBinding)的切片,用于存储 RoleBinding 对象的定义。通过执行 AddNamespaceRoleBinding 函数,能够向该切片增加新的 RoleBinding。
  • AddNamespaceRole 函数:用于向 namespaceRoles 中增加一个命名空间角色。该函数接管角色的名称和权限规定,并创立一个 Role 对象,而后将其增加到 namespaceRoles 中。
  • AddNamespaceRoleBinding 函数:用于向 namespaceRoleBindings 中增加一个命名空间角色绑定。该函数接管绑定名称、绑定的角色名称和绑定的命名空间,并创立一个 RoleBinding 对象,而后将其增加到 namespaceRoleBindings 中。
  • init 函数:在初始化时被调用,用于创立和填充命名空间角色和角色绑定。该函数首先会调用 AddNamespaceRoleAddNamespaceRoleBinding 函数,增加一些默认的命名空间角色和角色绑定。
  • NamespaceRoles 函数:返回 namespaceRoles 切片,用于获取已定义的命名空间角色。
  • NamespaceRoleBindings 函数:返回 namespaceRoleBindings 切片,用于获取已定义的命名空间角色绑定。

通过这些函数和变量,namespace_policy.go 文件提供了创立和治理命名空间角色和角色绑定的能力。这些角色和角色绑定能够用于管制和限度某些用户或服务对命名空间中资源的拜访和操作权限。

File: plugin/pkg/auth/authorizer/rbac/bootstrappolicy/policy.go

在 kubernetes 我的项目中,plugin/pkg/auth/authorizer/rbac/bootstrappolicy/policy.go 是一个文件,其作用是定义和实现 RBAC(Role-Based Access Control)策略的构建。

上面具体介绍文件中的内容:

  1. Write、ReadWrite、Read、ReadUpdate、Label、Annotation:这些变量定义了不同级别的权限策略,用于管制对资源的拜访权限。每个变量都代表一种权限级别,如 Write 示意写权限,Read 示意读权限,Label 示意标签权限等。这些权限级别的定义会被用于后续的策略构建中。
  2. addDefaultMetadata 函数:这个函数用于为集群中默认的 RBAC 策略增加元数据。通过增加默认元数据,能够确保所有资源具备雷同的标签和正文,以便更容易治理和筛选这些资源。
  3. addClusterRoleLabel 函数:这个函数用于为集群角色(ClusterRole)增加标签。标签用于对角色进行分类和组织,从而不便管理员对角色进行治理和管制。
  4. addClusterRoleBindingLabel 函数:这个函数用于为集群角色绑定(ClusterRoleBinding)增加标签。标签同样用于对角色绑定进行分类和组织,以便更好地治理和管制绑定关系。
  5. NodeRules 函数:这个函数用于为节点(Node)定义权限规定,即定义节点的拜访权限和操作限度。例如,能够限度节点只能读取特定类型的资源或者具备特定的标签。
  6. ClusterRoles 函数:这个函数用于创立集群角色。集群角色是一组权限规定的汇合,定义了对集群中资源的控制策略。通过 ClusterRoles 函数,能够创立不同的角色,并为每个角色指定特定的权限级别。
  7. ClusterRoleBindings 函数:这个函数用于创立集群角色绑定。集群角色绑定将角色授予用户、组或者用户组,从而实现对角色的受权。通过 ClusterRoleBindings 函数,能够创立不同的角色绑定,并将角色绑定到特定的用户、组或者用户组。
  8. ClusterRolesToAggregate 函数:这个函数用于定义集群角色汇合。集群角色汇合是一组聚合的角色,能够通过一个角色绑定而将一组角色授予用户或者组。ClusterRolesToAggregate 函数定义了不同角色汇合的组成。
  9. ClusterRoleBindingsToSplit 函数:这个函数用于定义须要拆分的集群角色绑定。当一个角色绑定授予了一组角色时,能够应用 ClusterRoleBindingsToSplit 函数将角色绑定拆分为独自的角色绑定,从而更好地治理和管制角色的受权。

File: plugin/pkg/auth/authorizer/rbac/rbac.go

在 Kubernetes 我的项目中,文件 plugin/pkg/auth/authorizer/rbac/rbac.go 是负责实现基于角色的访问控制(Role-based Access Control, RBAC)的认证受权性能。

  • RequestToRuleMapper:将申请映射到 RBAC 规定的接口,用于确定申请的操作和资源是否合乎 RBAC 规定。
  • RBACAuthorizer:基于 RBAC 规定的受权器,依据申请的用户和资源信息,应用规定判断用户是否有权限执行操作。
  • authorizingVisitor:用于查看 RBAC 规定是否受权给用户或者服务账号。
  • RoleGetter:获取角色对象的接口,用于获取指定名称的角色定义。
  • RoleBindingLister:获取绑定到角色的列表,用于获取绑定了指定角色的用户或服务账号列表。
  • ClusterRoleGetter:获取集群角色对象的接口,用于获取指定名称的集群角色定义。
  • ClusterRoleBindingLister:获取绑定到集群角色的列表,用于获取绑定了指定集群角色的用户或服务账号列表。

以下是各个函数的作用:

  • visit:拜访 RBAC 规定,并确定用户是否有权限执行指定的操作和拜访资源。
  • Authorize:依据申请和 RBAC 规定,判断用户是否有权限执行指定的操作和拜访资源。
  • RulesFor:依据用户、资源和名称空间,获取 RBAC 规定。
  • New:创立 RBACAuthorizer 对象,用于执行 RBAC 受权性能。
  • RulesAllow:判断给定的 RBAC 规定是否容许指定的操作和资源。
  • RuleAllows:判断给定的 RBAC 规定是否容许指定的操作和资源。
  • GetRole:获取指定名称的角色对象。
  • ListRoleBindings:获取绑定到角色的列表。
  • GetClusterRole:获取指定名称的集群角色对象。
  • ListClusterRoleBindings:获取绑定到集群角色的列表。

这些函数和构造体的作用是联合 RBAC 规定,实现对申请进行认证和受权,决定用户是否有权限执行操作和拜访资源。

File: plugin/pkg/auth/authorizer/rbac/subject_locator.go

在 Kubernetes 我的项目中,plugin/pkg/auth/authorizer/rbac/subject_locator.go文件的作用是定位主体(Subject)信息,用于受权验证。

  • _:这个变量是一个占位符,示意疏忽不须要应用的值。在这个文件中,这些占位符被用于疏忽不须要的返回值。
  • RoleToRuleMapper:这个构造体用于将角色(Role)映射到规定(Rule)。它负责解析和映射角色定义的规定,并将其关联到相应的角色名称。
  • SubjectLocator:这个构造体用于定位主体信息。它蕴含一些函数和字段,用于依据提供的主体名称和类型查找相应的主体。
  • SubjectAccessEvaluator:这个构造体用于评估主体的拜访权限。它依据规定评估是否容许主体执行某个操作。
  • NewSubjectAccessEvaluator:这个函数创立一个新的主体拜访评估器。它承受一些参数,如主体定位器和角色到规定的映射,创立相应的评估器实例。
  • AllowedSubjects:这个函数依据指定的资源和操作,返回容许执行该操作的主体列表。它基于主体拜访评估器的后果生成容许的主体列表,并排除不符合条件的主体。这个函数通常用于受权验证过程中确定可能执行操作的主体。

本文由 mdnice 多平台公布

正文完
 0