Kubernetes pod内调用API

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kubernetes pod内调用API相关的知识,希望对你有一定的参考价值。

参考技术A Kubernetes pod内调用API的流程总体分为以下步骤

我们以查pod为例,演示一下整个流程

手上刚好有zookeeper的模板文件

发现这里,调用后面的api,403错误。第一个api不报错,是因为该接口不需要鉴权。

让我们修改部署模板对应的ServiceAccountName,注入权限。在pod的spec下,设置serviceAccountName

再次尝试上述命令,api结果返回正常

在同一个 kubernetes 集群中从一个 pod 调用一个 rest api 到另一个 pod

【中文标题】在同一个 kubernetes 集群中从一个 pod 调用一个 rest api 到另一个 pod【英文标题】:Call a rest api from one pod to another pod in same kubernetes cluster 【发布时间】:2019-12-16 17:03:58 【问题描述】:

在我的 k8s 集群中,我有两个 pod podA 和 podB。两者都在同一个 k8s 集群中。 pod B 上的微服务是一个 spring boot rest api。 pod A 上的微服务在其 application.yaml 中有 pod B 的 ip 和端口。现在每次 podB 重新创建时,ip 更改都会迫使我们更改 podA 的 application.yml 中的 ip。请提出更好的方法。

我的限制是:我无法更改 podA 的代码。

【问题讨论】:

【参考方案1】:

这就是service 的用途。使用 postgres 服务:

kind: Service
apiVersion: v1
metadata:
  name: postgres-service
spec:
  type: ClusterIP
  selector:
    app: postgres
  ports:
    - protocol: TCP
      port: 5432
      targetPort: 5432

您可以在其他 pod 中使用postgres-service,而不是引用该 pod 的 ip 地址。您还拥有 k8s 也为您做一些负载平衡的优势。

【讨论】:

【参考方案2】:

Service 将为访问 Pod 提供一致的 DNS 名称。

除非您有特定的理由,否则应用程序永远不应直接寻址 Pod(自定义负载平衡是我能想到的,或者 Pod 具有身份的 StatefulSet)。

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: MyApp
  ports:
    - protocol: TCP
      port: 80
      targetPort: 9376

然后,您将拥有一致的 DNS 名称来访问与 selector 匹配的任何 Pod:

my-service.default.svc.cluster.local

【讨论】:

以上是关于Kubernetes pod内调用API的主要内容,如果未能解决你的问题,请参考以下文章

如何使用网络策略停止所有外部流量并仅允许命名空间内的 Pod 间网络调用?

Kubernetes之三 k8s中的pod

如何在 Kubernetes Pod 内进行网络抓包

如何防止在 Kubernetes 中由 HPA 创建的特定时间段内新扩展的 Pod 缩减?

mariadb 在具有主机路径卷的 Kubernetes pod 内崩溃

Kubernetes pod 在使用未知证书授权调用谷歌云发布/订阅时失败