Use um Gateway do ASM para proteger seus serviços gRPC com segurança de camada de transporte mútua (mTLS). Esse mecanismo garante que apenas clientes autorizados acessem seus serviços, aplicando criptografia de ponta a ponta e autenticação bidirecional para evitar interceptações, adulterações e acessos não autorizados.
Pré-requisitos
Crie uma instância Enterprise Edition do Service Mesh (ASM). Para mais informações, consulte Criar uma instância do ASM.
Crie um cluster gerenciado do ACK. Para mais informações, consulte Criar um cluster gerenciado do ACK.
Implante um gateway de entrada. Para mais informações, consulte Criar um gateway de entrada.
Implante uma aplicação no cluster associado à instância do ASM. Para mais informações, consulte Implantar uma aplicação em um cluster associado a uma instância do ASM.
Contexto
O recurso de gerenciamento de tráfego do Service Mesh permite acessar serviços gRPC internos por meio de um gateway de entrada. Como o gRPC se baseia no protocolo HTTP/2, você pode usar a segurança de camada de transporte (TLS) ou TLS mútuo (mTLS) para criptografar dados em trânsito e garantir sua segurança. O Gateway do ASM também suporta gRPC sobre TLS/mTLS, o que permite ao gateway realizar a terminação TLS para fluxos TCP criptografados. Isso elimina a necessidade de configurações separadas de TLS nas aplicações dentro da malha de serviços.
Procedimento
Etapa 1: Implantar uma aplicação de exemplo
Faça login no console do ACK. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em .
No topo da página Deployments, selecione um namespace na lista suspensa Namespace e clique em Create Resources in YAML.
-
Na página Create, cole o seguinte YAML no editor e clique em Create.
NotaDevido ao mecanismo de seleção de protocolo do Istio, o valor do parâmetro
nameno campoportsda configuração do Service deve começar comhttp2-ougrpc-. Caso contrário, o Istio não identificará corretamente o protocolo do serviço.
Etapa 2: Implantar um gateway de entrada
Este exemplo usa a porta padrão 443 para expor o serviço. Para mais informações, consulte Criar um gateway de entrada.
Etapa 3: Configurar regras de roteamento do Service Mesh
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 de destino ou clique em Manage na coluna Actions.
-
Crie um Gateway.
Na página de detalhes da instância do ASM, escolha no painel de navegação à esquerda.
Na página Gateway, clique em Create from YAML.
-
Na página Create, selecione default na lista suspensa Namespaces, cole o seguinte YAML no editor e clique em Create.
apiVersion: networking.istio.io/v1beta1 kind: Gateway metadata: name: gw-grpc-443 namespace: default spec: selector: istio: ingressgateway servers: - hosts: - '*' port: name: https number: 443 protocol: HTTPS tls: credentialName: example-credential mode: MUTUAL
-
Crie um VirtualService.
Na página de detalhes da instância do ASM, escolha no painel de navegação à esquerda.
Na página VirtualService, clique em Create from YAML.
-
Na página Create, selecione default na lista suspensa Namespaces, cole o seguinte YAML no editor e clique em Create.
apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: grpc-vs spec: hosts: - "*" gateways: - gw-grpc-443 http: - match: - port: 443 route: - destination: host: istio-grpc-server
Etapa 4: Configurar certificados
Clientes gRPC geralmente exigem certificados com um Nome Alternativo do Assunto (SAN). Recomendamos usar os certificados de exemplo do repositório grpc-go. Configure esses certificados no namespace istio-system do cluster ACK, pois o Gateway do ASM os utiliza.
-
Para instâncias do ASM anteriores à v1.17
Execute o comando a seguir para criar um Secret no namespace istio-system:
kubectl create -n istio-system secret generic example-credential --from-file=tls.key=server_key.pem --from-file=tls.crt=server_cert.pem --from-file=ca.crt=client_ca_cert.pemNotaO nome do Secret deve corresponder ao valor de credentialName especificado no Gateway.
-
Para instâncias do ASM v1.17 e posteriores
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 de destino. No painel de navegação à esquerda, escolha .
Na página Certificate Management, clique em Create. No painel Certificate Information, configure os parâmetros e clique em OK.
Etapa 5: Executar o cliente gRPC
Este tutorial usa o exemplo oficial do grpc-go como cliente gRPC mTLS.
Siga o tutorial oficial do grpc-go para instalar as dependências do gRPC. Para mais informações, consulte Início rápido para gRPC em Go.
Siga o tutorial oficial do grpc-go para clonar o repositório de código grpc-go. Para mais informações, consulte o repositório grpc-go.
-
Substitua o conteúdo do arquivo /grpc-go/examples/helloworld/greeter_client/main.go pelo código a seguir. Altere o valor de
addresspara ":443". -
Após substituir o código, acesse o diretório examples e execute o comando a seguir.
go run helloworld/greeter_client/main.goSaída esperada:
Greeting: Hello worldSe os certificados não estiverem configurados corretamente, o cliente retornará um erro semelhante ao seguinte. Nesse caso, siga as etapas deste tópico para configurar os certificados novamente. 2022/09/23 15:44:44 could not greet: rpc error: code = Unavailable desc = connection error: desc = "transport: authentication handshake failed: x509: certificate signed by unknown authority" exit status 1