Atualize as políticas de gestão de APIs com o operador Apigee para Kubernetes

Esta página aplica-se ao Apigee e ao Apigee Hybrid.

Veja a documentação do Apigee Edge.

À medida que as suas necessidades de gestão de APIs crescem e mudam, pode ter de adicionar novos serviços ao cluster ou atualizar as opções de entrada e rotas existentes. Esta página descreve como atualizar o cluster para concluir as seguintes tarefas:

Antes de começar

Antes de iniciar esta tarefa, certifique-se de que conclui os passos descritos no artigo Crie uma APIMExtensionPolicy. Esta página pressupõe que configurou um cluster do Google Kubernetes Engine (GKE), instalou o Apigee Operator for Kubernetes, criou um gateway do Google Kubernetes Engine (GKE) e aplicou, pelo menos, uma política de gestão de APIs ao gateway.

Funções necessárias

Se atribuiu as funções necessárias à sua conta de serviço, conforme descrito no artigo Instale o operador do Apigee para Kubernetes, não são necessárias funções nem autorizações de IAM adicionais para concluir estas tarefas.

Pode optar por autorizar ações em recursos no seu cluster do Google Kubernetes Engine através do mecanismo de controlo de acesso baseado em funções (RBAC) integrado no Kubernetes. Para mais informações, consulte o artigo Autorize ações em clusters através do controlo de acesso baseado em funções.

Adicione um novo Gateway e HTTPRoute

Nesta secção, vai adicionar um novo Gateway e HTTPRoute ao seu cluster. Nos guias de tarefas anteriores, as configurações de exemplo usavam um gateway do GKE externo. Se forem implementados vários gateways na mesma região, têm de ser do mesmo tipo (externos ou internos). Por este motivo, a configuração de exemplo neste guia também vai usar um gateway externo.

O operador Apigee para Kubernetes pode ser usado com gateways do GKE internos ou externos, mas não pode implementar ambos os tipos de gateways na mesma região.

