将 Edge Microgate 部署为 Sidecar 代理

您正在查看的是 Apigee Edge 文档。
转到 Apigee X 文档
信息

简介

本主题介绍如何在 Kubernetes 集群中将 Edge Microgate 作为辅助信息文件代理运行。Sidecar 部署有两种方法:手动注入和自动注入。本主题介绍了这两种方式。

如需了解详情,请参阅 Kubernetes 上的 Edge Microgate 简介

准备工作

完成前提条件中所述的步骤。

部署测试服务

部署一个简单的“hello”服务并验证部署:

  1. 部署该示例:

    kubectl apply -f samples/helloworld/helloworld.yaml --namespace=default
  2. 验证服务正在运行。您可能需要等待片刻,直到 Pod 启动到运行状态:

    kubectl get pods --namespace=default

    输出示例:

    NAME                          READY     STATUS    RESTARTS   AGE
    helloworld-569d6565f9-lwrrv   1/1       Running   0          17m
    
  3. 删除测试服务部署。您将在启用 Sidecar 注入后重新安装:

     kubectl delete -f samples/helloworld/helloworld.yaml --namespace=default

使用手动 Sidecar 注入

在两种 Sidecar 注入选项中,手动 Sidecar 注入是更简单、更直接的方法,可通过单个 kubectl 命令完成。

配置 Edge Microgate

以下命令为您的 Apigee 组织配置 Edge Microgate,并部署代理 edgemicro-auth

  1. 执行以下命令:

    edgemicro configure -o [org] -e [env] -u [username]

    其中:

    • org:您的 Edge 组织名称(您必须是组织管理员)。

    • env:贵组织的环境(例如测试或正式版)。

    • username:与您的 Apigee 帐号关联的电子邮件地址。

    示例

    edgemicro configure -o myorg -e test -u jdoe@example.com

    输出(如下所示)将保存到文件中:

    $HOME/.edgemicro/org_name-env_name-config.yaml
    .

    current nodejs version is v6.9.1
    current edgemicro version is 2.5.25
    password:
    file doesn't exist, setting up
    Give me a minute or two... this can take a while...
    App edgemicro-auth deployed.
    checking org for existing KVM
    KVM already exists in your org
    configuring host edgemicroservices.apigee.net for region us-west1
    
    saving configuration information to: /Users/jdoe/.edgemicro/myorg-test-config.yaml
    
    vault info:
     -----BEGIN CERTIFICATE-----
    MIICpDCCAYwCCQCV9eBcO9a5WzANBgkqhkiG9w0BAQsFADAUMRIwEAYDVQQDDAls
    b2NhbGhvc3QwHhcNMagwODA5MDAzMDEzWhcNMTgwODEwMDAzMDEzWjAUMRIwEAYD
    VQQDDBlsb2NhbGhvc3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDh
    nAHT7JHX/WvWHRFb8FLm53SPIDld5LyPOUfINdEyhSIEeXoOUKg4EPweJPVSC9Vm
    Hw4ZMtEqWJM/XsQWvLe8ylRJa5wgmzmFCqAsuzs9+rmc9KvJqjpOh2uRTUf7KKfT
    iXL2UEseprcI5g8zNyqKyEf/ecWIwz3AkkPAZebVTsrdDfIDHvkyhhvlAHZAB9kn
    GtqP3N8kOlv4KQto9Gr7GYUGUIDugt7gM1F611+RBS+fYRi32GUAq/UQDkhYL8cp
    oIJiF7UYkk2+9t9CdOCDuIUCvJioHJQd0xvDpkC9f6LvwjwnCwku+4F2Q63+av5I
    mJoZJQPvW5aP53Qkk+kHAgMBAAEwDKYJKoZIhvcNAQELBQADggEBALyUBolXUFN8
    1bf268nR+gS8MOFDTxO1bUz+bKuT/g3K1PuNUJTueT+0L1H2OiZUzazAqwn2sqzN
    lQuvLg6LjxjlNkqTJGiJvGDcYVq45dv7UyxAZxhqxTxhlQ+Yu5R9pbQnzujezHpH
    6gtCoCkSt/QqiJ3YsmsVu5is+HpIJepMt0CyMh5tK9j87hl46QhHklaVfQ3ycMVm
    /wNPR/pjizg1FDUeq4nj/7DBVbMf9net/BDaZLeSW1HJ1vcsCXIcSZfQd4QymGFn
    8ADrND7ydVjwO/s23soPDTy0g4yLIZvky2tpT8d7YahNqSv2n7sXsLxruzcyCoQ4
    w+e3Z3F7IKI=
    -----END CERTIFICATE-----
    
    The following credentials are required to start edge micro
      key: 1a3b2754c7f20614817b86e09895825ecc252d34df6c4be21ae24356f09e6eb4
      secret: 16ad2431de73f07f57a6d44048f08d93b63f783bf1f2ac4221182aa7289c7cef
    
    edgemicro configuration complete!
    

