0

每当我需要向 kong 注册我的 EKS 服务和所需路由时,我必须手动执行相同的 CURL 方法( post/get )命令,服务和路由注册成功,但我的要求是使用 KONG 构建或自动化以上多个配置,比如YAML为 KONG 的所有服务注册和路由生成一个文件,然后立即执行。

我探索了所有来源,甚至是 KONG 官方文档,但找不到任何可以减轻我要求的方法

###################### Adding Svc ##########################################

curl -k -i -X POST \
  --url https://localhost:7001/services/ \
  --data 'name=hello-world1' \
  --data 'host=service-helloworld' \
  --data 'port=80'  


###################### Adding Route ##########################################

curl -k -i -X POST --url https://localhost:7001/services/hello-world/routes --data 'paths=/hello-world' --data 'methods[]=GET'  

一些自动化上述CURL命令的方法

4

1 回答 1

0

如果我对您的理解正确,这些是您正在寻找的一些方法:

容器生命周期钩子

在您的情况下,您想使用PostStart

这个钩子在容器创建后立即执行。但是,不能保证钩子会在容器 ENTRYPOINT 之前执行。没有参数传递给处理程序。

挂钩处理程序实现

容器可以通过实现和注册该钩子的处理程序来访问该钩子。可以为容器实现两种类型的钩子处理程序:

  • pre-stop.shExec -在 Container 的 cgroup 和命名空间内执行特定命令,例如 . 命令消耗的资源计入容器。
  • HTTP - 针对容器上的特定端点执行 HTTP 请求。

pod可能类似于以下示例:

apiVersion: v1
kind: Pod
metadata:
  name: lifecycle-demo
spec:
  containers:
  - name: lifecycle-demo-container
    image: nginx
    lifecycle:
      postStart:
        exec:
          command: 
           - "sh"
           - "-c"
           - >
             curl -k -i -X POST --url https://localhost:7001/services/ --data 'name=hello-world1' --data 'host=service-helloworld' --data 'port=80';
             curl -k -i -X POST --url https://localhost:7001/services/hello-world/routes --data 'paths=/hello-world' --data 'methods[]=GET'

初始化容器

一个 Pod 可以有多个容器在其中运行应用程序,但它也可以有一个或多个 init 容器,这些容器在应用程序容器启动之前运行。

初始化容器与普通容器完全一样,除了:

  • 初始化容器总是运行到完成。
  • 每个 init 容器必须在下一个启动之前成功完成。

这是来自docs的示例:

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
    app: myapp
spec:
  containers:
  - name: myapp-container
    image: busybox:1.28
    command: ['sh', '-c', 'echo The app is running! && sleep 3600']
  initContainers:
  - name: init-myservice
    image: busybox:1.28
    command: ['sh', '-c', 'until nslookup myservice; do echo waiting for myservice; sleep 2; done;']
  - name: init-mydb
    image: busybox:1.28
    command: ['sh', '-c', 'until nslookup mydb; do echo waiting for mydb; sleep 2; done;']
于 2019-08-26T12:33:21.537 回答