为DaemonSet创建服务

时间:2018-01-06 12:08:23

标签: kubernetes

我试图通过服务到达端口18081上的DaemonSet,但到目前为止还不成功。

由DaemonSet启动的pod正常工作。我可以移植到pod和端口18081并与端口上公开的API通信。

DaemonSet的服务配置如下:

kind: Service
apiVersion: v1
metadata:
  name: monerod-service
spec:
  selector:
    name: monerod
  ports:
  - protocol: TCP
    port: 18081

在Kubernetes UI(kubectl代理)中,在服务中选择了正确的Pod,因此pod选择器似乎没问题。

我可以在需要连接到monerod-service的pod上执行ping操作,并显示正确的IP。但是通过curl连接端口失败(端口转发测试中的卷曲相同)。

我在配置中缺少什么。 DaemonSet / Deployment服务创建之间有区别吗?

更多玩Kubernetes

我玩弄了服务和DaemonSet。我将DaemonSet转换为" normal" 部署,但显示相同的行为。所以这种行为与DaemonSets无关。它必须是我不理解的服务/ pod的其他东西。

我现在用以下方法创建了服务:

kubectl expose deployment monerod-deployment --type=ClusterIP

,这会产生以下服务:

{
  "kind": "Service",
  "apiVersion": "v1",
  "metadata": {
    "name": "monerod-deployment",
    "namespace": "default",
    "labels": {
      "app": "monerod"
    }
  },
  "spec": {
    "ports": [
      {
        "protocol": "TCP",
        "port": 18081,
        "targetPort": 18081
      }
    ],
    "selector": {
      "app": "monerod"
    },
    "clusterIP": "<some-ip>",
    "type": "ClusterIP",
    "sessionAffinity": "None"
  },
  "status": {
    "loadBalancer": {}
  }
}

看起来很不错。这应该只为集群中的其他服务公开端口18081。

如果我现在执行

curl -X POST http://monerod-deployment:18081/json_rpc ...
在应该与monerod服务通信的pod中的

导致

port 18081: Connection refused

在monerod-deployment docker容器中暴露容器(使用EXPOSE 18081) 并且部署具有以下端口定义:

"ports": [
  {
    "containerPort": 18081,
    "protocol": "TCP"
  }
],

使用kubectl对部署进行端口转发并在本地执行curl非常正常。 我不明白,为什么无法建立从pod到monerod-deployment的连接。

3 个答案:

答案 0 :(得分:0)

您需要在服务定义中指定targetPort。 targetPort是您的pod公开的端口。您可以在服务中定义不同的端口。

像这样:

kind: Service
apiVersion: v1
metadata:
  name: monerod-service
spec:
  selector:
    name: monerod
  ports:
  - protocol: TCP
    port: 9091
    targetPort: 18081

从群集外部看不到端口,您可以使用nodePort类型或入口。

答案 1 :(得分:0)

可能在Azure上的Kubernetes 1.8上的kube-proxy中出现此错误: kube-proxy fails - native loadbalancing fails

答案 2 :(得分:0)

发现错了,Kubernetes没什么。

出于安全原因,默认情况下,monerod守护程序仅允许来自localhost的连接。启用外部连接'--confirm-external-bind'使其正常工作。

来自Baltazar的https://kubernetes.io/docs/tasks/debug-application-cluster/debug-service/#running-commands-in-a-pod的链接非常有帮助,发现正在进行并逐一消除Kubernetes中的所有原因!