博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
kubernetes高级之动态准入控制
阅读量:5360 次
发布时间:2019-06-15

本文共 3195 字,大约阅读时间需要 10 分钟。

动态准入控制器文档介绍了如何使用标准的,插件式的准入控制器.但是,但是由于以下原因,插件式的准入控制器在一些场景下并不灵活:

  • 它们需要编译到kube-apiserver里

  • 它们仅在apiserver启动的时候可以配置

准入钩子(Admission Webhooks 从1.9版本开始)解决了这些问题,它允许准入控制器独立于核心代码编译并且可以在运行时配置.

什么是准入钩子

准入钩子是一种http回调,它接收准入请求然后做一些处理.你可以定义两种类型的准入钩子:和.对于验证钩子,你可以拒绝请求以使自定义准入策略生效.对于变换钩子,你可以改变请求来使自定义的默认配置生效.

体验准入钩子

准入控制钩子是集群管制面板不可缺少的一部分.你在编写部署它们时必须要警惕.如果你想要编写/布置生产级别的准入控制器,请阅读以下.下面我们将介绍如何快速体验准入钩子.

准备工作:

  • 确保你的kubernetes集群版本至少是1.9版本.

  • 确保变换钩子(MutatingAdmissionWebhook) 和验证钩子(ValidatingAdmissionWebhook)已经启用.是推荐开启的一组准入控制器.

编写一个准入钩子服务器(admission webhook server)

请参阅已经被kubernetes e2e测试验证通过的准入的实现.这个web钩子处理apiserver发出的admissionReview请求,然后把结果封装成一个admissionResponse返回给请求者.

admissionReview请求可能有多个版本( v1beta1 或者 未来的v1),web钩子可以通过admissionReviewVersions字段来定义它们接受的版本.apiserver会尝试使用列表中出现的,支持的第一个版本.如果列表中的版本没有一个是被支持的,验证将失败.如果webhook配置已经持久化,对web钩子的请求将会失败并被失败策略控制.

示例钩子服务器(admission webhook server)把ClientAuth字段留空,默认为NoClientCert.这意味着钩子服务器不验证客户端身份.如果你需要使用mutual TLS或者其它方法来验证客户端请求,请参考

部署准入控制服务

e2e测试的钩子服务器通过部署api(,

你也可以把你的钩子服务部署到集群外,你需要相应地更新

运行时配置准入web钩子

你可以通过和动态地配置哪些资源被哪些web钩子控制.

以下是一个validatingWebhookConfiguration配置的示例,变换钩子的配置也类似

apiVersion: admissionregistration.k8s.io/v1beta1kind: ValidatingWebhookConfigurationmetadata:  name: 
webhooks:- name:
rules: - apiGroups: - "" apiVersions: - v1 operations: - CREATE resources: - pods scope: "Namespaced" clientConfig: service: namespace:
name:
caBundle:
admissionReviewVersions: - v1beta1 timeoutSeconds: 1

scope字段指定了集群级别的资源("Cluster")或者名称空间级别的资源("Namespaced")需要匹配这些规则."*"表示没有任何范围限制.

注意,如果使用clientConfig.service,服务端证书必须对<svc_name>.<svc_namespace>.svc有效.

web钩子请求默认超时时间为30秒,但是从1.14版本开始,你可以自由设置超时时间但是建议设置较小的时间.如果web钩子请求超时,请求将被web钩子的失败策略处理.

当apiserver接收到一个匹配规则的请求,apiserver将会发送一个admissionReview请求到clientConfig配置的web钩子里.

创建web钩子配置以后,系统将会经过一段时间使新配置生效.

认证apiserver

如果你的准入web钩子需要认证,你可以配置apiserver使用基本认证(basic auth), bearer token 或者证书认证.需要三个步骤来完成认证配置.

  • 当启动apiserver时,通过--admission-control-config-file选项来指定准入控制配置文件的位置.

  • 在准入控制配置文件里,指定变换控制器(MutatingAdmissionWebhook)和验证控制器(ValidatingAdmissionWebhook)从哪里读取证书.证书存储在kubeConfig文件里(和kubectl使用的相同),字段名为kubeConfigFile.下面是准入控制配置文件示例

apiVersion: apiserver.k8s.io/v1alpha1kind: AdmissionConfigurationplugins:- name: ValidatingAdmissionWebhook  configuration:    apiVersion: apiserver.config.k8s.io/v1alpha1    kind: WebhookAdmission    kubeConfigFile: 
- name: MutatingAdmissionWebhook configuration: apiVersion: apiserver.config.k8s.io/v1alpha1 kind: WebhookAdmission kubeConfigFile:

这里是admissionConfiguration

  • 在kubeConfig文件里,提供证书
apiVersion: v1kind: Configusers:# DNS name of webhook service, i.e., 
.
.svc, or the URL# of the webhook server.- name: 'webhook1.ns1.svc' user: client-certificate-data:
client-key-data:
# The `name` supports using * to wildmatch prefixing segments.- name: '*.webhook-company.org' user: password:
username:
# '*' is the default match.- name: '*' user: token:

当然,你需要设置web钩子服务器来处理这些认证.

转载于:https://www.cnblogs.com/tylerzhou/p/11080653.html

你可能感兴趣的文章
SSH-struts2的异常处理
查看>>
《30天自制操作系统》学习笔记--第14天
查看>>
LGPL协议的理解
查看>>
1、Python基础
查看>>
Unity The Tag Attribute Matching Rule
查看>>
试着理解下kvm
查看>>
WebService学习总结(二)--使用JDK开发WebService
查看>>
Tizen参考手机RD-210和RD-PQ
查看>>
竞价广告系统-位置拍卖理论
查看>>
策略模式 C#
查看>>
[模板]树状数组
查看>>
[HDU 6447][2018CCPC网络选拔赛 1010][YJJ's Salesman][离散化+线段树+DP]
查看>>
设计模式学习的好方法
查看>>
感谢Leslie Ma
查看>>
几种排序方法
查看>>
查看数据库各表的信息
查看>>
第一阶段测试题
查看>>
第二轮冲刺第五天
查看>>
图片压缩
查看>>
Hadoop-2.6.5安装
查看>>