Todos os produtos
Search
Central de documentação

:Primeiros passos

Última atualização: Jul 04, 2026

Este tópico descreve como implantar rapidamente uma aplicação em uma malha de serviços no modo Ambient Mesh.

Pré-requisitos

  • O código de exemplo está implantado. Para mais informações, consulte Preparações.

  • Baixe a ferramenta de depuração do Service Mesh (ASM), istioctl, correspondente ao seu sistema operacional e plataforma. A versão do istioctl deve ser compatível com a versão da sua instância do ASM. Para mais informações, visite o repositório do Istio no GitHub.

Importante

Ao executar as operações mencionadas neste tópico, talvez seja necessário alternar repetidamente entre contextos do Kubernetes para operar nos clusters do plano de dados e do plano de controle. Para evitar erros operacionais, verifique se o contexto atual está correto sempre que fizer essa alternância. Use kubectx para simplificar a troca de contextos. Para mais informações, consulte kubectx. Também é possível ativar o recurso de uso da API do Kubernetes dos clusters no plano de dados para acessar recursos do Istio e utilizar diretamente essa API para realizar operações nos clusters do plano de controle.

Etapa 1: Ative uma política de autorização

Após implantar uma aplicação na instância do ASM no modo Ambient Mesh, utilize políticas de autorização de camada 4 para proteger o acesso à aplicação. Por exemplo, é possível controlar o acesso com base nas identidades das cargas de trabalho cliente.

Nota

As políticas de autorização de camada 4 para instâncias do ASM V1.22 estão em fase de testes por meio de canary releases. Já as políticas de camada 4 para instâncias do ASM V1.21 e anteriores funcionam normalmente. Para utilizar políticas de autorização de camada 4 em instâncias do ASM V1.22, envie um ticket.

Políticas de autorização de camada 4

  1. Crie um arquivo productpage-viewer.yaml com o seguinte conteúdo.

    Esse arquivo yaml define políticas de autorização que permitem explicitamente que as contas de serviço da aplicação sleep e do gateway chamem o serviço productpage.

    apiVersion: security.istio.io/v1beta1
    kind: AuthorizationPolicy
    metadata:
     name: productpage-viewer
     namespace: default
    spec:
     selector:
       matchLabels:
         app: productpage
     action: ALLOW
     rules:
     - from:
       - source:
           principals:
           - cluster.local/ns/default/sa/sleep
           - cluster.local/ns/istio-system/sa/istio-ingressgateway
  2. Conecte-se à instância do ASM via kubectl usando as informações do arquivo kubeconfig e execute o comando abaixo para implantar a política de autorização:

    kubectl apply -f productpage-viewer.yaml
  3. Verifique se a política de autorização entrou em vigor.

    1. Execute o seguinte comando:

      kubectl exec deploy/sleep -- curl -s "http://$GATEWAY_HOST/productpage" | grep -o "<title>.*</title>"

      Saída esperada:

      <title>Simple Bookstore App</title>
    2. Execute o seguinte comando:

      kubectl exec deploy/sleep -- curl -s http://productpage:9080/ | grep -o "<title>.*</title>"

      Saída esperada:

      <title>Simple Bookstore App</title>
    3. Execute o seguinte comando:

      kubectl exec deploy/notsleep -- curl -s http://productpage:9080/ | grep -o "<title>.*</title>"

      Saída esperada:

      command terminated with exit code 56

      A saída anterior indica que a política de autorização está em vigor.

Políticas de autorização de camada 7

Para instâncias do ASM V1.21 e anteriores

