更新时间:2024-01-26 GMT+08:00

Nginx Ingress配置HTTPS证书

Ingress支持配置HTTPS证书以提供安全服务。

  1. 请参见通过kubectl连接集群,使用kubectl连接集群。
  2. Ingress支持使用kubernetes.io/tlsIngressTLS两种TLS密钥类型,此处以IngressTLS类型为例,详情请参见创建密钥kubernetes.io/tls类型的密钥示例及说明请参见TLS Secret

    执行如下命令,创建名为“ingress-test-secret.yaml”的YAML文件,此处文件名可自定义。

    vi ingress-test-secret.yaml

    YAML文件配置如下:
    apiVersion: v1
    data:
      tls.crt: LS0******tLS0tCg==
      tls.key: LS0tL******0tLS0K
    kind: Secret
    metadata:
      annotations:
        description: test for ingressTLS secrets
      name: ingress-test-secret
      namespace: default
    type: IngressTLS

    此处tls.crt和tls.key为示例,请获取真实的证书和密钥进行替换。tls.crt和tls.key的值为Base64编码后的内容。

  3. 创建密钥。

    kubectl create -f ingress-test-secret.yaml

    回显如下,表明密钥已创建。

    secret/ingress-test-secret created

    查看已创建的密钥。

    kubectl get secrets

    回显如下,表明密钥创建成功。

    NAME                         TYPE                                  DATA      AGE
    ingress-test-secret          IngressTLS                            2         13s

  4. 创建名为“ingress-test.yaml”的YAML文件,此处文件名可自定义。

    vi ingress-test.yaml

    1.23及以上版本集群
    apiVersion: networking.k8s.io/v1
    kind: Ingress 
    metadata: 
      name: ingress-test
      namespace: default
    spec:
      tls: 
      - hosts: 
        - foo.bar.com
        secretName: ingress-test-secret  #替换为您的TLS密钥证书
      rules:
        - host: foo.bar.com
          http:
            paths:
              - path: /
                backend:
                  service:
                    name: <your_service_name>  #替换为您的目标服务名称
                    port:
                      number: <your_service_port>  #替换为您的目标服务端口
                property:
                  ingress.beta.kubernetes.io/url-match-mode: STARTS_WITH
                pathType: ImplementationSpecific
      ingressClassName: nginx
    1.21及以下版本集群
    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress 
    metadata: 
      name: ingress-test
      annotations: 
        kubernetes.io/ingress.class: nginx
    spec:
      tls: 
      - hosts: 
        - foo.bar.com
        secretName: ingress-test-secret   #替换为您的TLS密钥证书
      rules: 
      - host: foo.bar.com
        http: 
          paths: 
          - path: '/'
            backend: 
              serviceName: <your_service_name>  #替换为您的目标服务名称
              servicePort: <your_service_port>  #替换为您的目标服务端口
      ingressClassName: nginx

  5. 创建Ingress。

    kubectl create -f ingress-test.yaml

    回显如下,表示Ingress服务已创建。

    ingress/ingress-test created

    查看已创建的Ingress。

    kubectl get ingress

    回显如下,表示Ingress服务创建成功,工作负载可访问。

    NAME             HOSTS     ADDRESS          PORTS   AGE
    ingress-test     *         121.**.**.**     80      10s

  6. 访问工作负载(例如Nginx工作负载),在浏览器中输入安全访问地址https://121.**.**.**:443进行验证。

    其中,121.**.**.**为统一负载均衡实例的IP地址。