我试图通过服务到达端口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
在Kubernetes UI(kubectl代理)中,在服务中选择了正确的Pod,因此pod选择器似乎没问题。
我可以在需要连接到monerod-service的pod上执行ping操作,并显示正确的IP。但是通过curl连接端口失败(端口转发测试中的卷曲相同)。
我在配置中缺少什么。 DaemonSet / Deployment服务创建之间有区别吗?
更多玩Kubernetes
我玩弄了服务和DaemonSet。我将DaemonSet转换为" normal" 部署,但显示相同的行为。所以这种行为与DaemonSets无关。它必须是我不理解的服务/ pod的其他东西。
我现在用以下方法创建了服务:
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服务通信的pod中的导致
port 18081: Connection refused
在monerod-deployment docker容器中暴露容器(使用EXPOSE 18081) 并且部署具有以下端口定义:
"ports": [
{
"containerPort": 18081,
"protocol": "TCP"
}
],
使用kubectl对部署进行端口转发并在本地执行curl非常正常。 我不明白,为什么无法建立从pod到monerod-deployment的连接。
答案 0 :(得分:0)
您需要在服务定义中指定targetPort。 targetPort是您的pod公开的端口。您可以在服务中定义不同的端口。
像这样:
kind: Service
apiVersion: v1
metadata:
name: monerod-service
spec:
selector:
name: monerod
ports:
- protocol: TCP
port: 9091
targetPort: 18081
从群集外部看不到端口,您可以使用nodePort类型或入口。
答案 1 :(得分:0)
可能在Azure上的Kubernetes 1.8上的kube-proxy中出现此错误: kube-proxy fails - native loadbalancing fails
答案 2 :(得分:0)
发现错了,Kubernetes没什么。
出于安全原因,默认情况下,monerod守护程序仅允许来自localhost的连接。启用外部连接'--confirm-external-bind'使其正常工作。
来自Baltazar的https://kubernetes.io/docs/tasks/debug-application-cluster/debug-service/#running-commands-in-a-pod的链接非常有帮助,发现正在进行并逐一消除Kubernetes中的所有原因!