Utilize a Kubernetes Gateway API para implantar um waypoint proxy para a conta de serviço bookinfo-productpage. Esse waypoint proxy será usado pelo serviço productpage. Todo o tráfego destinado ao serviço productpage passará por esse proxy de camada 7.

  1. Execute o comando abaixo para implantar um waypoint proxy para a conta de serviço bookinfo-productpage:

    istioctl x waypoint apply --service-account bookinfo-productpage
  2. Visualize o status do waypoint proxy do serviço productpage executando o seguinte comando:

    kubectl get gtw bookinfo-productpage -o yaml

    Expand to view the expected output

    apiVersion: gateway.networking.k8s.io/v1beta1
    kind: Gateway
    metadata:
      annotations:
        gateway.istio.io/controller-version: "5"
        istio.io/for-service-account: bookinfo-productpage
      creationTimestamp: "2023-08-10T08:35:51Z"
      generation: 1
      name: bookinfo-productpage
      namespace: default
      resourceVersion: "7828921"
      uid: c085b788-a8fa-4a2c-8376-18d08689****
    spec:
      gatewayClassName: istio-waypoint
      listeners:
      - allowedRoutes:
          namespaces:
            from: Same
        name: mesh
        port: 15008
        protocol: HBONE
    status:
      conditions:
      - lastTransitionTime: "2023-08-10T08:35:51Z"
        message: Handled by Istio controller
        observedGeneration: 1
        reason: Accepted
        status: "True"
        type: Accepted
  3. Modifique a política de autorização.

    1. Copie o conteúdo abaixo para o arquivo productpage-viewer.yaml. Isso permitirá explicitamente que as contas de serviço da aplicação sleep e do gateway acessem o serviço productpage por meio de requisições GET, bloqueando outras operações.

      apiVersion: security.istio.io/v1beta1
      kind: AuthorizationPolicy
      metadata:
       name: productpage-viewer
       namespace: default
      spec:
       selector:
         matchLabels:
           istio.io/gateway-name: bookinfo-productpage
       action: ALLOW
       rules:
       - from:
         - source:
             principals:
             - cluster.local/ns/default/sa/sleep
             - cluster.local/ns/istio-system/sa/istio-ingressgateway
         to:
         - operation:
             methods: ["GET"]
    2. Reimplante a política de autorização executando o comando a seguir:

      kubectl apply -f productpage-viewer.yaml
  4. Verifique se a política de autorização entrou em vigor.

    1. Execute o seguinte comando:

      kubectl exec deploy/sleep -- curl -s "http://$GATEWAY_HOST/productpage" -X DELETE

      Saída esperada:

       RBAC: access denied                                                                                                       
    2. Execute o seguinte comando:

      kubectl exec deploy/notsleep -- curl -s http://productpage:9080/

      Saída esperada:

        RBAC: access denied
    3. Execute o seguinte comando:

      kubectl exec deploy/sleep -- curl -s http://productpage:9080/ | grep -o "<title>.*</title>"

      Saída esperada:

       <title>Simple Bookstore App</title>

      A saída anterior indica que a política de autorização está em vigor.

Para instâncias do ASM V1.22 e posteriores

Para usar recursos de camada 7 no modo Ambient Mesh, primeiro ative um waypoint proxy para o serviço ou carga de trabalho especificado.

Como ativar um waypoint proxy para o serviço ou carga de trabalho especificado?

As instâncias do ASM V1.22 oferecem um novo método de configuração de waypoint proxies. Com ele, você ativa esses proxies de forma flexível em diferentes escopos. A configuração envolve duas partes:

  1. Primeiro, crie um waypoint proxy e use rótulos para especificar o tráfego ao qual ele se aplica.

    apiVersion: gateway.networking.k8s.io/v1
    kind: Gateway
    metadata:
      labels:
        istio.io/waypoint-for: service
      name: waypoint
      namespace: default
    spec:
      gatewayClassName: istio-waypoint
      listeners:
      - name: mesh
        port: 15008
        protocol: HBONE
    1. O campo gatewayClassName deste gateway é istio-waypoint, o que indica a criação de um waypoint proxy.

    2. Este gateway possui um rótulo especial istio.io/waypoint-for: service, indicando que o waypoint proxy é dedicado ao tráfego do serviço. Além de service, o campo istio.io/waypoint-for pode ser definido como workload (dedicado a pods) ou all (serviço e carga de trabalho).

  2. Especifique qual tráfego o waypoint proxy processará. Adicione o rótulo istio.io/use-waypoint ao serviço, namespace ou pod e defina seu valor como o nome do waypoint proxy desejado.

    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: httpbin
        service: httpbin
        istio.io/use-waypoint: waypoint
      name: httpbin
      namespace: default
    spec:
      ports:
      - name: http
        port: 8000
        protocol: TCP
        targetPort: 80
      selector:
        app: httpbin
      type: ClusterIP

