A partir da versão 1.16.4, o Alibaba Cloud Service Mesh oferece suporte à CustomResourceDefinition (CRD) ASMEgressTrafficPolicy. Este tópico descreve como usar essa CRD para gerenciar o tráfego de saída.
Contexto
Como funciona
Uma malha de serviços gerencia o tráfego de saída criando e interconectando diversos recursos, como ServiceEntry, VirtualService, Gateway e Destination. Após configurar esses recursos, a malha intercepta o tráfego transparentemente e o roteia para um gateway de saída, que então o encaminha aos serviços externos.
Esse processo é complexo, propenso a erros e exige conhecimento aprofundado sobre vários campos. Para simplificar a configuração do tráfego de saída, o ASM introduziu o recurso ASMEgressTrafficPolicy.
O recurso ASMEgressTrafficPolicy abstrai e simplifica a configuração do tráfego de saída. Em vez de criar e gerenciar manualmente recursos como ServiceEntry, VirtualService, Gateway e Destination, basta definir algumas configurações essenciais. A malha de serviços intercepta o tráfego transparentemente, o roteia para um gateway de saída e o encaminha para serviços externos via HTTP ou HTTPS.
Como o ASMEgressTrafficPolicy é uma abstração simplificada dos recursos nativos da malha de serviços, ele pode não oferecer suporte a casos de uso avançados, como roteamento de tráfego baseado em porcentagem ou iniciação de mTLS a partir do gateway de saída. Caso necessite de recursos avançados ou configurações personalizadas, consulte Configurar um gateway de saída unificado para tráfego na malha .
Recursos
O ASM fornece uma maneira unificada de conectar, gerenciar e proteger a comunicação entre aplicações. Diferentemente dos métodos baseados em IP de rede, o ASM utiliza uma abordagem centrada na aplicação que não exige alterações no código existente. O recurso ASMEgressTrafficPolicy define como gerenciar o tráfego de saída por meio de um gateway de saída. Ao combinar um gateway de saída do ASM com uma AuthorizationPolicy, você obtém um controle mais flexível do tráfego de saída.
Este exemplo inclui os seguintes fluxos de tráfego:
Comunicação entre proxies da malha e entre os proxies e o gateway: Por padrão, o ASM protege essa comunicação com mTLS e gerencia os certificados.
Comunicação entre aplicações e seus proxies da malha, e entre o gateway e serviços externos:
a. Para usar os recursos avançados de L7 da malha de serviços, as aplicações devem se comunicar com seus proxies da malha usando texto simples sempre que possível. Isso permite que o proxy da malha acesse informações de tráfego L7 e ofereça suporte a recursos mais avançados. Se uma aplicação precisar iniciar tráfego HTTPS diretamente, a malha de serviços fornecerá apenas capacidades de L4.
b. Configure o protocolo de comunicação entre o gateway de saída e os serviços externos. Tanto texto simples quanto HTTPS são suportados.
Pré-requisitos
É necessário ter uma instância comercial do ASM (Enterprise Edition ou Ultimate Edition) executando a versão 1.16.4 ou posterior. Para mais informações, consulte Criar uma instância do ASM e Atualizar uma instância do ASM.
A injeção automática deve estar ativada para o namespace padrão. Para mais informações, consulte Ativar injeção automática.
Pré-requisitos
Definir a política de tráfego de saída
Faça login no console do ASM. No painel de navegação à esquerda, escolha .
Na página Mesh Management, clique em nome da instância do ASM. No painel de navegação à esquerda, escolha .
Na aba global, clique em Outbound Traffic Policy. Em seguida, à direita de Outbound Traffic Policy, clique em REGISTRY_ONLY e depois clique em Update Settings.
Criar um namespace
Crie o namespace istio-egress. Para mais informações, consulte Gerenciar namespaces globais.
Na página Global Namespace, clique em Sync Automatic Sidecar Injection to Kubernetes Cluster para sincronizar o namespace com o cluster ACK gerenciado pela instância do ASM.
Criar um gateway de saída
No ASM, crie um gateway de saída chamado egressgateway-a. Em Port Mapping, configure HTTP na porta 80 e HTTPS nas portas 443 e 444. Em seguida, ative Support two-way TLS authentication. Para mais informações, consulte Criar um serviço de gateway de saída.
Certifique-se de que o arquivo YAML gerado inclua o seguinte conteúdo no campo spec:
spec:
podLabels:
security.istio.io/tlsMode: istio
Criar uma aplicação de exemplo
Na instância do ASM, crie um namespace chamado mytest e ative a injeção automática de sidecar. Para mais informações, consulte Gerenciar namespaces globais.
-
No cluster ACK, implante o serviço sleep-a no namespace mytest e o serviço nginx no namespace padrão.
-
Crie um arquivo chamado test.yaml com o seguinte conteúdo:
-
No cluster ACK, execute o comando a seguir para implantar os serviços sleep-a e nginx:
kubectl apply -f test.yaml
-
-
Execute os comandos a seguir para acessar
http://www.httpbin.orga partir dos serviços sleep-a e nginx:kubectl -n mytest exec deployment/sleep-a -- curl -s -o /dev/null -w "%{http_code}\n" http://www.httpbin.org kubectl -n default exec deployment/nginx -- curl -s -o /dev/null -w "%{http_code}\n" http://www.httpbin.orgAmbos os comandos retornam
502, indicando falha no acesso.
Permitir que sleep-a acesse um serviço HTTP externo
Opção 1: HTTP em texto simples entre sidecar e gateway de saída
Esta opção não é prática em ambientes de produção. A comunicação em texto simples entre o contêiner da aplicação e o gateway de saída impede a autorização baseada na identidade do cliente. O ASMEgressTrafficPolicy não oferece suporte ao acesso ao gateway de saída via HTTP em texto simples.
O gerenciamento de tráfego ocorre principalmente no sidecar do cliente e não requer um gateway de saída.
A observabilidade não depende de um gateway de saída.
Os recursos de segurança dependem do gateway de saída. No entanto, sem mTLS, todas as capacidades de autorização baseadas na identidade do cliente ficam desativadas. O gateway de saída só consegue rejeitar todas as solicitações.
Opção 2: mTLS entre sidecar e gateway de saída (recomendado)
-
Crie um ASMEgressTrafficPolicy.
Console
Faça login no console do ASM. No painel de navegação à esquerda, escolha .
Na página Mesh Management, clique em nome da instância do ASM. No painel de navegação à esquerda, escolha .
-
Clique em nome do gateway para acessar a página gateway overview. No painel de navegação à esquerda, clique em Outbound Traffic Policy.
Configure a regra da política de tráfego de saída. Defina Egress Gateway como
egressgateway. Na área In-cluster Service, defina Namespace comomytest, Workload Label Name comoappe Label Value comosleep-a. Na área External Service, defina External Service Name comohttpbin-service-http, adicionewww.httpbin.orgehttpbin.orgà Domain List. Para Service Port, defina Port como80, Port Name comohttpe Protocol como HTTP. Na área How to Access, selecione a porta do gateway de saída80e, para Upgrade to HTTPS, selecione No.
kubectl
-
Crie um arquivo chamado egress-by-egressgateway.yaml com o seguinte conteúdo.
Para descrições dos campos, consulte Referência da CRD ASMEgressTrafficPolicy.
apiVersion: istio.alibabacloud.com/v1 kind: ASMEgressTrafficPolicy metadata: name: egress-by-egressgateway # Convention: egress-by-{egress-gateway-name}. namespace: istio-egress # Convention: Fixed to the istio-egress namespace. spec: byEgressGateway: name: egressgateway egressRules: - from: - namespace: mytest workloadSelector: app: sleep-a to: - name: httpbin-service-http hosts: - www.httpbin.org # All hosts must resolve to the same IP addresses. - httpbin.org # All hosts must resolve to the same IP addresses. port: name: http number: 80 protocol: HTTP byEgressGateway: port: 80 # Traffic path: sidecar -> Gateway (port 80) -> Service (httpbin.org, port 80) -
No cluster ACK, execute o comando a seguir para criar o recurso ASMEgressTrafficPolicy.
kubectl apply -f egress-by-egressgateway.yaml
-
Verifique se o ASMEgressTrafficPolicy entrou em vigor.
-
Execute o comando a seguir para testar o acesso do serviço nginx no namespace padrão a
http://www.httpbin.org.kubectl -n default exec deployment/nginx -- curl -s -o /dev/null -w "%{http_code}\n" http://www.httpbin.orgO comando retorna
502, indicando que o acesso do serviço nginx ahttp://www.httpbin.orgfoi bloqueado conforme esperado. -
Execute o comando a seguir para testar o acesso do serviço sleep-a no namespace mytest a
http://www.httpbin.org.kubectl -n mytest exec deployment/sleep-a -- curl -s -o /dev/null -w "%{http_code}\n" http://www.httpbin.orgO comando retorna
200, indicando que o acesso foi permitido conforme esperado. -
Execute os comandos a seguir para excluir a política egress-by-egressgateway e, em seguida, teste novamente o acesso do serviço sleep-a no namespace mytest a
http://www.httpbin.org.kubectl -n istio-egress delete ASMEgressTrafficPolicy egress-by-egressgateway kubectl -n mytest exec deployment/sleep-a -- curl -s -o /dev/null -w "%{http_code}\n" http://www.httpbin.orgO comando retorna
502, indicando que, após a exclusão do ASMEgressTrafficPolicy, o serviço sleep-a não consegue mais acessarhttp://www.httpbin.org.
Esses resultados confirmam que o ASMEgressTrafficPolicy está funcionando corretamente.
-
Acessar serviços HTTPS externos a partir de sleep-a
Opção 1: mTLS entre sidecar e gateway de saída (recomendado)
-
Crie um ASMEgressTrafficPolicy.
Console
Faça login no console do ASM. No painel de navegação à esquerda, escolha .
Na página Mesh Management, clique em nome da instância do ASM. No painel de navegação à esquerda, escolha .
-
Clique em nome do gateway para abrir a página gateway overview. No painel de navegação à esquerda, clique em Outbound Traffic Policy.
Configure uma regra de tráfego de saída. Na seção in-cluster service, defina Namespace como mytest, Label Name como
appe Label Value comosleep-a. Na seção external service, defina External Service Name comohttpbin-service-http, adicionewww.httpbin.orgehttpbin.orgà Domain List e configure a Service Port com Port: 80, Port Name: http e Protocol: HTTP. Na seção How to Access, defina Egress Gateway Port como 80, Upgrade to HTTPS como Yes e HTTPS Port como 443.
Kubectl
-
Atualize o arquivo egress-by-egressgateway.yaml com o seguinte conteúdo.
O campo httpsUpgrade e definições relacionadas para acessar
https://www.httpbin.orgforam adicionados ao campo spec. Para descrições dos campos, consulte Referência da CRD ASMEgressTrafficPolicy.apiVersion: istio.alibabacloud.com/v1 kind: ASMEgressTrafficPolicy metadata: name: egress-by-egressgateway # Convention: egress-by-{egress-gateway-name}. namespace: istio-egress # Convention: Fixed to the istio-egress namespace. spec: byEgressGateway: name: egressgateway egressRules: - from: - namespace: mytest workloadSelector: app: sleep-a to: - name: httpbin-service-http hosts: - www.httpbin.org # The IP addresses to which the multiple domain names resolve must be the same. - httpbin.org # The IP addresses to which the multiple domain names resolve must be the same. port: name: http number: 80 protocol: HTTP byEgressGateway: port: 80 # Sidecar -> Port 80 of Gateway -> Port 80 of Service (httpbin.org) httpsUpgrade: enabled: true # If enabled is set to false, the port setting for httpsUpgrade has no effect. port: 443 # Sidecar -> Port 80 of Gateway -> Port 443 of Service (httpbin.org) -
No cluster ACK, execute o comando a seguir para criar o recurso ASMEgressTrafficPolicy:
kubectl apply -f egress-by-egressgateway.yaml
-
Verifique a configuração do ASMEgressTrafficPolicy.
-
Verifique o serviço sleep-a no namespace mytest.
-
Execute o comando a seguir para acessar
http://www.httpbin.orga partir do serviço sleep-a.kubectl -n mytest exec deployment/sleep-a -- curl -s -o /dev/null -w "%{http_code}\n" http://httpbin.orgUm código de status
200indica que o serviço sleep-a consegue acessarhttp://www.httpbin.org. -
Execute o comando a seguir para solicitar o endpoint
anythingdehttpbin.orge verificar se o gateway de saída atualiza a solicitação HTTP para HTTPS.kubectl -n mytest exec deployment/sleep-a -- sh -c "curl -s http://httpbin.org/anything |grep url"Saída esperada:
"url": "https://httpbin.org/anything"O valor do campo
urlcomeça comhttps, confirmando que o gateway de saída atualizou a solicitação parahttpsantes de encaminhá-la parahttpbin.org. -
Execute o comando a seguir para acessar
https://www.httpbin.orga partir do serviço sleep-a no namespace mytest.kubectl -n mytest exec deployment/sleep-a -- curl -s -o /dev/null -w "%{http_code}\n" https://www.httpbin.orgUm código de status
200indica que o serviço sleep-a consegue acessarhttps://www.httpbin.org.
-
-
Verifique o serviço Nginx no namespace padrão.
-
Execute o comando a seguir para acessar
http://www.httpbin.orga partir do serviço Nginx.kubectl -n default exec deployment/nginx -- curl -s -o /dev/null -w "%{http_code}\n" http://www.httpbin.orgUm código de status
502indica que o serviço Nginx falhou ao acessarhttp://www.httpbin.org. -
Execute o comando a seguir para acessar
https://www.httpbin.orga partir do serviço Nginx.kubectl -n default exec deployment/nginx -- curl -s -o /dev/null -w "%{http_code}\n" https://www.httpbin.orgUm erro de conexão recusada indica que o serviço Nginx falhou ao acessar
https://www.httpbin.org. -
Execute o comando a seguir para visualizar o log de acesso do sidecar da carga de trabalho Nginx e identificar o motivo da recusa de conexão.
kubectl -n default logs -f deployment/nginx -c istio-proxy --tail=1Saída esperada:
{"authority":"-","bytes_received":"0","bytes_sent":"0","downstream_local_address":"52.86.XX.XX:443","downstream_remote_address":"172.16.0.199:56748","duration":"0","istio_policy_status":"-","method":"-","path":"-","protocol":"-","request_id":"-","requested_server_name":"-","response_code":"0","response_flags":"UH","route_name":"-","start_time":"2023-04-11T02:00:07.409Z","trace_id":"-","upstream_cluster":"BlackHoleCluster","upstream_host":"-","upstream_local_address":"-","upstream_service_time":"-","upstream_transport_failure_reason":"-","user_agent":"-","x_forwarded_for":"-"}A saída mostra que a solicitação foi encaminhada para o
BlackHoleCluster, que rejeitou a conexão.
-
-
Execute os comandos a seguir para excluir egress-by-egressgateway e, em seguida, tente acessar
http://www.httpbin.orgehttps://www.httpbin.orgnovamente a partir do serviço sleep-a no namespace mytest.kubectl -n istio-egress delete ASMEgressTrafficPolicy egress-by-egressgateway kubectl -n mytest exec deployment/sleep-a -- curl -s -o /dev/null -w "%{http_code}\n" http://www.httpbin.org kubectl -n mytest exec deployment/sleep-a -- curl -s -o /dev/null -w "%{http_code}\n" https://www.httpbin.orgAs solicitações para
http://www.httpbin.orgretornam502, e as solicitações parahttps://www.httpbin.orgsão rejeitadas. Após a exclusão da configuração do ASMEgressTrafficPolicy, o serviço sleep-a não consegue mais acessarhttp://www.httpbin.orgouhttps://www.httpbin.org.
Esses resultados confirmam que o ASMEgressTrafficPolicy funciona conforme esperado.
-
Opção 2: HTTPS entre o sidecar e o gateway de saída
-
Crie um ASMEgressTrafficPolicy.
Console
Faça login no console do ASM. No painel de navegação à esquerda, escolha .
Na página Mesh Management, clique em nome da instância do ASM. No painel de navegação à esquerda, escolha .
-
Clique em nome do gateway para abrir a página gateway overview. No painel de navegação à esquerda, clique em Outbound Traffic Policy.
Na página de regras de tráfego de saída, clique em Add Rule e configure os parâmetros da regra. Defina Namespace como
mytest. Para Workload Labels, defina o nome do rótulo comoappe o valor do rótulo comosleep-a. Defina External Service Name comohttpbin-service-https. Adicionewww.httpbin.orgehttpbin.orgà Domain List. Para Service Port, defina a porta como443, o nome da porta comohttpse Protocol como HTTPS. Para How to Access, selecione Via egress gateway port e defina a porta como444.
Kubectl
-
Atualize o arquivo egress-by-egressgateway.yaml com o seguinte conteúdo.
O campo httpsUpgrade e definições para acessar diretamente
https://www.httpbin.orgforam adicionados ao campo spec. Para uma descrição dos campos, consulte ASMEgressTrafficPolicy CRD.apiVersion: istio.alibabacloud.com/v1 kind: ASMEgressTrafficPolicy metadata: name: egress-by-egressgateway # Convention: egress-by-{egress-gateway-name}. namespace: istio-egress # Convention: Fixed to the istio-egress namespace. spec: byEgressGateway: name: egressgateway egressRules: - from: - namespace: mytest workloadSelector: app: sleep-a to: - name: httpbin-service-https hosts: - www.httpbin.org - httpbin.org port: name: https number: 443 protocol: HTTPS byEgressGateway: port: 444 # The HTTPS port 444 that is defined for the egress gateway in the prerequisites. -
No cluster ACK, execute o comando a seguir para criar o recurso ASMEgressTrafficPolicy:
kubectl apply -f egress-by-egressgateway.yaml
-
Verifique a configuração do ASMEgressTrafficPolicy.
-
Verifique o serviço sleep-a no namespace mytest.
-
Execute o comando a seguir para acessar
http://www.httpbin.orga partir do serviço sleep-a.kubectl -n mytest exec deployment/sleep-a -- curl -s -o /dev/null -w "%{http_code}\n" http://httpbin.orgUm código de status
502indica que o serviço sleep-a falhou ao acessarhttp://www.httpbin.org. -
Execute o comando a seguir para acessar
https://www.httpbin.orga partir do serviço sleep-a no namespace mytest.kubectl -n mytest exec deployment/sleep-a -- curl -s -o /dev/null -w "%{http_code}\n" https://www.httpbin.orgUm código de status
200indica que o serviço sleep-a consegue acessarhttps://www.httpbin.org.
-
-
Verifique o serviço Nginx no namespace padrão.
-
Execute o comando a seguir para acessar
http://www.httpbin.orga partir do serviço Nginx.kubectl -n default exec deployment/nginx -- curl -s -o /dev/null -w "%{http_code}\n" http://www.httpbin.orgUm código de status
502indica que o serviço Nginx falhou ao acessarhttp://www.httpbin.org. -
Execute o comando a seguir para acessar
https://www.httpbin.orga partir do serviço Nginx.kubectl -n default exec deployment/nginx -- curl -s -o /dev/null -w "%{http_code}\n" https://www.httpbin.orgUm erro de conexão recusada indica que o serviço Nginx falhou ao acessar
https://www.httpbin.org. -
Execute o comando a seguir para visualizar o log de acesso do sidecar da carga de trabalho Nginx e identificar o motivo da recusa de conexão.
kubectl -n default logs -f deployment/nginx -c istio-proxy --tail=1Saída esperada:
{"authority":"-","bytes_received":"0","bytes_sent":"0","downstream_local_address":"52.86.XX.XX:443","downstream_remote_address":"172.16.0.199:56748","duration":"0","istio_policy_status":"-","method":"-","path":"-","protocol":"-","request_id":"-","requested_server_name":"-","response_code":"0","response_flags":"UH","route_name":"-","start_time":"2023-04-11T02:00:07.409Z","trace_id":"-","upstream_cluster":"BlackHoleCluster","upstream_host":"-","upstream_local_address":"-","upstream_service_time":"-","upstream_transport_failure_reason":"-","user_agent":"-","x_forwarded_for":"-"}A saída mostra que a solicitação foi encaminhada para o
BlackHoleCluster, que rejeitou a conexão.
-
-
Execute os comandos a seguir para excluir egress-by-egressgateway e, em seguida, tente acessar
http://www.httpbin.orgehttps://www.httpbin.orgnovamente a partir do serviço sleep-a no namespace mytest.kubectl -n istio-egress delete ASMEgressTrafficPolicy egress-by-egressgateway kubectl -n mytest exec deployment/sleep-a -- curl -s -o /dev/null -w "%{http_code}\n" http://www.httpbin.org kubectl -n mytest exec deployment/sleep-a -- curl -s -o /dev/null -w "%{http_code}\n" https://www.httpbin.orgAs solicitações para
http://www.httpbin.orgretornam502, e as solicitações parahttps://www.httpbin.orgsão rejeitadas. Após a exclusão da configuração do ASMEgressTrafficPolicy, o serviço sleep-a não consegue mais acessarhttp://www.httpbin.orgouhttps://www.httpbin.org.Esses resultados confirmam que o ASMEgressTrafficPolicy funciona conforme esperado.
-
Acessar um serviço TCP externo a partir do serviço sleep-a
-
Crie um ASMEgressTrafficPolicy.
Console
Faça login no console do ASM. No painel de navegação à esquerda, escolha .
Na página Mesh Management, clique em nome da instância do ASM. No painel de navegação à esquerda, escolha .
-
Clique em nome do gateway. Na página Gateway overview, clique em Outbound Traffic Policy no painel de navegação à esquerda. Configure a política conforme mostrado na figura a seguir.