将 Edge Microgate 注入为 Sidecar

如需将 Edge Microgate 作为 Sidecar 代理手动注入服务 Pod 中,请执行以下命令:

kubectl apply -f <(edgemicroctl -org=your_org -env=your_env -key=your_key -sec=your_secret -conf=config_file_path -svc=service_deployment_file)

其中:

  • your_org - 您在 edgemicro configure 命令中指定的 Apigee 组织。
  • your_env - 您在 edgemicro configure 命令中指定的环境。
  • your_key - edgemicro configure 命令返回的键。
  • your_secret - edgemicro configure 命令返回的 Secret。
  • config_file_path - 从 edgemicro configure 命令返回的 Edge Micro 配置文件的路径。
  • service_deployment_file - 服务的部署文件的路径(该服务的 Pod 将获取配套 Sidecar 服务)。例如:samples/helloworld/helloworld.yaml

例如:

kubectl apply -f <(edgemicroctl -org=myorg -env=test-key=0e3ecea28a64099410594406b30e54439af5265f8 -sec=e3919250bee37c69cb2e5b41170b488e1c1d -conf=/Users/jdoe/.edgemicro/myorg-test-config.yaml -svc=samples/helloworld/helloworld.yaml)

测试配置

  1. 检查服务部署:

    kubectl get services -n default

    输出示例:

    NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
    helloworld   NodePort    10.15.254.163   <none>        8081:32401/TCP   56s
    kubernetes   ClusterIP   10.15.240.1     <none>        443/TCP          41m
    
  2. 现在,您可以测试 Edge Microgate 的 Sidecar 部署了。如需了解详细步骤,请转到测试代理

使用自动 Sidecar 注入

在以下步骤中,您将为 Kubernetes 集群配置自动 Sidecar 注入功能。此设置允许将 Edge Microgate 作为 Sidecar 代理注入 Kubernetes。

安装 Sidecar 注入器

  1. 安装用于启用 Edge Microgate 的 Sidecar 注入的 ConfigMap

    kubectl apply -f install/kubernetes/edgemicro-sidecar-injector-configmap-release.yaml
  2. 执行以下脚本,以安装 webhook 服务。如需自动 Sidecar 注入,必须使用网络钩子服务:

    ./install/kubernetes/webhook-create-signed-cert.sh \
        --service edgemicro-sidecar-injector \
        --namespace edgemicro-system \
        --secret sidecar-injector-certs
    
  3. 将 CA 软件包添加到网络钩子安装文件中。Kubernetes API 服务器使用此文件调用 webhook:

    cat install/kubernetes/edgemicro-sidecar-injector.yaml | \
         ./install/kubernetes/webhook-patch-ca-bundle.sh > \
         install/kubernetes/edgemicro-sidecar-injector-with-ca-bundle.yaml
    
  4. 安装 Edge Microgate Sidecar 注入器 webhook:

    kubectl apply -f install/kubernetes/edgemicro-sidecar-injector-with-ca-bundle.yaml
    

    输出示例:

    service "edgemicro-sidecar-injector" created
    serviceaccount "edgemicro-sidecar-injector-service-account" created
    deployment "edgemicro-sidecar-injector" created
    mutatingwebhookconfiguration "edgemicro-sidecar-injector" created
    
  5. 验证 Edge Microgate Sidecar 注入器 webhook 是否正在运行:

    kubectl -n edgemicro-system get deployment -ledgemicro=sidecar-injector
    

    输出示例:

    NAME                         DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
    edgemicro-sidecar-injector   1         1         1            1           12m
    
  6. 验证 Sidecar 注入 Pod 是否正在集群中运行。命名空间 edgemicro-system 是安装系统服务的位置,包括 Ingress 控制器、默认 HTTP 后端和 Sidecar 注入器:

    kubectl get pods -n edgemicro-system

    输出示例:

    NAME                                            READY     STATUS    RESTARTS   AGE
    default-http-backend-55c6c69b88-gfnfd           1/1       Running   0          1h
    edgemicro-ingress-controller-64444469bf-jhn8b   1/1       Running   3          1h
    edgemicro-sidecar-injector-7d95698fbf-cq84q     1/1       Running   0          3m
    

