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
- Utilice kubectl para conectarse al clúster. Para obtener más información, véase Conexión a un clúster con kubectl.
- 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.
- 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
- 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
- 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
- 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.
- Si especifica tanto el certificado IngressTLS como el certificado de ELB, se utiliza este último.
- 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