Demonstração

A seção a seguir demonstra como usar políticas de autorização de camada 7 no ambiente descrito neste tópico.

  1. Conecte-se ao cluster ACK via kubectl usando as informações do arquivo kubeconfig. Em seguida, implante o seguinte conteúdo do waypoint proxy no namespace default:

    apiVersion: gateway.networking.k8s.io/v1
    kind: Gateway
    metadata:
      labels:
        istio.io/waypoint-for: service
      name: waypoint
      namespace: default
    spec:
      gatewayClassName: istio-waypoint
      listeners:
      - name: mesh
        port: 15008
        protocol: HBONE
  2. Conecte-se ao cluster ACK via kubectl usando as informações do arquivo kubeconfig. Depois, execute o comando abaixo para adicionar um rótulo ao serviço productpage, garantindo que seu tráfego seja processado pelo waypoint proxy:

    kubectl label service productpage istio.io/use-waypoint=waypoint
  3. Atualize a política de autorização com o seguinte conteúdo:

    apiVersion: security.istio.io/v1beta1
    kind: AuthorizationPolicy
    metadata:
      name: productpage-viewer
      namespace: default
    spec:
      targetRefs:
      - kind: Service
        group: ""
        name: productpage
      action: ALLOW
      rules:
      - from:
        - source:
            principals:
            - cluster.local/ns/default/sa/sleep
        to:
        - operation:
            methods: ["GET"]

    A nova política de autorização indica explicitamente que apenas requisições GET da aplicação sleep podem acessar o serviço productpage; todas as demais serão rejeitadas.

    Nota

    Se a aplicação da política de autorização acima falhar, exclua a política original e aplique-a novamente.

  4. Verifique se a política de autorização entrou em vigor.

    1. Conecte-se ao cluster ACK via kubectl usando as informações do arquivo kubeconfig. Em seguida, execute o comando abaixo para acessar o serviço productpage com uma requisição GET:

      kubectl exec deploy/sleep -- curl -s http://productpage:9080/ | grep -o "<title>.*</title>"

      Saída esperada:

      <title>Simple Bookstore App</title>
    2. Execute o comando a seguir para acessar o serviço productpage com uma requisição DELETE:

      kubectl exec deploy/sleep -- curl -XDELETE -s http://productpage:9080/

      Saída esperada:

      RBAC: access denied
    3. Execute o comando abaixo para acessar o serviço productpage com uma requisição GET:

      kubectl exec deploy/notsleep -- curl -s http://productpage:9080/

      Saída esperada:

      RBAC: access denied

    A saída anterior indica que a política de autorização está em vigor.

Etapa 2: Defina regras de roteamento de camada 7