配置和注入 Edge Microgate

在下一步中,您将运行交互式脚本,以创建与 Kubernetes 命名空间关联的 Edge Microgate 配置。然后,将配置注入 Kubernetes 集群中。

  1. 运行以下交互式脚本并提供请求的参数。该命令会生成您在下一步中使用的配置文件。

    ./install/kubernetes/webhook-edgemicro-patch.sh

    如需了解输入参数,请参阅参考文档

    输入示例:

    1. Namespace to deploy application [default]:

      Enter 键。

    2. Authenticate with OAuth Token ("n","Y") [N/y]

      输入 n

    3. Apigee username [required]:

      输入您的 Apigee 用户名(电子邮件地址)。例如:jdoe@google.com

    4. Apigee password [required]:

      输入您的 Apigee 密码。

    5. Apigee organization [required]:

      输入您的 Apigee 组织名称。

    6. Apigee environment [required]:

      输入贵组织的环境名称。例如“test”。

    7. Virtual Host [default]:

      Enter 键。

    8. Is this Private Cloud ("n","y") [N/y]:

      如果您在公有云上,请输入 n

    9. Edgemicro Key. Press Enter to generate:

      Enter 键。

    10. Edgemicro Secret. Press Enter to generate:

      Enter 键。

    11. Edgemicro org-env-config.yaml. Press Enter to generate:

      Enter 键。

      输出示例:

      current nodejs version is v6.9.1
      current edgemicro version is 2.5.25
      config initialized to /Users/jdoe/.edgemicro/default.yaml
      Configure for Cloud
      ******************************************************************************************
      Config file is Generated in /Users/jdoe/Work/GITHUB/microgateway_2.5.25_Darwin_x86_64/config directory.
      
      Please make changes as desired.
      *****************************************************************************************
      
    12. Do you agree to proceed("n","y") [N/y]:

      输入 y

      输出示例:

      Configuring Microgateway with
      
      key:daacf75dd660d160b801c9117fb1ec0935896615479e39dbbae88be81a2d84
      secret:a60fd57c1db9f3a06648173fb541cb9c59188d3b6037a76f490ebf7a6584b0
      config:~/.edgemicro/jdoe-test-config.yaml
      
      ********************************************************************************************************
      kubectl apply -f install/kubernetes/edgemicro-config-namespace-bundle.yaml
      ********************************************************************************************************
      
  2. 执行输出最后一行中提供的命令。此 kubectl 命令会将生成的 Edge Microgate 配置文件注入 Kubernetes:

    kubectl apply -f install/kubernetes/edgemicro-config-namespace-bundle.yaml
  3. 查看 webhook 注入的状态。请注意,目前未启用此功能:

    kubectl get namespace -L edgemicro-injection

    输出示例:

    NAME               STATUS    AGE       EDGEMICRO-INJECTION
    default            Active    1d
    edgemicro-system   Active    1d
    kube-public        Active    1d
    kube-system        Active    1d
    
  4. 运行以下命令,为 webhook 启用 webhook 注入:

    kubectl label namespace default edgemicro-injection=enabled
  5. 请再次查看 webhook 注入的状态。请注意,它现已启用:

    kubectl get namespace -L edgemicro-injection

    输出示例:

    NAME               STATUS    AGE       EDGEMICRO-INJECTION
    default            Active    1d        enabled
    edgemicro-system   Active    1d
    kube-public        Active    1d
    kube-system        Active    1d
    

部署测试服务

现在,重新部署测试服务。Edge Microgate 将自动注入服务的 Pod 中。

kubectl apply -f samples/helloworld/helloworld.yaml --namespace=default

确认 Edge Microgate 是否已与测试服务一起注入到 Pod 中:

kubectl get pods --namespace=default --watch

输出示例:

NAME                          READY     STATUS            RESTARTS   AGE
helloworld-6987878fc4-pkw8h   0/2       PodInitializing   0          12s
helloworld-6987878fc4-pkw8h   2/2       Running           0         26s

当状态变为 Running 时,按 ctrl-c 退出命令。

现在,您可以测试 Edge Microgate 的自动 Sidecar 部署了。如需了解详细步骤,请转到测试代理

