【k8s运维笔记】使用 cert-manager 自动申请 cloudflare 免费证书

概述

先上一些废话说一说 HTTPS

HTTPS证书(Hyper Text Transfer Protocol Secure certificate)是一种用于加密和验证网站安全性的数字证书。它通过在网络通信中使用加密技术,确保用户在浏览网站时的数据传输是安全的。

再上一些废话说一说 ingress-nginx

Ingress-Nginx 是 Kubernetes 中的一个开源项目,它提供了一个基于 Nginx 的 Ingress 控制器实现。Ingress 是 Kubernetes 中一个用于管理和暴露 HTTP 和 HTTPS 路由的 API 资源,而 Ingress-Nginx 则是为这个功能提供了一种解决方案。

最后说说动机

搭建完一套 k8s 服务后,使用 ingress-nginx 发布web服务,希望能够用使用 cloudflare 免费证书实现 https 访问来提高B格,之前看过很多资料,在有了域名并在 cloudflare 托管为前提,除却 cert-manager 部署和 cloudflare 配置以外实际上真正要创建的东西也就3个。

  • Secret

用来存储 cloudflare 的令牌

  • Issuer / ClusterIssuer

用来管理和颁发证书的资源对象

  • Ingress:

设置 tls 自动获取证书

实际操作

安装 cert-manager

直接去先去cert-manager 官网复制安装脚本执行

bash 复制代码
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.13.2/cert-manager.yaml

配置 cloudflare 令牌

在 cloudflare 里增加令牌,并配置以下权限

markdown 复制代码
- Permissions
  - Zone - DNS - Edit
  - Zone - Zone - Read
- Zone Resources:
  - Include - All Zones

定义 Issuer / Cluster Issuer

此步骤根据情况,如果让命名空间范围内的资源使用证书就参考 Secret / Issuer, 如果让整个集群范围内的资源使用证书,就参考 Secret / ClusterIssuer

Secret / Issuer

bash 复制代码
cat <<EOF | kubectl apply -f - > /dev/null
apiVersion: v1
kind: Secret
metadata:
  name: cloudflare-api-token-secret
  namespace: cert-manager
type: Opaque
stringData:
  api-token: '<REDACTED>' # 这里的值为[配置API Token]一节中创建的API Token值

---
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
  name: cloudflare-acme-issuer
  namespace: <你的命名空间> # 命名空间
spec:
  acme:
    email: '<REDACTED>'
    # 配置证书目录,演练环境使用Staging环境
    # server: https://acme-v02.api.letsencrypt.org/directory
    server: https://acme-staging-v02.api.letsencrypt.org/directory
    privateKeySecretRef:
      name: acme-issuer-account-key
    solvers:
    - dns01:
        cloudflare:
          apiTokenSecretRef:
            name: cloudflare-api-token-secret # 引用当前文档中创建的Secret名称
            key: api-token
EOF

Secret / ClusterIssuer

bash 复制代码
cat <<EOF | kubectl apply -f - > /dev/null
apiVersion: v1
kind: Secret
metadata:
  name: cloudflare-api-token-secret
  namespace: cert-manager # 这里配置为安装cert-manager资源的命名空间
type: Opaque
stringData:
  api-token: '<REDACTED>' # 这里的值为[配置API Token]一节中创建的API Token值

---
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: cloudflare-acme-cluster-issuer
spec:
  acme:
    email: '<REDACTED>'
    # 配置证书目录,演练环境使用Staging环境,注意区分
    server: https://acme-v02.api.letsencrypt.org/directory
    # server: https://acme-staging-v02.api.letsencrypt.org/directory
    privateKeySecretRef:
      name: acme-issuer-account-key
    solvers:
    - dns01:
        cloudflare:
          apiTokenSecretRef:
            name: cloudflare-api-token-secret # 引用当前文档中创建的Secret名称
            key: api-token
EOF

配置 ingress

ingress 里加声明,如果之前的配置都加过了,在访问 ingress 里定义的host之后就能自动注册证书实现 https 访问。

yaml 复制代码
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    cert-manager.io/cluster-issuer: cloudflare-acme-cluster-issuer 
    # 如果是命名空间范内的则写 Issuer
    # cert-manager.io/issuer: cloudflare-acme-issuer
spec:
  tls:
  - hosts:
    - '*.xxx.xxx' # 域名
    secretName: <name> # 自定义名称随便写,会自动生成 Certificate、CertificateRequest

最后

本方案是在家里搭建了一个服务,有一台VPS公网ip的情况下,使用了 frp 做了内网穿透并通过 cloudflare 托管了域名的情况下实现的 https 访问,如果只有域名没有VPS公网ip,也有方法通过 cloudflare 免费发布服务,用到了 cloudflare 零信任隧道,这个以后再说吧。

相关推荐
珹洺1 小时前
Linux操作系统从入门到实战(三)Linux基础指令(上)
linux·运维·服务器
剁椒排骨1 小时前
win11什么都不动之后一段时间黑屏桌面无法显示,但鼠标仍可移动,得要熄屏之后才能进入的四种解决方法
运维·windows·经验分享·计算机外设·win11·win10
angushine1 小时前
让Docker端口映射受Firewall管理而非iptables
运维·docker·容器
归寻太乙1 小时前
Linux环境变量
linux·运维·服务器
m0Java门徒1 小时前
面向对象编程核心:封装、继承、多态与 static 关键字深度解析
java·运维·开发语言·intellij-idea·idea
Sapphire~1 小时前
Linux-06 ubuntu 系统截图软件使用简单记录
linux·运维·ubuntu
高级IT技术专家secops9982 小时前
在统信UOS/麒麟Kylin OS操作系统中配置APT和GIT代理
运维·服务器·git·系统安全·kylin
工头阿乐2 小时前
Appium自动化开发环境搭建
运维·appium·自动化
自由鬼2 小时前
开源漏洞扫描器:OpenVAS
运维·服务器·安全·网络安全·开源·漏洞管理
難釋懷2 小时前
Shell脚本-while循环语法结构
linux·运维·服务器·bash