0

有没有办法在运行时在我的 Kubernetes 微服务中学习大使服务前缀?

以这个配置为例:

---
apiVersion: ambassador/v1
kind: Mapping
name: myservice_get_mapping
prefix: /myprefix/
service: myservice

从我的 docker 容器中,我想获取“/myprefix/”。通过一些 env 变量进行部署,或者如果无法使用 env 变量以编程方式完成。

谢谢。

4

1 回答 1

0

假设Ambassador Mapping资源将 REST 资源与 Kubernetes 服务相关联,如果我正确理解您的问题,您可以通过JSONPath获取注释元数据,然后解析字段。prefix:

大使文档中的 k8s 服务示例:

kind: Service
metadata:
  name: httpbin
  annotations:
    getambassador.io/config: |
      ---
      apiVersion: ambassador/v1
      kind:  Mapping
      name:  tour-ui_mapping
      prefix: /test/
      service: http://tour
spec:
  ports:
  - name: httpbin
    port: 80

获取prefix:字段值的命令行:

$ kubectl get svc httpbin -o jsonpath='{.metadata.annotations}'| grep -w "prefix:"| awk '{print $2}'

/测试/

更新:

或者,您也可以考虑通过 Bearer 令牌身份验证方法直接调用 REST API 来检索相同的结果:

curl -k -XGET  -H "Authorization : Bearer $MY_TOKEN" 'https://<API-server_IP>/api/v1/namespaces/default/services/httpbin' -H "Accept: application/yaml"| grep -w "prefix:"| awk '{print $2}

$MY_TOKEN正如我在之前的回答中已经指出的那样,必须为变量提供适当的令牌,该令牌有权对 REST API 执行上述查询。

于 2019-07-10T11:16:24.863 回答