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": "******"
}
]
}
}
}
谁能指出我正确的方向。
答案 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。
这是一种什么样的服务?