Para adicionar um novo Gateway e HTTPRoute ao seu cluster, conclua os seguintes passos:

  1. Configure um novo GKE Gateway externo. Para mais informações e passos, consulte o artigo Implemente um gateway externo.
  2. Crie um recurso global SslCertificate gerido pela Google:
    gcloud compute ssl-certificates create CERT_NAME \
      --domains=HOST_NAME \
      --global

    Onde:

    • CERT_NAME é o nome do certificado que quer criar.
    • HOST_NAME_2 é o nome do anfitrião do novo gateway.

  3. Crie um novo ficheiro com o nome gateway2.yaml no espaço de nomes apim.
  4. Copie o seguinte conteúdo para o novo ficheiro:
    # gateway2.yaml
    apiVersion: gateway.networking.k8s.io/v1beta1
    kind: Gateway
    metadata:
      name: global-ext-lb2
      spec:
      gatewayClassName: gke-l7-global-external-managed
      listeners:
      - name: https
        protocol: HTTPS
        allowedRoutes:
          kinds:
          - kind: HTTPRoute
          namespaces:
            from: All
        port: 443
        tls:
          options:
            networking.gke.io/pre-shared-certs: CERT_NAME
  5. Adicione uma nova HTTPRoute para /post ao mesmo ficheiro, conforme realçado abaixo:
    # http-route2.yaml
      apiVersion: gateway.networking.k8s.io/v1beta1
      kind: HTTPRoute
      metadata:
        name: http-bin-route-post
        namespace: http
      spec:
        parentRefs:
          - kind: Gateway
            name: global-ext-lb2
            namespace: default
        hostnames:
          - HOST_NAME_2
        rules:
        - matches:
          - path:
              type: PathPrefix
              value: "/post"
          backendRefs:
          - name: httpbin
            kind: Service
            port: 80
            namespace: http
  6. Aplique o novo Gateway e HTTPRoute:
    kubectl apply -f gateway2.yaml
  7. Verifique o estado do HTTPRoute através do seguinte comando:
    kubectl -n http get HttpRoute

    O resultado deve ser semelhante ao seguinte:

    NAME             HOSTNAMES                                                  AGE
    http-bin-route   ["my-hostname-2"]   12d
    
  8. Verifique o estado do gateway através do seguinte comando:
    kubectl get gateway global-ext-lb2

    O resultado deve ser semelhante ao seguinte:

    NAME             CLASS                            ADDRESS        PROGRAMMED   AGE
    global-ext-lb2   gke-l7-global-external-managed   34.54.193.92   True         11d
    

    Confirme se a coluna Address contém um endereço IP válido e o estado de Programmed é True.

  9. Descreva o ponto de entrada para se certificar de que o trajeto está associado:
    kubectl describe gateway global-ext-lb2
  10. O resultado deve ser semelhante ao seguinte:

    ...
    Listeners:
      Attached Routes:  1
      Conditions:
        Last Transition Time:  2024-10-03T03:10:17Z
    ...

    Confirme se o valor Attached Routes é 1.

  11. Envie um pedido ao gateway para verificar se a rota está a funcionar:
    curl -k -X POST https://GATEWAY_IP_ADDRESS/post -H "Host: HOST_NAME_2"

    Onde:

    • GATEWAY_IP_ADDRESS é o endereço IP da gateway, conforme apresentado na coluna Address da resposta devolvida no passo 7.
    • HOST_NAME_2 é o nome de anfitrião definido no HTTPRoute do gateway.

  12. O resultado deve ser semelhante ao seguinte:
      {
        "args": {},
        "headers": {
          "Accept": "*/*",
          "Host": "apigee-apim-operator-test.apigee.net",
          "User-Agent": "curl/8.7.1",
          "X-Cloud-Trace-Context": "2bb8a80e29e80662ff9cb89971c447d9/13083106619927322701"
        },
        "origin": "67.164.1.10,34.54.193.72",
        "url": "https://apigee-apim-operator-test.apigee.net/post"
      }
      
  13. Crie uma nova política de extensão da APIM que faça referência à HTTPRoute do novo gateway criado num passo anterior:
    1. Crie um novo ficheiro com o nome apim-policy2.yaml no espaço de nomes apim.
    2. Copie o seguinte conteúdo para o novo ficheiro:
      # apim-policy2.yaml
      apiVersion: apim.googleapis.com/v1
      kind: APIMExtensionPolicy
      metadata:
        name: global-ext-lb2-apim-policy-2
        namespace: apim
      spec:
        location: global
        failOpen: false
        timeout: 1000ms
        defaultSecurityEnabled: true
        targetRef: # identifies the Gateway where the extension should be installed
          name: global-ext-lb2
          kind: Gateway
          namespace: default
    3. Aplique a nova política de extensão da APIM:
      kubectl apply -f apim-policy2.yaml

      Assim que o ficheiro é aplicado, o operador do Apigee para Kubernetes cria recursos de rede em segundo plano.

    4. Verifique o estado da política de extensão da APIM:
      kubectl -n apim get APIMExtensionPolicy

      O resultado deve ser semelhante ao seguinte:

      NAME                           STATE        ERRORMESSAGE
      global-ext-lb2-apim-policy-2   RUNNING
      

      Confirme se o valor STATE é RUNNING.

    5. Aguarde cinco minutos para garantir que as alterações são propagadas a todas as instâncias do equilibrador de carga e, em seguida, use o seguinte comando para verificar se um pedido ao novo gateway falha:
      curl -k -X POST https://GATEWAY_IP_ADDRESS/post -H "Host: HOST_NAME_2"

      Onde:

      • GATEWAY_IP_ADDRESS é o endereço IP do gateway obtido num passo anterior.
      • HOST_NAME_2 é o nome de anfitrião definido no HTTPRoute do gateway.

      O pedido deve falhar com uma resposta semelhante à seguinte:

      {
        "fault": {
          "faultstring": "Raising fault. Fault name : RF-insufficient-request-raise-fault",
          "detail": {
            "errorcode": "steps.raisefault.RaiseFault"
          }
        }
      }

      Isto significa que a extensão de serviço para o Apigee está ativa e a validação da chave API e do token de acesso é aplicada. Para ver os passos necessários para criar uma app de programador, obter uma chave da API e testar o novo gateway com a chave, consulte o artigo Teste a extensão de serviço do Apigee.

Atualize um produto de API