测试代理

通过 Sidecar 部署,系统会自动为您的服务创建 API 代理。您无需创建“Edge Microgate-aware”代理。

获取 Ingress IP 地址

使用 Ingress 的外部 IP 后,您可以从集群外部调用该服务。

  1. 获取 Ingress 控制器的外部 IP 地址:

    kubectl get ing -o wide

    输出示例:

    NAME      HOSTS     ADDRESS        PORTS     AGE
    gateway   *         35.238.13.54   80        1m
    
  2. 复制 Ingress 的 EXTERNAL-IP 值,并将其导出到变量。您可以手动设置该变量:

    export GATEWAY_IP=external_ip

    例如:

    export GATEWAY_IP=35.238.249.62

    或者,使用以下命令进行设置:

    export GATEWAY_IP=$(kubectl describe ing gateway --namespace default | grep "Address" | cut -d ':' -f2 | tr -d "[:space:]")
  3. 验证变量是否已导出。例如:

    echo $GATEWAY_IP

    输出示例:

    35.238.249.62
    
  4. 调用该服务:

    curl $GATEWAY_IP

    输出:

    {"error":"missing_authorization","error_description":"Missing Authorization header"}
    

    接下来,您将通过在 Edge 上配置 API 产品和开发者应用来解决缺少授权错误,以便获得有效的 API 密钥。将密钥添加到 API 调用的授权标头后,调用会成功,而您不会看到此错误。

在 Apigee Edge 上创建组件

接下来,在 Apigee Edge 上创建 API 产品和开发者应用。

创建 API 产品

  1. 登录 Apigee Edge。
  2. 在侧边导航菜单中选择发布 > API 产品
  3. 点击 + API 产品。商品页面随即显示。
  4. 在“产品”页面中填写相应信息,如下所示。对于下文未提及的字段,您可以使用默认值。除非收到指示,否则请勿保存。

    名称 hello-world-product
    显示名 Edge Micro hello product
    环境 test

  5. 在“路径”部分中,点击 + 自定义资源

  6. 添加路径 /

  7. 再次点击 + 自定义资源,然后添加路径 /**

  8. 在“API 代理”部分中,点击 + API 代理,然后添加 edgemicro-auth

  9. 保存 API 产品。

创建开发者应用

  1. 在侧边导航菜单中选择应用
  2. 点击 + 应用。系统随即会显示“开发者应用详情”页面。
  3. 根据下表填写开发者应用页面。除非收到指示,否则请勿保存。

    名称 hello-world-app
    显示名 Edge Micro hello app
    开发者 从下拉菜单中选择开发者。
  4. 在“凭据”部分中,点击 + 产品,然后选择您刚刚创建的 hello-world-product

  5. 点击保存

  6. 您将返回到列出所有开发者应用的页面。

  7. 选择您刚刚创建的应用 hello-world-app

  8. 点击 Consumer Key 旁边的 Show

  9. 复制使用方键值的值。此值是用于对 helloworld 服务进行安全的 API 调用的 API 密钥

  10. 请稍等几分钟。您在 Apigee Edge 上所做的更改需要几分钟时间才能与集群中部署的 Edge Microgate 实例同步。

调用该 API

将配置更改提取到微网关后,您可以执行以下测试。

  1. 在不使用 API 密钥的情况下调用该 API。您会收到一条错误消息,如下所示:

    curl $GATEWAY_IP

    预期输出:

    {"error":"missing_authorization","error_description":"Missing Authorization
    header"}
    

    要成功进行 API 调用,您需要 API 密钥。

  2. 从您创建的开发者应用中获取使用方密钥。此值是调用测试代理所需的 API 密钥:

    curl -H 'x-api-key:your-edge-api-key'  $GATEWAY_IP

    例如:

    curl -H "x-api-key:DeX2eEesYAdRJ5Gdbo77nT9uUfJZql19" $GATEWAY_IP

    输出:

    Hello world
    

    部署到 pod 的 Queue 服务会返回“Hello world”响应。对该服务的调用首先通过 Edge Microgate(执行身份验证)进行传递。如果您看到“Hello world”响应,则表示您已成功将 Edge Microgate 配置为在 Avro 服务 Pod 中充当辅助信息文件代理。

后续操作

如需了解如何添加自定义插件、扩缩部署、进行配置更改以及您希望执行的其他任务,请参阅任务部分。