我正试图通过一个服务访问一个监听端口18081的DaemonSet,但到目前为止还没有成功。
由DaemonSet启动的吊舱工作正常。我可以将端口转发到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,因此吊舱选择器看起来很好。
我可以在需要连接到monerod服务的荚上执行ping,并显示正确的IP。但是通过curl连接到端口失败(同样的curl工作在端口转发测试中)。
我在配置中遗漏了什么。DaemonSet/Deployment创建之间有什么不同吗?
更多地和库伯内特斯玩
我到处玩这个服务和DaemonSet。我将DaemonSet转换为“正常”部署,但也显示了相同的行为。因此,这种行为与DaemonSets无关。它必须是其他的服务/吊舱,我不明白。
我现在用以下方式创建了该服务:
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服务对话的吊舱中,这将导致
port 18081: Connection refused在monerod-deployment容器中,容器被公开(使用暴露18081),并且部署具有以下端口定义:
"ports": [
{
"containerPort": 18081,
"protocol": "TCP"
}
],使用kubectl对部署进行端口转发并在本地执行curl非常好。我不明白,为什么不能建立从吊舱到单体部署的连接。
发布于 2018-01-14 08:26:58
如果发现是错的,在库伯奈特就什么都不是。
出于安全考虑,monerod守护进程默认只允许来自本地主机的连接。启用外部连接-确认-外部绑定-使其工作。
从巴尔塔扎尔到https://kubernetes.io/docs/tasks/debug-application-cluster/debug-service/#running-commands-in-a-pod的链接是非常有帮助的,找出是正在进行中,并消除了所有的原因在库伯奈特一个一个!
发布于 2018-01-07 02:10:17
您需要在服务定义中指定targetPort。targetPort是您的荚公开的端口。您可以在服务中定义不同的端口。
如下所示:
kind: Service
apiVersion: v1
metadata:
name: monerod-service
spec:
selector:
name: monerod
ports:
- protocol: TCP
port: 9091
targetPort: 18081从集群外部无法很容易地看到端口,可以使用nodePort类型或入口。
发布于 2018-01-09 05:38:45
可能与kube在Azure上的Kubernetes 1.8中的错误有关:kube-proxy fails - native loadbalancing fails
https://stackoverflow.com/questions/48127188
复制相似问题