A definição de recurso personalizado (CRD) ASMEgressTrafficPolicy determina como um gateway de egresso roteia o tráfego de saída de serviços na malha para destinos externos. Ao combinar proxies sidecar e políticas de autorização, é possível controlar o tráfego de egresso de forma abrangente.
Requer a versão 1.16.4 ou posterior do Service Mesh (ASM).
Exemplos de YAML
Roteamento de serviço para endpoint externo via HTTP
O serviço sleep-a no namespace mytest acessa http://www.httpbin.org por meio do gateway de egresso egressgateway-a na porta 80.
apiVersion: istio.alibabacloud.com/v1beta1
kind: ASMEgressTrafficPolicy
metadata:
name: egress-by-egressgateway-a # Name corresponds to the egress gateway.
namespace: istio-egress # Fixed namespace for egress policies.
spec:
byEgressGateway:
name: egressgateway-a
egressRules:
- from:
- namespace: mytest
workloadSelector:
app: sleep-a
to:
- name: httpbin-service-http
hosts:
- www.httpbin.org # Multiple domains that resolve to the same address.
- httpbin.org
port:
name: http
number: 80
protocol: HTTP
byEgressGateway:
port: 80 # Traffic path: Sidecar -> port 80 on gateway -> port 80 on httpbin.org
Fluxo de tráfego: O proxy sidecar intercepta a requisição de saída do sleep-a, encaminha para a porta 80 no gateway de egresso e o gateway a envia para a porta 80 em httpbin.org.
Upgrade de HTTP para HTTPS com roteamento de múltiplos serviços
Este exemplo define três regras de egresso através do mesmo gateway:
|
Serviço de source |
Destino externo |
Porta do gateway |
Protocolo |
Upgrade para HTTPS |
|
|
httpbin.org |
80 |
HTTP |
Sim (porta 443) |
|
|
httpbin.org |
444 |
HTTPS |
Não |
|
|
www.aliyun.com |
445 |
HTTPS |
Não |
apiVersion: istio.alibabacloud.com/v1beta1
kind: ASMEgressTrafficPolicy
metadata:
name: egress-by-egressgateway-a
namespace: istio-egress
spec:
byEgressGateway:
name: egressgateway-a
egressRules:
- from:
- namespace: mytest
workloadSelector:
app: sleep-a
to:
- name: httpbin-service-http
hosts:
- www.httpbin.org
- httpbin.org
port:
name: http
number: 80
protocol: HTTP
byEgressGateway:
port: 80
httpsUpgrade:
enabled: true # Set to false to disable the upgrade. The port below is ignored when disabled.
port: 443 # Traffic path: Sidecar -> port 80 on gateway -> port 443 on httpbin.org (HTTPS)
- name: httpbin-service-https
hosts:
- www.httpbin.org
- httpbin.org
port:
name: https
number: 443
protocol: HTTPS
byEgressGateway:
port: 444
- from:
- namespace: mytest
workloadSelector:
app: sleep-b
to:
- name: aliyun-service-https
hosts:
- www.aliyun.com
port:
name: https
number: 443
protocol: HTTPS
byEgressGateway:
port: 445
A primeira regra ilustra o upgrade para HTTPS: o sidecar envia HTTP na porta 80 ao gateway, que origina uma conexão HTTPS na porta 443 para httpbin.org. A aplicação transmite HTTP simples enquanto o gateway gerencia o TLS.
Roteamento de tráfego HTTP e tcp com alocação automática de portas
A partir da versão 1.24.6.45 do ASM, o ASMEgressTrafficPolicy oferece suporte ao protocolo TCP. Quando todos os campos byEgressGateway nas seções to são omitidos, o ASM aloca automaticamente portas de encaminhamento no gateway de egresso dentro do intervalo padrão de 10000 a 20000. Essas portas atribuídas automaticamente são internas e não afetam suas cargas de trabalho.
apiVersion: istio.alibabacloud.com/v1beta1
kind: ASMEgressTrafficPolicy
metadata:
name: egress-by-egressgateway-a
namespace: istio-egress
spec:
byEgressGateway:
name: egressgateway-a
egressRules:
- from:
- namespace: default
workloadSelector:
app: sleep
to:
- name: aliyun-com-http # HTTP route
hosts:
- aliyun.com
port:
name: http
number: 80
protocol: HTTP
- name: aliyun-https # HTTPS route
hosts:
- aliyun.com
port:
name: https
number: 443
protocol: HTTPS
- name: https-upgrade # HTTP upgraded to HTTPS at the gateway
hosts:
- taobao.com
port:
name: http
protocol: HTTP
number: 80
httpsUpgrade:
enabled: true
port: 443
- name: tcp-svc1 # TCP service 1
hosts:
- 1.1.1.1
port:
name: tcp
protocol: TCP
number: 44
- name: tcp-svc2 # TCP service 2
hosts:
- test-tcp.com
port:
name: tcp
protocol: TCP
number: 444
Como nenhum campo byEgressGateway foi especificado em nenhuma entrada to, o ASM atribui automaticamente portas de encaminhamento no gateway para todos os cinco destinos.
Referência de campos do CRD
Spec
|
**Campo** |
**Tipo** |
**Obrigatório** |
**Descrição** |
|
byEgressGateway |
Sim |
Gateway de egresso responsável por rotear o tráfego para serviços externos. |
|
|
egressRules |
Sim |
Regras de tráfego de egresso que definem os mapeamentos entre source e destino. |
ByEgressGateway
|
**Campo** |
**Tipo** |
**Obrigatório** |
**Descrição** |
|
name |
string |
Sim |
Nome do gateway de egresso. Mantenha o nome com até 32 caracteres. |
|
port |
uint32 |
Não |
Porta no gateway de egresso usada para encaminhar o tráfego. |
EgressRule
|
**Campo** |
**Tipo** |
**Obrigatório** |
**Descrição** |
|
name |
string |
Não |
Nome descritivo para esta regra. |
|
from |
From[] |
Sim |
Cargas de trabalho na malha que iniciam as requisições de saída. |
|
to |
To[] |
Sim |
Serviços externos que recebem o tráfego. |
From
|
**Campo** |
**Tipo** |
**Obrigatório** |
**Descrição** |
|
namespace |
string |
Sim |
Namespace da carga de trabalho que inicia a requisição. |
|
workloadSelector |
map[string]string |
Não |
Seletor de rótulos que identifica cargas de trabalho específicas dentro do namespace. |
To
|
**Campo** |
**Tipo** |
**Obrigatório** |
**Descrição** |
|
name |
string |
Sim |
Nome exclusivo para esta entrada de serviço externo dentro da regra. |
|
hosts |
string[] |
Sim |
Nomes de domínio ou endereços IP do serviço externo. É possível especifique vários domínios, desde que todas as entradas resolvam para o mesmo endereço. |
|
port |
Sim |
Porta do serviço externo. O campo |
|
|
byEgressGateway |
Sim |
Porta no gateway de egresso utilizada para encaminhar tráfego a este serviço. A partir do ASM 1.24.6.45, caso todos os campos |
|
|
httpsUpgrade |
Não |
Realiza upgrade de requisições HTTP de saída para HTTPS no gateway de egresso. |
HttpsUpgrade
|
**Campo** |
**Tipo** |
**Obrigatório** |
**Descrição** |
|
enabled |
bool |
Sim |
Defina como |
|
port |
uint32 |
Sim |
Porta HTTPS do serviço externo (geralmente |
Observações de uso
Namespace: Todos os recursos
ASMEgressTrafficPolicydevem ser criados no namespaceistio-egress.Nomenclatura: Nomeie cada política conforme seu gateway de egresso associado (por exemplo,
egress-by-egressgateway-apara o gatewayegressgateway-a).Múltiplos domínios: Ao listar várias entradas em
hosts, todos os domínios devem resolver para o mesmo endereço IP.Alocação automática de portas: Disponível a partir do ASM 1.24.6.45. Aplica-se apenas quando todas as entradas
tona política omitem o campobyEgressGateway.Protocolos suportados: O campo
protocolemportaceitaHTTP,HTTPSouTCP. O suporte a tcp exige a versão 1.24.6.45 ou superior do ASM.