Istio如何实现自动注入?

本文介绍Istio如何利用Kubernetes的AdmissionControllers,在部署时自动为应用添加Sidecar容器。通过MutatingAdmissionWebhook和ValidatingAdmissionWebhook控制器,在资源对象持久化前进行修改与验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当命名空间激活istio注入功能时,比如部署一个deployment,会发现业务容器旁多了一个sidecar容器。

istio是如何实现这一点的呢?使用的是Admission Controllers中的两个特殊的控制器:MutatingAdmissionWebhookValidatingAdmissionWebhook

AdmissionController 会在客户端请求经过认证授权验证后,在对象持久化到etcd之前拦截请求。

参考:https://kubernetes.io/docs/reference/access-authn-authz/extensible-admission-controllers

时序图

在这里插入图片描述

  1. kubectl 注册一个ValidatingWebhookConfiguration/MutatingWebhookConfiguration对象, 对象包含触发webhook调用的条件,webhook server地址 etc。
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingWebhookConfiguration
metadata:
  name: "pod-policy.example.com"
webhooks:
- name: "pod-policy.example.com"
  # 触发webhook的条件
  rules:
  - apiGroups:   [""]
    apiVersions: ["v1"]
    operations:  ["CREATE"]
    resources:   ["pods"]
    scope:       "Namespaced"
  clientConfig:
    # webhook server的服务地址
    service:
      namespace: "example-namespace"
      name: "example-service"
    caBundle: "Ci0tLS0tQk...<`caBundle` is a PEM encoded CA bundle which will be used to validate the webhook's server certificate.>...tLS0K"
  admissionReviewVersions: ["v1", "v1beta1"]
  sideEffects: None
  timeoutSeconds: 5
  1. 当用户使用kubectl apply 注册了感兴趣的资源,此处为新的Deployment。API Server就会触发webhook调用。

  2. API Server首先会调用所有的mutating admission webhook, 用于设置资源对象的默认值。
    然后调用所有的validating admission webhook,用于验证资源对象的合法性。

  3. 经过webhook验证的资源对象,最后持久化到etcd中。

调用webhook

第三步的具体流程是:

APIServer发起一个POST HTTP请求,请求体中包含AdmissionReview对象。AdmissionReview包含了更改Resource的信息,
Webhook Server返回一个AdmissionReview对象,作为Response。

触发mutating admission webhook 调用时,可以实现sidecar注入逻辑。只需要webhook server实现处理AdmissionReview的信息,添加sidecar容器信息即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值