首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为DaemonSet创建服务

为DaemonSet创建服务
EN

Stack Overflow用户
提问于 2018-01-06 12:08:22
回答 3查看 11.6K关注 0票数 6

我正试图通过一个服务访问一个监听端口18081的DaemonSet,但到目前为止还没有成功。

由DaemonSet启动的吊舱工作正常。我可以将端口转发到pod和端口18081,并在端口上与公开的API对话。

DaemonSet的服务配置如下:

代码语言:javascript
复制
kind: Service
apiVersion: v1
metadata:
  name: monerod-service
spec:
  selector:
    name: monerod
  ports:
  - protocol: TCP
    port: 18081

在Kubernetes UI (kubectl代理)中,服务中选择了正确的Pod,因此吊舱选择器看起来很好。

我可以在需要连接到monerod服务的荚上执行ping,并显示正确的IP。但是通过curl连接到端口失败(同样的curl工作在端口转发测试中)。

我在配置中遗漏了什么。DaemonSet/Deployment创建之间有什么不同吗?

更多地和库伯内特斯玩

我到处玩这个服务和DaemonSet。我将DaemonSet转换为“正常”部署,但也显示了相同的行为。因此,这种行为与DaemonSets无关。它必须是其他的服务/吊舱,我不明白。

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

代码语言:javascript
复制
kubectl expose deployment monerod-deployment --type=ClusterIP

这就产生了以下服务:

代码语言:javascript
复制
{
  "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。

如果我现在执行

代码语言:javascript
复制
curl -X POST http://monerod-deployment:18081/json_rpc ...

在应该与monerod服务对话的吊舱中,这将导致

代码语言:javascript
复制
port 18081: Connection refused

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

代码语言:javascript
复制
"ports": [
  {
    "containerPort": 18081,
    "protocol": "TCP"
  }
],

使用kubectl对部署进行端口转发并在本地执行curl非常好。我不明白,为什么不能建立从吊舱到单体部署的连接。

EN

回答 3

Stack Overflow用户

发布于 2018-01-14 08:26:58

如果发现是错的,在库伯奈特就什么都不是。

出于安全考虑,monerod守护进程默认只允许来自本地主机的连接。启用外部连接-确认-外部绑定-使其工作。

从巴尔塔扎尔到https://kubernetes.io/docs/tasks/debug-application-cluster/debug-service/#running-commands-in-a-pod的链接是非常有帮助的,找出是正在进行中,并消除了所有的原因在库伯奈特一个一个!

票数 2
EN

Stack Overflow用户

发布于 2018-01-07 02:10:17

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

如下所示:

代码语言:javascript
复制
kind: Service
apiVersion: v1
metadata:
  name: monerod-service
spec:
  selector:
    name: monerod
  ports:
  - protocol: TCP
    port: 9091
    targetPort: 18081

从集群外部无法很容易地看到端口,可以使用nodePort类型或入口。

票数 0
EN

Stack Overflow用户

发布于 2018-01-09 05:38:45

可能与kube在Azure上的Kubernetes 1.8中的错误有关:kube-proxy fails - native loadbalancing fails

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48127188

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档