Ingress Nginx Controller未能找到部署在谷歌云平台上的第二个服务



我在GCP上部署了以下2个服务(用Java构建(:

  • mply6(服务1,监听GCP外部的8080端口(,对应URL:http://example.com/path1

  • gami6(服务2,监听GCP外部的8081端口(,对应URL:http://example.com/path2

部署和公开服务1:的yaml

kind: Service
apiVersion: v1
metadata:
name: mply6
spec:
selector: 
app: mply6
ports:
- protocol: "TCP"
port:  80
targetPort:  8080
type: LoadBalancer
loadBalancerIP: "35.223.241.9"
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mply6
spec:
replicas: 1
selector: 
matchLabels:
app: mply6
template:
metadata:
labels:
app: mply6
spec:
containers:
- name: mply6
image: gcr.io/mply6-271000/mply6:latest
ports:
- containerPort: 8080

部署和公开服务的yaml 2:

kind: Service
apiVersion: v1
metadata:
name: gami6
spec:
selector: 
app: gmai6
ports:
- protocol: "TCP"
port:  81
targetPort:  8081
type: LoadBalancer
loadBalancerIP: "35.223.241.9"
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: gami6
spec:
replicas: 1
selector: 
matchLabels:
app: gami6
template:
metadata:
labels:
app: gami6
spec:
containers:
- name: gami6
image: gcr.io/mply6-271000/gami6:latest
ports:
- containerPort: 8081

并且,创建Ingress资源的yaml:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: basic-ingress
annotations:
kubernetes.io/ingress.global-static-ip-name: "35.223.241.9"
spec:
rules:
- http:
paths:
- path: /path1
backend:
serviceName: mply6
servicePort: 80
- path: /path2
backend:
serviceName: gami6
servicePort: 81

此外,"kubectl描述入口基本入口"的结果:

Name:             basic-ingress
Namespace:        default
Address:          35.244.199.199
Default backend:  default-http-backend:80 (10.60.1.4:8080)
Rules:
Host  Path  Backends
----  ----  --------
*
/multiplications/random   mply6:80 (10.60.0.32:8080)
/results                  mply6:80 (10.60.0.32:8080)
/leaders                  gami6:81 (10.60.0.32:8081)
/stats                    gami6:81 (10.60.0.32:8081)
Annotations:
kubernetes.io/ingress.global-static-ip-name:  35.223.241.9
Events:
Type     Reason     Age                   From                      Message
----     ------     ----                  ----                      -------
Normal   CREATE     35m                   nginx-ingress-controller  Ingress default/basic-ingress
Warning  Translate  21m                   loadbalancer-controller   error while evaluating the ingress spec: could not find service "default/gami6"; could not find service"
default/gami6"
Warning  Translate  6m17s (x34 over 77m)  loadbalancer-controller   error while evaluating the ingress spec: could not find port "8081" in service "default/gami6"; could no
t find port "8081" in service "default/gami6"
Normal   CREATE     44s (x1153 over 22h)  loadbalancer-controller   ip: 35.244.199.199
Normal   UPDATE     7s (x13 over 35m)     nginx-ingress-controller  Ingress default/basic-ingress

基本上,我希望当我给出URL时http://example.com/path2',Ingress Nginx控制器会找到第二个服务"gami6",但为什么会出现上面的错误消息:找不到服务"default/gami6"?(http://example.com/path1可以在没有问题的情况下找到(

首先,我注意到第二个服务yaml:的拼写错误

规格:选择器:应用程序:gmai6<--这应该是gami6吗?

要在多个后端使用Google的Ingress,您可能需要使用"NodePort"而不是"LoadBalancer"来公开服务。您可以在本文档中找到相关信息:https://cloud.google.com/kubernetes-engine/docs/concepts/ingress#multiple_backend_services

如果你想使用nginxingress控制器,你应该遵循以下指南:https://cloud.google.com/community/tutorials/nginx-ingress-gke

我无法对您上面的部署添加任何备注。然而,此部署与http平衡器文档非常相似

我尝试了文档中提到的部署,并且能够实现您想要做的事情。使用负载均衡器根据路径路由请求。

最新更新