从kubernetes中获取外部API

问题描述 投票:1回答:2

我有一个Kubernetes服务正在运行,我们有一个外部API依赖于此服务。

如果有任何服务重启,我们希望收到通知。是否有可能在每次重启服务时都打到API端点?

kubernetes
2个回答
1
投票

嗨,欢迎来到社区!

有多种方法可以实现这一目标。一个非常简单的(正如托马斯所指出的)是一个Init容器。有关如何运行的更多信息,请参阅Kubernetes docs!这个init容器只会在pod启动后向外部API发送一个HTTP请求,然后立即终止。

另一种方式要复杂得多,需要你自己编写一些代码。您需要做的是编写自己的控制器,通过Kubernetes API监视实体,并在重新安排,杀死,死亡等时通知您的外部服务。(但是,您可以使用外部服务来完全访问kube-api直接...)


0
投票

扩大enzian's comment关于使用initContainers。下面是一个使用基于Curl的initContainer并挂载元数据以作为调用中的环境变量传递的示例:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: some-service
  namespace: the-project
  labels:
    app: some-service
spec:
  replicas: 1
  selector:
    matchLabels:
      app: some-service
  template:
    metadata:
      labels:
        app: some-service
    spec:
      initContainers:
      - name: service-name-init
        image: txn2/curl:v3.0.0
        - name: SOME_NAME
          valueFrom:
            fieldRef:
              fieldPath: spec.nodeName
        command: [
          "/bin/sh",
          "-c",
          "/usr/bin/curl -sX GET example.com/notify/$(SOME_NAME)"
        ]
      containers:
      - name: ok
        image: txn2/ok
        imagePullPolicy: Always
        env:
        - name: NODE_NAME
          valueFrom:
            fieldRef:
              fieldPath: spec.nodeName
        - name: POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        - name: POD_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        - name: POD_IP
          valueFrom:
            fieldRef:
              fieldPath: status.podIP
        - name: SERVICE_ACCOUNT
          valueFrom:
            fieldRef:
              fieldPath: spec.serviceAccountName
        ports:
        - name: ok-port
          containerPort: 8080
© www.soinside.com 2019 - 2024. All rights reserved.