当前位置: 首页 > wzjs >正文

总部基地网站建设公司衡水做wap网站的公司

总部基地网站建设公司,衡水做wap网站的公司,个人网站 备案 攻略,网站制作详细流程#作者:曹付江 文章目录 1、什么是 Admission Controllers?2、如何创建 Admission Controllers?3、Admission 控制器的最佳实践 K8s 中的操作与安全标准执行机制: 1、什么是 Admission Controllers? Admission contro…

#作者:曹付江

文章目录

  • 1、什么是 Admission Controllers?
  • 2、如何创建 Admission Controllers?
  • 3、Admission 控制器的最佳实践

K8s 中的操作与安全标准执行机制:
在这里插入图片描述

1、什么是 Admission Controllers?

Admission controllers 是一段拦截请求的代码,它会在请求被持久化之前验证或更改(变更)这些请求。Admission controllers 与外部 WebHook 连接,处理入驻请求。因此,它们也被称为 Admission WebHook。该 WebHook 在对象创建、修改或删除最终确定之前接收 K8s 的入驻请求。

我们可以定义两种类型的 Admission controllers:

  • MutatingAdmissionWebhook:该控制器既可以验证也可以更改请求。
  • ValidatingAdmissionWebhook:该控制器只能验证请求。
    Admission Controller 是在需要强制执行特定组织政策时最有效的选项之一,例如:
  • 确保所有容器都有资源限制,以避免资源占用过多。
  • 阻止某些常见的镜像标签。
  • 强制执行资源的命名规范。
  • 限制仅允许来自受信任注册表的批准容器镜像。
    检查内建的 Admission controllers:
    在这里插入图片描述
    在这里插入图片描述

2、如何创建 Admission Controllers?

要创建一个 Mutating Admission Webhook,我们需要以下内容:

  1. 用于 Webhook 的 Web 应用程序
  2. 运行 Web 应用程序的服务帐户
  3. 用于托管 Web 应用程序的 Deployment
  4. 用于将流量路由到 Web 应用程序的 Service
  5. 一个 ClusterRole,定义 API 级别的访问权限(此博客未详细介绍)
  6. 一个 ClusterRoleBinding,将服务帐户与 ClusterRole 关联
  7. 一个 Secret,包含 Web 应用程序用于提供 TLS 的证书。(K8s 会向我们的服务发起 HTTPS 调用,因此需要有效的 SSL/TLS 证书)

WebHook 服务器
在本文章中,我将使用基于 Python 的 Webhook,使用 Sanic 框架。

