Crie uma APIMExtensionPolicy

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

Ver documentação do Apigee Edge.

Esta página descreve como aplicar políticas do Apigee ao tráfego que passa por um gateway do Kubernetes criando um recurso personalizado APIMExtensionPolicy. O operador do Apigee para Kubernetes monitoriza os recursos APIMExtensionPolicy e configura o gateway em conformidade.

Apigee

Siga estes passos se estiver a usar o Apigee.

Antes de começar

Antes de iniciar esta tarefa, conclua os seguintes passos:

Crie o APIMExtensionPolicy

Neste passo, crie o APIMExtensionPolicy e aplique-o ao GKE Gateway em execução no seu cluster. Esta política rege todo o tráfego que passa pelo Gateway e o respetivo HTTPRoutes associado, funcionando de forma semelhante a um flowhook ao nível do ambiente no Apigee atualmente.

Para criar o APIMExtensionPolicy:

  1. Crie um ficheiro denominado global-ext-lb1-apim-policy.yaml com o seguinte conteúdo:
    # global-ext-lb1-apim-policy.yaml
    apiVersion: apim.googleapis.com/v1
    kind: APIMExtensionPolicy
    metadata:
      name: global-ext-lb1-apim-policy
      namespace: apim
    spec:
      apigeeEnv: ENV_NAME # optional
      location: global
      failOpen: false
      timeout: 1000ms
      defaultSecurityEnabled: true
      targetRef: # identifies the Gateway where the extension should be applied
        name: global-ext-lb1
        kind: Gateway
        namespace: default
        
  2. Substitua ENV_NAME pelo nome do ambiente do Apigee criado no passo de instalação Crie um ambiente do Apigee.

    Nota: se instalar o Apigee Operator para Kubernetes com a flag generateEnv=TRUE, o campo apigeeEnv não é obrigatório.

    Pode ver todos os ambientes disponíveis na página Ambientes na Google Cloud consola.

  3. Aplique a política:
    kubectl -n apim apply -f global-ext-lb1-apim-policy.yaml
        

    Depois de a política ser aplicada, o operador do Apigee para Kubernetes cria recursos de rede em segundo plano.

  4. Verifique o estado do APIMExtensionPolicy através do seguinte comando:
    kubectl -n apim get APIMExtensionPolicy
        

    O resultado deve ser semelhante ao seguinte, com um STATE de RUNNING:

    NAME                         STATE      ERRORMESSAGE
    global-ext-lb1-apim-policy   RUNNING
        

Teste a política

Use o seguinte comando para enviar um pedido ao gateway:

  1. Obtenha o endereço IP do gateway:
    export GATEWAY_IP=$(kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -n default -o=jsonpath='{.status.addresses[0].value}')
          
    echo $GATEWAY_IP
          

    Substitua GATEWAY_NAME pelo nome do gateway, por exemplo, global-ext-lb1.

  2. Envie um pedido para um ponto final configurado no seu HTTPRoute:
    curl http://$GATEWAY_IP/get -H "Host: HOST_NAME"
          

    Substitua HOST_NAME pelo nome de anfitrião definido no HTTPRoute do gateway, por exemplo, example.httpbin.com.

  3. O pedido deve falhar porque defaultSecurityEnabled: true foi definido no recurso APIMExtensionPolicy, o que ativa a validação da chave da API e do token de acesso. Deve ver uma resposta semelhante à seguinte:
    {"fault":{"faultstring":"Raising fault. Fault name : RF-insufficient-request-raise-fault","detail":{"errorcode":"steps.raisefault.RaiseFault"}}}
        

    Isto indica que a política de extensão do Apigee está ativa e que a aplicação da chave de API e a validação do token de acesso estão ativas.

O que se segue?

Apigee Hybrid

Siga estes passos se estiver a usar o Apigee hybrid.

Antes de começar

Este procedimento pressupõe que instalou o operador do Apigee para Kubernetes seguindo os passos em Instale o operador do Apigee para Kubernetes para o Apigee Hybrid.

Crie um Secret de certificado TLS

