当前位置: 首页 > java >正文

k8s开发webhook使用certmanager生成证书

1.创建 Issuer

apiVersion: cert-manager.io/v1
kind: Issuer
metadata:name: selfsigned-issuernamespace: default
spec:selfSigned: {}

2.Certificate(自动生成 TLS 证书)

apiVersion: cert-manager.io/v1
kind: Certificate
metadata:name: webhook-certnamespace: default
spec:secretName: webhook-server-certduration: 8760h # 1 yearrenewBefore: 360hsubject:organizations:- example.comcommonName: webhook-service.default.svcdnsNames:- webhook-service.default.svc- webhook-service.default.svc.cluster.localissuerRef:name: selfsigned-issuerkind: Issuer

3. 对以上yaml执行apply,然后查看生成的证书

kubectl get webhook-server-cert

4. 在deploy中挂载证书

volumeMounts:- name: tlsmountPath: /tlsreadOnly: true
volumes:- name: tlssecret:secretName: webhook-server-cert

4.根据证书获取ca

kubectl get secret webhook-server-tls -o jsonpath='{.data.ca\.crt}'

或者

kubectl get secret webhook-server-tls -o jsonpath='{.data.ca\.crt}' | base64 -d > ca.crt

然后把这个值 粘贴进 MutatingWebhookConfiguration 的 caBundle 字段中。

本地开发时,可以导出tls.crt和tls.key

# 导出 tls.crt
kubectl get secret webhook-server-cert  -n default -o jsonpath='{.data.tls\.crt}' | base64 -d > tls.crt# 导出 tls.key
kubectl get secret webhook-server-cert  -n default -o jsonpath='{.data.tls\.key}' | base64 -d > tls.key

5. 创建MutatingWebhookConfiguration webhook(设置 caBundle)

apiVersion: admissionregistration.k8s.io/v1
kind: MutatingWebhookConfiguration
metadata:name: pod-mutator
webhooks:- name: mpod.kb.ioclientConfig:service:name: webhook-servicenamespace: defaultpath: /mutateport: 443caBundle: <填入 webhook-server-cert 中的 ca.crt 内容(Base64)>rules:- apiGroups: [""]apiVersions: ["v1"]operations: ["CREATE"]resources: ["pods"]admissionReviewVersions: ["v1"]sideEffects: None

6.创建deploy

apiVersion: apps/v1
kind: Deployment
metadata:name: webhook-servernamespace: defaultlabels:app: webhook-server
spec:replicas: 1selector:matchLabels:app: webhook-servertemplate:metadata:labels:app: webhook-serverspec:containers:- name: webhook-serverimage: mesh-webhook:v0.0.1imagePullPolicy: Alwaysports:- containerPort: 8443name: httpsvolumeMounts:- name: webhook-tlsmountPath: /tlsreadOnly: trueargs:- "--tls-cert=/tls/tls.crt"- "--tls-key=/tls/tls.key"volumes:- name: webhook-tlssecret:secretName: webhook-server-cert  # cert-manager 生成的 Secret 名称
---
apiVersion: v1
kind: Service
metadata:name: webhook-servicenamespace: default
spec:selector:app: webhook-serverports:- port: 443targetPort: 8443protocol: TCPname: https
http://www.xdnf.cn/news/12151.html

相关文章:

  • 记一次spark在docker本地启动报错
  • PX4 | 无人机关闭磁力计罗盘飞行(yaw estimate error报错解决方法)
  • vllm安装注意事项[nccl、cuda、python相关]
  • 七彩喜智慧养老平台:科技赋能下的市场蓝海,满足多样化养老服务需求
  • spring官方脚手架连接不上解决方案
  • 语雀文档保存失败URI malformed
  • v1.0.1版本更新·2025年5月22日发布-优雅草星云物联网AI智控系统
  • YAML在自动化测试中的三大核心作用
  • SSL/TLS握手全流程拆解:从“Hello“到“安全通道“的每一个字节
  • 高性能分布式消息队列系统(四)
  • Spring Boot 常用注解面试题深度解析
  • 重磅更新! 基于Gemini 2.5 Pro打造的AI智能体PlantUML-X上线!
  • Vue3入门指南:从零到精通的快速上手
  • CppCon 2015 学习:CLANG/C2 for Windows
  • c++的引用
  • 26考研 | 王道 | 计算机组成原理 | 三、存储系统
  • 数据质量是什么意思?怎样做好数据质量监控?
  • 【Flask】:轻量级Python Web框架详解
  • 解决ts报错找不到vue组件,Module “d:src/views/quota/logicpoolinfo/components/add
  • stm32_GPIO
  • 63、.NET 异常处理
  • Honor of Kings 2025.06.05
  • 如何自定义一个 Spring Boot Starter?
  • 手撕 K-Means
  • 20250605车充安服务器受木马攻击导致服务不可用
  • 【SSM】SpringBoot学习笔记1:SpringBoot快速入门
  • 02 Deep learning神经网络的编程基础 逻辑回归--吴恩达
  • ES6中的Map与Set数据结构的简单应用
  • 如何轻松将视频从安卓设备传输到电脑?
  • QT开发技术【ffmpeg + QAudioOutput】音乐播放器 完善