【发布时间】:2021-08-01 05:48:22
【问题描述】:
如上图,我希望 Ingress 将流量分配给位于同一集群中其他命名空间 me 的服务。 (Ingress 在main 命名空间中)但是Ingress 不允许直接指向dns,我做ExternalName Service 指向me-service dns me-service.me.svc.cluster.local 然后Ingress 指向它。
它的Yaml是
main.k8s.yaml
apiVersion: v1
kind: Namespace
metadata:
name: main
---
apiVersion: v1
kind: Service
metadata:
name: me-service
namespace: main
spec:
externalName: me-service.me.svc.cluster.local
type: ExternalName
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: gce
name: main-router
namespace: main
spec:
rules:
- host: some-domain.me
http:
paths:
- backend:
service:
name: me-service
port:
number: 80
path: /
pathType: ImplementationSpecific
me.k8s.yaml
apiVersion: v1
kind: Namespace
metadata:
labels:
stag: production
name: me
---
apiVersion: v1
kind: Service # <-- this is the service I want to point
metadata:
labels:
app: me
stag: production
name: me-service
namespace: me
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: me
stag: production
type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: me
stag: production
name: me-deployment
namespace: me
spec:
replicas: 2
selector:
matchLabels:
app: me
stag: production
template:
metadata:
labels:
app: me
stag: production
spec:
containers:
- image: gcr.io/me:latest
name: me
ports:
- containerPort: 80
resources:
limits:
cpu: 300m
memory: 512M
requests:
cpu: 250m
memory: 512M
我检查了 dns 地址是否有效,但未创建 Ingress 对象并显示错误消息
me-service:80 (<error: endpoints "me-service" not found>)
Type Reason Age From Message
---- ------ ---- ---- -------
Warning Translate 6m21s (x233 over 22h) loadbalancer-controller Translation failed: invalid ingress spec: could not find port "80" in service "main/me-service"
如何让 ingress 工作?如果您需要更多信息,请告诉我。 :祈祷:
GKE 引擎:1.20.6-gke.1000
HTTP 负载平衡:启用
网络政策:已停用
Dataplane V2:启用
【问题讨论】:
-
据我所知,您不能将 GKE ingress 与
ExternalName服务类型一起使用。两种支持的类型是LoadBalancer和NodePort。如果最近没有任何变化,即使使用简单的ClusterIP,您也不应该创建入口资源,只有上面提到的两种 svc 类型,所以我不相信ExternalName会起作用。好吧,您实际上可以使用ClusterIP,但前提是您使用 container native load balancing,这要求您的 GKE 集群是 VPC 原生的。 -
@mario 谢谢你的评论。那么你的意思是,只要我使用 GKE,对其他命名空间的负载平衡实际上是不可能的,对吧?
-
我不会这么说的。您仍然可以使用 GKE,但不必同时使用 GCE 入口作为入口控制器。但如果它不适用于提到的容器原生负载平衡,我会先尝试。您始终可以在 GKE 集群上部署不同的入口控制器,例如nginx 入口。它可以使用开箱即用的
ClusterIP服务,但我不确定它是否可以处理ExternalName,所以你必须尝试一下。 -
@mario 感谢您的评论。我使用 NGINX-ingress 成功地将流量分配到其他命名空间 svc。
标签: kubernetes google-cloud-platform google-kubernetes-engine