开发环境:
- 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