O ALB Ingress oferece suporte a regras de encaminhamento personalizadas. Uma regra de encaminhamento consiste em condições e ações de encaminhamento. Você pode definir condições personalizadas com base no nome de domínio, caminho, cabeçalho da solicitação, string de consulta, método de solicitação, cookie ou IP de origem. Também é possível configurar ações específicas, como retornar uma resposta fixa, criar um redirecionamento, inserir ou excluir um cabeçalho de solicitação, espelhar tráfego, encaminhar solicitações para vários grupos de servidores de backend ou reescrever solicitações. Configure essas regras personalizadas diretamente no console ou adicione anotações a um recurso Ingress.
Pré-requisitos
Instale o componente ALB Ingress Controller na versão v2.5.0 ou posterior. Para mais informações, consulte Gerenciar componentes.
Condições de encaminhamento
Uma regra de encaminhamento pode conter no máximo 10 condições.
As condições de encaminhamento
ResponseHeadereResponseStatusCodesão válidas apenas para regras baseadas em resposta.
Condições de encaminhamento
O ALB Ingress permite configurar condições de encaminhamento na anotação alb.ingress.kubernetes.io/conditions.<service-name>. Blocos de regras de roteamento diferentes mantêm uma relação lógica AND entre si, enquanto os valores dentro do mesmo bloco seguem uma relação lógica OR. Por exemplo, dois blocos de regras Header distintos operam com lógica AND, mas os valores definidos dentro de um único bloco Header usam lógica OR. As descrições detalhadas das regras de roteamento estão listadas abaixo.
Condição de encaminhamento | Descrição |
Nome de domínio | Roteia solicitações com base em um nome de domínio correspondente. Veja o exemplo abaixo.
|
Caminho | Roteia solicitações com base em um caminho correspondente. Veja o exemplo abaixo.
|
Cabeçalho | Roteia solicitações com base em um cabeçalho de solicitação correspondente. Veja o exemplo abaixo.
|
String de consulta | Roteia solicitações com base em uma string de consulta correspondente. Veja o exemplo abaixo.
Para um caso de uso e exemplo, consulte Caso de uso 3: Roteamento de tráfego baseado em string de consulta, múltiplos cabeçalhos e múltiplos caminhos. |
Método de solicitação | Roteia solicitações com base em um método de solicitação correspondente. Veja o exemplo abaixo.
|
Cookie | Roteia solicitações com base em um cookie correspondente. Veja o exemplo abaixo.
Para um caso de uso e exemplo, consulte Caso de uso 2: Roteamento de tráfego baseado em nome de domínio, método de solicitação e cookie. |
IP de origem | Roteia solicitações com base em um endereço IP de origem correspondente. Veja o exemplo abaixo.
Para um caso de uso e exemplo, consulte Caso de uso 1: Roteamento de tráfego baseado em IP de origem e cabeçalho. |
cabeçalho de resposta | Corresponde ao cabeçalho de resposta e executa a ação de encaminhamento apenas nas respostas que contêm o cabeçalho correto. Observe que isso deve ser usado em conjunto com a anotação
|
código de status de resposta | Corresponde ao código de status da resposta. O serviço só pode ser acessado se o código de status correto for retornado. Note que este recurso deve ser usado com uma ação de encaminhamento de direção de resposta e a anotação de regra de encaminhamento de direção de resposta
|
Caso de uso 1: Roteamento por IP de origem e cabeçalho
Você pode especificar no máximo cinco condições de source IP em uma única regra de encaminhamento.
Este YAML define um Ingress que roteia solicitações somente quando o IP de origem, o cabeçalho e o caminho correspondem às condições especificadas.
Se o endereço IP de origem de uma solicitação for de 192.168.0.0/16 ou 172.16.0.0/16, o cabeçalho da solicitação contiver gray-hello com um valor de value1 ou value2, e o caminho da solicitação for /hello, a solicitação será roteada para o serviço gray-hello-svc. Caso contrário, a solicitação será roteada para outros serviços.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/order: "1"
alb.ingress.kubernetes.io/conditions.gray-hello-svc: | # The service name must match a backend service name in spec.rules. These conditions apply to that service.
[{
"type": "Header",
"headerConfig": {
"key":"gray-hello",
"values": [
"value1",
"value2"
]
}
},
{
"type": "SourceIp",
"sourceIpConfig": {
"values": [
"192.168.0.0/16",
"172.16.0.0/16"
]
}
}]
name: gray-hello-ingress
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /hello
pathType: ImplementationSpecific
backend:
service:
name: gray-hello-svc # This backend service name must match the name in the `conditions` annotation for those conditions to apply.
port:
number: 88
alb.ingress.kubernetes.io/order: Especifica a prioridade do Ingress. Quanto menor o número, maior a prioridade.
Caso de uso 2: Roteamento por domínio, método e cookie
Este YAML define um Ingress que roteia solicitações somente quando o nome de domínio, o método de solicitação e o cookie correspondem às condições especificadas.
Isso significa que uma solicitação é roteada para service-a apenas se o método de solicitação for GET ou HEAD, o host da solicitação for example.com ou *.edu, o cookie da solicitação tiver uma chave cookiekey1 e um valor cookievalue1, e o caminho da solicitação for /test. Caso contrário, a solicitação é roteada para service-b.
As regras de encaminhamento para nomes de domínio suportam curingas.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/conditions.service-a: | # The service name must match a backend service name in spec.rules. These conditions apply to that service.
[{
"type": "Cookie",
"cookieConfig": {
"values": [
{
"key":"cookiekey1",
"value":"cookievalue1"
}
]
}
},
{
"type": "Method",
"methodConfig": {
"values": [
"GET",
"HEAD"
]
}
},
{
"type": "Host",
"hostConfig": {
"values": [
"example.com",
"*.edu"
]
}
}]
name: ingress-example
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /test
pathType: ImplementationSpecific
backend:
service:
name: service-a # This backend service name must match the name in the `conditions` annotation for those conditions to apply.
port:
number: 88
- path: /test
pathType: ImplementationSpecific
backend:
service:
name: service-b
port:
number: 88
Caso de uso 3: Roteamento por string de consulta, cabeçalho e caminho
Este YAML define um Ingress que roteia solicitações somente quando a string de consulta, os cabeçalhos e o caminho correspondem às condições especificadas.
Isso significa que uma solicitação é roteada para o serviço service-a se o caminho da solicitação for /pathvalue1, /pathvalue2 ou /test, a string de consulta tiver a chave querystringkey1 e o valor querystringvalue2, e o cabeçalho da solicitação contiver headerkey1 e headerkey2. Além disso, para o cabeçalho que contém headerkey1, o valor deve ser headervalue1 ou headervalue2, e para o cabeçalho que contém headerkey2, o valor deve ser headervalue3 ou headervalue4. Caso contrário, a solicitação é roteada para o serviço service-b.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/conditions.service-a: | # The service name must match a backend service name in spec.rules. These conditions apply to that service.
[{
"type": "Path",
"pathConfig": {
"values": [
"/pathvalue1",
"/pathvalue2"
]
}
},
{
"type": "QueryString",
"queryStringConfig": {
"values": [
{
"key":"querystringkey1",
"value":"querystringvalue2"
}
]
}
},
{
"type": "Header",
"headerConfig": {
"key":"headerkey1",
"values": [
"headervalue1",
"headervalue2"
]
}
},
{
"type": "Header",
"headerConfig": {
"key":"headerkey2",
"values": [
"headervalue3",
"headervalue4"
]
}
}]
name: ingress-example
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /test
pathType: ImplementationSpecific
backend:
service:
name: service-a # This backend service name must match the name in the `conditions` annotation for those conditions to apply.
port:
number: 88
- path: /test
pathType: ImplementationSpecific
backend:
service:
name: service-b
port:
number: 88
Ações de encaminhamento
Ações de encaminhamento
O ALB Ingress permite configurar ações de encaminhamento para solicitações e respostas com a anotação alb.ingress.kubernetes.io/actions.<service-name>. As ações suportadas incluem retornar uma resposta fixa, redirecionamento, inserção ou remoção de cabeçalho, espelhamento de tráfego, encaminhamento para vários grupos de servidores de backend e reescrita de solicitações. Ao definir essas ações de encaminhamento, você gerencia com flexibilidade como as solicitações e respostas são tratadas no seu ALB Ingress.
Para a anotação
alb.ingress.kubernetes.io/actions.<service-name>, garanta que o nome do serviço na anotação corresponda ao nome do serviço sobbackendno camporule.Use apenas uma ação de encaminhamento terminal, como redirecionamento, resposta fixa ou encaminhamento para vários grupos de servidores, na mesma regra de encaminhamento.
Ao configurar um redirecionamento, uma resposta fixa ou encaminhamento para vários grupos de servidores, defina
backend.service.port.namecomouse-annotation.
Ações de encaminhamento de solicitação
Ação | Descrição |
Resposta fixa | Envia uma resposta fixa ao cliente a partir do Application Load Balancer (ALB). Você pode definir o código de status da resposta, o conteúdo e o tipo de conteúdo. O código a seguir fornece um exemplo.
Para um caso de uso e exemplo, consulte Caso de uso 1: Definir uma resposta fixa. |
Redirecionamento | Redireciona o cliente para um endereço diferente usando um código de status HTTP 3xx. O código a seguir fornece um exemplo.
Importante Você pode configurar os parâmetros host, path, port, protocol e query para usar valores da solicitação original, mas pelo menos um deve ser definido com um valor não padrão. Por exemplo, se você definir host como Para um caso de uso e exemplo, consulte Caso de uso 2: Usar um redirecionamento 301. |
Espelhamento de tráfego | Copia a solicitação e a encaminha para um grupo de servidores de espelhamento de tráfego. Você deve especificar o ID do grupo de servidores. O código a seguir fornece um exemplo. Importante
Para um caso de uso e exemplo, consulte Caso de uso 4: Espelhar tráfego. |
Encaminhar para vários grupos de servidores de backend | Encaminha solicitações do ALB para vários grupos de servidores de backend. Você pode especificar grupos de servidores de backend usando ServerGroupID, ou criar/anexar grupos de servidores usando ServiceName+ServicePort. Também é possível definir um peso de encaminhamento para cada grupo de servidores de backend e ativar a persistência de sessão entre os grupos. Importante
Para um caso de uso e exemplo, consulte Caso de uso 5: Encaminhar para vários grupos de servidores. |
Reescrita | Reescreve a solicitação antes de encaminhá-la para o backend. O Application Load Balancer (ALB) pode modificar o host, o caminho e a string de consulta da solicitação. Importante
Importante Os parâmetros host, path e query podem ser configurados para usar os valores da solicitação original. No entanto, pelo menos um desses parâmetros deve ser definido com um valor diferente do padrão. Por exemplo, se você definir host como Para um caso de uso e exemplo, consulte Caso de uso 6: Reescrever uma solicitação. |
Inserir cabeçalho | Define o nome e o conteúdo do campo de cabeçalho. Isso sobrescreve qualquer cabeçalho existente com o mesmo nome na solicitação. O código a seguir fornece um exemplo.
Para um caso de uso e exemplo, consulte Caso de uso 3: Inserir um cabeçalho de solicitação. |
Remover cabeçalho | Remove um cabeçalho da solicitação. O código a seguir fornece um exemplo. type: O tipo de ação de encaminhamento. Defina como RemoveHeader para remover um cabeçalho de solicitação. key: O nome do campo de cabeçalho a ser removido. |
Limitação de QPS | Esta ação limita a taxa de solicitações em consultas por segundo (QPS). Você pode configurar um limite geral e um limite separado para cada IP de origem do cliente. O código a seguir fornece um exemplo de configuração: Importante
|
Ações de encaminhamento de resposta
Ação | Descrição |
Inserir cabeçalho | Quando aplicada a uma regra de resposta, esta ação define um campo de cabeçalho e seu valor na resposta. Isso sobrescreve qualquer cabeçalho de resposta existente com o mesmo nome. O código a seguir fornece um exemplo.
Para casos de uso e exemplos de modificação de cabeçalhos de resposta, consulte Caso de uso 7: Modificar cabeçalhos de resposta e Caso de uso 8: Modificar cabeçalhos de resposta por código de status. |
Remover cabeçalho | Quando aplicada a uma regra de resposta, esta ação remove um cabeçalho da resposta. O código a seguir fornece um exemplo. type: O tipo de ação de encaminhamento. Defina como key: O nome do campo de cabeçalho a ser removido. |
Caso de uso 1: Definir uma resposta fixa
Console
Faça login no ACK console. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em .
-
Na página Ingresses, clique em Create Ingress. Na caixa de diálogo Create Ingress, configure o Ingress.
Parâmetro
Descrição
Exemplo
Gateway Type
Você pode selecionar ALB Ingress, MSE Ingress ou Nginx Ingress conforme necessário.
Para mais informações sobre as diferenças entre esses tipos de gateway, consulte Comparação entre Nginx Ingress, ALB Ingress e MSE Ingress.
ALB Ingress
Name
Um nome personalizado para o Ingress.
ingress
Ingress Class
O nome da Ingress Class associada.
alb
Rules
Clique em + Add Rule para adicionar regras de roteamento.
Host: Um host personalizado.
Mappings: Configure os seguintes parâmetros.
Match type:
Prefix match: corresponde ao prefixo do caminho da URL da solicitação.
Exact match: realiza uma correspondência exata no caminho da URL da solicitação.
ImplementationSpecific (Default Value): O comportamento depende da implementação do controlador Ingress. Para ALB Ingress, o padrão é uma correspondência exata.
Service: Selecione o serviço alvo, que é um Kubernetes Service.
Port: Selecione a porta que o serviço expõe.
Um Ingress suporta vários caminhos sob o mesmo host. Clique em + Add para adicionar um caminho.
Host: Deixe vazio.
Mappings:
Path: /
Match type: Prefix match
Service: response-503
Port: 80
Custom Forwarding Rules
Configure regras de encaminhamento personalizadas para gerenciamento granular de tráfego.
NotaUma regra de encaminhamento pode ter no máximo 10 condições.
Na lista suspensa Add Condition, selecione uma opção.
Host:
Corresponde ao host da solicitação. Se você especificar vários hosts, eles serão avaliados usando a lógica
OR. Após essa configuração, a anotaçãoalb.ingress.kubernetes.io/conditions.host-exampleé adicionada.Path:
Corresponde ao caminho da solicitação. Se você especificar vários caminhos, eles serão avaliados usando a lógica
OR. Após essa configuração, a anotaçãoalb.ingress.kubernetes.io/conditions.path-exampleé adicionada.HTTP Header:
Corresponde às informações do cabeçalho da solicitação como um par chave-valor. Por exemplo, defina Key como
headernamee Value comoheadervalue1. Se você especificar vários valores de cabeçalho, eles serão avaliados usando a lógicaOR. Após essa configuração, a anotaçãoalb.ingress.kubernetes.io/conditions.http-header-exampleé adicionada.
Na lista suspensa Action, selecione uma opção.
Return Fixed Response
Retorna uma resposta fixa ao cliente através do ALB. Você pode configurar o código de status da resposta, o conteúdo e o tipo de conteúdo. Configure Response Status Code, Response Content Type (Optional) e Response Content (Optional) conforme necessário.
Response Content Type:
text/plain: um tipo de conteúdo de texto simples.
text/css: um tipo de conteúdo CSS.
text/html: um tipo de conteúdo HTML.
application/javascript: um tipo de conteúdo JavaScript.
application/json: um tipo de conteúdo JSON.
Add Condition: Selecione Path. (Mantenha o valor padrão)
Action: Return Fixed Response
Response Status Code: 503
Response Content Type (Optional): text/plain
Response Content (Optional): error
Mantenha os valores padrão para os outros parâmetros.
Após concluir as configurações, clique em OK.
Kubectl
O YAML a seguir mostra um exemplo de como retornar um código de status 503 e o texto 503 error text quando uma solicitação é feita ao serviço.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
namespace: default
name: ingress
annotations:
alb.ingress.kubernetes.io/actions.service-name: | # Note: The "service-name" in this annotation must match the name of the backend service that is configured in spec.rules. The forwarding action applies to that backend service.
[{
"type": "FixedResponse",
"FixedResponseConfig": {
"contentType": "text/plain",
"httpCode": "503",
"content": "503 error text"
}
}]
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: service-name # Note: The name of the backend service must match "service-name" in the custom forwarding action annotation. The forwarding action applies to this backend service.
port:
name: use-annotation # The service port name must be set to use-annotation.
Caso de uso 2: Usar um redirecionamento 301
Este exemplo YAML mostra como redirecionar solicitações para a porta HTTPS do serviço.
Redirection
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
namespace: default
name: ingress
annotations:
alb.ingress.kubernetes.io/actions.redirect: | # Note: The "redirect" in this annotation must match the name of the backend service that is configured in spec.rules. The forwarding action applies to that backend service.
[{
"type": "Redirect",
"RedirectConfig": {
"host": "demo.domain.ingress.top",
"path": "/test",
"port": "443",
"protocol": "https",
"query": "querystring",
"httpCode": "301"
}
}]
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: redirect # Note: The name of the backend service must match "redirect" in the custom forwarding action annotation. The forwarding action applies to this backend service.
port:
name: use-annotation # The service port name must be set to use-annotation.
Multiple redirections
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
namespace: default
name: ingress
annotations:
alb.ingress.kubernetes.io/listen-ports: |
[{"HTTP": 8001}]
alb.ingress.kubernetes.io/actions.redirect-1: |
[{
"type": "Redirect",
"RedirectConfig": {
"host": "demo.domain.ingress.top",
"path": "/test",
"port": "443",
"protocol": "https",
"query": "querystring",
"httpCode": "301"
}
}]
alb.ingress.kubernetes.io/actions.redirect-2: |
[{
"type": "Redirect",
"RedirectConfig": {
"host": "demo.domain.ingress.top",
"path": "/test",
"port": "443",
"protocol": "https",
"httpCode": "301"
}
}]
spec:
ingressClassName: ml-test-ingressclass-rolechain-2
rules:
- http:
paths:
- path: /foo
pathType: Prefix
backend:
service:
name: redirect-1
port:
name: use-annotation
- path: /bar
pathType: Prefix
backend:
service:
name: redirect-2
port:
name: use-annotation
Caso de uso 3: Inserir um cabeçalho de solicitação
Este exemplo YAML mostra como adicionar ou sobrescrever o cabeçalho de solicitação para source: alibaba.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
namespace: default
name: ingress
annotations:
alb.ingress.kubernetes.io/actions.insert-header: | # Note: The "insert-header" in this annotation must match the name of the backend service that is configured in spec.rules. The forwarding action applies to that backend service.
[{
"type": "InsertHeader",
"InsertHeaderConfig": {
"key": "source",
"value": "alibaba",
"valueType": "UserDefined"
}
}]
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: insert-header # Note: The name of the backend service must match "insert-header" in the custom forwarding action annotation. The forwarding action applies to this backend service.
port:
number: 80
Caso de uso 4: Espelhar tráfego
O YAML a seguir mostra um exemplo de como espelhar tráfego para um grupo de servidores.
Faça login no console do Application Load Balancer (ALB). No painel de navegação à esquerda, escolha . Na página Server Groups, obtenha o ID do grupo de servidores.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: traffic-mirror-ingress
annotations:
# The mirror-svc must be one of the backend.service names specified below.
# ALB Ingress mirrors traffic that is forwarded to mirror-svc to the backend server specified by "ServerGroupID".
# To configure traffic mirroring for multiple services, add a separate annotation for each service.
alb.ingress.kubernetes.io/actions.mirror-svc: | # Note: The "mirror-svc" in this annotation must match the name of the backend service that is configured in spec.rules. The forwarding action applies to that backend service.
[{
"type": "TrafficMirror",
"TrafficMirrorConfig": {
"TargetType" : "ForwardGroupMirror",
"MirrorGroupConfig": {
"ServerGroupTuples" : [{
"ServerGroupID": "sgp-2auud2fxj1r46*****"
}]
}
}
}]
spec:
ingressClassName: alb
rules:
- host: demo.domain.ingress.top
http:
paths:
- path: /test
pathType: Prefix
backend:
service:
name: mirror-svc # Note: The name of the backend service must match "mirror-svc" in the custom forwarding action annotation. The forwarding action applies to this backend service.
port:
number: 80
Caso de uso 5: Encaminhar para vários grupos de servidores
Console
Faça login no ACK console. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em .
-
Na página Ingresses, clique em Create Ingress. Na caixa de diálogo Create Ingress, configure o Ingress.
Parâmetro
Descrição
Exemplo
Gateway Type
Você pode selecionar ALB Ingress, MSE Ingress ou Nginx Ingress conforme necessário.
Para mais informações sobre as diferenças entre esses tipos de gateway, consulte Comparação entre Nginx Ingress, ALB Ingress e MSE Ingress.
ALB Ingress
Name
Um nome personalizado para o Ingress.
forward-ingress
Ingress Class
O nome da Ingress Class associada.
alb
Rules
Clique em + Add Rule para adicionar regras de roteamento.
Host: Um host personalizado.
Mappings: Configure os seguintes parâmetros.
Match type:
Prefix match: corresponde ao prefixo do caminho da URL da solicitação.
Exact match: realiza uma correspondência exata no caminho da URL da solicitação.
ImplementationSpecific (Default Value): depende da lógica implementada pelo controlador Ingress. O ALB Ingress usa lógica de correspondência exata.
Service: Selecione o serviço alvo, que é um Kubernetes Service.
Port: Selecione a porta que o serviço expõe.
Um Ingress suporta vários caminhos sob o mesmo host. Clique em + Add para adicionar um caminho.
Host: demo.domain.ingress.top
Mappings:
Path: /path
Match type: Prefix match
Service: forward
Port: 80
Custom Forwarding Rules
Ative regras de encaminhamento personalizadas para gerenciar o tráfego de entrada com controle granular.
NotaUma regra de encaminhamento pode ter no máximo 10 condições.
Na lista suspensa Add Condition, selecione uma opção.
Host:
Corresponde ao host da solicitação. Se você especificar vários hosts, eles serão avaliados usando a lógica
OR. Após essa configuração, a anotaçãoalb.ingress.kubernetes.io/conditions.host-exampleé adicionada.Path:
Corresponde ao caminho da solicitação. Se você especificar vários caminhos, eles serão avaliados usando a lógica
OR. Após essa configuração, a anotaçãoalb.ingress.kubernetes.io/conditions.path-exampleé adicionada.HTTP Header:
Corresponde às informações do cabeçalho da solicitação como um par chave-valor. Por exemplo, defina Key como
headernamee Value comoheadervalue1. Se você especificar vários valores de cabeçalho, eles serão avaliados usando a lógicaOR. Após essa configuração, a anotaçãoalb.ingress.kubernetes.io/conditions.http-header-exampleé adicionada.
Na lista suspensa Action, selecione uma opção.
Forward To
Encaminha solicitações para vários grupos de servidores de backend. No campo Service Name, selecione o serviço alvo. No campo Port, selecione o número da porta alvo. Em seguida, configure um valor de peso personalizado.
NotaServiços ClusterIP não são suportados para clusters que usam o plug-in de rede Flannel.
Ao selecionar Forward To, você não precisa configurar mapeamentos de caminho na regra.
Add Condition: Selecione Host. Host: demo.domain.ingress.top
Action: Forward To
Service Name: tea-svc
Port: 80
Configurar peso: 80
Add Service
Service Name: coffee-svc
Port: 80
Configurar peso: 20
Mantenha os valores padrão para os outros parâmetros.
Após concluir as configurações, clique em OK no canto inferior esquerdo da página Create Ingress.
Kubectl
O YAML a seguir mostra um exemplo de como encaminhar uma solicitação para vários serviços dentro do cluster.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: forward-ingress
annotations:
# The service in the annotation must exist in the cluster, and its name must match the service name under backend in the rule field.
alb.ingress.kubernetes.io/actions.service-name: | # Note: The "service-name" in this annotation must match the name of the backend service that is configured in spec.rules. The forwarding action applies to that backend service.
[{
"type": "ForwardGroup",
"ForwardConfig": {
"ServerGroups" : [{
"ServiceName": "tea-svc",
"Weight": 80,
"ServicePort": 80
},
{
"ServiceName": "coffee-svc",
"Weight": 20,
"ServicePort": 80
}]
}
}]
spec:
ingressClassName: alb
rules:
- host: demo.domain.ingress.top
http:
paths:
- path: /path
pathType: Prefix
backend:
service:
name: service-name # Note: The name of the backend service must match "service-name" in the custom forwarding action annotation. The forwarding action applies to this backend service.
port:
name: use-annotation # The service port name must be set to use-annotation.
Caso de uso 6: Reescrever uma solicitação
Uma reescrita modifica a URL de uma solicitação antes que ela seja encaminhada para um backend. O ALB Ingress pode alterar o host, o caminho e a string de consulta, o que é útil para simplificar URLs, realizar redirecionamentos transparentes para o cliente e ocultar detalhes de implementação do backend. No exemplo a seguir, uma reescrita é configurada usando a anotação alb.ingress.kubernetes.io/actions.service-name.
Por exemplo, se um cliente acessar https://example.com/api/users, a reescrita altera a URL para https://example.org/users, mas preserva a string de consulta original.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
namespace: default
name: rewrite-ingress
annotations:
alb.ingress.kubernetes.io/actions.service-name: | # The "service-name" in this annotation must match the name of the backend service that is configured in spec.rules. The forwarding action applies to that backend service.
[{
"type": "Rewrite",
"RewriteConfig": {
"Host": "example.org",
"Path": "/users",
"Query": "${query}" # ${query} indicates that the original request query string is used.
}
}]
spec:
ingressClassName: alb
rules:
- host: example.com
http:
paths:
- path: /api/users
pathType: ImplementationSpecific
backend:
service:
name: service-name # The name of the backend service must match "service-name" in the custom forwarding action annotation. The forwarding action applies to this backend service.
port:
number: 80
Caso de uso 7: Modificar cabeçalhos de resposta
Por padrão, as regras de encaminhamento do ALB Ingress aplicam-se a solicitações. Para aplicar uma regra a uma resposta, defina a anotação
alb.ingress.kubernetes.io/rule-direction.<service-name>comoResponse.Ao criar uma regra de encaminhamento para respostas, defina
backend.service.port.namecomouse-annotation.
O bloco de código a seguir define que, quando ResponseHeader for correspondido, ou seja, o cabeçalho contiver response-hello com um valor de value1 ou value2, um novo cabeçalho de solicitação source: alibaba será inserido.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/rule-direction.response-header: Response
alb.ingress.kubernetes.io/conditions.response-header: | # Note: The "response-header" in this annotation must match the name of the backend service that is configured in spec.rules. The forwarding condition applies to that backend service.
[{
"type": "ResponseHeader",
"responseHeaderConfig": {
"key": "response-hello",
"values": [
"value1",
"value2"
]
}
}]
alb.ingress.kubernetes.io/actions.response-header: | # Note: The "response-header" in this annotation must match the name of the backend service that is configured in spec.rules. The forwarding action applies to that backend service.
[{
"type": "InsertHeader",
"InsertHeaderConfig": {
"key": "source",
"value": "alibaba",
"valueType": "UserDefined"
}
}]
name: response-header
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /
pathType: ImplementationSpecific
backend:
service:
name: response-header # Note: The name of the backend service must match "response-header" in the custom forwarding condition and action annotations. The configured conditions and actions apply to this backend service.
port:
name: use-annotation # The service port name must be set to use-annotation.
Caso de uso 8: Modificar cabeçalhos de resposta por código de status
Por padrão, as regras de encaminhamento do ALB Ingress aplicam-se a solicitações. Para aplicar uma regra a uma resposta, defina a anotação
alb.ingress.kubernetes.io/rule-direction.<service-name>comoResponse.Ao criar uma regra de encaminhamento para respostas, defina
backend.service.port.namecomouse-annotation.
Este exemplo YAML remove o cabeçalho response-hello da resposta se o código de status da resposta for 200 ou 300.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/rule-direction.response-hello: Response
alb.ingress.kubernetes.io/conditions.response-hello: | # Note: The "response-hello" in this annotation must match the name of the backend service that is configured in spec.rules. The forwarding condition applies to that backend service.
[{
"type": "ResponseStatusCode",
"responseStatusCodeConfig": {
"values": [
"200",
"300"
]
}
}]
alb.ingress.kubernetes.io/actions.response-hello: | # Note: The "response-hello" in this annotation must match the name of the backend service that is configured in spec.rules. The forwarding action applies to that backend service.
[{
"type": "RemoveHeader",
"RemoveHeaderConfig": {
"key": "response-hello"
}
}]
name: response-hello
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /*
pathType: ImplementationSpecific
backend:
service:
name: response-hello # Note: The name of the backend service must match "response-hello" in the custom forwarding condition and action annotations. The configured conditions and actions apply to this backend service.
port:
name: use-annotation # The service port name must be set to use-annotation.
Condições e ações de encaminhamento
Caso de uso 1: Encaminhar tráfego com base em um nome de domínio
Esta seção mostra como configurar condições e ações de encaminhamento com base em um nome de domínio no ACK console para rotear tráfego para um serviço específico.
Faça login no ACK console. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em .
-
Na página Ingresses, clique em Create Ingress. Na caixa de diálogo Create Ingress, configure o Ingress.
Parâmetro
Descrição
Exemplo
Gateway type
Você pode selecionar ALB Ingress, MSE Ingress ou Nginx Ingress conforme necessário.
Para mais informações sobre as diferenças entre esses tipos de gateway, consulte Comparação entre Nginx Ingress, ALB Ingress e MSE Ingress.
ALB Ingress
Name
Um nome personalizado para o Ingress.
alb_ingress
Ingress Class
O nome da IngressClass associada.
alb
Rules
Clique em + Add Rule para adicionar uma ou mais regras de roteamento.
Domain name: Um nome de domínio personalizado.
Mappings: Configure os seguintes parâmetros.
Rule:
Prefix (prefix match): Corresponde ao prefixo do caminho da URL da solicitação.
Exact (exact match): Corresponde exatamente ao caminho da URL da solicitação.
ImplementationSpecific (Default): O comportamento depende da implementação do controlador Ingress. Para ALB Ingress, esta opção funciona como uma correspondência exata.
Service name: Selecione o serviço alvo, que é um Kubernetes Service.
Port: Selecione a porta que o serviço expõe.
Um Ingress suporta vários caminhos sob o mesmo nome de domínio. Clique em + Add Path para adicionar mais caminhos.
Domain name: *.example.com
Mappings:
Path: /tes
Rule: ImplementationSpecific
Service name: tea-svc
Port: 80
Custom forwarding rules
Defina regras de encaminhamento personalizadas para controle granular sobre o tráfego de entrada.
NotaUma regra de encaminhamento pode ter no máximo 10 condições.
Na lista suspensa Condition, selecione uma opção.
Domain name:
Corresponde ao nome de domínio da solicitação. Se você especificar vários nomes de domínio, eles serão avaliados usando a lógica OR. Quando esta condição é definida, a anotação
alb.ingress.kubernetes.io/conditions.host-exampleé adicionada.Path:
Corresponde ao caminho da solicitação. Se você especificar vários caminhos, eles serão avaliados usando a lógica OR. Quando esta condição é definida, a anotação
alb.ingress.kubernetes.io/conditions.path-exampleé adicionada.ImportanteAo configurar uma condição de encaminhamento de caminho, o console adiciona automaticamente uma regra de encaminhamento com o caminho
/created-by-<ALB-ID>ao Ingress.HTTP header:
Corresponde a um par chave-valor especificado no cabeçalho da solicitação. Por exemplo, defina Key como
headernamee Value comoheadervalue1. Se você especificar vários valores de cabeçalho, eles serão avaliados usando a lógica OR. Quando esta condição é definida, a anotaçãoalb.ingress.kubernetes.io/conditions.http-header-exampleé adicionada.
Na lista suspensa Action, selecione uma opção.
Forward to
Encaminha solicitações para vários grupos de servidores de backend. No campo Service name, selecione o serviço alvo. No campo Port, selecione a porta alvo. Em seguida, configure um peso.
NotaServiços ClusterIP não são suportados em clusters que usam o plug-in de rede Flannel.
Ao selecionar Forward to, você não precisa configurar Criar e usar um ALB Ingress para expor serviços na regra.
Condition: Selecione Domain Name, Path e HTTP Header.
Domain name: example.com. Clique em Add domain name para adicionar outro nome de domínio, como test.com.
Action: Selecione Forward to.
Service name: tea-svc
Port: 80
Weight: 100
Mantenha os valores padrão para os outros parâmetros.
A configuração está concluída. No canto inferior esquerdo da página Create Ingress, clique em OK.