当前位置: 首页 > 知识库问答 >
问题:

如何访问在另一个名称空间中创建的服务

穆博简
2023-03-14

我在访问另一个命名空间中存在的服务时遇到问题。

我有两个名称空间(在同一个集群中)airflow-dev和dask-dev。

在dask-dev名称空间中,我部署了dask集群(dask调度器和工作器)。此外,还为dask-scheduler pod创建了一个服务(集群IP)。我可以使用“kubectl port-forward”命令从chrome访问dask-scheduler pod。

kubectl端口转发--命名空间dask-dev svc/dask-dev-调度器5002:80

然而,我无法从气流开发命名空间中的pod(气流调度器)访问服务(或dask调度器pod)。尝试使用以下方法访问主机或服务时出现“找不到主机或服务”错误

dask-dev-scheduler.dask-dev.svc.cluster.local:8786

下面是我为dask-dev调度器创建的服务。你能告诉我如何从气流开发命名空间访问服务吗。

apiVersion: v1
metadata:
  name: dask-dev-scheduler
  namespace: dask-dev
  labels:
    app: dask-dev
    app.kubernetes.io/managed-by: Helm
    chart: dask-dev-4.5.7
    component: scheduler
    heritage: Helm
    release: dask-dev
  annotations:
    meta.helm.sh/release-name: dask-dev
    meta.helm.sh/release-namespace: dask-dev
spec:
  ports:
    - name: dask-dev-scheduler
      protocol: TCP
      port: 8786
      targetPort: 8786
    - name: dask-dev-webui
      protocol: TCP
      port: 80
      targetPort: 8787
  selector:
    app: dask-dev
    component: scheduler
    release: dask-dev
  clusterIP: 10.0.249.111
  type: ClusterIP
  sessionAffinity: None
status:
  loadBalancer: {}

[1]: https://i.stack.imgur.com/UrA7u.jpg

共有3个答案

逑俊楚
2023-03-14

您是否将coredns升级到1.8.3?在从1.19升级到1.20后,我刚刚在我的ek集群上遇到了同样的问题。将coredns降级到1.8.0解决了这个问题。

笪涛
2023-03-14

群集域并不总是 cluster.local。尝试只使用 dask-dev-scheduler.dask-dev.svc。假设 Airflow 遵循挂载到 pod 中的生成的 resolv.conf 中的 ndots 查找策略,它应该可以找到它。

吴兴国
2023-03-14

通过使用service externalName类型,您可以使用本地服务来引用外部服务(不同命名空间中的服务)。

ExternalName服务没有选择器或任何已定义的端口或endpoint,因此,您可以使用ExternalName服务将流量引导到外部服务。

apiVersion: v1
kind: Service
metadata:
  name: service-b
  namespace: namespace-b
spec:
  selector:
    app: my-app-b
  ports:
    - protocol: TCP
      port: 3000
      targetPort: 3000
apiVersion: v1
kind: Service
metadata:
  name: service-b-ref
  namespace: namespace-a
spec:
  type: ExternalName
  externalName: service-b.namespace-b.svc.cluster.local

命名空间 a 中连接到 service-b-ref 的任何流量:

在您的示例中,您只需在< code>airflow-dev中创建一个服务,该服务将流量路由到< code>dask-dev命名空间中的< code>dask-dev-scheduler:

apiVersion: v1
kind: Service
metadata:
  name: dask-dev-svc
  namespace: airflow-dev
spec:
  type: ExternalName
  externalName: dask-dev-scheduler.dask-dev.svc.cluster.local

因此,所有需要连接到< code>dask-dev-scheduler的< code>airflow-dev资源都会调用:< code>dask-dev-svc:8786

apiVersion: v1
metadata:
  name: dask-dev-scheduler
  namespace: dask-dev
spec:
  ports:
    - name: dask-dev-scheduler
      protocol: TCP
      port: 8786
      targetPort: 8786
# ...
  selector:
    app: dask-dev
 类似资料:
  • 问题内容: 在Python中,命名空间包可让您在多个项目中传播Python代码。当您要将相关的库作为单独的下载发布时,这很有用。例如,目录和中, 最终用户可以和。 定义名称空间包的最佳方法是什么,以便多个Python产品可以在该名称空间中定义模块? 问题答案: TL; DR: 在Python 3.3上,您无需执行任何操作,只需将任何内容都不放在名称空间包目录中即可使用。在3.3之前的版本中,请选择

  • 我在一个多租户节点应用程序中工作,我知道要在Kubernetes中创建一个新的命名空间,可以运行一个kubectl命令,如下所示:

  • Azure Service Bus有两种身份验证机制: SAS:共享访问签名 根据这里的说法, 对于2014年8月之前创建的所有(服务总线)命名空间,都会创建一个附带的ACS命名空间。 现在是2014年8月之后,所以当您通过Azure管理门户创建服务总线名称空间时,不会创建附带的ACS名称空间。 上面的同一链接还指示使用以下Azure PowerShell cmd let: 但事实证明,useAc

  • 我有一个关于ES6导入模块的问题。 我试图在我的Three.js代码中添加OrbitControl。由于OrbitControls是一个单独的模块,我需要在我的代码中分别导入它们,如下所示。它工作得很好。 然而 我首先想到的是 原因是, 据我所知,如果模块将某些内容导出为导出默认值, 我可以通过在“导入”代码中添加花括号来访问它们。 但是,它没有起作用,因此我假设“三个orbitcontrols”

  • 问题内容: 为了交互式测试我的python脚本,我想创建一个对象,类似于所返回的对象。显而易见的方式 可能会导致傻子错误导致Python repl退出(如上所述)。 那么, 用给定的属性集创建Python名称空间的最简单方法是什么? 例如,我可以即时创建一个(),但不能将其用作: 问题答案: 您可以创建一个简单的类: 在属性方面,它的工作方式与类完全相同: 或者,只需 导入类 ;可从模块中获得: