从服务

时间:2019-03-22 16:18:47

标签: kubernetes kubectl

Kubernetes的新功能。

我在Kubernetes实例上部署了一个私有dockerhub映像。当我执行到Pod中时,我可以运行以下命令,以便知道我的Docker映像正在运行:

root@private-reg:/# curl 127.0.0.1:8085
Hello world!root@private-reg:/# 

从仪表板中,我可以看到我的服务具有一个外部端点,该端点以端口8085结尾。当我尝试加载该端点时,我得到了404。我的服务YAML如下:

{
  "kind": "Service",
  "apiVersion": "v1",
  "metadata": {
    "name": "test",
    "namespace": "default",
    "selfLink": "/api/v1/namespaces/default/services/test",
    "uid": "a1a2ae23-339b-11e9-a3db-ae0f8069b739",
    "resourceVersion": "3297377",
    "creationTimestamp": "2019-02-18T16:38:33Z",
    "labels": {
      "k8s-app": "test"
    }
  },
  "spec": {
    "ports": [
      {
        "name": "tcp-8085-8085-7vzsb",
        "protocol": "TCP",
        "port": 8085,
        "targetPort": 8085,
        "nodePort": 31859
      }
    ],
    "selector": {
      "k8s-app": "test"
    },
    "clusterIP": "******",
    "type": "LoadBalancer",
    "sessionAffinity": "None",
    "externalTrafficPolicy": "Cluster"
  },
  "status": {
    "loadBalancer": {
      "ingress": [
        {
          "ip": "******"
        }
      ]
    }
  }
}

谁能指出我正确的方向。

3 个答案:

答案 0 :(得分:1)

以下命令的输出是什么

卷曲cluzterIP:8085

如果您收到Hello world消息,则表示该服务将流量正确路由到后端Pod。

卷曲HostIP:NODEPORT也应该正常工作

该服务很可能未绑定到后端Pod。您是否在广告连播中定义了以下标签?

labels: {
      "k8s-app": "test"
    }

答案 1 :(得分:1)

您没有提到要使用哪种类型的负载均衡器或云提供商,但是如果您正确配置了负载均衡器,那么您应该可以在kube-controller-manager日志中看到它,那么您应该可以访问您的您在这里看到的服务:

"status": {
  "loadBalancer": {
    "ingress": [
      {
      "ip": "******"
      }
    ]
  }

然后您可以通过运行以下命令进行检查:

$ curl <ip>:<whatever external port your lb is fronting>

如果按照其他答案中的说明可行,则可能没有提供此功能:

$ curl <clusterIP for svc>:8085

$ curl <NodeIP>:31859 # NodePort

答案 2 :(得分:0)

检查kuberntes上的服务,有几种类型:

https://kubernetes.io/docs/concepts/services-networking/service/

ClusterIP:仅在群集内部创建对服务的访问。

NodePort:通过节点上的给定端口访问服务。

LoadBalancer:可通过LB在外部访问的服务。

我假设您正在使用GKE。

这是一种什么样的服务?