Este conteúdo foi traduzido por máquina para sua conveniência e a Huawei Cloud não pode garantir que o conteúdo foi traduzido com precisão. Para exibir o conteúdo original, use o link no canto superior direito para mudar para a página em inglês.
Central de ajuda/ Cloud Container Engine/ Guia de usuário/ Rede/ Ingresses/ Ingresses do ELB/ Configuração de certificados HTTPS para ingresses do ELB
Atualizado em 2024-11-28 GMT+08:00

Configuração de certificados HTTPS para ingresses do ELB

O ingress oferece suporte à configuração de certificados do TLS e protege seus Serviços com HTTPS.

Atualmente, você pode usar o certificado do segredo do TLS configurado no cluster e o certificado do ELB.

Se o HTTPS estiver habilitado para a mesma porta do mesmo balanceador de carga de várias ingresses, você deverá selecionar o mesmo certificado.

Usar um certificado do segredo do TLS

  1. Use o kubectl para se conectar ao cluster. Para mais detalhes, consulte Conexão a um cluster usando o kubectl.
  2. Ingress oferece suporte a dois tipos de segredo do TLS: kubernetes.io/tls e IngressTLS. IngressTLS é usado como exemplo. Para mais detalhes, consulte Criação de um segredo. Para obter detalhes sobre exemplos do segredo kubernetes.io/tls e sua descrição, consulte Segredos do TLS.

    Execute o seguinte comando para criar um arquivo YAML chamado ingress-test-secret.yaml (o nome do arquivo pode ser personalizado):

    vi ingress-test-secret.yaml

    O arquivo YAML é configurado da seguinte forma:
    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

    Nas informações anteriores, tls.crt e tls.key são apenas exemplos. Substitua-os pelos arquivos reais. Os valores de tls.crt e tls.key são codificados em Base64.

  3. Crie um segredo.

    kubectl create -f ingress-test-secret.yaml

    Se forem exibidas informações semelhantes às seguintes, o segredo foi criado.

    secret/ingress-test-secret created

    Visualize o segredo criado.

    kubectl get secrets

    Se forem exibidas informações semelhantes às seguintes, o segredo foi criado.

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

  4. Crie um arquivo YAML chamado ingress-test.yaml. O nome do arquivo pode ser personalizado.

    vi ingress-test.yaml

    A política de segurança padrão (kubernetes.io/elb.tls-ciphers-policy) é suportada apenas em clusters v1.17.17 ou posterior.

    A política de segurança personalizada (kubernetes.io/elb.security_policy_id) é suportada apenas em clusters de v1.17.17 ou posterior.

    A seguir, o balanceador de carga criado automaticamente é usado como exemplo. O arquivo YAML é configurado da seguinte forma:

    Para clusters da v1.21 ou anterior:

    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress 
    metadata: 
      name: ingress-test
      annotations: 
        kubernetes.io/elb.class: performance
        kubernetes.io/ingress.class: cce
        kubernetes.io/elb.port: '443'
        kubernetes.io/elb.autocreate: 
          '{
              "type": "public",
              "bandwidth_name": "cce-bandwidth-******",
              "bandwidth_chargemode": "bandwidth",
              "bandwidth_size": 5,
              "bandwidth_sharetype": "PER",
              "eip_type": "5_bgp",
              "available_zone": [
                  "ap-southeast-1a"
              ],
              "elb_virsubnet_ids":["b4bf8152-6c36-4c3b-9f74-2229f8e640c9"],
              "l7_flavor_name": "L7_flavor.elb.s1.small"
           }'
        kubernetes.io/elb.security_policy_id: 99bec42b-0dd4-4583-98e9-b05ce628d157  # The priority of the custom security policy is higher than that of the default security policy.
        kubernetes.io/elb.tls-ciphers-policy: tls-1-2
    spec:
      tls: 
      - secretName: ingress-test-secret
      rules: 
      - host: foo.bar.com
        http: 
          paths: 
          - path: '/'
            backend: 
              serviceName: <your_service_name>  # Replace it with the name of your target Service.
              servicePort: 80
            property:
              ingress.beta.kubernetes.io/url-match-mode: STARTS_WITH
    Para clusters da v1.23 ou posterior:
    apiVersion: networking.k8s.io/v1
    kind: Ingress 
    metadata: 
      name: ingress-test
      annotations: 
        kubernetes.io/elb.class: performance
        kubernetes.io/elb.port: '443'
        kubernetes.io/elb.autocreate: 
          '{
              "type": "public",
              "bandwidth_name": "cce-bandwidth-******",
              "bandwidth_chargemode": "bandwidth",
              "bandwidth_size": 5,
              "bandwidth_sharetype": "PER",
              "eip_type": "5_bgp",
              "available_zone": [
                  "ap-southeast-1a"
              ],
              "elb_virsubnet_ids":["b4bf8152-6c36-4c3b-9f74-2229f8e640c9"],
              "l7_flavor_name": "L7_flavor.elb.s1.small"
           }'
        kubernetes.io/elb.security_policy_id: 99bec42b-0dd4-4583-98e9-b05ce628d157  # The priority of the custom security policy is higher than that of the default security policy.
        kubernetes.io/elb.tls-ciphers-policy: tls-1-2
    spec:
      tls: 
      - secretName: ingress-test-secret
      rules: 
      - host: foo.bar.com
        http: 
          paths: 
          - path: '/'
            backend: 
              service:
                name: <your_service_name>  # Replace it with the name of your target Service.
                port: 
                  number: 8080             # Replace 8080 with the port number of your target Service.
            property:
              ingress.beta.kubernetes.io/url-match-mode: STARTS_WITH
            pathType: ImplementationSpecific
      ingressClassName: cce 
    Tabela 1 Parâmetros principais

    Parâmetro

    Obrigatório

    Tipo

    Descrição

    kubernetes.io/elb.security_policy_id

    Não

    String

    O ID da política de grupo de segurança personalizada no ELB. Obtê-lo no console do ELB. Esse campo entra em vigor somente quando HTTPS é usado e tem uma prioridade mais alta do que a política de segurança padrão.

    Para obter detalhes sobre como criar e atualizar uma diretiva de segurança personalizada, consulte Política de segurança do TLS.

    kubernetes.io/elb.tls-ciphers-policy

    Não

    String

    O valor padrão é tls-1-2, que é a política de segurança padrão usada pelo ouvinte e só entra em vigor quando HTTPS é usado.

    Opções:

    • tls-1-0
    • tls-1-1
    • tls-1-2
    • tls-1-2-strict

    Para obter detalhes sobre conjuntos de cifras para cada política de segurança, consulte Tabela 2.

    tls

    Não

    Array of strings

    Quando HTTPS é usado, esse parâmetro deve ser adicionado para especificar o certificado do segredo.

    Vários nomes de domínio independentes e certificados podem ser adicionados. Para mais detalhes, consulte Configuração da Indicação de nome do servidor (SNI) para ingresses de ELB.

    secretName

    Não

    String

    Esse parâmetro é obrigatório se o HTTPS for usado. Defina este parâmetro para o nome do segredo criado.

    Tabela 2 Descrição do parâmetro tls_ciphers_policy

    Política de segurança

    Versão do TLS

    Conjunto de criptografia

    tls-1-0

    TLS 1.2

    TLS 1.1

    TLS 1.0

    ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:AES128-GCM-SHA256:AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:AES128-SHA256:AES256-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:AES128-SHA:AES256-SHA

    tls-1-1

    TLS 1.2

    TLS 1.1

    tls-1-2

    TLS 1.2

    tls-1-2-strict

    TLS 1.2

    ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:AES128-GCM-SHA256:AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:AES128-SHA256:AES256-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384

  5. Crie um ingress.

    kubectl create -f ingress-test.yaml

    Se forem exibidas informações semelhantes às seguintes, o ingress foi criado.

    ingress/ingress-test created

    Visualize o ingress criado.

    kubectl get ingress

    Se informações semelhantes às seguintes forem exibidas, o ingress foi criado e a carga de trabalho está acessível.

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

  6. Digite https://121.**.**.**:443 na caixa de endereço do navegador para acessar a carga de trabalho (por exemplo, carga de trabalho do Nginx).

    121.**.**.** indica o endereço IP do balanceador de carga unificado.

