K8s webhook 踩坑记录

目录

前提环境

修改demo,实现自己想要的功能

1 修改代码文件中的ip地址

2 讲整个代码项目copy到k8s master节点

3 执行 make setup-kube-for-outcluster

 配置webhook server端 

 kubectl调用尝试并解决bug

 重新测试

创建有环境变量的pod,创建失败

 创建无环境变量的pod,创建成功


​​​​​​​

为了学习K8s webhook,有个大概的了解,参考了做实验Kubernetes admission webhook server 开发教程 - ZengXu's BLOG

前提环境

当前k8s版本情况 kubectl version

检测apiserver是否开启相关支持

apiserver_pod_name=`kubectl get --no-headers=true po -n kube-system | grep kube-apiserver | awk '{ print $1 }'`
kubectl get po $apiserver_pod_name -n kube-system -o yaml | grep plugin
    - --enable-admission-plugins=NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook

 

如果没这几个plugins,则需要加入修改/etc/kubernetes/manifests/kube-apiserver.yaml,加入这几个参数 ,保存之后系统会重启api-server的pod

代码环境

直接git clone https://github.com/phosae/denyenv-validating-admission-webhook.git

修改demo,实现自己想要的功能

原作者在文章中讲到,这个denyenv主要实现的功能是:拒绝创建含环境变量的 Pod

主要部署方式:集群内部署----打成一个pod;集群外部署-----在非集群内请求外部webhook的server 

这里我选择setup-kube-for-outcluster,也就是集群外部署,既然部署webhook,证书之类的认证必不可少,这里有两种签名方式作者已经讲述过,一种为 Kubernetes CertificateSigningRequest 签发证书,另一种为cert-manager管理证书,运行make setup-kube-for-outcluster脚本里面调用的签名方式为 Kubernetes CertificateSigningRequest

主要几个地方

1 修改代码文件中的ip地址

我物理机的ip为192.168.0.100,修改以下几处

2 讲整个代码项目copy到k8s master节点

省略

3 执行 make setup-kube-for-outcluster

注意,这里在遇到了报错,原因是在调用set-kube-ca-v1.20+.sh的时候,获取kube-root-ca.crt遇到了报错,所以脚本的patch部分也是错的,patch了个空值应该是,这里先继续,接下来会讲怎么跳出这个坑 

 配置webhook server端 

在物理机新建个文件夹

然后讲生成的证书文件拉到物理机

结合代码文件,配置物理机环境变量CERT_DIR,也就是证书目录,服务是htpps起来的 

export CERT_DIR= 

起webhook服务端

 kubectl调用尝试并解决bug

结合之前作者的文章,我们进行测试,发现遇到了证书问题,这也就上文最开始的地方 执行 make setup-kube-for-outcluster遇到的那个bug,注册webhook的时候少了caBundle值

 caBundle的获取需要先获取之前脚本创建的secret

kubectl get secret denyenv-tls-secret

 获取证书编码

kubectl get secret denyenv-tls-secret -o yaml

or

kubectl get secret denyenv-tls-secret -o jsonpath='{.data.tls\.crt}' 

删除原有的注册的ValidatingWebhookConfiguration

 手工加上

 重新注册一遍

注册成功 

 重新测试

创建有环境变量的pod,创建失败

kubectl run nginx --image nginx --env='FOO=BAR'

同时看到了日志 

 创建无环境变量的pod,创建成功

kubectl run nginx --image nginx

断点调试

参考:Kubernetes admission webhook server 开发教程 - ZengXu's BLOG

参考:https://github.com/phosae/denyenv-validating-admission-webhook 

参考:k8s admission webhook初探_u012803274的博客-CSDN博客_k8s自定义webhook 

参考:从0到1开发K8S_Webhook最佳实践 - 知乎 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值