GCE Ingress资源和ClusterIP服务

时间:2017-01-10 14:17:10

标签: kubernetes google-compute-engine

我有简单的虚拟主机入口:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-access
spec:
  rules:
  - host: service1.domain.com
    http: 
      paths:
      - backend:     
          serviceName: service1
          servicePort: 80
  - host: service2.domain.com
    http:
      paths:
      - backend:
          serviceName: service2
          servicePort: 80

服务service1和servcie2的定义如下:

apiVersion: v1
kind: Service
metadata:
  name: service1
  labels:
    chart: "chart"
spec:
  type: ClusterIP # LoadBalancer
  ports:
  - port: 80
    targetPort: 80
    protocol: TCP
    name: web
  selector:
    app: service1

如果我使用类型为ClusterIP的服务部署它们无法正常工作,则入口会响应错误:

Error: Server Error
The server encountered a temporary error and could not complete your request.
Please try again in 30 seconds.

然后我将其中一个服务的类型更改为LoadBalancer,它获取外部IP并且我可以使用此外部IP访问它,并且我也可以通过入口访问它(使用主机名service1.domain.com

如果我尝试访问service2(service2.domain.com - 仍然具有类型ClusterIP),则入口响应:

default backend - 404

如果我将servcice2类型更改为LoadBalancer,则它开始通过入口工作。

我认为入口应该与ClusterIP服务一起使用,因为LoadBalancer服务类型分配外部IP,根本不需要,如果我正确地获取它,默认情况下gcloud ingress资源应该使用自己的负载均衡器。

那么设置有什么问题?

1 个答案:

答案 0 :(得分:2)

https://github.com/kubernetes/ingress/blob/master/docs/faq/gce.md#i-created-an-ingress-and-nothing-happens-now-what

似乎正确的答案是Ingress需要使用NodePort,因此服务应该具有NodePort类型的情况。