Uso de kubectl para crear una entrada de ELB
Escenario
Esta sección utiliza una carga de trabajo de Nginx como ejemplo para describir cómo crear una entrada ELB usando kubectl.
- Si no hay ningún balanceador de carga disponible en la misma VPC, CCE puede crear automáticamente un balanceador de carga al crear una entrada. Para obtener más información, véase Creación de una entrada - Creación automática de un balanceador de carga.
- Si un balanceador de carga está disponible en la misma VPC, realice la operación haciendo referencia a Creación de un ingreso - interconexión con un balanceador de carga existente.
Requisitos previos
- Un ingreso proporciona acceso a la red para cargas de trabajo back-end. Asegúrese de que una carga de trabajo esté disponible en un clúster. Si no hay ninguna carga de trabajo disponible, despliegue un ejemplo de la carga de trabajo de Nginx haciendo referencia a Creación de una Deployment, Creación de un StatefulSet o Creación de un DaemonSet.
- Se ha configurado un Service de NodePort para la carga de trabajo. Para obtener más información acerca de cómo configurar el Service, consulte NodePort.
- Los balanceadores de carga dedicados deben ser del tipo de aplicación (HTTP/HTTPS) que admita las redes privadas (con una IP privada).
Ingress Description of networking.k8s.io/v1
En los clústeres de CCE de v1.23 o posterior, la versión de ingreso se cambia a networking.k8s.io/v1.
Comparado con v1beta1, v1 tiene las siguientes diferencias en parámetros:
- El tipo de entrada se cambia de kubernetes.io/ingress.class en annotations a spec.ingressClassName.
- Se cambia el formato de backend.
- El parámetro pathType debe especificarse para cada ruta. Las opciones son las siguientes:
- ImplementationSpecific: El método de coincidencia depende del controlador de entrada. El método de coincidencia definido por ingress.beta.kubernetes.io/url-match-mode se usa en CCE, que es el mismo que v1beta1.
- Exact: coincidencia exacta del URL, que distingue entre mayúsculas y minúsculas.
- Prefix: coincidencia basada en el prefijo de URL separado por una barra diagonal (/). La coincidencia distingue entre mayúsculas y minúsculas, y los elementos de la ruta se hacen coincidir uno por uno. Un elemento de trazado hace referencia a una lista de etiquetas en el trazado separadas por una barra diagonal (/).
Creación de una entrada - Creación automática de un balanceador de carga
A continuación se describe cómo ejecutar el comando kubectl para crear automáticamente un balanceador de carga al crear una entrada.
- Utilice kubectl para conectarse al clúster. Para obtener más información, véase Conexión a un clúster con kubectl.
- Cree un archivo YAML denominado ingress-test.yaml. El nombre del archivo se puede personalizar.
vi ingress-test.yaml
A partir del clúster v1.23, la versión de ingreso cambia de networking.k8s.io/v1beta1 a networking.k8s.io/v1. Para obtener más información sobre las diferencias entre v1 y v1beta1, consulte Ingress Description of networking.k8s.io/v1.
Ejemplo de un balanceador de carga compartido (acceso a red pública) 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: '80' kubernetes.io/elb.autocreate: '{ "type":"public", "bandwidth_name":"cce-bandwidth-******", "bandwidth_chargemode":"bandwidth", "bandwidth_size":5, "bandwidth_sharetype":"PER", "eip_type":"5_bgp" }' spec: rules: - host: '' http: paths: - path: '/' backend: service: name: <your_service_name> # Replace it with the name of your target Service. port: number: <your_service_port> # Replace it with the port number of your target Service. property: ingress.beta.kubernetes.io/url-match-mode: STARTS_WITH pathType: ImplementationSpecific ingressClassName: cce # ELB ingress is used.
Ejemplo de un balanceador de carga compartido (acceso a red pública) para clústeres de v1.21 o anteriores:apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: ingress-test annotations: kubernetes.io/elb.class: union kubernetes.io/ingress.class: cce # ELB ingress is used. kubernetes.io/elb.port: '80' kubernetes.io/elb.autocreate: '{ "type":"public", "bandwidth_name":"cce-bandwidth-******", "bandwidth_chargemode":"bandwidth", "bandwidth_size":5, "bandwidth_sharetype":"PER", "eip_type":"5_bgp" }' spec: rules: - host: '' http: paths: - path: '/' backend: serviceName: <your_service_name> # Replace it with the name of your target Service. servicePort: <your_service_port> # Replace it with the port number of your target Service. property: ingress.beta.kubernetes.io/url-match-mode: STARTS_WITH
Ejemplo de un balanceador de carga dedicado (acceso a red pública) para clústeres de v1.23 o posterior:apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress-test namespace: default annotations: kubernetes.io/elb.class: performance kubernetes.io/elb.port: '80' 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" ], "l7_flavor_name": "L7_flavor.elb.s1.small" }' spec: rules: - host: '' http: paths: - path: '/' backend: service: name: <your_service_name> # Replace it with the name of your target Service. port: number: <your_service_port> # Replace it with the port number of your target Service. property: ingress.beta.kubernetes.io/url-match-mode: STARTS_WITH pathType: ImplementationSpecific ingressClassName: cce
Ejemplo de un balanceador de carga dedicado (acceso a la red pública) para clústeres de la versión 1.21 o anterior:apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: ingress-test namespace: default annotations: kubernetes.io/elb.class: performance kubernetes.io/ingress.class: cce kubernetes.io/elb.port: '80' 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" ], "l7_flavor_name": "L7_flavor.elb.s1.small" }' spec: rules: - host: '' http: paths: - path: '/' backend: serviceName: <your_service_name> # Replace it with the name of your target Service. servicePort: <your_service_port> # Replace it with the port number of your target Service. property: ingress.beta.kubernetes.io/url-match-mode: STARTS_WITH
Tabla 1 Parámetros de clave Parámetro
Obligatorio
Tipo
Descripción
kubernetes.io/elb.class
Sí
String
Seleccione un tipo de balanceador de carga adecuado.
El valor puede ser:
- union: balanceador de carga compartido
- performance: balanceador de carga dedicado. Para obtener más información, consulte Diferencias entre los balanceadores de carga compartido y dedicado.
Predeterminado: union
kubernetes.io/ingress.class
Sí
(solo para clústeres de v1.21 o anteriores)
String
cce: Se utiliza la entrada de ELB autodesarrollada.
Este parámetro es obligatorio cuando se crea una entrada invocando a la API.
ingressClassName
Sí
(solo para los clústeres de v1.23 o posterior)
String
cce: Se utiliza la entrada de ELB autodesarrollada.
Este parámetro es obligatorio cuando se crea una entrada invocando a la API.
kubernetes.io/elb.port
Sí
Integer
Este parámetro indica el puerto externo registrado con la dirección del LoadBalancer Service.
Rango soportado: 1 a 65535
kubernetes.io/elb.subnet-id
-
String
ID de la subred donde se encuentra el clúster. El valor puede contener de 1 a 100 caracteres.
- Obligatorio cuando se va a crear automáticamente un clúster de v1.11.7-r0 o anterior.
- Opcional para los clústeres posteriores a v1.11.7-r0. Se deja en blanco por defecto.
Para obtener más detsalles sobre cómo obtener el valor, consulte ¿Cuál es la diferencia entre la API de subred de VPC y la API de subred de Neutrón OpenStack?
kubernetes.io/elb.enterpriseID
Sí
String
Los clústeres de Kubernetes de v1.15 y versiones posteriores admiten este campo. En los clústeres de Kubernetes anteriores a v1.15, los balanceadores de carga se crean en el proyecto predeterminado de forma predeterminada.
ID del proyecto de empresa en el que se creará el balanceador de carga.
El valor contiene de 1 a 100 caracteres.
Cómo obtenerlo:
Inicie sesión en la consola de gestión y seleccione Enterprise > Project Management en la barra de menú superior. En la lista que se muestra, haga clic en el nombre del proyecto de empresa de destino y copie el ID en la página de detalles del proyecto de empresa.
kubernetes.io/elb.autocreate
Sí
elb.autocreate object
Si se crea automáticamente un balanceador de carga asociado a una entrada. Para obtener más información sobre la descripción del campo, consulte Tabla 2.
Ejemplo
- Si se creará automáticamente un balanceador de carga de red pública, establezca este parámetro en el siguiente valor:
{"type":"public","bandwidth_name":"cce-bandwidth-******","bandwidth_chargemode":"bandwidth","bandwidth_size":5,"bandwidth_sharetype":"PER","eip_type":"5_bgp","name":"james"}
- Si se creará automáticamente un balanceador de carga de red privada, establezca este parámetro en el siguiente valor:
host
No
String
Nombre de dominio para acceder al Service. De forma predeterminada, este parámetro se deja en blanco y el nombre de dominio debe coincidir completamente. Asegúrese de que el nombre de dominio ha sido registrado y archivado. Una vez configurada una regla de nombre de dominio, debe usar el nombre de dominio para tener acceso.
path
Sí
String
Ruta de ruta definida por el usuario. Todas las solicitudes de acceso externo deben coincidir con host y path.
NOTA:La ruta de acceso agregada aquí debe existir en la aplicación de backend. De lo contrario, el reenvío falla.
Por ejemplo, el URL de acceso predeterminado de la aplicación Nginx es /usr/share/nginx/html. Al agregar /test a la política de reenvío de ingreso, asegúrese de que su aplicación de Nginx contiene el mismo URL, es decir, /usr/share/nginx/html/test, de lo contrario, se devuelve 404.
ingress.beta.kubernetes.io/url-match-mode
No
String
Política de coincidencia de rutas.
Predeterminado: STARTS_WITH (Coincidencia de prefijo)
Opciones:
- EQUAL_TO: coincidencia exacta
- STARTS_WITH: coincidencia de prefijos
- REGEX: coincidencia de expresiones regulares
pathType
Sí
String
Tipo de ruta. Este campo solo es compatible con los clústeres de v1.23 o posterior.
- ImplementationSpecific: El método de coincidencia depende del controlador de entrada. El método de emparejamiento definido por ingress.beta.kubernetes.io/url-match-mode se usa en CCE.
- Exact: coincidencia exacta del URL, que distingue entre mayúsculas y minúsculas.
- Prefix: coincidencia basada en el prefijo de URL separado por una barra diagonal (/). La coincidencia distingue entre mayúsculas y minúsculas, y los elementos de la ruta se hacen coincidir uno por uno. Un elemento de trazado hace referencia a una lista de etiquetas en el trazado separadas por una barra diagonal (/).
Tabla 2 Estructura de datos del campo elb.autocreate Parámetro
Obligatorio
Tipo
Descripción
type
No
String
Tipo de red del balanceador de carga.
- public: balanceador de carga de red pública
- inner: balanceador de carga de red privada
Predeterminado: inner
bandwidth_name
Sí para los balanceadores de carga de red pública
String
Nombre del ancho de banda. El valor predeterminado es cce-bandwidth-******.
Intervalo de valores: una string de 1 a 64 caracteres, incluidos letras minúsculas, dígitos y guiones bajos (_). El valor debe comenzar con una letra minúscula y terminar con una letra minúscula o un dígito.
bandwidth_chargemode
No
String
Modo de facturación de ancho de banda.
- bandwidth: facturado por ancho de banda
- traffic: facturado por tráfico
Predeterminado: bandwidth
bandwidth_size
Sí para los balanceadores de carga de red pública
Integer
Tamaño del ancho de banda. El valor varía de 1 Mbit/s a 2000 Mbit/s de forma predeterminada. El rango real varía dependiendo de la configuración en cada región.
- El incremento mínimo para el ajuste de ancho de banda varía dependiendo del rango de ancho de banda. Los detalles son los siguientes:
- El incremento mínimo es de 1 Mbit/s si el ancho de banda permitido oscila entre 0 Mbit/s y 300 Mbit/s (con 300 Mbit/s incluidos).
- El incremento mínimo es de 50 Mbit/s si el ancho de banda permitido varía de 300 Mbit/s a 1000 Mbit/s.
- El incremento mínimo es de 500 Mbit/s si el ancho de banda permitido es mayor que 1000 Mbit/s.
bandwidth_sharetype
Sí para los balanceadores de carga de red pública
String
Tipo de ancho de banda.
PER: ancho de banda dedicado.
eip_type
Sí para los balanceadores de carga de red pública
String
Tipo de la EIP.
- 5_telcom: China Telecom
- 5_union: China Unicom
- 5_bgp: BGP dinámico
- 5_sbgp: BGP estático
name
No
String
Nombre del balanceador de carga creado automáticamente.
Intervalo de valores: una string de 1 a 64 caracteres, incluidos letras minúsculas, dígitos y guiones bajos (_). El valor debe comenzar con una letra minúscula y terminar con una letra minúscula o un dígito.
Predeterminado: cce-lb+ingress.UID
vip_subnet_cidr_id
No
String
Subred donde se encuentra el balanceador de carga. Este campo es compatible con clústeres de v1.21 o posterior.
Si no se especifica este parámetro, el balanceador de carga y el clúster están en la misma subred.
available_zone
Sí
Array of strings
(Obligatorio) La AZ donde se encuentra el balanceador de carga.
Puede obtener todas las AZ soportadas por consultar la lista de AZ.
Este parámetro solo está disponible para los balanceadores de carga dedicados.
l4_flavor_name
No
String
Nombre de la variante del balanceador de carga de capa 4.
Puede obtener todos los tipos admitidos consultando la lista de variantes.
Este parámetro solo está disponible para los balanceadores de carga dedicados. El valor de este parámetro debe ser el mismo que el de l7_flavor_name, es decir, ambas son especificaciones elásticas o especificaciones fijas.
l7_flavor_name
Sí
String
(Obligatorio) El nombre de la variante del balanceador de carga de capa-7.
Puede obtener todos los tipos admitidos consultando la lista de variantes.
Este parámetro solo está disponible para los balanceadores de carga dedicados.
elb_virsubnet_ids
No
Array of strings
Subred donde se encuentra el servidor de backend del balanceador de carga. Si este parámetro se deja en blanco, se utiliza la subred de clúster predeterminada. Los balanceadores de carga ocupan un número diferente de direcciones IP de subred según sus especificaciones. Por lo tanto, no se recomienda utilizar los bloques CIDR de subred de otros recursos (como clústeres y nodos) como el bloque CIDR del balanceador de carga.
Valor predeterminado: subred donde se encuentra el clúster
Este parámetro solo está disponible para los balanceadores de carga dedicados.
Ejemplo:
"elb_virsubnet_ids": [ "14567f27-8ae4-42b8-ae47-9f847a4690dd" ]
- 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
kubectl get ingress
Si se muestra información similar a la siguiente, la entrada se ha creado correctamente y se puede acceder a la carga de trabajo.
NAME HOSTS ADDRESS PORTS AGE ingress-test * 121.**.**.** 80 10s
- Ingrese http://121.**.**.**:80 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.
Creación de un ingreso - interconexión con un balanceador de carga existente
- Existing dedicated load balancers must be the application type (HTTP/HTTPS) supporting private networks (with a private IP).
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress-test annotations: kubernetes.io/elb.id: <your_elb_id> # Replace it with the ID of your existing load balancer. kubernetes.io/elb.ip: <your_elb_ip> # Replace it with your existing load balancer IP. kubernetes.io/elb.port: '80' 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 your target service port number. property: ingress.beta.kubernetes.io/url-match-mode: STARTS_WITH pathType: ImplementationSpecific ingressClassName: cce
Si la versión del clúster es 1.21 o anterior, la configuración del archivo YAML es la siguiente:
apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: ingress-test annotations: kubernetes.io/elb.id: <your_elb_id> # Replace it with the ID of your existing load balancer. kubernetes.io/elb.ip: <your_elb_ip> # Replace it with your existing load balancer IP. kubernetes.io/elb.port: '80' kubernetes.io/ingress.class: cce 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
Parámetro |
Obligatorio |
Tipo |
Descripción |
---|---|---|---|
kubernetes.io/elb.id |
Sí |
String |
Este parámetro indica el ID de un balanceador de carga. El valor puede contener de 1 a 100 caracteres. Cómo obtenerlo: En la consola de gestión, haga clic en Service List y elija Networking > Elastic Load Balance. Haga clic en el nombre del balanceador de carga de destino. En la página de ficha Summary, encuentre y copie el ID. |
kubernetes.io/elb.ip |
Sí |
String |
Este parámetro indica la dirección de servicio de un balanceador de carga. El valor puede ser la dirección IP pública de un balanceador de carga de red pública o la dirección IP privada de un balanceador de carga de red privada. |