IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> K3s(Kubernetes)环境使用Let‘s Encrypt证书的部署及自动配置https域名-阿里云域名解析管理 -> 正文阅读

[网络协议]K3s(Kubernetes)环境使用Let‘s Encrypt证书的部署及自动配置https域名-阿里云域名解析管理

安装cert-manager

官方文档 https://cert-manager.io/docs/

官方仓库 https://github.com/jetstack/cert-manager

wget https://github.com/jetstack/cert-manager/releases/download/v1.7.1/cert-manager.yaml
kubectl apply -f cert-manager.yaml

查看安装情况

kubectl get pods -n cert-manager -w

输出

NAME                                       READY   STATUS    RESTARTS   AGE
cert-manager-6c576bddcf-k9pdr              1/1     Running   0          78s
cert-manager-cainjector-669c966b86-fdx9f   1/1     Running   0          78s
cert-manager-webhook-7ff944cc49-mw5rq      1/1     Running   0          78s

另开终端查看cert-manager运行日志

kubectl logs -f $(kubectl get pods -n cert-manager | grep cert-manager | grep -v 'cainjector\|webhook' | awk '{print $1}') -n cert-manager

也可以查看临时生成的专门验证证书的 Ingress 对象的运行情况

kubectl get pods -w

临时对象cm-acme-http-solver-xxxx从创建到消亡的过程

配置dns自动颁发证书-阿里云域名解析

安装 alidns-webhook

官方仓库 https://github.com/pragkent/alidns-webhook

下载文件

wget https://raw.githubusercontent.com/pragkent/alidns-webhook/master/deploy/bundle.yaml

替换文件中域名

sed -i s/'acme.yourcompany.com'/'acme.foxwho.com'/g bundle.yaml

创建 阿里云 secret

kubectl -n cert-manager create secret generic alidns-secret \
--from-literal=access-key='YOUR_ACCESS_KEY' 
--from-literal=secret-key='YOUR_SECRET_KEY'

YOUR_ACCESS_KEY :阿里云 AccessKey
YOUR_SECRET_KEY :阿里云 AccessSECRET

安装 alidns-webhook

kubectl apply -f  bundle.yaml

创建 ClusterIssuer

cluster-issuer-letsencrypt-prod.yaml

apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  namespace: cert-manager
  name: letsencrypt-prod
spec:
  acme:
    # Change to your letsencrypt email
    email: foxiswho@gmail.com
    server: https://acme-v02.api.letsencrypt.org/directory
    privateKeySecretRef:
      name: letsencrypt-prod
    solvers:
    - dns01:
        webhook:
          groupName: acme.foxwho.com
          solverName: alidns
          config:
            region: ""
            accessKeySecretRef:
              name: alidns-secret
              key: access-key
            secretKeySecretRef:
              name: alidns-secret
              key: secret-key

metadata.name 是我们创建的签发机构的名称,后面我们创建证书的时候会引用它
spec.acme.email 是你自己的邮箱,证书快过期的时候会有邮件提醒,不过 cert-manager 会利用 acme 协议自动给我们重新颁发证书来续期
spec.acme.server 是 acme 协议的服务端,我们这里用 Let’s Encrypt,这个地址就写死成这样就行
spec.acme.privateKeySecretRef 指示此签发机构的私钥将要存储到哪个 Secret 对象中,名称不重要
spec.acme.dns01 这里指示签发机构使用 DNS-01 的方式进行 acme 协议 (还可以用 DNS 方式,acme 协议的目的是证明这台机器和域名都是属于你的,然后才准许给你颁发证书)

执行命令

kubectl apply -f cluster-issuer-letsencrypt-prod.yaml 

申请一个证书

foxwho-tls-certificate.yaml

apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  namespace: cert-manager
  name: foxwho-tls
spec:
  secretName: foxwho-tls
  dnsNames:
  - "*.foxwho.com"
  - "dev.foxwho.com"
  issuerRef:
    name: letsencrypt-prod
    kind: ClusterIssuer

说明:

spec.secretName 指示证书最终存到哪个 Secret 中
spec.issuerRef.kind 值为 ClusterIssuer 说明签发机构不在本 namespace 下,而是在全局
spec.issuerRef.name 我们创建的签发机构的名称 (ClusterIssuer.metadata.name)
spec.dnsNames 指示该证书的可以用于哪些域名,与域名解析的一致,支持泛域名和单个域名

执行命令,申请证书

kubectl apply -f foxwho-tls-certificate.yaml

查看certificate创建结果

kubectl get certificate -A

结果输出

NAMESPACE      NAME                         READY   SECRET                       AGE
cert-manager   alidns-webhook-ca            True    alidns-webhook-ca            34m
cert-manager   alidns-webhook-webhook-tls   True    alidns-webhook-webhook-tls   34m
cert-manager   foxwho-tls                   True    foxwho-tls                   22m

刚创建后查看certificate会发现ready状态为false, 稍等一会自动在dns解析里创建txt 记录,然后去签发证书,该字段就会变为true

查看签发证书

kubectl get secrets -A

结果输出

NAMESPACE         NAME                                                 TYPE                                  DATA   AGE
cert-manager      default-token-b8rp5                                  kubernetes.io/service-account-token   3      55m
cert-manager      cert-manager-token-gqqhh                             kubernetes.io/service-account-token   3      55m
cert-manager      cert-manager-cainjector-token-mdh6s                  kubernetes.io/service-account-token   3      55m
cert-manager      cert-manager-webhook-token-4srgb                     kubernetes.io/service-account-token   3      55m
cert-manager      cert-manager-webhook-ca                              Opaque                                3      55m
cert-manager      alidns-webhook-token-z68gg                           kubernetes.io/service-account-token   3      42m
cert-manager      alidns-webhook-ca                                    kubernetes.io/tls                     3      42m
cert-manager      alidns-webhook-webhook-tls                           kubernetes.io/tls                     3      42m
cert-manager      alidns-secret                                        Opaque                                2      37m
cert-manager      letsencrypt-prod                                     Opaque                                1      32m
cert-manager      foxwho-tls                                           kubernetes.io/tls                     2      27m 

foxwho-tls 这一行,此时DATA 变为2,说明里面存着真正的证书文件

Issuer 与 ClusterIssuer 的区别是 ClusterIssuer 可跨命名空间使用,而 Issuer 需在每个命名空间下配置后才可使用。这里我们使用 ClusterIssuer,其类型选择 Let‘s Encrypt

可以看到这个证书是个泛域名证书,此时我们ingress 可以直接使用该secert,不需要再去添加注解执行使用的issuer/cluseteissuer了

证书使用案例

Ingress 版本

test.foxwho.com.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: whoami-https
  namespace: default
  annotations:
    kubernetes.io/ingress.class: traefik
spec:
  tls:
  - hosts:
      - test.foxwho.com
    secretName: foxwho-tls
  rules:
  - host: test.foxwho.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
              service:
                name: whoami
                port:
                  number: 80

nginx 版本

test.foxwho.com.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: whoami-https
  namespace: default
  annotations:
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
  ingressClassName: nginx
  tls:
  - hosts:
      - test.foxwho.com
    secretName: foxwho-tls
  rules:
  - host: test.foxwho.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          serviceName: whoami
          servicePort: 80
  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-02-26 12:07:35  更:2022-02-26 12:11:21 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年10日历 -2024/10/5 13:23:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码