访问外部服务

tbs*_*tbs 6 kubernetes

我在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
            }
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

然后创建我的端点:

{
    "kind": "Endpoints",
    "apiVersion": "v1",
    "metadata": {
        "name": "my-service"
    },
    "subsets": [
        {
            "addresses": [
                { "ip": "128.115.198.7" }
            ],
            "ports": [
                { "port": 8082 }
            ]
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

测试应用:

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"
Run Code Online (Sandbox Code Playgroud)

远程进入Pod做:

kubectl exec ta-p -c ta-c -i --tty -- /bin/bash
Run Code Online (Sandbox Code Playgroud)

然后每当我kubectl exec进入我的pod中的容器并尝试ping或卷曲我的服务时如下:

curl http://my-service/api/foo
Run Code Online (Sandbox Code Playgroud)

它超时了.我已验证DNS已设置并正常运行.但是,我甚至尝试使用直接绑定到服务的IP地址:

curl http://10.0.124.106:8082/api/foo
Run Code Online (Sandbox Code Playgroud)

有人有什么建议吗?

Fre*_*ric 5

注意:现在解决这个问题的更好方法是externalName在服务上使用。这将向CNAME内部 Kubernetes DNS添加一条记录:https : //github.com/kubernetes/community/blob/master/contributors/design-proposals/network/service-external-name.md

此功能随 Kubernetes 1.4 一起提供。


tbs*_*tbs 0

不知道发生了什么事。看来我的 Kube 集群一定处于一种尴尬的状态。我重新启动了集群,它现在可以工作了......