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

SRN*_*SRN 3 kubernetes kubernetes-pod

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

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

在此输入图像描述

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

kubectl port-forward --namespace dask-dev svc/dask-dev-scheduler 5002:80

但是,我无法从airflow-dev命名空间中存在的pod(airflow-scheduler)访问服务(或dask-scheduler pod)。尝试使用以下命令访问它时出现“找不到主机或服务”错误

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

以下是我为 dask-dev-scheduler 创建的服务。您能否让我知道如何从 airflow-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
Run Code Online (Sandbox Code Playgroud)

Hig*_*ife 5

您可以使用服务externalName Type来使用本地服务来引用外部服务(不同命名空间中的服务) 。

ExternalName服务没有选择器,也没有任何定义的端口或端点,因此,您可以使用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
Run Code Online (Sandbox Code Playgroud)
apiVersion: v1
kind: Service
metadata:
  name: service-b-ref
  namespace: namespace-a
spec:
  type: ExternalName
  externalName: service-b.namespace-b.svc.cluster.local
Run Code Online (Sandbox Code Playgroud)

namespace-a连接到的任何流量都service-b-ref:<port>将被路由到service-b( namespace-b) service-b.namespace-b.svc.cluster.local,因此,对 的调用service-b-ref:3000将路由到我们的服务-b。


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

apiVersion: v1
kind: Service
metadata:
  name: dask-dev-svc
  namespace: airflow-dev
spec:
  type: ExternalName
  externalName: dask-dev-scheduler.dask-dev.svc.cluster.local
Run Code Online (Sandbox Code Playgroud)

因此,所有airflow-dev需要连接的资源dask-dev-scheduler都会调用: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
Run Code Online (Sandbox Code Playgroud)