引言

通过operator SDK创建的webhook默认使用的service的方式访问webhook server,这需要将webhook部署到k8s上才能工作。对于开发的初级阶段,往往需要在反复修改调试代码,每次将webhook部署到k8s上很不方便。本节将介绍在本地调试webhook的方法。

原理

webhook分别为两部分,其一是能够处理https请求的web服务器,以及webhook请求的处理程序;其二是在k8s上声明哪些资源对象状态变化需要调用webhook请求,该功能通过创建mutatingwebhookconfigurations和validatingwebhookconfigurations实现。所以原理上web服务器可以本地节点启动,然后修改k8s上的webhook配置,使其将请求发送给本地的web服务器。

需要完成三个步骤:

  1. 生成认证证书,包括服务端和客户端,证书中必须包含本地节点的地址或域名。
  2. 使用认证证书,在本地启动webhook的服务端程序;
  3. 在k8s创建mutatingwebhookconfigurations和validatingwebhookconfigurations对象,指定使用本地webhook服务,其中clientConfig字段指定为本地地址,例如:https://192.168.56.200:9443/mutate-znbase-inspur-com-v1alpha1-znbasecluster

生成证书

operator SDK使用Kubernetes的认证证书管理插件cert-manager,生成所需的认证证书,参见。修改认证证书生成config/certmanager/certificate.yaml文件,添加本地服务器的ip地址,如下:

...
spec:# $(SERVICE_NAME) and $(SERVICE_NAMESPACE) will be substituted by kustomizednsNames:- $(SERVICE_NAME).$(SERVICE_NAMESPACE).svc- $(SERVICE_NAME).$(SERVICE_NAMESPACE).svc.cluster.local
+  ipAddresses:
+  - 192.168.56.200
...

部署operator

假设当前我们已经有了一个可运行的operator,并添加了webhook。使用make deploy IMG=registry.inspur.com/zb-controller部署。
成功后,operator SDK会为我们创建运行operator的pod、持有认证证书的secret以及mutatingwebhookconfigurations和validatingwebhookconfigurations。

将认证证书保存到本地

部署operator后,我们查看pod的配置,结果如下:

apiVersion: v1
kind: Pod
metadata:name: zb-operator-controller-manager-7565cd76-przbhnamespace: zb-operator-system
spec:containers:...name: manager...volumeMounts:- mountPath: /tmp/k8s-webhook-server/serving-certsname: certreadOnly: true...volumes:- name: certsecret:defaultMode: 420secretName: webhook-server-cert...

这里有两个有用的信息:

  • pod使用的认证来自名为webhook-server-cert的secret;
  • 认证证书映射到本地的路径:/tmp/k8s-webhook-server/serving-certs;

根据上面的信息,我们执行如下命令:

kubectl get secret webhook-server-cert -n zb-operator-system -o jsonpath='{.data.tls\.crt}'| base64 --decode > /tmp/k8s-webhook-server/serving-certs/tls.crt
kubectl get secret webhook-server-cert -n zb-operator-system -o jsonpath='{.data.tls\.key}'| base64 --decode > /tmp/k8s-webhook-server/serving-certs/tls.key

分别将认证证书的公钥和私钥保存到本地目录。

修改k8s上的webhook配置

执行如下命令,修改mutatingwebhookconfigurations,将clientConf替换为本地节点
kubectl patch mutatingwebhookconfigurations zb-operator-mutating-webhook-configuration -n zb-operator-system --type='json' -p '[{"op":"remove","path":"/webhooks/0/clientConfig/service"},{"op":"replace","path":"/webhooks/0/clientConfig/url","value":"https://192.168.56.200:9443/validate-znbase-inspur-com-v1alpha1-znbasecluster"}]'

使用同样的方法,修改validatingwebhookconfigurations

在本地启动webhook服务

至此就可以在本地节点启动webhook服务,并调试了

