Kubernetes 为守护程序集创建服务
我正在尝试通过服务访问端口18081上侦听的守护程序,但迄今为止未成功 由守护程序启动的pod工作正常。我可以将端口转发到pod和端口18081,并在端口上与暴露的API通信 守护程序集的服务配置如下:Kubernetes 为守护程序集创建服务,kubernetes,Kubernetes,我正在尝试通过服务访问端口18081上侦听的守护程序,但迄今为止未成功 由守护程序启动的pod工作正常。我可以将端口转发到pod和端口18081,并在端口上与暴露的API通信 守护程序集的服务配置如下: kind: Service apiVersion: v1 metadata: name: monerod-service spec: selector: name: monerod ports: - protocol: TCP port: 18081 在Kube
kind: Service
apiVersion: v1
metadata:
name: monerod-service
spec:
selector:
name: monerod
ports:
- protocol: TCP
port: 18081
在Kubernetes UI(kubectl代理)中,服务中选择了正确的Pod,因此Pod选择器似乎很好
我可以在需要连接monerod服务的pod上执行ping,并显示正确的IP。但是通过curl连接到端口失败(相同的curl在端口转发测试中工作)
我在配置中缺少了什么。守护程序集/部署服务创建之间是否存在差异
更多地和库伯内特斯玩 我玩了服务和守护程序。我将守护程序转换为“正常” 部署,但显示了相同的行为。因此,该行为与守护程序无关。我不了解服务/播客的其他内容 我现在使用以下工具创建了该服务:
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": {}
}
}
在应该与monerod服务对话的pod中,这会导致
port 18081: Connection refused
在monerod deployment docker容器中,容器是暴露的(使用EXPOSE 18081)
部署具有以下端口定义:
"ports": [
{
"containerPort": 18081,
"protocol": "TCP"
}
],
使用kubectl进行端口转发到部署,并在本地执行curl,效果非常好。
我不明白为什么无法建立从pod到monerod部署的连接。您需要在服务定义中指定targetPort。targetPort是pod暴露的端口。您可以在服务中定义不同的端口 像这样:
kind: Service
apiVersion: v1
metadata:
name: monerod-service
spec:
selector:
name: monerod
ports:
- protocol: TCP
port: 9091
targetPort: 18081
从集群外部看不到该端口,您可以使用节点端口类型或入口。可能与Azure上Kubernetes 1.8上的kube proxy中的此错误有关:
我们发现这是错误的,在库伯内特斯什么都不是 出于安全原因,monerod守护程序默认情况下只允许从localhost进行连接。启用外部连接“--confirm external bind”使其正常工作
从巴尔塔扎尔到的链接非常有帮助,它发现了库伯内特斯正在发生的事情,并一个接一个地消除了所有的原因 服务定义现在看起来像您的建议(这次我使用kubeclt expose再次创建了服务,请参见原始问题中的编辑)。这将公开服务。希望该服务仅在群集中可用。仍然存在的主要问题是:为什么我不能向公开的服务请求一个curl呢?我将做一个粗略的猜测,我也在学习kubernetes。是否执行curl的pod位于不同的名称空间中?顺便说一句,您可能需要检查kubernetes关于调试服务的文档。
kind: Service
apiVersion: v1
metadata:
name: monerod-service
spec:
selector:
name: monerod
ports:
- protocol: TCP
port: 9091
targetPort: 18081