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/ Uso de kubectl para crear una entrada de ELB
Actualización más reciente 2024-09-10 GMT+08:00

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.

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.

  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. 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

    String

    Seleccione un tipo de balanceador de carga adecuado.

    El valor puede ser:

    Predeterminado: union

    kubernetes.io/ingress.class

    (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

    (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

    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

    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

    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:

      {"type":"inner","name":"A-location-d-test"}

    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

    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

    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

    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

    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"
     ]

  3. 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

  4. 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

CCE le permite conectarse a un balanceador de carga existente al crear una entrada.
  • Existing dedicated load balancers must be the application type (HTTP/HTTPS) supporting private networks (with a private IP).
Si la versión del clúster es 1.23 o posterior, la configuración del archivo YAML es la siguiente:
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
Tabla 3 Parámetros de clave

Parámetro

Obligatorio

Tipo

Descripción

kubernetes.io/elb.id

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

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.