O APIMExtensionPolicy requer o certificado público codificado em base64 associado ao nome de anfitrião do grupo de ambientes. Criou este certificado em Instale o ambiente do Apigee Hybrid com o Helm. Forneça este certificado ao operador criando um segredo do Kubernetes no espaço de nomes apim.

  1. Obtenha a string do certificado codificada em base64 a partir do ficheiro que criou durante a instalação:
    cat $APIGEE_HELM_CHARTS_HOME/apigee-virtualhost/certs/keystore_ENV_GROUP.pem.base64
        
  2. Crie um ficheiro denominado secret-cert.yaml com o seguinte conteúdo:
    # secret-cert.yaml
    apiVersion: v1
    kind: Secret
    metadata:
      name: apigee-conf
      namespace: apim
    data:
      ca.crt: BASE64_ENCODED_CERT_STRING
        
  3. Substitua BASE64_ENCODED_CERT_STRING pela saída do comando cat no passo 1.
  4. Aplique o segredo ao cluster:
    kubectl apply -f secret-cert.yaml
        

Defina e aplique o APIMExtensionPolicy

Defina um recurso APIMExtensionPolicy e aplique-o ao Istio Gateway em execução no seu cluster. Esta extensão de política interceta o tráfego gerido pela Gateway e o respetivo HTTPRoutes associado, e aplica políticas do Apigee antes de encaminhar pedidos para o destino de back-end.

  1. Crie um ficheiro denominado istio-gateway-apim-policy.yaml com o seguinte conteúdo:
    # istio-gateway-apim-policy.yaml
    apiVersion: apim.googleapis.com/v1
    kind: APIMExtensionPolicy
    metadata:
      name: istio-gateway-apim-policy
      namespace: apim
    spec:
      apigeeEnv: ENV_NAME
      ingressCertSecret: apigee-conf
      apigeeAuthority: HOST_NAME
      apigeeIngressIP: INGRESS_IP_ADDRESS
      location: global
      failOpen: false
      timeout: 1000ms
      defaultSecurityEnabled: true
      targetRef: # identifies the Gateway where the extension should be applied
        group: gateway.networking.k8s.io
        kind: Gateway
        name: istio-gateway
        namespace: default
        
  2. Substitua as seguintes variáveis:
    • ENV_NAME: o nome do ambiente do Apigee Hybrid que criou com as extensões de serviço ativadas, por exemplo, my-hybrid-env.
    • HOST_NAME: o nome do domínio usado para o grupo de ambientes, por exemplo, my-proxies.example.com.
    • INGRESS_IP_ADDRESS: o endereço IP de entrada para a entrada do tempo de execução do Apigee Hybrid. Consulte o artigo Exponha a entrada do Apigee para ver detalhes sobre como obter este IP.
  3. Aplique a política ao cluster:
    kubectl -n apim apply -f istio-gateway-apim-policy.yaml
        
  4. Assim que o recurso é aplicado, o Apigee Operator for Kubernetes começa a configurar os recursos de rede da gateway. Verifique o estado do APIMExtensionPolicy:
    kubectl -n apim get APIMExtensionPolicy
        
  5. Aguarde até que o ícone STATE apresente RUNNING. O resultado deve ser semelhante ao seguinte:
    NAME                         STATE      ERRORMESSAGE
    istio-gateway-apim-policy    RUNNING
        

Teste a política

No APIMExtensionPolicy criado no passo anterior, defaultSecurityEnabled foi definido como true. Isto ativa automaticamente as políticas de validação de chaves da API e tokens OAuth2 para o tráfego que corresponda a este gateway. Teste isto enviando um pedido não autenticado para o serviço de exemplo que configurou quando validou a configuração do gateway Istio em Valide a configuração do gateway Istio.httpbin

  1. Obtenha o endereço IP do gateway:
    export GATEWAY_IP=$(kubectl get gateways.gateway.networking.k8s.io istio-gateway -n default -o=jsonpath='{.status.addresses[0].value}')
        
    echo $GATEWAY_IP
        
  2. Envie um pedido para o ponto final /get configurado no seu HTTPRoute:
    curl http://$GATEWAY_IP/get -H "Host: example.httpbin.com" -v
        
  3. Uma vez que defaultSecurityEnabled: true requer autenticação (como uma chave da API válida), o Apigee deve rejeitar o pedido com um erro de autenticação. A resposta deve ser semelhante à seguinte:
    {"fault":{"faultstring":"Raising fault. Fault name : RF-insufficient-request-raise-fault","detail":{"errorcode":"steps.raisefault.RaiseFault"}}}
        

    Este resultado confirma que o APIMExtensionPolicy está ativo e que as políticas do Apigee estão a ser aplicadas pelo gateway do Istio.

O que se segue?

Saiba como criar produtos de API, programadores e apps para obter chaves da API para pedidos autenticados: