Kubernetes 获取外部服务
我在Kubernetes集群之外有一个节点运行一个web服务,我需要从Pod内部访问该服务。文档中提到在此处使用不带选择器的服务: 因此,我创建了这样一个服务:Kubernetes 获取外部服务,kubernetes,Kubernetes,我在Kubernetes集群之外有一个节点运行一个web服务,我需要从Pod内部访问该服务。文档中提到在此处使用不带选择器的服务: 因此,我创建了这样一个服务: { "kind": "Service", "apiVersion": "v1", "metadata": { "name": "my-service" }, "spec": { "ports": [ { "p
{
"kind": "Service",
"apiVersion": "v1",
"metadata": {
"name": "my-service"
},
"spec": {
"ports": [
{
"protocol": "TCP",
"port": 8082,
"targetPort": 8082
}
]
}
}
curl http://my-service/api/foo
然后创建了我的端点:
{
"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"
遥控进入吊舱执行以下操作:
kubectl exec ta-p -c ta-c -i --tty -- /bin/bash
然后,每当我kubectl exec
进入pod中的容器并尝试ping或卷曲我的服务时,就像这样:
{
"kind": "Service",
"apiVersion": "v1",
"metadata": {
"name": "my-service"
},
"spec": {
"ports": [
{
"protocol": "TCP",
"port": 8082,
"targetPort": 8082
}
]
}
}
curl http://my-service/api/foo
它超时了。我已经验证了DNS的设置和工作是否正确。但是,我甚至尝试使用直接绑定到服务的IP地址:
curl http://10.0.124.106:8082/api/foo
有人有什么建议吗?不知道发生了什么事。看来我的Kube集群一定处于一种尴尬的状态。我重新启动了集群,它现在正在工作…注意:现在解决这个问题的更好方法是在服务上使用
externalName
。这将向内部Kubernetes DNS添加CNAME
记录:
此功能是Kubernetes 1.4附带的。请确保服务和端点的端口名称相同
{
...
"ports": [
{
"name": "my-service",
"port": 8082
}
]
...
}
您仍然需要指定带有服务的端口。我想
curlhttp://my-service/api/foo
默认情况下将尝试使用端口80,但您已打开8082是的,我尝试了,但仍然没有成功。我知道我的所有Kube节点都可以到达外部服务节点,因为我可以从这些节点中的任何一个进行卷曲,并很好地到达外部服务节点。然而,蜷缩在豆荚的一侧只是超时。如果有必要的话,我正在使用1.2 alpha-6版。