Usar o certificado do ELB

Para usar o certificado do ELB, você pode especificar as anotações kubernetes.io/elb.tls-certificate-ids.

  1. Se você especificar o certificado IngressTLS e o certificado do ELB, o último será usado.
  2. O CCE não verifica se o certificado do ELB é válido. Ele apenas verifica se o certificado existe.
  3. Somente os clusters de v1.19.16-r2, v1.21.5-r0, v1.23.3-r0 ou posterior dão suporte ao certificado do ELB.

Para clusters da v1.21 ou anterior:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress 
metadata: 
  name: ingress-test
  annotations: 
    kubernetes.io/ingress.class: cce
    kubernetes.io/elb.port: '443'
    kubernetes.io/elb.id: 0b9a6c4d-bd8b-45cc-bfc8-ff0f9da54e95
    kubernetes.io/elb.class: union
    kubernetes.io/elb.tls-certificate-ids: 058cc023690d48a3867ad69dbe9cd6e5,b98382b1f01c473286653afd1ed9ab63
spec:
  rules: 
  - host: ''
    http: 
      paths: 
      - path: '/'
        backend: 
          serviceName: <your_service_name>  # Replace it with the name of your target Service.
          servicePort: 80
        property:
          ingress.beta.kubernetes.io/url-match-mode: STARTS_WITH
Para clusters da v1.23 ou posterior:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-test
  namespace: default
  annotations:
    kubernetes.io/elb.port: '443'
    kubernetes.io/elb.id: 0b9a6c4d-bd8b-45cc-bfc8-ff0f9da54e95
    kubernetes.io/elb.class: union
    kubernetes.io/elb.tls-certificate-ids: 058cc023690d48a3867ad69dbe9cd6e5,b98382b1f01c473286653afd1ed9ab63
spec:
  rules:
    - host: ''
      http:
        paths:
          - path: '/'
            backend:
              service:
                name: <your_service_name>  # Replace it with the name of your target Service.
                port: 
                  number: 8080             # Replace 8080 with the port number of your target Service.
            property:
              ingress.beta.kubernetes.io/url-match-mode: STARTS_WITH
            pathType: ImplementationSpecific
  ingressClassName: cce