在本地节点调试webhook相关推荐

  1. 前端开启本地serve调试项目,http-server:一个命令行http服务器

    前端开启本地serve调试项目,http-server:一个命令行http服务器 http-server是一个简单的.基本不用命令配置的http服务器,一般用于开发调试,测试,本地学习. 全局安装: ...

  2. pycharm remote 远程项目 同步 本地_手把手教你Pycharm远程连接服务器端项目进行本地开发调试...

    以下文章来源于Python进击者 ,作者kuls Python进击者 博主Kuls,分享Python爬虫,Python后端等原创技术文章 by:Python进击者 centos7的云服务器上,我该怎么 ...

  3. windows本地编译调试hbase-3.0.0-alpha-2-SNAPSHOT源码

    windows本地编译调试hbase-3.0.0-alpha-2-SNAPSHOT源码 前言 代码下载,编译与调试 问题解决 前言 研究hbase的原因有两方面:一是自己是做大数据相关的开发工作,hb ...

  4. NatApp内网穿透 微信公众号本地开发调试

    NatApp内网穿透 微信公众号本地开发调试 什么是内网穿透 内网穿透简单来说就是将内网外网通过natapp隧道打通,让内网的数据让外网可以获取.比如常用的办公室软件等,一般在办公室或家里,通过拨号上 ...

  5. VS中 本地Windows调试器 与 生成解决方案

    ① 平时,我们使用VS会直接新建一个项目,然后在使用时,双击.sln的文件便可打开VS工程:因为此时的.sln文件表示,我们创建的是一个解决方案. ② 当出现,VS打开方式为双击.bat文件时,此时需 ...

  6. [007]爬虫系列 | so-json 过本地反调试

    一.背景 js[最牛加密]:https://www.sojson.com/jsobfuscator.html  本文主要介绍如何过: 正则防止格式化 禁止控制台输出 死循环 setInterval函数 ...

  7. 完美解决序微信小程序不能用本地ip调试的问题,不在以下 request 合法域名列表中,请参考文档:https://d

    微信小程序不能用本地ip调试的问题,错误如下 不在以下 request 合法域名列表中,请参考文档:https://developers.weixin.qq.com/miniprogram/dev/f ...

  8. 钉钉微应用 - - - - 如何本地开发调试

    关于钉钉微应用开发,真的尝尽了苦头. 要么是因为非钉钉环境报错,要么是发版到钉钉之后看不到日志的难受. 之前写过一个钉钉微应用 - - - - 如何本地开发调试?算是解决了一部分问题,但还是很不方便. ...

  9. 本地idea 调试Hadoop的mr任务(Windows环境)以及对应安装包的下载

    1.写一个wordcount程序 package com.huni.mapreduce.WordCount;import org.apache.hadoop.io.IntWritable; impor ...

最新文章

  1. go语言的书籍的淘宝调查
  2. HTTP API领域在围绕OAS进行整合
  3. go语言服务器运行,Go语言实现Web服务器
  4. InterDev 调试错误信息: Unable to set server into correct debugging state automatically....的解决办法...
  5. 易商云页面认证失败是什么情况_Serverless 云原生框架 Malagu:认证与授权
  6. 已知先序和中序得出后序
  7. Oracle性能调优之--Buffer cache 的调整与优化
  8. java年月日时分秒格式_Java 日期时间 LocalDate LocalTime LocalDateTime类
  9. 微型计算机电路基础第四版逻辑门,数字逻辑的电路基础——逻辑门.PDF
  10. python打砖块游戏算法设计分析_python小游戏--打砖块的实现与讲解(python自学总结系列)...
  11. 数据库设计中char与varchar类型的区别
  12. C#按Esc后退出对话框
  13. 超级烧脑惊悚悬疑电影《恐怖游轮》(原片+解说)
  14. Java基础知识——JNI入门介绍
  15. python里常用的正则表达式
  16. ubuntn安装qt5.12.10
  17. 算法笔记-二分查找和二分答案
  18. 解读神书《凤凰项目》,带你跳出DevOps转型的所有坑
  19. taptap评论爬虫
  20. vue用post请求下载文件

热门文章

  1. 基于java+ssm的音乐信息网站-计算机毕业设计
  2. php中文手册 人间最美四月天,人间最美四月天,不负春光与时行
  3. idea官网无法进入
  4. a16z crypto合伙人:区块链的魅力与挑战 |链捕手
  5. Linux环境安装设置:VMWare 安装CentOS 配置上网
  6. 【Java.NIO】Selector,及SelectionKey
  7. 前端传过来集合,后端如何接
  8. 基于QT和OpenGL实现的水波动态壁纸
  9. python取随机小数_python随机数
  10. 投资学(二) MOOC