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 service permite gerenciar 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 o encaminha aos service externos.
Esse processo é complexo, propenso a erros e exige conhecimento profundo de 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 service intercepta o tráfego transparentemente, o roteia para um gateway de saída e o encaminha para service externos via HTTP ou HTTPS.
Como o ASMEgressTrafficPolicy é uma abstração simplificada dos recursos nativos da malha de service, 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. Se você precisar de recursos avançados ou configurações personalizadas, consulte Configure a unified egress gateway for in-mesh traffic .
Recursos
O ASM fornece uma maneira unificada de conectar, gerenciar e proteger a comunicação entre aplicações. Diferentemente de métodos baseados em IP de rede, o ASM usa 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 service externos:
a. Para usar os recursos avançados de L7 da malha de service, 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 service fornecerá apenas capacidades de L4.
b. Configure o protocolo de comunicação entre o gateway de saída e os service externos. Tanto texto simples quanto HTTPS são suportados.
Pré-requisitos
Você deve 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 Create an ASM instance e Update an ASM instance.
A injeção automática deve estar ativada para o namespace padrão. Para mais informações, consulte Enable automatic injection.
Pré-requisitos
Defina 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 no 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.
Crie um namespace
Crie o namespace istio-egress. Para mais informações, consulte Manage global namespaces.
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.
Crie 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 Create an egress gateway service.
Certifique-se de que o arquivo YAML gerado inclua o seguinte conteúdo no campo spec:
spec:
podLabels:
security.istio.io/tlsMode: istio
Crie 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 Manage global namespaces.
-
No cluster ACK, implante o service sleep-a no namespace mytest e o service 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 service sleep-a e nginx:
kubectl apply -f test.yaml
-
-
Execute os comandos a seguir para acessar
http://www.httpbin.orga partir dos service 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, o que indica falha no acesso.
Permita que sleep-a acesse um service HTTP externo
Opção 1: HTTP em texto simples entre sidecar e gateway de saída
Esta opção não é prática em ambiente 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 requisições.
Opção 2: mTLS entre sidecar e gateway de saída (recomendado)
-
Crie uma ASMEgressTrafficPolicy.
Console
Faça login no console do ASM. No painel de navegação à esquerda, escolha .
Na página Mesh Management, clique no nome da instância do ASM. No painel de navegação à esquerda, escolha .
-
Clique no 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 ASMEgressTrafficPolicy CRD Reference.
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 seu cluster ACK, execute o comando a seguir para criar o recurso ASMEgressTrafficPolicy.
kubectl apply -f egress-by-egressgateway.yaml
-
Verifique se a ASMEgressTrafficPolicy entrou em vigor.
-
Execute o comando a seguir para testar o acesso do service 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 service nginx ahttp://www.httpbin.orgfoi bloqueado conforme esperado. -
Execute o comando a seguir para testar o acesso do service 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 service 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 da ASMEgressTrafficPolicy, o service sleep-a não consegue mais acessarhttp://www.httpbin.org.
Esses resultados confirmam que a ASMEgressTrafficPolicy está funcionando corretamente.
-
Acesse service HTTPS externos a partir de sleep-a
Opção 1: mTLS entre sidecar e gateway de saída (recomendado)
-
Crie uma ASMEgressTrafficPolicy.
Console
Faça login no console do ASM. No painel de navegação à esquerda, escolha .
Na página Mesh Management, clique no nome da instância do ASM. No painel de navegação à esquerda, escolha .
-
Clique no 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 ASMEgressTrafficPolicy CRD reference.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 da ASMEgressTrafficPolicy.
-
Verifique o service sleep-a no namespace mytest.
-
Execute o comando a seguir para acessar
http://www.httpbin.orga partir do service 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 service 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 requisiçã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 requisição parahttpsantes de encaminhá-la parahttpbin.org. -
Execute o comando a seguir para acessar
https://www.httpbin.orga partir do service 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 service sleep-a consegue acessarhttps://www.httpbin.org.
-
-
Verifique o service Nginx no namespace padrão.
-
Execute o comando a seguir para acessar
http://www.httpbin.orga partir do service 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 service Nginx falhou ao acessarhttp://www.httpbin.org. -
Execute o comando a seguir para acessar
https://www.httpbin.orga partir do service 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 service 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 requisiçã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 service 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.orgRequisições para
http://www.httpbin.orgretornam502, e requisições parahttps://www.httpbin.orgsão recusadas. Após a exclusão da configuração ASMEgressTrafficPolicy, o service sleep-a não consegue mais acessarhttp://www.httpbin.orgouhttps://www.httpbin.org.
Esses resultados confirmam que a ASMEgressTrafficPolicy funciona conforme esperado.
-
Opção 2: HTTPS entre o sidecar e o gateway de saída
-
Crie uma ASMEgressTrafficPolicy.
Console
Faça login no console do ASM. No painel de navegação à esquerda, escolha .
Na página Mesh Management, clique no nome da instância do ASM. No painel de navegação à esquerda, escolha .
-
Clique no 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 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 da ASMEgressTrafficPolicy.
-
Verifique o service sleep-a no namespace mytest.
-
Execute o comando a seguir para acessar
http://www.httpbin.orga partir do service 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 service sleep-a falhou ao acessarhttp://www.httpbin.org. -
Execute o comando a seguir para acessar
https://www.httpbin.orga partir do service 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 service sleep-a consegue acessarhttps://www.httpbin.org.
-
-
Verifique o service Nginx no namespace padrão.
-
Execute o comando a seguir para acessar
http://www.httpbin.orga partir do service 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 service Nginx falhou ao acessarhttp://www.httpbin.org. -
Execute o comando a seguir para acessar
https://www.httpbin.orga partir do service 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 service 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 requisiçã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 service 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.orgRequisições para
http://www.httpbin.orgretornam502, e requisições parahttps://www.httpbin.orgsão recusadas. Após a exclusão da configuração ASMEgressTrafficPolicy, o service sleep-a não consegue mais acessarhttp://www.httpbin.orgouhttps://www.httpbin.org.Esses resultados confirmam que a ASMEgressTrafficPolicy funciona conforme esperado.
-
Acesse um service TCP externo a partir do service sleep-a
-
Crie uma ASMEgressTrafficPolicy.
Console
Faça login no console do ASM. No painel de navegação à esquerda, escolha .
Na página Mesh Management, clique no nome da instância do ASM. No painel de navegação à esquerda, escolha .
Clique no nome do gateway. Na página Gateway overview, clique em Outbound Traffic Policy no painel de navegação à esquerda.
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 da ASMEgressTrafficPolicy foi aplicada.
-
Verifique o service sleep-a no namespace mytest.
-
Execute o comando a seguir para acessar
www.alibabacloud.coma partir do service 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 service sleep-a falhou ao acessarhttp://www.alibabacloud.com. -
Execute o comando a seguir para acessar
https://www.alibabacloud.coma partir do service 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 service sleep-a acessouhttps://www.alibabacloud.comcom sucesso.
-
-
Verifique o service Nginx no namespace padrão.
-
Execute o comando a seguir para acessar
http://www.alibabacloud.coma partir do service 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 service Nginx falhou ao acessarhttp://www.alibabacloud.com. -
Execute o comando a seguir para acessar
https://www.alibabacloud.coma partir do service 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 service 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 requisiçã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 service 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.comRequisições para
http://www.alibabacloud.comretornam um erro502, e requisições parahttps://www.alibabacloud.comsão recusadas. Isso indica que a exclusão da configuração ASMEgressTrafficPolicy impede o service sleep-a de acessarhttp://www.alibabacloud.comouhttps://www.alibabacloud.com.Esses resultados confirmam que a configuração da ASMEgressTrafficPolicy funciona conforme esperado.
-
Operações relacionadas
Negue requisições POST de um namespace específico
Use um gateway de saída do ASM com uma 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 requisições POST provenientes 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 esta configuração, requisições POST do service sleep-a para www.httpbin.org retornam RBAC: access. Requisições GET do service sleep-a para www.httpbin.org não são afetadas.