专栏首页有点技术深入理解AdmissionWebhook part - 1

深入理解AdmissionWebhook part - 1

简介

Admission webhooks 是接收准入请求http回调并且进行处理,分为两种类型:

  • validating admission Webhook
  • mutating admission webhook

mutating admission webhook 先于validating admission Webhook被调用,可以由mutating admission webhook先对 对象进行修改设置默认值,然后validating admission Webhook可以拒绝请求以执行自定义的 admission 策略

admission webhook controller 处理流程

接受请求–>解析成为AdmissionReview–>解析AdmissionRequest请求资源–> 解析成期望的资源对象–>根据资源对象的现有数据生成pacher—>判断请求AdmissionReview是否包含UUID—返回AdmissionReview

配置文件

配置文件字段介绍

apiVersion: admissionregistration.k8s.io/v1beta1
kind: ValidatingWebhookConfiguration
metadata:
  name: <name of this configuration object>
webhooks:
- name: <webhook name, e.g., pod-policy.example.io>
  failurePolicy: Fail #Ignore或Fail
  rules:
  - apiGroups:# 列出一个活多个api group,空代表core *代表所有
    - ""
    apiVersions:# api版本
    - v1
    operations:# 列出需要匹配的动作
    - CREATE
    resources:# 列出一个或多个资源
    - pods
    scope: "Namespaced"# 指定匹配范围有效值为Cluster、Namespaced、*
  clientConfig:
    url: #webhook地址 必须为https
    service:
      namespace: #命名空间
      name: #服务名称 端口必须为443
    caBundle: #pem编码的ca证书,用于签署webhook使用的服务器证书,默认apiserver的系统根证书
  admissionReviewVersions:
  - v1beta1 #版本 默认v1beta1
  timeoutSeconds: 1#请求超时时间,默认30,1-30秒
  namespaceSelector:# 选择过滤哪些ns下的对象
    matchExpressions:
      key: environment
      operator: In
      values:
      - prod
      - staging
  sideEffects: # 明这个webhook是否有副作用,有效值 Unknown, None, Some, NoneOnDryRun,如果具有dryrun属性,切sideEffects为unknown或some,将自动拒绝执行。

验证apiserver

认证类型:基本身份验证,不记名令牌、证书

  • 启动apiserver时,通过 –admission-control-config-file 参数指定许可控制配置文件的位置。
  • 在准入控制配置文件中,指定 MutatingAdmissionWebhook 控制器和 ValidatingAdmissionWebhook 控制器应该读取凭据的位置。
  • 在kubeconfig中指定凭据

准入配置文件:

apiVersion: apiserver.k8s.io/v1alpha1
kind: AdmissionConfiguration
plugins:
- name: ValidatingAdmissionWebhook
  configuration:
    apiVersion: apiserver.config.k8s.io/v1alpha1
    kind: WebhookAdmission
    kubeConfigFile: <path-to-kubeconfig-file>
- name: MutatingAdmissionWebhook
  configuration:
    apiVersion: apiserver.config.k8s.io/v1alpha1
    kind: WebhookAdmission
    kubeConfigFile: <path-to-kubeconfig-file>

认证kubeconfig配置:

apiVersion: v1
kind: Config
users:
# webhook 的dns名称格式为<service name>.<namespace>.svc,或URL
- name: 'webhook1.ns1.svc'
  user: # 证书认证
    client-certificate-data: <pem encoded certificate>
    client-key-data: <pem encoded key>
# The `name` supports using * to wildmatch prefixing segments.
- name: '*.webhook-company.org'
  user: #用户密码认证
    password: <password>
    username: <name>
# '*'匹配所有.
- name: '*'
  user:
    token: <token> # 令牌认证

本文分享自微信公众号 - 有点技术(havetech),作者:杜天鹏

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-07-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • tekton入门-pipline

    PipelineRun允许您实例化并执行集群上的。A 以所需的执行顺序Pipeline指定一个或多个Tasks。一个PipelineRun 执行Tasks中Pi...

    有点技术
  • tekton入门-trigger

    trigger使用户能够将事件有效负载中的字段映射到资源模板中。换句话说,这允许事件既可以建模也可以将实例化为Kubernetes资源。对于tektoncd/p...

    有点技术
  • 基于envoy的分布式gateway-contour

    Contour是开源的Kubernetes入口控制器, 为Envoy边缘和服务代理提供控制平面. Contour支持动态配置更新和多团队入口委托,同时保持轻量级...

    有点技术
  • python 用opencv接口把视频逐帧转化为图片

    好了,接下来我要做一个实际的深度学习图像分割的小项目,项目内容是从一堆拍摄海面的图片中将白浪花分割出来,这个项目的分割只对白浪花感兴趣,所以最后应该是01分割,...

    于小勇
  • Struts2的常见的配置文件介绍

    1:package 定义一个包。 包作用,管理action。 (通常,一个业务模板用一个包)   常见属性及其说明:     (1)name  包的名字;以方便...

    别先生
  • 【Django】Django框架进阶详述(二)

    详见:https://docs.djangoproject.com/en/1.10/topics/forms/#looping-over-the-form-s-...

    魏晓蕾
  • 【Struts】Struts框架配置详解

    1.首先将所必须的Jar包放到项目的WebRoot/WEB-INF/lib目录下。 如果你没有这些Jar文件,你可以到Struts官网上下载:http://st...

    陈树义
  • 2018-07-15

    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-...

    用户2235302
  • Python3 面向对象概述

    Python从设计之初就已经是一门面向对象的语言,所以我们可以以面向对象的方式去编写python代码。面向对象就是将任何事情都当做对象去看待,一个对象会拥有属性...

    py3study
  • Ansible极简教程

    KangVcar

扫码关注云+社区

领取腾讯云代金券