我有简单的虚拟主机入口:
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资源应该使用自己的负载均衡器。
那么设置有什么问题?
答案 0 :(得分:2)
似乎正确的答案是Ingress需要使用NodePort,因此服务应该具有NodePort
类型的情况。