为 DaemonSet 创建服务

thu*_*der 6 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
Run Code Online (Sandbox Code Playgroud)

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

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

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


更多地使用 Kubernetes

我玩弄了服务和 DaemonSet。我将 DaemonSet 转换为“正常”部署,但显示了相同的行为。因此该行为与 DaemonSets 无关。它必须是我不理解的服务/豆荚的其他东西。

我现在创建了服务:

kubectl expose deployment monerod-deployment --type=ClusterIP
Run Code Online (Sandbox Code Playgroud)

这导致以下服务:

{
  "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": {}
  }
}
Run Code Online (Sandbox Code Playgroud)

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

如果我现在执行

curl -X POST http://monerod-deployment:18081/json_rpc ...
Run Code Online (Sandbox Code Playgroud)

在应该与 monerod 服务对话的 pod 中,这会导致

port 18081: Connection refused
Run Code Online (Sandbox Code Playgroud)

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

"ports": [
  {
    "containerPort": 18081,
    "protocol": "TCP"
  }
],
Run Code Online (Sandbox Code Playgroud)

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

Bal*_*hua 0

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

像这样:

kind: Service
apiVersion: v1
metadata:
  name: monerod-service
spec:
  selector:
    name: monerod
  ports:
  - protocol: TCP
    port: 9091
    targetPort: 18081
Run Code Online (Sandbox Code Playgroud)

该端口在集群外部不易可见,您可以使用 nodePort 类型或 ingress。