Modifique um produto da API existente para fazer referência à nova política de extensão da APIM:

  1. Crie um novo ficheiro com o nome api-product-2.yaml no espaço de nomes apim.
  2. Copie o seguinte conteúdo para o novo ficheiro:
    # api-product-2.yaml
    apiVersion: apim.googleapis.com/v1
    kind: APIProduct
    metadata:
      name: api-product-2
      namespace: apim
    spec:
      name: api-product-2
      approvalType: auto
      description: Http bin GET calls
      displayName: api-product-2
    EnforcementRefs:
      - name: global-ext-lb1-apim-policy
        kind: APIMExtensionPolicy
        group: apim.googleapis.com
        namespace: apim
      - name: global-ext-lb2-apim-policy
        kind: APIMExtensionPolicy
        group: apim.googleapis.com
        namespace: apim
      attributes:
      - name: access
        value: private
  3. Aplique o novo ficheiro de produtos da API:
    kubectl apply -f api-product-2.yaml

    A aplicação das alterações em todo o cluster demora aproximadamente três minutos.

Neste exemplo, a secção EnforcementRefs do produto API api-product-2 é atualizada para fazer referência a global-ext-lb1-apim-policy e global-ext-lb2-apim-policy, conforme mostrado nas partes realçadas do yaml.

Crie um novo produto de API

Crie um novo produto de API:

  1. Crie um novo ficheiro com o nome api-product-2.yaml no espaço de nomes apim.
  2. Copie o seguinte conteúdo para o novo ficheiro:
    # api-product-2.yaml
    apiVersion: apim.googleapis.com/v1
    kind: APIProduct
    metadata:
      name: api-product-2
      namespace: apim
    spec:
      name: api-product-2
      approvalType: auto
      description: Http bin GET calls
      displayName: api-product-2
      enforcementRefs:
      - name: global-ext-lb2-apim-policy
        kind: APIMExtensionPolicy
        group: apim.googleapis.com
        namespace: apim
      attributes:
      - name: access
        value: private
  3. Aplique o novo ficheiro de produtos da API:
    kubectl apply -f api-product-2.yaml

    A aplicação das alterações em todo o cluster demora aproximadamente três minutos.

Neste exemplo, a secção EnforcementRefs do novo produto de API api-product-2 é criada para fazer referência a global-ext-lb2-apim-policy, conforme mostrado nas partes realçadas do yaml.

Crie um novo conjunto de operações da API

Crie um novo conjunto de operações da API:

  1. Crie um novo ficheiro com o nome item-set-post.yaml no espaço de nomes apim.
  2. Copie o seguinte conteúdo para o novo ficheiro:
    # item-set-post.yaml
    apiVersion: apim.googleapis.com/v1
    kind: APIOperationSet
    metadata:
      name: item-set-post
      namespace: apim
    spec:
      apiProductRefs:
        - name: api-product-2
          kind: APIProduct
          group: apim.googleapis.com
          namespace: apim
      quota:
        limit: 1
        interval: 1
        timeUnit: minute
      restOperations:
        - name: PostItems
          path: "/post"
          methods:
          - POST
  3. Aplique o novo ficheiro de conjunto de operações da API:
    kubectl apply -f item-set-post.yaml

    A aplicação das alterações em todo o cluster demora aproximadamente três minutos.

Neste exemplo, o valor restOperations do novo conjunto de operações da API item-set-post é criado para referenciar o caminho /post, conforme mostrado nas partes realçadas do ficheiro.

Teste a nova configuração do gateway

Para testar a nova configuração da gateway, envie o seguinte pedido para o novo caminho /post:

curl -k -X POST https://GATEWAY_IP_ADDRESS/post -H "Host: HOST_NAME_2"

Onde:

  • GATEWAY_IP_ADDRESS é o endereço IP do gateway obtido num passo anterior.
  • HOST_NAME é o nome de anfitrião definido no HTTPRoute do gateway.

O pedido deve ser bem-sucedido e devolver uma resposta semelhante à seguinte:

{
  "args": {},
  "headers": {
    "Accept": "*/*",
    "Host": "apigee-apim-operator-test.apigee.net",
    "User-Agent": "curl/8.7.1",
    "X-Api-Key": "f0N6sXXXclGXXXe0oP5XXXdA20PjgrP2x8xXXh7z4XXXKiYt",
    "X-Cloud-Trace-Context": "bb3a768787099bda628781188bfb318b/15554891713516675739"
  },
  "origin": "34.54.193.72",
  "url": "https://34.54.193.72/post"
}

Resolver problemas

Se tiver problemas ao atualizar e expandir as políticas de gestão de APIs usadas com o Apigee Operator para Kubernetes, consulte o artigo Resolva problemas do Apigee Operator para Kubernetes para encontrar soluções para erros comuns.

O que se segue?