Whizard 开启 TLS 进行内部服务通信

Whizard 内部服务间通信使用 TLS 安全加固时要求:

  • whizard 版本 >= v0.7.0

相关上下游服务版本要求:

  • kse 版本 >= 3.4.1

1. 生成 HTTPS 证书

证书生成访问不做限制,生成完证书后,需要在对应空间创建 Secret,供 whizard 挂载使用。证书生成时需配置其服务 DNS 域名。 这里我们使用 cert-manager 生成证书,可以直接生成对应 Secret,也可以换用其他熟悉方式配置生成证书。

  1. 安装cert-manager

    1. kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.12.0/cert-manager.yaml
  2. 查看部署文件 certificate.yaml

    1. apiVersion: cert-manager.io/v1
    2. kind: Issuer
    3. metadata:
    4. name: selfsigned
    5. namespace: kubesphere-monitoring-system
    6. spec:
    7. selfSigned: {}
    8. ---
    9. apiVersion: cert-manager.io/v1
    10. kind: Certificate
    11. metadata:
    12. name: whizard-tls-certs
    13. namespace: kubesphere-monitoring-system
    14. spec:
    15. isCA: true
    16. duration: 87600h #10 year
    17. secretName: whizard-tls-assets
    18. commonName: whizard-tls-assets
    19. ipAddresses:
    20. - 127.0.0.1
    21. dnsNames:
    22. - query-whizard-operated.kubesphere-monitoring-system.svc
    23. - query-frontend-whizard-operated.kubesphere-monitoring-system.svc
    24. - router-whizard-operated.kubesphere-monitoring-system.svc
    25. subject:
    26. organizations:
    27. - cluster.local
    28. - cert-manager
    29. issuerRef:
    30. name: selfsigned
    31. kind: Issuer
    32. group: cert-manager.io
    33. ---
    34. apiVersion: cert-manager.io/v1
    35. kind: Issuer
    36. metadata:
    37. name: whizard-tls-assets
    38. namespace: kubesphere-monitoring-system
    39. spec:
    40. ca:
    41. secretName: whizard-tls-assets
  3. 通过部署文件 certificate.yamlkubesphere-monitoring-system 空间中生成对应指定的 secret

kubectl apply -f certificate.yaml

  1. issuer.cert-manager.io/selfsigned created
  2. certificate.cert-manager.io/whizard-tls-certs created
  3. issuer.cert-manager.io/whizard-tls-assets created

kubectl get secret -n kubesphere-monitoring-system

  1. NAME TYPE DATA AGE
  2. whizard-tls-assets kubernetes.io/tls 3 25s

2. 为 Whizard 组件 HTTP 服务配置 TLS 证书

whizard 支持手动为相关应用组件配置 TLS 证书,进行安全加固,允许单独为件如 query-frontend(数据查询入口)配置,也支持为其他使用 http 服务的相关组件进行设置,他们分别是query-frontend、query、router,设置方法如下:

  1. # 在 queryfrontend 的 cr 中添加 TLS 证书 配置
  2. kubectl edit queryfrontend.monitoring.whizard.io -n kubesphere-monitoring-system whizard
  3. # 在 query 的 cr 中添加 TLS 证书 配置
  4. kubectl edit query.monitoring.whizard.io -n kubesphere-monitoring-system whizard
  5. # router 的 cr 中添加 TLS 证书 配置
  6. kubectl edit router.monitoring.whizard.io -n kubesphere-monitoring-system whizard
  1. spec:
  2. httpServerTLSConfig:
  3. certSecret:
  4. name: whizard-tls-assets
  5. key: tls.crt
  6. keySecret:
  7. name: whizard-tls-assets
  8. key: tls.key

3. 更新 Kubesphere-config 中与 whizard关联的请求配置

kubectl edit configmap -n kubesphere-system kubesphere-config

  1. observability:
  2. enabled: true
  3. monitoring:
  4. endpoint: https://query-frontend-whizard-operated.kubesphere-monitoring-system.svc:10902 # 使用 https 地址进行访问
  5. httpClientConfig:
  6. tlsConfig:
  7. insecureSkipVerify: true
  8. alerting:
  9. endpoint: ""
  10. prometheusEndpoint: ""
  11. thanosRulerEndpoint: https://query-frontend-whizard-operated.kubesphere-monitoring-system.svc:10902 # 使用 https 地址进行访问
  12. thanosRulerHTTPClientConfig:
  13. tlsConfig:
  14. insecureSkipVerify: true
  15. thanosRuleResourceLabels: ""

4. 验证

  • KSE 可观测中心概览页功能正常,使用 HTTPS 的端点链接 Whizard 服务后正常使用;
  • 对相关组件配置 TLS 后,无法使用 HTTP 请求访问,必须使用 HTTPS 协议才可正常访问;

5. 其他

  1. 由于 whizard 内部服务间开启 tls 通信为手动配置的高级功能,因此配置完成后需要对 KSE 进行配置同步,可观测中心页面方可正常使用;
  2. 内部组件间开启 tls 通信后额外消耗待相关性能测试后提供;