0
点赞
收藏
分享

微信扫一扫

基于Docker的k8s webhook本地开发调试

开发环境:

  • mac 笔记本
  • Goland
  • 基于Docker的k8s单点集群

比较常见的问题:

1、网络问题

由于自定义对象CRD是要部署要k8s中的,所以就涉及到k8s网络与主机网络间的通信。这个问题往往卡住了大部分开发者。

2、证书问题

在网络联通的前提下,在请求webhook时需要带有证书,所以开发者也需要了解简单的证书验证知识。

3、webhook问题

由于不熟悉k8s本身的概念所以遇到webhook调不通,不生效等问题无处下手。建议开发者可以通过网络快速熟悉。

首先了解一下k8s API的调用流程:

上图中可以看到mutating admission webhooks 和 validating admission webhooks在此流程中的调用位置。

1、解决网络问题:

首先判断k8s网络与本地网络是否联通,验证方法以及命令:

可以先将本地的operator服务起来,然后在k8s集群环境中telnet服务ip和端口

注意:若k8s集群是基于docker启动的,其与本地通信的域名是host.docker.internal。

telnet IP PORT

2、证书问题:

因为与apiservers交互均需要提供证书,所以我们可以先将operator部署在集群中,通过集群中的cert-manager生成证书,然后将此证书保存在本地使用。具体的方法和命令:

部署operator前需要先给即将生成的证书文件授权要访问的域名或IP,可以通过修改config/certmanager/certificate.yaml文件来实现,如下

添加ipAddresses或者再添加一个dnsName(建议使用域名):

spec:
  # $(SERVICE_NAME) and $(SERVICE_NAMESPACE) will be substituted by kustomize
  dnsNames:
  - $(SERVICE_NAME).$(SERVICE_NAMESPACE).svc
  - $(SERVICE_NAME).$(SERVICE_NAMESPACE).svc.cluster.local
  - host.docker.internal
+  ipAddresses:
+  - 172.16.61.217

开始部署:

make deploy IMG=镜像地址

拉取证书:

注意:证书存放在本地的地址时本地项目启动时生成的随机地址/var/folders/nj/s4k6vg_55qs4rng0_7q2vhkr0000gn/T,需要自己根据实际情况修改一下

kubectl get secret webhook-server-cert -o jsonpath='{.data.tls\\.crt}'| base64 --decode > /var/folders/nj/s4k6vg_55qs4rng0_7q2vhkr0000gn/T/k8s-webhook-server/serving-certs/tls.crt
kubectl get secret webhook-server-cert -o jsonpath='{.data.tls\\.key}'| base64 --decode > /var/folders/nj/s4k6vg_55qs4rng0_7q2vhkr0000gn/T/k8s-webhook-server/serving-certs/tls.key

kubectl -n operators get secret kafka-operator-serving-cert -o jsonpath='{.data.tls\\.crt}'| base64 --decode > /etc/webhook/certs/tls.crt
kubectl -n operators get secret kafka-operator-serving-cert -o jsonpath='{.data.tls\\.key}'| base64 --decode > /etc/webhook/certs/tls.key

最后将k8s中webhook调用地址改为本地地址即可:

此处例子仅修改了mutatingwebhookconfigurations一个调用地址,用户可根据实际情况自己修改。同时需要注意的是validatingwebhookconfigurations的调用地址也需要一起修改一下。

kubectl patch mutatingwebhookconfigurations sunmoonsky-operator-mutating-webhook-configuration -n operators --type='json' -p '[{"op":"remove","path":"/webhooks/0/clientConfig/service"},{"op":"replace","path":"/webhooks/0/clientConfig/url","value":"<https://192.168.65.4:9443/mutate-sms-bob-com-v1alpha1-sunmoonskytool>"

改完后的mutatingwebhookconfigurations:

https://host.docker.internal:9443/mutate-operator-bobfintech-com-v1alpha1-rediscluster

kubectl -n redis-cluster-system get secret webhook-server-cert -o jsonpath='{.data.tls\\.crt}'| base64 --decode > /var/folders/nj/s4k6vg_55qs4rng0_7q2vhkr0000gn/T/k8s-webhook-server/serving-certs/tls.crt
kubectl -n redis-cluster-system get secret webhook-server-cert -o jsonpath='{.data.tls\\.key}'| base64 --decode > /var/folders/nj/s4k6vg_55qs4rng0_7q2vhkr0000gn/T/k8s-webhook-server/serving-certs/tls.key


举报

相关推荐

0 条评论