访问外部服务

时间:2016-03-15 00:38:29

标签: 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
            }
        ]
    }
}

然后创建了我的端点:

{
    "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

有人有任何建议吗?

3 个答案:

答案 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
      }
    ]
    ...
}