我的Kubernetes集群外部有一个运行Web服务的节点,我需要从Pod内部访问。该文档提到了在没有选择器的情况下使用服务: http://kubernetes.io/docs/user-guide/services/
所以我创建了这样的服务:
{
"kind": "Service",
"apiVersion": "v1",
"metadata": {
"name": "my-service"
},
"spec": {
"ports": [
{
"protocol": "TCP",
"port": 8082,
"targetPort": 8082
}
]
}
}
然后创建了我的端点:
{
"kind": "Endpoints",
"apiVersion": "v1",
"metadata": {
"name": "my-service"
},
"subsets": [
{
"addresses": [
{ "ip": "128.115.198.7" }
],
"ports": [
{ "port": 8082 }
]
}
]
}
测试应用程序:
apiVersion: v1
kind: Pod
metadata:
name: ta-p
spec:
restartPolicy: Never
containers:
- name: ta-c
image: "centos:7"
command: ["/bin/bash","-c", "sleep 100000"]
nodeSelector:
node: "kube-minion-1"
远程进入Pod做:
kubectl exec ta-p -c ta-c -i --tty -- /bin/bash
然后每当我kubectl exec
进入我的pod中的容器并尝试ping或卷曲我的服务时如下:
curl http://my-service/api/foo
它超时了。我已验证DNS已设置并正常运行。但是,我甚至尝试使用直接绑定到服务的IP地址:
curl http://10.0.124.106:8082/api/foo
有人有任何建议吗?
答案 0 :(得分:4)
注意:现在解决此问题的更好方法是在服务上使用externalName
。这将向内部Kubernetes DNS添加CNAME
记录:
https://github.com/kubernetes/community/blob/master/contributors/design-proposals/network/service-external-name.md
此功能随Kubernetes 1.4一起提供。
答案 1 :(得分:0)
不确定发生了什么。看来我的Kube集群一直处于尴尬状态。我重新启动了群集,它现在正在运行......
答案 2 :(得分:0)
确保服务和端点的端口名称相同。
{
...
"ports": [
{
"name": "my-service",
"port": 8082
}
]
...
}