kubectl
-
Crie um arquivo chamado egress-by-egressgateway.yaml com o seguinte conteúdo.
apiVersion: istio.alibabacloud.com/v1 kind: ASMEgressTrafficPolicy metadata: name: egress-by-egressgateway namespace: istio-egress spec: byEgressGateway: name: egressgateway egressRules: - from: - namespace: mytest workloadSelector: app: sleep-a to: - byEgressGateway: {} hosts: - www.alibabacloud.com name: aliyun-service-tcp port: name: tcp number: 443 protocol: TCP -
No cluster ACK, execute o comando a seguir para criar o recurso ASMEgressTrafficPolicy.
kubectl apply -f egress-by-egressgateway.yaml
-
Verifique se a configuração do ASMEgressTrafficPolicy foi aplicada.
-
Verifique o serviço sleep-a no namespace mytest.
-
Execute o comando a seguir para acessar
www.alibabacloud.coma partir do serviço sleep-a.kubectl -n mytest exec deployment/sleep-a -- curl -s -o /dev/null -w "%{http_code}\n" http://www.alibabacloud.comA saída é
502, o que indica que o serviço sleep-a falhou ao acessarhttp://www.alibabacloud.com. -
Execute o comando a seguir para acessar
https://www.alibabacloud.coma partir do serviço sleep-a no namespace mytest.kubectl -n mytest exec deployment/sleep-a -- curl -s -o /dev/null -w "%{http_code}\n" https://www.alibabacloud.comA saída é
200, o que indica que o serviço sleep-a acessouhttps://www.alibabacloud.comcom sucesso.
-
-
Verifique o serviço Nginx no namespace padrão.
-
Execute o comando a seguir para acessar
http://www.alibabacloud.coma partir do serviço Nginx.kubectl -n default exec deployment/nginx -- curl -s -o /dev/null -w "%{http_code}\n" http://www.alibabacloud.comA saída é
502, o que indica que o serviço Nginx falhou ao acessarhttp://www.alibabacloud.com. -
Execute o comando a seguir para acessar
https://www.alibabacloud.coma partir do serviço Nginx.kubectl -n default exec deployment/nginx -- curl -s -o /dev/null -w "%{http_code}\n" https://www.alibabacloud.comA saída mostra que a conexão foi recusada, o que indica que o serviço Nginx falhou ao acessar
https://www.alibabacloud.com. -
Execute o comando a seguir para inspecionar o log de acesso do sidecar da carga de trabalho Nginx e entender o motivo da recusa de conexão.
kubectl -n default logs -f deployment/nginx -c istio-proxy --tail=1Saída esperada:
{"authority":"-","bytes_received":"0","bytes_sent":"0","downstream_local_address":"52.86.XX.XX:443","downstream_remote_address":"172.16.0.199:56748","duration":"0","istio_policy_status":"-","method":"-","path":"-","protocol":"-","request_id":"-","requested_server_name":"-","response_code":"0","response_flags":"UH","route_name":"-","start_time":"2023-04-11T02:00:07.409Z","trace_id":"-","upstream_cluster":"BlackHoleCluster","upstream_host":"-","upstream_local_address":"-","upstream_service_time":"-","upstream_transport_failure_reason":"-","user_agent":"-","x_forwarded_for":"-"}A saída mostra que a solicitação foi roteada para o
BlackHoleCluster, causando a rejeição da conexão.
-
-
Execute os comandos a seguir para excluir egress-by-egressgateway e, em seguida, tente acessar
http://www.alibabacloud.comehttps://www.alibabacloud.comnovamente a partir do serviço sleep-a no namespace mytest.kubectl -n istio-egress delete ASMEgressTrafficPolicy egress-by-egressgateway kubectl -n mytest exec deployment/sleep-a -- curl -s -o /dev/null -w "%{http_code}\n" http://www.alibabacloud.com kubectl -n mytest exec deployment/sleep-a -- curl -s -o /dev/null -w "%{http_code}\n" https://www.alibabacloud.comAs solicitações para
http://www.alibabacloud.comretornam um erro502, e as solicitações parahttps://www.alibabacloud.comsão recusadas. Isso indica que a exclusão da configuração do ASMEgressTrafficPolicy impede o serviço sleep-a de acessarhttp://www.alibabacloud.comouhttps://www.alibabacloud.com.Esses resultados confirmam que a configuração do ASMEgressTrafficPolicy funciona conforme esperado.
-
Operações relacionadas
Negar solicitações POST de um namespace específico
Use um gateway de saída do ASM com um ASMEgressTrafficPolicy para controlar o tráfego de saída do seu cluster. Para um controle de acesso mais refinado, aplique uma AuthorizationPolicy. Por exemplo, a configuração a seguir nega solicitações POST do namespace mytest.
kind: AuthorizationPolicy
apiVersion: security.istio.io/v1beta1
metadata:
name: sleep-a-egress-www-httpbin-org
namespace: istio-system
spec:
action: DENY
rules:
- to:
- operation:
hosts:
- www.httpbin.org
- httpbin.org
methods:
- POST
from:
- source:
namespaces: ["mytest"]
selector:
matchLabels:
istio: egressgateway-a
Após aplicar essa configuração, as solicitações POST do serviço sleep-a para www.httpbin.org retornam RBAC: access. As solicitações GET do serviço sleep-a para www.httpbin.org não são afetadas.