Estos contenidos se han traducido de forma automática para su comodidad, pero Huawei Cloud no garantiza la exactitud de estos. Para consultar los contenidos originales, acceda a la versión en inglés.
Centro de ayuda/ Cloud Container Engine/ Guía del usuario/ Red/ Ingresos/ Ingreso de ELB/ Configuración de certificados de HTTPS para ingresos de ELB
Actualización más reciente 2024-09-10 GMT+08:00

Configuración de certificados de HTTPS para ingresos de ELB

El ingreso admite la configuración de certificados de TLS y protege sus servicios con HTTPS.

Actualmente, puede utilizar el certificado de clave de TLS configurado en el clúster y el certificado de ELB.

Si HTTPS está habilitado para el mismo puerto del mismo balanceador de carga de múltiples entradas, debe seleccionar el mismo certificado.

Uso de un certificado de clave de TLS

  1. Utilice kubectl para conectarse al clúster. Para obtener más información, véase Conexión a un clúster con kubectl.
  2. Ingress soporta dos tipos de claves TLS: kubernetes.io/tls y IngressTLS. Se usa como ejemplo IngressTLS. Para obtener más información, véase Creación de un secreto.

    Ejecute el siguiente comando para crear un archivo YAML llamado ingress-test-secret.yaml (el nombre del archivo se puede personalizar):

    vi ingress-test-secret.yaml

    El archivo YAML se configura de la siguiente manera:
    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

    En la información anterior, las tls.crt y tls.key solo son ejemplos. Reemplácelos con los archivos reales. Los valores de tls.crt y tls.key están codificados en Base64.

  3. Cree un secreto.

    kubectl create -f ingress-test-secret.yaml

    Si se muestra información similar a la siguiente, se está creando el secreto:

    secret/ingress-test-secret created

    Vea el secreto creado.

    kubectl get secrets

    Si se muestra la información similar a la siguiente, se ha creado el secreto:

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

  4. Cree un archivo YAML denominado ingress-test.yaml. El nombre del archivo se puede personalizar.

    vi ingress-test.yaml

    La política de seguridad predeterminada (kubernetes.io/elb.tls-ciphers-policy) solo se admite en clústeres de v1.17.17 o posterior.

    La política de seguridad personalizada (kubernetes.io/elb.security_policy_id) solo se admite en clústeres de v1.17.17 o posterior.

    A continuación se utiliza el balanceador de carga creado automáticamente como ejemplo. El archivo YAML se configura de la siguiente manera:

    Para clústeres de v1.21 o anterior:

    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress 
    metadata: 
      name: ingress-test
      annotations: 
        kubernetes.io/elb.class: union
        kubernetes.io/ingress.class: cce
        kubernetes.io/elb.port: '443'
        kubernetes.io/elb.autocreate: 
          '{
              "type":"public",
              "bandwidth_name":"cce-bandwidth-15511633796**",
              "bandwidth_chargemode":"bandwidth",
              "bandwidth_size":5,
              "bandwidth_sharetype":"PER",
              "eip_type":"5_bgp"
            }'
        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: ''
        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 clústeres de v1.23 o posterior:
    apiVersion: networking.k8s.io/v1
    kind: Ingress 
    metadata: 
      name: ingress-test
      annotations: 
        kubernetes.io/elb.class: union
        kubernetes.io/elb.port: '443'
        kubernetes.io/elb.autocreate: 
          '{
              "type":"public",
              "bandwidth_name":"cce-bandwidth-15511633796**",
              "bandwidth_chargemode":"bandwidth",
              "bandwidth_size":5,
              "bandwidth_sharetype":"PER",
              "eip_type":"5_bgp"
            }'
        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: ''
        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 
    Tabla 1 Parámetros clave

    Parámetro

    Obligatorio

    Tipo

    Descripción

    kubernetes.io/elb.security_policy_id

    No

    String

    ID de la política de grupo de seguridad personalizada en ELB. Obténgalo en la consola de ELB. Este campo solo tiene efecto cuando se utiliza HTTPS y tiene una prioridad más alta que la política de seguridad predeterminada.

    Para obtener más información acerca de cómo crear y actualizar una política de seguridad personalizada, consulte Política de seguridad de TLS.

    kubernetes.io/elb.tls-ciphers-policy

    No

    String

    El valor predeterminado es tls-1-2, que es la política de seguridad predeterminada utilizada por el oyente y solo tiene efecto cuando se usa HTTPS.

    Opciones:

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

    Para obtener más información sobre los conjuntos de cifrado para cada política de seguridad, consulte Tabla 2.

    tls

    No

    Array of strings

    Cuando se utiliza HTTPS, este parámetro debe agregarse para especificar el certificado de clave.

    Se pueden agregar varios nombres de dominio y certificados independientes. Para obtener más información, véase Configuración de la Server Name Indication (SNI) para las entradas de ELB.

    secretName

    No

    String

    Este parámetro es obligatorio si se utiliza HTTPS. Establezca este parámetro en el nombre del secreto creado.

    Tabla 2 Descripción de parámetro tls_ciphers_policy

    Política de seguridad

    Versión de TLS

    Suite de cifrado

    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. Cree una entrada.

    kubectl create -f ingress-test.yaml

    Si se muestra la información similar a la siguiente, se ha creado la entrada.

    ingress/ingress-test created

    Vea la entrada creada.

    kubectl get ingress

    Si se muestra la información similar a la siguiente, se ha creado la entrada y se puede acceder a la carga de trabajo.

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

  6. Introduzca https://121.**.**.**:443 en el cuadro de dirección del navegador para acceder a la carga de trabajo (por ejemplo, Carga de trabajo de Nginx).

    121.**.**.** indica la dirección IP del balanceador de carga unificado.

Uso del certificado de ELB

Para utilizar el certificado de ELB, puede especificar el kubernetes.io/elb.tls-certificate-ids de anotaciones.

  1. Si especifica tanto el certificado IngressTLS como el certificado de ELB, se utiliza este último.
  2. CCE no comprueba si el certificado de ELB es válido. Solo comprueba si el certificado existe.
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