公开DaemonSet服务以供同一节点上的pod使用

时间:2018-05-07 14:39:07

标签: kubernetes

我正在尝试在我的Kubernetes集群中安装服务网格,为此我想完成以下任务:

  • 服务网格窗格作为守护程序集运行,每个节点上都有一个副本。
  • 无法从群集外部直接访问服务网格。
  • 应用程序窗格使用同一节点上的服务网格窗格作为所有请求的http代理。

为了做到这一点,我将以下配置添加到应用程序部署的容器规范中:

# deployment.spec.template.spec.containers[0]
  env:
  - name: NODE_NAME
    valueFrom:
      fieldRef:
        fieldPath: spec.nodeName
  - name: HTTP_PROXY
    value: http://$(NODE_NAME):4140

但是,我没有正确公开服务网格;我已尝试使用type: ClusterIPtype: LoadBalancer两种服务,但前者无法连接,后者我公开公开服务网格,我不想这样做。我也尝试过使用NodePort的东西,但我甚至还没有找到有效的配置(似乎有一些意见NodePort should be avoided if possible ...)

我应该如何在端口4140-4142和9990上公开服务网格,以某种方式在特定节点(当前节点)上可以从其他网格中获取?

1 个答案:

答案 0 :(得分:0)

您可以将您的广告连播放入主机网络空间。这样您就不需要任何服务,您可以在每个节点上PodSpec声明的端口上访问您的Pod。

您可以通过将服务绑定到127.0.0.1而不是0.0.0.0

来避免外部可访问性

如果您想尝试一下,可以通过将以下内容添加到DaemonSet的PodSpec中来在主机网络空间中运行端口:

hostNetwork: true

请注意,使用此解决方案,您需要使用主机的IP地址才能连接到您的广告连播。

要在hostNetworked pod中获取内部DNS名称解析,您还需要设置DNS策略,如下所示:

dnsPolicy: ClusterFirstWithHostNet

这将确保您的pod将使用内部DNS服务器进行名称解析。