我的入口定义为:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: foo-ingress
annotations:
kubernetes.io/ingress.global-static-ip-name: zaz-address
kubernetes.io/ingress.allow-http: "false"
ingress.gcp.kubernetes.io/pre-shared-cert: foo-bar-com
spec:
rules:
- host: foo.bar.com
http:
paths:
- path: /zaz/*
backend:
serviceName: zaz-service
servicePort: 8080
然后,服务zap-service
是一个nodeport
,定义为:
apiVersion: v1
kind: Service
metadata:
name: zaz-service
namespace: default
spec:
clusterIP: 10.27.255.88
externalTrafficPolicy: Cluster
ports:
- nodePort: 32455
port: 8080
protocol: TCP
targetPort: 8080
selector:
app: zap
sessionAffinity: None
type: NodePort
nodeport
已成功选择服务于其后面的两个吊舱。我在GKE
服务列表中看到nodeport
具有一个内部IP。
当我在同一界面中检查ingress
时,它看起来也不错,但提供零豆荚。
另一方面,当我描述ingress
时,我会看到:
Rules:
Host Path Backends
---- ---- --------
foo.bar.com
/zaz/* zaz-service:8080 (<none>)
看起来ingress
无法解析服务IP
。我在这里做错了什么?我无法通过外部域名访问服务,出现错误404
。
如何使入口将域名zaz-service
转换为正确的IP
,以便它可以将流量重定向到那里?
答案 0 :(得分:1)
似乎路径中的通配符为not supported yet。 有什么理由不只在您的情况下使用以下内容?
spec:
rules:
- host: foo.bar.com
http:
paths:
- path: /zaz
backend:
serviceName: zaz-service
servicePort: 8080
答案 1 :(得分:1)
我的错误是,按预期方式,没有完全阅读文档。
在Ingress
路径中声明的端口不是一种“转发”机制,而是一种“过滤”机制。在我看来,将http(s)
流量重定向到端口8080
是有道理的,该端口是后面的Service
监听的端口,后面是Pod
也是服务。
现实情况是,它不会将非端口8080
的流量路由到该服务。为了使它更整洁,我将Ingress
中的端口从8080
更改为80
,并将Service
中的端口从8080
更改为{{1 }}。
现在,所有来自Internet的请求都可以成功到达服务器。