A partir da versão 1.16.4, o Alibaba Cloud Service Mesh oferece suporte à CustomResourceDefinition (CRD) ASMEgressTrafficPolicy. Este artigo descreve como usar essa CRD para gerenciar o tráfego de saída.
Contexto
Como funciona
Uma service mesh oferece suporte ao gerenciamento de tráfego de saída por meio da criação e interconexão de vários recursos, como ServiceEntry, VirtualService, Gateway e Destination. Após configurar esses recursos, a service mesh intercepta o tráfego de forma transparente e o roteia para um egress gateway, que o encaminha para serviços externos.
Esse processo de configuração é complexo, propenso a erros e exige um conhecimento profundo de vários campos. Para simplificar a configuração do tráfego de saída, o ASM introduz 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, você precisa definir apenas algumas configurações essenciais. A service mesh intercepta o tráfego de forma transparente, o roteia para um egress gateway e o encaminha para serviços externos via HTTP ou HTTPS.
Como o ASMEgressTrafficPolicy é uma abstração simplificada dos recursos nativos da service mesh, 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 egress gateway. 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 aplicativos. Ao contrário dos métodos baseados em IP de rede, o ASM usa uma abordagem centrada no aplicativo que não exige alterações no código do aplicativo existente. O recurso ASMEgressTrafficPolicy define como gerenciar o tráfego de saída por meio de um egress gateway. Ao combinar um egress gateway do ASM com uma AuthorizationPolicy, você pode controlar o tráfego de saída com mais flexibilidade.
Este exemplo inclui os seguintes fluxos de tráfego:
Comunicação entre os proxies da mesh 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 os aplicativos e seus proxies da mesh, e entre o gateway e os serviços externos:
a. Para usar os recursos avançados de L7 da service mesh, os aplicativos devem se comunicar com seus proxies da mesh usando texto simples sempre que possível. Isso permite que o proxy da mesh acesse informações de tráfego L7 e ofereça suporte a recursos mais avançados. Se um aplicativo precisar iniciar tráfego HTTPS diretamente, a service mesh poderá fornecer apenas recursos de L4.
b. É possível configurar o protocolo de comunicação entre o egress gateway e os serviços externos. Há suporte para texto simples e HTTPS.
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 obter mais informações, consulte Create an ASM instance e Update an ASM instance.
A injeção automática está ativada para o namespace padrão. Para obter mais informações, consulte Enable automatic injection.
Pré-requisitos
Defina a política de tráfego de saída
Acesse o 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 clique em Update Settings.
Crie um namespace
Crie o namespace istio-egress. Para obter 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 egress gateway
No ASM, crie um egress gateway 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 obter 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 um aplicativo de exemplo
Na instância do ASM, crie um namespace chamado mytest e ative a injeção automática de sidecar. Para obter mais informações, consulte Manage global namespaces.
-
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 seguinte comando para implantar os serviços sleep-a e nginx:
kubectl apply -f test.yaml
-
-
Execute os seguintes comandos 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.orgA saída de ambos os comandos é
502, indicando que o acesso falhou.
Permita que o sleep-a acesse um serviço HTTP externo
Opção 1: HTTP em texto simples entre o sidecar e o egress gateway
Esta opção não é prática em um ambiente de produção. A comunicação em texto simples entre o contêiner do aplicativo e o egress gateway impede a autorização baseada na identidade do cliente. O ASMEgressTrafficPolicy não oferece suporte ao acesso ao egress gateway via HTTP em texto simples.
O gerenciamento de tráfego é aplicado principalmente no sidecar do cliente e não exige um egress gateway.
A observabilidade não depende de um egress gateway.
Os recursos de segurança dependem do egress gateway. No entanto, sem o mTLS, todos os recursos de autorização baseados na identidade do cliente são desativados. O egress gateway só pode rejeitar todas as solicitações.
Opção 2: mTLS entre o sidecar e o egress gateway (recomendado)
-
Crie um ASMEgressTrafficPolicy.
Console
Acesse o 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 egress gateway80e, 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 seguinte comando para criar o recurso ASMEgressTrafficPolicy.
kubectl apply -f egress-by-egressgateway.yaml
-
Verifique se o ASMEgressTrafficPolicy entrou em vigor.
-
Execute o seguinte comando 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 o esperado. -
Execute o seguinte comando 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 o esperado. -
Exclua a política egress-by-egressgateway executando os seguintes comandos e, em seguida, teste o acesso do serviço sleep-a no namespace mytest a
http://www.httpbin.orgnovamente.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 acessarhttp://www.httpbin.org.
Confirme que o ASMEgressTrafficPolicy está funcionando corretamente com esses resultados.
-
Acesse serviços HTTPS externos a partir do sleep-a
Opção 1: mTLS entre o sidecar e o egress gateway (recomendado)
-
Crie um ASMEgressTrafficPolicy.
Console
Acesse o 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 as 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 seguinte comando 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 seguinte comando 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 pode acessarhttp://www.httpbin.org. -
Execute o seguinte comando para solicitar o endpoint
anythingdohttpbin.orge verificar se o egress gateway atualiza a solicitação HTTP para uma solicitação 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 egress gateway atualizou a solicitação parahttpsantes de encaminhá-la parahttpbin.org. -
Execute o seguinte comando 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 pode acessarhttps://www.httpbin.org.
-
-
Verifique o serviço Nginx no namespace padrão.
-
Execute o seguinte comando 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 não conseguiu acessarhttp://www.httpbin.org. -
Execute o seguinte comando 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 não conseguiu acessar
https://www.httpbin.org. -
Visualize o log de acesso do sidecar da carga de trabalho Nginx executando o seguinte comando para identificar o motivo da recusa da 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 é encaminhada para o
BlackHoleCluster, que rejeita a conexão.
-
-
Exclua o egress-by-egressgateway executando os seguintes comandos e, em seguida, acesse
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.
Confirme que o ASMEgressTrafficPolicy funciona conforme o esperado com esses resultados.
-
Opção 2: HTTPS entre o sidecar e o egress gateway
-
Crie um ASMEgressTrafficPolicy.
Console
Acesse o 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 as definições para acessar diretamente
https://www.httpbin.orgforam adicionados ao campo spec. Para obter 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 seguinte comando 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 seguinte comando 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 não conseguiu acessarhttp://www.httpbin.org. -
Execute o seguinte comando 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 pode acessarhttps://www.httpbin.org.
-
-
Verifique o serviço Nginx no namespace padrão.
-
Execute o seguinte comando 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 não conseguiu acessarhttp://www.httpbin.org. -
Execute o seguinte comando 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 não conseguiu acessar
https://www.httpbin.org. -
Visualize o log de acesso do sidecar da carga de trabalho Nginx executando o seguinte comando para identificar o motivo da recusa da 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 é encaminhada para o
BlackHoleCluster, que rejeita a conexão.
-
-
Exclua o egress-by-egressgateway executando os seguintes comandos e, em seguida, acesse
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.Confirme que a configuração do ASMEgressTrafficPolicy funciona conforme o esperado com esses resultados.
-
Acesse um serviço TCP externo a partir do serviço sleep-a
-
Crie um ASMEgressTrafficPolicy.
Console
Acesse o 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.
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 seguinte comando 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 seguinte comando 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 não conseguiu acessarhttp://www.alibabacloud.com. -
Execute o seguinte comando 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 seguinte comando 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 não conseguiu acessarhttp://www.alibabacloud.com. -
Execute o seguinte comando 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 não conseguiu acessar
https://www.alibabacloud.com. -
Visualize o log de acesso do sidecar da carga de trabalho Nginx executando o seguinte comando para entender o motivo da recusa da 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.
-
-
Exclua o egress-by-egressgateway executando os seguintes comandos 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 que o serviço sleep-a acessehttp://www.alibabacloud.comouhttps://www.alibabacloud.com.Confirme que a configuração do ASMEgressTrafficPolicy funciona conforme o esperado com esses resultados.
-
Operações relacionadas
Negue solicitações POST de um namespace específico
Use um egress gateway 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.