Kubernetes cronJob使用带有头的CURL调用REST API失败,CURL(6):无法解析主机



如何使用kubernetes在cronJob中触发restAPI[POST,其标头具有身份验证和参数]。当我创建cron并尝试运行它时,我得到了以下错误

curl: (7) Failed to connect to localhost port 8080: Connection refused

当我用实际主机而不是本地主机替换主机时,它仍然会将错误显示为

curl: (6) Could not resolve host : xxxHostName

我可以使用命令提示符以及在POSTMAN 中击中卷曲

以下是我正在尝试运行的cronJob

apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: e2em-rule-violation-job  
spec:
schedule: "*/3 * * * *"
concurrencyPolicy: Allow
failedJobsHistoryLimit: 1
successfulJobsHistoryLimit: 3
jobTemplate:
spec:
template:
spec:
containers:
- name: e2em-rule-violation-job 
image: curlimages/curl:7.72.0
args:
- /bin/sh
- -ec
- "curl -H "Authorization: Basic c3lzdGVtOm1hbmFnZQ==" -H "InternalUser: true" -X POST  "http://localhost:8080/myIntegration/rest/executeScheduledTask""
restartPolicy: OnFailure

以下是成功的试运行,但乔布斯在创建时失败了

W1006 13:35:34.443357   18304 helpers.go:535] --dry-run is deprecated and can be replaced with --dry-run=client.
apiVersion: batch/v1beta1
kind: CronJob
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"batch/v1beta1","kind":"CronJob","metadata":{"annotations":{},"name":"e2em-rule-violation-job","namespace":"default"},"spec":{"concurrencyPolicy":"Allow","failedJobsHistoryLimit":1,"jobTemplate":{"spec":{"template":{"spec":{"containers":[{"args":["/bin/sh","-ec","curl -H "Authorization: Basic c3lzdGVtOm1hbmFnZQ==" -H "InternalUser: true" -X POST  "http://localhost:8080/myIntegration/rest/executeScheduledTask""],"image":"curlimages/curl:7.72.0","name":"e2em-rule-violation-job"}],"restartPolicy":"OnFailure"}}}},"schedule":"*/3 * * * *","successfulJobsHistoryLimit":3}}
name: e2em-rule-violation-job
namespace: default
spec:
concurrencyPolicy: Allow
failedJobsHistoryLimit: 1
jobTemplate:
spec:
template:
spec:
containers:
- args:
- /bin/sh
- -ec
- 'curl -H "Authorization: Basic c3lzdGVtOm1hbmFnZQ==" -H "InternalUser:
true" -X POST  "http://localhost:8080/myIntegration/rest/executeScheduledTask"'
image: curlimages/curl:7.72.0
name: e2em-rule-violation-job
restartPolicy: OnFailure
schedule: '*/3 * * * *'
successfulJobsHistoryLimit: 3
"curl -H "Authorization: Basic c3lzdGVtOm1hbmFnZQ==" -H "InternalUser: true" -X POST  "http://localhost:8080/myIntegration/rest/executeScheduledTask""

你的问题出在上面的卷曲上。看,你正试图卷曲不存在的地址。运行cronjob后会发生什么?

  1. k8s创建cronjobe2em-rule-violation-job
  2. cronjobe2em-rule-violation-job创建POD
  3. curl命令正试图从该POD的内部运行

你的POD不知道localhost:8080是什么。与你的应用程序运行的地方相比,你的POD绝对有另一个本地成本。。。此地址未公开,您无法访问它。另外,image: curlimages/curl:7.72.0dockerfile没有公开端口8080。。

你能做的测试是

  1. 使用curl pod创建正常部署,比如NEWCURLPOD
  2. 连接到NEWCURLPOD并执行您想要运行的初始命令。示例:kubectl exec -ti {NEWCURLPOD} -n {PROPER_NAMESPACE} -- curl blablabla

如果这不起作用-检查dns。如果你的应用程序在同一个集群中运行,你应该正确地公开它的服务以到达目标,但可以肯定的是,这不是localhost:8080

干式运行。。

以下是成功的试运行,但当创建

在运行试运行时-它只检查和预览对象,不应该在那里执行curl-结果你会看到它成功完成。

最新更新