O Service Mesh oferece três métodos para acessar services externos: configure uma política de tráfego de saída, crie uma entrada de service e configure blocos CIDR para interceptação de tráfego. Este tópico descreve como gerenciar o acesso a services externos a partir de uma instância do Service Mesh.
Defina a política de tráfego de saída
No Service Mesh, a Outbound Traffic Policy controla o acesso a services externos, ou seja, àqueles não definidos no registro interno de services do Istio.
Acesse o console do ASM, clique no nome da instância ASM de destino e, no painel de navegação à esquerda, escolha Instance Information > Network Status e visualize os services no registro do Istio.
-
Com a política definida como ALLOW_ANY, o proxy sidecar permite a passagem de solicitações para qualquer service desconhecido. Isso permite acesso direto a services externos, mas compromete o monitoramento e o controle de tráfego no nível da malha.
ImportanteEvite usar este método para acessar services externos, como bancos de dados, a fim de prevenir conflitos de acesso.
Defina uma entrada de service para cada service externo, a fim de controlar explicitamente o tráfego e evitar possíveis problemas.
Com a política definida como REGISTRY_ONLY, o proxy sidecar bloqueia o tráfego para qualquer host não definido como service ou entrada de service na malha.
Acesse o console do ASM.
No painel de navegação à esquerda, escolha .
Na página Mesh Management, encontre a instância ASM desejada. Clique no nome da instância ASM ou clique em Manage na coluna Actions.
Na página de detalhes da instância ASM, escolha no painel de navegação à esquerda.
-
Na página Configure the agent parameters of the injected Sidecar, na aba global, clique em Outbound Traffic Policy, defina a Outbound Traffic Policy como ALLOW_ANY e clique em Update Settings.
Em um contêiner de aplicação com proxy sidecar injetado, execute o comando curl para acessar um service http ou HTTPS externo. O comando retorna uma resposta bem-sucedida.
-
Acesse um service http externo.
curl -I http://www.aliyun.com/Saída esperada:
HTTP/1.1 301 Moved Permanently server: envoy date: Mon, 07 Sep 2020 09:28:54 GMT content-type: text/html content-length: 239 location: https://www.aliyun.com/ eagleeye-traceid: 0be3e0a615994709353116335ea5ea timing-allow-origin: * x-envoy-upstream-service-time: 67 -
Acesse um service HTTPS externo.
curl -I https://www.aliyun.com/Saída esperada:
HTTP/2 200 server: Tengine date: Mon, 07 Sep 2020 09:16:31 GMT content-type: text/html; charset=utf-8 vary: Accept-Encoding vary: Accept-Encoding strict-transport-security: max-age=31536000 x-download-options: noopen x-content-type-options: nosniff x-xss-protection: 1; mode=block x-readtime: 0 eagleeye-traceid: 0b57ff8715994701916963132ec7ad strict-transport-security: max-age=0 timing-allow-origin: *
-
Configure uma entrada de service
Se a Outbound Traffic Policy estiver definida como REGISTRY_ONLY, o comando curl executado em um contêiner de aplicação com proxy sidecar injetado falhará ao acessar um service http ou HTTPS externo.
-
Acesse um service http externo.
curl -I http://www.aliyun.com/Saída esperada:
HTTP/1.1 502 Bad Gateway date: Mon, 07 Sep 2020 09:25:58 GMT server: envoy transfer-encoding: chunked -
Acesse um service HTTPS externo.
curl -I https://www.aliyun.com/Saída esperada:
curl: (35) LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to www.aliyun.com:443
Use uma entrada de service e ative o acesso controlado a services públicos externos. Essa abordagem permite acessar services externos sem perder os recursos de monitoramento e controle de tráfego do Istio.
-
Crie uma entrada de service.
Acesse o console do ASM.
No painel de navegação à esquerda, escolha .
Na página Mesh Management, encontre a instância ASM desejada. Clique no nome da instância ASM ou clique em Manage na coluna Actions.
Na página de detalhes da instância ASM, escolha no painel de navegação à esquerda. Na página exibida, clique em Create from YAML.
-
Selecione um namespace, cole o seguinte conteúdo na caixa de texto e clique em Create.
Defina o campo hosts conforme necessário. Neste exemplo, hosts está definido como www.aliyun.com.
apiVersion: networking.istio.io/v1alpha3 kind: ServiceEntry metadata: name: aliyun-com-ext spec: hosts: - 'www.aliyun.com' ports: - number: 80 name: http protocol: HTTP - number: 443 name: https protocol: HTTPS resolution: DNS location: MESH_EXTERNAL
-
Acesse o service http ou HTTPS externo novamente. O comando agora retorna uma resposta bem-sucedida.
-
Acesse um service http externo.
curl -I http://www.aliyun.com/Saída esperada:
HTTP/1.1 301 Moved Permanently server: envoy date: Mon, 07 Sep 2020 09:49:17 GMT content-type: text/html content-length: 239 location: https://www.aliyun.com/ eagleeye-traceid: 0be3e0a915994721583014504e7b31 timing-allow-origin: * x-envoy-upstream-service-time: 66 -
Acesse um service HTTPS externo.
curl -I https://www.aliyun.com/Saída esperada:
HTTP/2 200 server: Tengine date: Mon, 07 Sep 2020 09:49:31 GMT content-type: text/html; charset=utf-8 vary: Accept-Encoding vary: Accept-Encoding strict-transport-security: max-age=31536000 x-download-options: noopen x-content-type-options: nosniff x-xss-protection: 1; mode=block x-readtime: 1 eagleeye-traceid: 0be3e0b115994721709577294ed9e8 strict-transport-security: max-age=0 timing-allow-origin: *
-
-
Crie um virtual service.
Acesse o console do ASM.
No painel de navegação à esquerda, escolha .
Na página Mesh Management, encontre a instância ASM desejada. Clique no nome da instância ASM ou clique em Manage na coluna Actions.
Na página de detalhes da instância ASM, escolha no painel de navegação à esquerda. Na página exibida, clique em Create from YAML.
-
Selecione um namespace, cole o seguinte conteúdo na caixa de texto e clique em Create.
Crie uma regra de roteamento para o service externo definido pela entrada de service. Este exemplo adiciona uma regra para injetar um fixedDelay nas chamadas ao service www.aliyun.com.
apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: aliyun-com-ext spec: hosts: - 'www.aliyun.com' http: - fault: delay: percent: 100 fixedDelay: 5s route: - destination: host: www.aliyun.com weight: 100
-
Verifique se a regra de roteamento está ativa.
O tempo real na saída é 5.07s, o que indica a ativação da regra de roteamento.
time curl -o /dev/null -s -w "%{http_code}\n" http://www.aliyun.com/Saída esperada:
301 real 0m 5.07s user 0m 0.00s sys 0m 0.00s
Defina intervalos de ip para interceptação de tráfego
Especifique intervalos de ip para interceptação de tráfego pelo proxy sidecar. O tráfego para endereços ip fora desses intervalos ignora o proxy sidecar e segue diretamente para o destino.
No Service Mesh, configure os Addresses to Which External Access Is Redirected to Sidecar Proxy. Normalmente, define-se o CIDR de service do cluster Kubernetes. Assim, o tráfego para services dentro do cluster é interceptado pelo Service Mesh, enquanto o tráfego para destinos externos ao cluster ignora o Service Mesh.
Acesse o console do ASM.
No painel de navegação à esquerda, escolha .
Na página Mesh Management, encontre a instância ASM desejada. Clique no nome da instância ASM ou clique em Manage na coluna Actions.
Na página de detalhes da instância ASM, escolha no painel de navegação à esquerda.
-
Na aba global da página Configure the agent parameters of the injected Sidecar, clique em Enable/Disable Sidecar Proxy by Ports or IP Addresses. Na caixa de texto Addresses to Which External Access Is Redirected to Sidecar Proxy, insira os blocos CIDR para interceptação e clique em Update Settings.
Alternativamente, insira blocos CIDR na caixa de texto Addresses to Which External Access Is Not Redirected to Sidecar Proxy. Nesse caso, o proxy sidecar interceptará o tráfego de todos os outros blocos CIDR.
NotaPor padrão, o campo Addresses to Which External Access Is Redirected to Sidecar Proxy é definido como *, o que significa que o proxy sidecar intercepta todo o tráfego de saída. Defina intervalos de ip específicos conforme necessário. Uma prática comum é definir o CIDR de service do cluster Kubernetes.