我正在尝试通过服务访问侦听端口 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 的连接。
您需要在服务定义中指定 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。
归档时间: |
|
查看次数: |
8237 次 |
最近记录: |