google-cloud-platform - 入口控制器不显示外部 IP
问题描述
我一直在尝试在 Google Kubernetes 引擎上创建一个 Kubernetes 集群。我的 pod 已成功运行,但问题出在入口控制器上。入口控制器未显示访问应用程序的外部 IP。
nginx 入口控制器的 YAML 文件如下所示:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: http-ingress
labels:
app: ingress
annotations:
kubernetes.io/ingress.class: addon-http-application-routing
nginx.ingress.kubernetes.io/ssl-redirect: "false"
nginx.ingress.kubernetes.io/rewrite-target: /
nginx.ingress.kubernetes.io/proxy-send-timeout: "3600"
nginx.ingress.kubernetes.io/proxy-read-timeout: "3600"
spec:
rules:
- http:
paths:
- path: /
backend:
serviceName: nodeapp1svc
servicePort: 80
- path: /app1
backend:
serviceName: nodeapp2svc
servicePort: 80
- path: /app2
backend:
serviceName: nodeapp2svc
servicePort: 80
接下来我能做什么?
解决方案
看起来问题与您的有关annotations
,特别是与此有关:
kubernetes.io/ingress.class: addon-http-application-routing
ingress.class
您尝试使用的是特定于Azure AKS的东西,因此绝对不能在GKE Cluster上使用它。
请注意,kubernetes.io/ingress.class
如果您希望使用默认的GKE Ingress 控制器- ingress-gce,则可以完全省略注释。
我在我的 GKE 集群上测试了它,没有上面提到的注释它工作得很好。
至于您的具体设置,我注意到另一个问题,即您nodeapp[1-3]svc
Services
属于一种类型ClusterIP
,它们必须是NodePort
or LoadBalancer
。
如果你运行:
kubectl describe ingress http-ingress
并查看该events
部分,您可能会遇到如下错误消息:
loadbalancer-controller error while evaluating the ingress spec: service "default/nodeapp1svc" is type "ClusterIP", expected "NodePort" or "LoadBalancer"
概括:
- 使用正确的,
ingress.class
即完全省略此注释,将使用默认入口控制器。 - 确保您的后端通过
NodePort
而不是ClusterIP
.
推荐阅读
- android - 创建一个带参数的 ViewModel
- java - 线程“main”中的异常 java.lang.NoClassDefFoundError: io/netty/resolver/AddressResolverGroup
- amazon-web-services - 云形成条件
- php - PHP:制作一个显示 cookie 的表格并允许用户选择和删除 cookie
- google-app-engine - 您能否在 Google 控制台中为已部署的 App 引擎应用程序编辑/修改源代码或 yaml 文件
- scala - 在两个向量中查找公共字符串
- pandas - Matplot 和 Pandas 数据透视表基于多个索引定义颜色
- python - 如何使用 python Selenium 关闭动态弹出窗口
- amazon-web-services - AWS CLI 返回 [WinError 2] 系统找不到指定的文件
- python - 时间序列分析,时间归零