安装自定义签名证书

当您首次登录 NetQ UI 作为本地部署的一部分时,您的浏览器将显示警告,指示默认证书不受信任。您可以按照本页概述的步骤安装您自己的自定义签名证书来避免此警告。自签名证书对于非生产环境或云部署已足够。

如果您已经安装了证书并想要更改或更新它,请在按照本节概述的步骤之前运行 kubectl delete secret netq-gui-ingress-tls [name] --namespace default 命令。在进行更新后,使用 kubectl delete pod -l app.kubernetes.io/name=ingress-nginx --namespace ingress-nginx 命令重启 nginx。

您需要以下项目来执行证书安装

  • 有效的 X509 证书,包含主题备用名称 (SAN) 属性。

  • 证书的私钥文件。

  • 配置为访问 NetQ UI 的 DNS 记录名称。

    FQDN 应与证书的通用名称匹配。如果您在通用名称中使用通配符 — 例如,如果证书的通用名称是 *.example.com — 那么 NetQ 遥测服务器应位于该域的子域上,可通过类似 netq.example.com 的 URL 访问。

  • 功能正常且健康的 NetQ 实例。

    您可以通过运行 netq show opta-health 命令来验证这一点。

使用 NetQ CLI 安装证书

  1. 通过 SSH 登录到 NetQ VM,并将您的证书和密钥文件复制到那里。

  2. 生成一个名为 netq-gui-ingress-tls 的 Kubernetes secret

    cumulus@netq-ts:~$ kubectl create secret tls netq-gui-ingress-tls \
        --namespace default \
        --key <name of your key file>.key \
        --cert <name of your cert file>.crt
    
  3. 验证您是否成功创建了 secret

    cumulus@netq-ts:~$ kubectl get secret
    
    NAME                               TYPE                                  DATA   AGE
    netq-gui-ingress-tls               kubernetes.io/tls                     2      5s
    
  4. 更新 ingress 规则文件以安装自签名证书。

    1. 创建一个名为 ingress.yaml 的新文件

    2. 复制以下内容并添加到文件中

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      annotations:
        nginx.ingress.kubernetes.io/ssl-redirect: "true"
        nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
        nginx.ingress.kubernetes.io/proxy-connect-timeout: "3600"
        nginx.ingress.kubernetes.io/proxy-read-timeout: "3600"
        nginx.ingress.kubernetes.io/proxy-send-timeout: "3600"
        nginx.ingress.kubernetes.io/proxy-body-size: 10g
        nginx.ingress.kubernetes.io/proxy-request-buffering: "off"
      name: netq-gui-ingress-external
      namespace: default
    spec:
      ingressClassName: ingress-nginx-class
      rules:
      - host: <your-hostname>
        http:
          paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: netq-gui
                port:
                  number: 80
            path: /
            pathType: Prefix
      tls:
      - hosts:
        - <your-hostname>
        secretName: netq-gui-ingress-tls
    
    1. <your-hostname> 替换为 NetQ VM 的 FQDN。

  5. 应用新规则

    cumulus@netq-ts:~$ kubectl apply -f ingress.yaml
    ingress.extensions/netq-gui-ingress-external configured
    

    如果您的 ingress 规则配置成功,则会显示上述消息。

  6. 通过更新 Swagger ingress 规则文件,配置 NetQ API 以使用新证书。

    1. 创建一个名为 swagger-ingress.yaml 的新文件

    2. 复制以下内容并添加到文件中

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      annotations:
        nginx.ingress.kubernetes.io/ssl-redirect: "true"
        nginx.ingress.kubernetes.io/proxy-connect-timeout: "300"
        nginx.ingress.kubernetes.io/proxy-read-timeout: "300"
        nginx.ingress.kubernetes.io/proxy-send-timeout: "300"
        nginx.ingress.kubernetes.io/proxy-body-size: 10g
        nginx.ingress.kubernetes.io/proxy-request-buffering: "off"
      name: netq-swagger-ingress-external
      namespace: default
    spec:
      ingressClassName: ingress-nginx-class
      rules:
      - host: <your-hostname>
        http:
          paths:
          - path: "/swagger"
            pathType: Prefix
            backend:
              service:
                name: swagger-ui
                port:
                  number: 8080
      tls:
      - hosts:
        - <your-hostname>
        secretName: netq-gui-ingress-tls
    
    1. <your-hostname> 替换为 NetQ VM 的 FQDN。

  7. 应用新规则

    cumulus@netq-ts:~$ kubectl apply -f swagger-ingress.yaml
    

您的自定义证书现在应该可以工作了。通过在浏览器中打开 https://<your-hostname-or-ipaddr> 访问 NetQ UI 来验证这一点。