Para instâncias do ASM V1.21 e anteriores

  1. Execute o comando abaixo para implantar um waypoint proxy para o serviço reviews, de modo que todo o tráfego destinado a ele passe por esse proxy:

    istioctl x waypoint apply --service-account bookinfo-reviews
  2. Crie um arquivo reviews.yaml com o seguinte conteúdo.

    Configure uma regra de roteamento de tráfego para enviar 90% das requisições para reviews-v1 e 10% para reviews-v2.

    Expand to view the reviews.yaml file

    apiVersion: networking.istio.io/v1alpha3
    kind: DestinationRule
    metadata:
      name: reviews
    spec:
      host: reviews
      trafficPolicy:
        loadBalancer:
          simple: RANDOM
      subsets:
      - name: v1
        labels:
          version: v1
      - name: v2
        labels:
          version: v2
      - name: v3
        labels:
          version: v3
    ---
    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
      name: reviews
    spec:
      hosts:
        - reviews
      http:
      - route:
        - destination:
            host: reviews
            subset: v1
          weight: 90
        - destination:
            host: reviews
            subset: v2
          weight: 10
    
  3. Implante uma regra de destino executando o seguinte comando:

    kubectl apply -f reviews.yaml
  4. Verifique se 10% de 100 requisições são enviadas para reviews-v2 executando o comando abaixo:

    kubectl exec deploy/sleep -- sh -c "for i in \$(seq 1 100); do curl -s http://$GATEWAY_HOST/productpage | grep reviews-v.-; done"

    Saída esperada:

            <u>reviews-v1-5896f547f5-48zcn</u>
            <u>reviews-v1-5896f547f5-48zcn</u>
            <u>reviews-v2-5d99885bc9-qb5cv</u>
            <u>reviews-v1-5896f547f5-48zcn</u>
            <u>reviews-v1-5896f547f5-48zcn</u>
            <u>reviews-v1-5896f547f5-48zcn</u>
            <u>reviews-v1-5896f547f5-48zcn</u>
            <u>reviews-v1-5896f547f5-48zcn</u>
            <u>reviews-v1-5896f547f5-48zcn</u>
            <u>reviews-v1-5896f547f5-48zcn</u>

    A saída anterior indica que a regra de roteamento de camada 7 está em vigor.

Para instâncias do ASM V1.22 e posteriores

  1. Execute o comando abaixo para associar o serviço reviews ao waypoint proxy, garantindo que todo o tráfego destinado a ele passe por esse proxy:

    kubectl label service reviews istio.io/use-waypoint=waypoint
  2. Use o conteúdo a seguir para criar uma regra de roteamento de tráfego para o serviço reviews, enviando 90% das requisições para reviews-v1 e 10% para reviews-v2:

    apiVersion: networking.istio.io/v1alpha3
    kind: DestinationRule
    metadata:
      name: reviews
    spec:
      host: reviews
      trafficPolicy:
        loadBalancer:
          simple: RANDOM
      subsets:
      - name: v1
        labels:
          version: v1
      - name: v2
        labels:
          version: v2
      - name: v3
        labels:
          version: v3
    ---
    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
      name: reviews
    spec:
      hosts:
        - reviews
      http:
      - route:
        - destination:
            host: reviews
            subset: v1
          weight: 90
        - destination:
            host: reviews
            subset: v2
          weight: 10
  3. Verifique se 10% de 100 requisições são enviadas para reviews-v2 executando o comando abaixo:

    kubectl exec deploy/sleep -- sh -c "for i in \$(seq 1 100); do curl -s http://$GATEWAY_HOST/productpage | grep reviews-v.-; done"

    Saída esperada:

            <u>reviews-v1-5896f547f5-48zcn</u>
            <u>reviews-v1-5896f547f5-48zcn</u>
            <u>reviews-v2-5d99885bc9-qb5cv</u>
            <u>reviews-v1-5896f547f5-48zcn</u>
            <u>reviews-v1-5896f547f5-48zcn</u>
            <u>reviews-v1-5896f547f5-48zcn</u>
            <u>reviews-v1-5896f547f5-48zcn</u>
            <u>reviews-v1-5896f547f5-48zcn</u>
            <u>reviews-v1-5896f547f5-48zcn</u>
            <u>reviews-v1-5896f547f5-48zcn</u>

    A saída anterior indica que a regra de roteamento de camada 7 está em vigor.

Etapa 3: Exclua recursos

Execute os comandos abaixo para excluir os recursos criados neste tópico:

istioctl x waypoint delete  --service-account bookinfo-productpage
istioctl x waypoint delete --service-account bookinfo-reviews
kubectl delete authorizationpolicy productpage-viewer