xuxueli / xxl-job

A distributed task scheduling framework.(分布式任务调度平台XXL-JOB)
http://www.xuxueli.com/xxl-job/
GNU General Public License v3.0
27.46k stars 10.86k forks source link

xxl-job-admin在k8s部署,连接k8s中的执行器失败 #1308

Closed alfredking12 closed 4 years ago

alfredking12 commented 4 years ago

Please answer some questions before submitting your issue. Thanks!

Which version of XXL-JOB do you using?

2.1.1

Expected behavior

xxl-job-admin在k8s部署,连接k8s中的执行器成功

Actual behavior

xxl-job-admin在k8s部署,连接k8s中的执行器失败,提示不能解析域名

Steps to reproduce the behavior

  1. xxl-job-admin部署在k8s中
  2. 执行器也在k8s中
  3. 我希望是内网调用,所以配置执行器配置的ip是k8s的service name
  4. 我在xxl-job-admin手动点击执行一次,可以正确调度到执行器
  5. 但是将定时任务启动后,由xxl-job-admin自行调度,会出现连接不上service name的错误。

Other information

经分析发现,手动调用xxl-job-admin时,接收web请求的服务端允许环境ip为k8s中的ip,而定时任务执行时的ip是另外一个ip。请问如何解决这个问题?

触发调度<<<<<<<<<<< 触发调度: address:xxljob-mall.oemall-sit:9998 code:500 msg:com.xxl.rpc.util.XxlRpcException: java.net.UnknownHostException: xxljob-mall.oemall-sit at com.xxl.rpc.remoting.invoker.reference.XxlRpcReferenceBean$1.invoke(XxlRpcReferenceBean.java:250) at com.sun.proxy.$Proxy92.run(Unknown Source) at com.xxl.job.admin.core.trigger.XxlJobTrigger.runExecutor(XxlJobTrigger.java:196) at com.xxl.job.admin.core.trigger.XxlJobTrigger.processTrigger(XxlJobTrigger.java:149) at com.xxl.job.admin.core.trigger.XxlJobTrigger.trigger(XxlJobTrigger.java:74) at com.xxl.job.admin.core.thread.JobTriggerPoolHelper$3.run(JobTriggerPoolHelper.java:90) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1152) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:622) at java.lang.Thread.run(Thread.java:748) Caused by: java.net.UnknownHostException: xxljob-mall.oemall-sit at java.net.InetAddress.getAllByName0(InetAddress.java:1275) at java.net.InetAddress.getAllByName(InetAddress.java:1187) at java.net.InetAddress.getAllByName(InetAddress.java:1121) at java.net.InetAddress.getByName(InetAddress.java:1071) at io.netty.util.internal.SocketUtils$8.run(SocketUtils.java:148) at io.netty.util.internal.SocketUtils$8.run(SocketUtils.java:145) at java.security.AccessController.doPrivileged(Native Method) at io.netty.util.internal.SocketUtils.addressByName(SocketUtils.java:145) at io.netty.resolver.DefaultNameResolver.doResolve(DefaultNameResolver.java:43) at io.netty.resolver.SimpleNameResolver.resolve(SimpleNameResolver.java:63) at io.netty.resolver.SimpleNameResolver.resolve(SimpleNameResolver.java:55) at io.netty.resolver.InetSocketAddressResolver.doResolve(InetSocketAddressResolver.java:57) at io.netty.resolver.InetSocketAddressResolver.doResolve(InetSocketAddressResolver.java:32) at io.netty.resolver.AbstractAddressResolver.resolve(AbstractAddressResolver.java:108) at io.netty.bootstrap.Bootstrap.doResolveAndConnect0(Bootstrap.java:202) at io.netty.bootstrap.Bootstrap.access$000(Bootstrap.java:48) at io.netty.bootstrap.Bootstrap$1.operationComplete(Bootstrap.java:182) at io.netty.bootstrap.Bootstrap$1.operationComplete(Bootstrap.java:168) at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:577) at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:551) at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:490) at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:615) at io.netty.util.concurrent.DefaultPromise.setSuccess0(DefaultPromise.java:604) at io.netty.util.concurrent.DefaultPromise.trySuccess(DefaultPromise.java:104) at io.netty.channel.DefaultChannelPromise.trySuccess(DefaultChannelPromise.java:84) at io.netty.channel.AbstractChannel$AbstractUnsafe.safeSetSuccess(AbstractChannel.java:985) at io.netty.channel.AbstractChannel$AbstractUnsafe.register0(AbstractChannel.java:505) at io.netty.channel.AbstractChannel$AbstractUnsafe.access$200(AbstractChannel.java:416) at io.netty.channel.AbstractChannel$AbstractUnsafe$1.run(AbstractChannel.java:475) at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163) at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:510) at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:518) at io.netty.util.concurrent.SingleThreadEventExecutor$6.run(SingleThreadEventExecutor.java:1050) at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ... 1 more

触发调度<<<<<<<<<<< 触发调度: address:xxljob-mall.oemall-sit:9998 code:200 msg:null

zhangvb521 commented 4 years ago

补充一条,同样是在k8s部署,采用k8s服务名方式进行注册时,一直拒绝链接 image 使用 curl http://xxl-job-manager.common.svc.cluster.local:8080/api/registry 是可以调用到对端服务的

alfredking12 commented 4 years ago

补充一条,同样是在k8s部署,采用k8s服务名方式进行注册时,一直拒绝链接 image 使用 curl http://xxl-job-manager.common.svc.cluster.local:8080/api/registry 是可以调用到对端服务的

你的路径有问题 http://xxl-job-manager.common.svc.cluster.local:8080/xxl-job-admin/api/registry

alfredking12 commented 4 years ago

我已经找到原因了,不是BUG。我之前测试xxl-job-admin的时候,另外用docker独立部署了一个xxl-job-admin,因为配置的同一个数据源。所以也参数调度了。现在把之前测试的xxl-job-admin删除就好了。