【发布时间】:2019-12-22 01:29:03
【问题描述】:
我目前正在使用具有微服务架构的 Google Cloud 上的 Kubernetes。在集群中,我有不同的 Pod,每个 Pod 都可以使用 ClusterIp 通过 curl 与其他 Pod 通信。
我的问题是我需要使用 ClusterIp 不时调用其中一个 Pod 的端点。为此,我创建了一个 CronJob,它会卷曲 pod 的端点,但它总是返回:
curl: (7) Failed to connect to xx.xx.xx.xx port 8080: Connection refused
这是 cronJob 的 yaml。
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: cronjob-test # name of the CronJob
spec:
schedule: "*/1 * * * *" # run every minute
concurrencyPolicy: Replace
jobTemplate:
spec:
template:
spec:
containers:
- name: cronjob-test
image: appropriate/curl
args:
- /bin/sh
- -c
- curl -X POST http://${CLUSTER_IP}:${CLUSTER_PORT}/api/test/
restartPolicy: Never
【问题讨论】:
-
首先,你不应该使用 ClusterIP,你应该使用服务。
-
可能包括您的服务和部署如何确定是否存在问题。此外,请说明您是否能够 cURL 访问 ClusterIP 的其他 pod,如果可以,您是否通过 IP 地址或 FQDN 对它们进行 cURL。
-
我可以使用创建的 ClusterIp 类型的 Service 生成的 IP 地址和端口成功地在所有 Pod 之间执行 curl。
-
什么是 CLUSTER_IP 和 CLUSTER_PORT (8080) 值? CLUSTER_IP 是否可能是 CronJob 的 pod 本身的集群 IP?在任何情况下,除非已修复 (kubernetes.io/docs/concepts/services-networking/service/…),否则 Service-s 集群 IP 在出于某种原因重新创建 Service 对象时会发生变化,因此通常最好使用 Service 名称。
-
如果我在 de curl 之前延迟(睡眠 10)它会起作用,为什么会发生这种情况
标签: kubernetes google-cloud-platform kubernetes-pod kubernetes-cronjob