Kubernetes 的 Reflector 工具使用

最近遇到一个问题,需要在k8s集群里面,跨命名空间来进行组件之间的ssl认证。
当前的k8s环境使用cert-manager工具来进行自动化证书管理。
首先介绍一下cert-manager的工作原理,
它利用了 Kubernetes 的自定义资源定义(CRD)机制。主要的自定义资源包括Certificate、Issuer和ClusterIssuer。Certificate资源定义了需要获取或管理的证书相关信息,如域名、有效期等。Issuer和ClusterIssuer用于定义证书颁发机构(CA)的相关信息,包括如何与 CA 进行交互来获取证书。
eg:certificate资源创建的时候,Cert - Manager 会根据关联的Issuer或ClusterIssuer向指定的 CA 发起证书请求。
当前的环境里面使用一个Issuer是一个命名空间级别的资源,不能跨命名空间使用。
通过搜索Cert - Manager的官方文档,找到了一个跨命名空间同步secrets的方法,使用Reflector 工具。
首先需要部署一个反射器, 有两种部署方式:
• Helm 部署
添加 Helm 仓库:helm repo add emberstack https://emberstack.github.io/helm-charts
更新仓库:helm repo update。
安装或升级:helm upgrade --install reflector emberstack/reflector,可通过修改 Values 自定义配置,如 nameOverride、image.repository 等参数。
• 手动部署
手动部署:从 GitHub Releases 页面下载 reflector.yaml 文件,使用 kubectl 应用到 kube-system 命名空间:kubectl -n kube-system apply -f https://github.com/emberstack/kubernetes-reflector/releases/latest/download/reflector.yaml
Ps:
在执行helm部署前,需要手动拉取反射器的镜像 af.hikvision.com.cn/docker-drpd/emberstack/kubernetes-reflector:7.1.288
下面介绍一下使用方法,只需要在创建的certificate上面添加annotations就可以实现。
• 添加 reflector.v1.k8s.emberstack.com/reflection-allowed: "true" 允许反射。
• 添加 reflector.v1.k8s.emberstack.com/reflection-allowed-namespaces: ""(逗号分隔命名空间列表或正则表达式)限制允许反射的命名空间,若省略或为空则允许所有命名空间。
• 自动创建镜像相关
○ 添加 reflector.v1.k8s.emberstack.com/reflection-auto-enabled: "true" 自动在其他命名空间创建同名的资源(需 reflection-allowed 为 true)
○ 添加 reflector.v1.k8s.emberstack.com/reflection-auto-namespaces: "" 指定自动创建资源的命名空间(省略或为空允许所有命名空间,且受 reflection-allowed-namespaces 限制)
源资源删除、反射或自动反射功能关闭、自动反射命名空间不再符合允许条件时,自动反射的资源将被删除,创建自动反射资源时若目标命名空间已有同名资源则跳过并记录警告。

vi certificate.yaml
apiVersion:cert-manager.io/v1
kind:Certificate
metadata:
name:xxxxx-tls-rabbitmq
namespace:openstack
spec:
dnsNames:
-rabbitmq
-rabbitmq.openstack
-rabbitmq.openstack.svc.cluster.local
commonName:center-cmp-tls-rabbitmq
secretName:center-cmp-tls-rabbitmq
duration:876000h0m0s
issuerRef:
name:openstack-ca-issuer
kind:Issuer
privateKey:
size:2048
secretTemplate:
annotations:
reflector.v1.k8s.emberstack.com/reflection-allowed:"true"#允许反射
reflector.v1.k8s.emberstack.com/reflection-allowed-namespaces:"xxx-xxxx"# 允许反射的命名空间
reflector.v1.k8s.emberstack.com/reflection-auto-enabled:"true"#允许自动反射
reflector.v1.k8s.emberstack.com/reflection-auto-namespaces:"xxx-xxxx"#允许自动反射的命名空间

参考:https://github.com/emberstack/kubernetes-reflector

posted @ 2024-12-22 13:01  lars_huan  阅读(257)  评论(0)    收藏  举报