FROM sanicframework/sanic:LTS
RUN pip install jsonpatch
COPY apps.py apps.py
ENTRYPOINT ["sanic", "apps:app", "--host=0.

上面的 Dockerfile 将创建用于运行 Web 服务器的镜像。这里我们挂载了一个卷(来自 secret),该卷将用于 TLS 证书。

apps.py 的内容:

import base64
import json as nativejson
from copy import deepcopy
from pprint import pformatimport jsonpatch
from sanic import Request, Sanic
from sanic.log import logger
from sanic.response import jsonapp = Sanic(name=__name__)@app.post("/validate")
async def validate(request: Request):allowed = Truemessage = ""try:pass # add logic to validate th# update allowed & message accordinglyexcept KeyError:passreturn json({"response": {"allowed": allowed,"uid": request.json["request"]["uid"],"status": {"message": message},}})@app.post("/mutate")
async def mutate(request: Request):logger.info(f"Obtained Request \n {pformat(request.json)}")original_spec = request.json["request"]["object"]modified_spec = deepcopy(spec)try:pass# add logic to update# update the modified_specexcept KeyError:passpatch = jsonpatch.JsonPatch.from_diff(spec, modified_spec)return json({"response": {"allowed": True,"uid": request.json["request"]["uid"],"patch": base64.b64encode(nativejson.dumps(patch).encode()).decode(),"patchtype": "JSONPatch",}})if __name__ == "__main__":app.run(host="0.0.0.0", port=443)

Kubernetes 对验证的期望是返回一个简单的响应,值为 False 或 True。因此,在上述代码中,我们返回 allowed 为 True 或 False。在变更 Webhook 的情况下,我们还返回补丁(新旧对象的差异)。

创建 Webhook 的清单:

apiVersion: v1
kind: ServiceAccount
metadata:name: admission-controllernamespace: admission-webhook-ns
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: admission-demo-rbac
subjects:- kind: ServiceAccountname: admission-controllernamespace: admission-webhook-ns
roleRef:kind: ClusterRolename: cluster-adminapiGroup: rbac.authorization.k8s.io---
apiVersion: v1
kind: Service
metadata:name: admission-webhook-svcnamespace: admission-webhook-nslabels:app: admission-webhook-demo
spec:ports:- port: 443targetPort: 3030selector:app: admission-webhook-demo
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:name: admission-controller-certnamespace: admission-webhook-ns
spec:dnsNames:- admission-webhook-svc- admission-webhook-svc.admission-webhook-ns- admission-webhook-svc.admission-webhook-ns.svcissuerRef:kind: ClusterIssuername: ca-issuersecretName: admission-controller-secret
---
apiVersion: apps/v1
kind: Deployment
metadata:name: admission-webhook-deploymentnamespace: admission-webhook-nslabels:app: admission-webhook-demo
spec:replicas: 1selector:matchLabels:app: admission-webhook-demotemplate:metadata:labels:app: admission-webhook-demospec:serviceAccountName: admission-controllercontainers:- name: admission-webhook-demoimage: asrathore08/admission-controller:latestimagePullPolicy: Alwaysresources:limits:cpu: 1000mmemory: 512MivolumeMounts:- name: webhook-certsmountPath: /mnt/certsreadOnly: true- name: admission-controller-confmountPath: /mnt/confvolumes:- name: webhook-certssecret:secretName: admission-controller-secret- name: admission-controller-confconfigMap:name: admission-controller-configmap

在 Kubernetes 中注册 Webhook:
创建一个 ValidatingWebhookConfiguration,指向我们的 webhook 服务器。

apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingWebhookConfiguration
metadata:name: admission-service-delete-pod-validatenamespace: admission-webhook-nslabels:app: admission-webhook-demoannotations:cert-manager.io/inject-ca-from: admission-webhook-ns/admission-controller-cert
webhooks:
- name: validate.webhook.democlientConfig:service:name: admission-webhook-svcnamespace: admission-webhook-nspath: "/validate"admissionReviewVersions: ["v1"]sideEffects: Nonerules:- operations: ["CREATE", "UPDATE"]apiGroups: [""]apiVersions: ["v1", "v1beta1"]resources: ["configmaps"]scope: "Namespaced"namespaceSelector:matchLabels:demo-admission-validation: enabledfailurePolicy: Ignore

注意:这里我使用了 cert-manager CRD 来生成 TLS/SSL 证书。注解 cert-manager.io/inject-ca-from 有助于获取证书。

创建一个 MutatingWebhookConfiguration,指向我们的 webhook 服务器:

apiVersion: admissionregistration.k8s.io/v1
kind: MutatingWebhookConfiguration
metadata:name: admission-service-configmap-mutatenamespace: admission-webhook-nslabels:app: mutating-admission-webhookannotations:cert-manager.io/inject-ca-from: admission-webhook-ns/admission-controller-cert
webhooks:
- name: mutate.webhook.democlientConfig:service:name: admission-webhook-svcnamespace: admission-webhook-nspath: "/mutate"admissionReviewVersions: ["v1"]sideEffects: Nonerules:- operations: ["CREATE", "UPDATE"]apiGroups: [""]apiVersions: ["v1", "v1beta1"]resources: ["configmaps"]scope: "Namespaced"namespaceSelector:matchLabels:demo-admission-validation: enabledfailurePolicy: Ignore

上面,我们定义了一个 mutating 和一个 validating webhook。我们只启用了这些 webhooks 处理在具有标签 demo-admission-validation 设置为 enabled 的命名空间中创建或更新的对象。此功能允许我们控制 webhook 的作用范围。

  • MutatingAdmissionWebhook — 转换器
  • ValidatingAdmissionWebhook — 审核员

注意:在上述 webhook 中,我将资源限制为 configmap。K8s 上的 Apache Spark 使用 configmap 来存储 Spark 配置。这种 webhook 可以控制用户为某些配置提供的值,并且可以为某些配置注入特定的默认值。

一旦部署,Webhook 将接收以下请求体的请求。

#
{"kind": "AdmissionReview","request": {"kind": {"kind": "Pod","version": "v1","group": ""},"resource": {"resource": "pods","version": "v1","group": ""},"uid": "b06b6ec2-681d-11e9-a645-06b44ed6a042","object": {"status": {},"spec": {"dnsPolicy": "ClusterFirst","securityContext": {},"serviceAccountName": "","schedulerName": "default-scheduler","serviceAccount": "","priority": 0,"terminationGracePeriodSeconds": 30,"restartPolicy": "Always","containers": [{"name": "","image": "","imagePullPolicy": "Always","ports": [{"protocol": "TCP","containerPort": 80}],"resources": {}}]},"metadata": {}},"namespace": "","userInfo": {"username": "","groups": ["system:masters","system:authenticated"]},"oldObject": null,"dryRun": false,"operation": "CREATE"},"apiVersion": "admission.k8s.io/v1beta1"
}

控制器将以特定格式返回响应。响应格式如下所述。

# Response
{"body": {"kind": "AdmissionReview","apiVersion": "admission.k8s.io/v1","response": {"uid": "request.uid","allowed": "True","patch": "patch_base64","patchType": "JSONPatch"},"headers": {"Content-Type": "application/json"},"statusCode": 200
}# patch_base64[{"op": "replace","path": "/spec/containers/0/image","value": "xxxx.dkr.ecr.us-west-2.amazonaws.com/nginx:latest"}
]

3、Admission 控制器的最佳实践

  1. 我们应该确保 webhook 尽可能轻量化。
  2. 我们应该在开发环境中彻底测试我们的 webhook,以确保它们不会无意中阻止合法的请求。
  3. 我们应该详细记录 admission 控制决策,并对被拒绝的请求进行故障排除。

文章转载自:

http://kvujuaNG.txnqh.cn
http://0VSoR9TL.txnqh.cn
http://3zK01oVa.txnqh.cn
http://PgU1KhBk.txnqh.cn
http://HyMaYtNL.txnqh.cn
http://1dqsEE5W.txnqh.cn
http://9wQJcbjg.txnqh.cn
http://V6IemJeC.txnqh.cn
http://Yia2pEgZ.txnqh.cn
http://n27vM8Rz.txnqh.cn
http://qN4gKD1Q.txnqh.cn
http://jYMb7qbZ.txnqh.cn
http://8AO9ruDj.txnqh.cn
http://X8CahubA.txnqh.cn
http://IZeuU0jy.txnqh.cn
http://h1Dz0JmN.txnqh.cn
http://PxV8UUYh.txnqh.cn
http://dvBmVlq8.txnqh.cn
http://gxAhmCIM.txnqh.cn
http://kYttcdQn.txnqh.cn
http://5NYhKGMa.txnqh.cn
http://YvfOniZD.txnqh.cn
http://nYs2TVOd.txnqh.cn
http://eFpYwpYW.txnqh.cn
http://v9LxVAwD.txnqh.cn
http://5VuwZoX7.txnqh.cn
http://th1UQotd.txnqh.cn
http://l60UNwIH.txnqh.cn
http://Pxl44ZxR.txnqh.cn
http://cBWXlcB7.txnqh.cn
http://www.dtcms.com/wzjs/632156.html

相关文章:

  • 做旅游广告在哪个网站做效果好国内免费的ip地址
  • 景区建设网站的不足合肥网站建设培训中心
  • 个人公司网页如何设计长沙网站seo技术
  • 拉新充场app推广平台西安seo服务商
  • 网站开发的大致流程自已电脑做网站
  • 匿名网站建设成都广告公司排名
  • 龙岩建设局网站罗小波北京朗晨网站建设
  • 国内做网站哪个好视频剪辑找什么公司
  • 汾阳做网站的公司wordpress机械模板下载
  • php网站开发作业wordpress 一键建站
  • 专业网站建设联系深圳南山做网站的公司
  • 时间轴网站设计中建豪城建设有限公司网站
  • 网站建设设计开发公司wordpress 书 pdf
  • 网站建设noajtwordpress 关联插件
  • 可以直接进网站正能量小米wordpress 表格样式
  • 毕设做网站wordpress新闻墙插件
  • 找人代做网站费用建设网站是哪个部门负责
  • 沙井做网站软文营销案例文章
  • 南昌市做网站微帮本地推广平台
  • 做建筑材料的网站正规的佛山网站建设
  • 做个网站多少钱网页设计图片排版模板
  • 凡科网怎么修改网站微信官方网站登陆
  • 怎么样百度能搜到自己的网站免费下载ppt的网站
  • 福州网站建设营销方案连云港新站优化
  • 沈阳网站建设的公司哪家好长沙建设信息网站
  • 企业网站包含的要素芜湖灵创网站建设
  • 乌市昌吉州建设局网站建设工程施工许可证在哪个网站办
  • 润商网站建设织梦 音乐网站
  • 普洱高端网站建设价格wordpress套用主题
  • 在互联网公司做网站平价网站建设