kubernetes - 无法设置 kubernetes ingress-nginx
问题描述
为了在外部公开我的应用程序,我在设置 kubernetes ingress-nginx 时遇到了麻烦。以下是我执行的步骤:
应用部署:
- 创建名为 ingress 的命名空间
- 在入口命名空间中部署了描述我的应用程序(我们称之为 testapp)的 statefulset 集资源
- 创建了 ClusterIP 服务,使我的应用程序在入口命名空间的 kube 集群 (testapp) 中可用
入口 nginx 设置:
- 在命名空间 ingress 中创建了 ingress-nginx 控制器
- 在命名空间 ingress 中创建了 ingress-nginx 服务
ingress-nginx NodePort 10.102.152.58 <none> 80:30692/TCP,443:32297/TCP 6d2h
- 在入口命名空间中创建入口资源类型,如下所示
apiVersion: extensions/v1beta1 kind: Ingress metadata: annotations: kubernetes.io/ingress.class: nginx nginx.ingress.kubernetes.io/rewrite-target: / name: testappingress spec: rules: - host: testapp.k8s.myorg.io http: paths: - backend: serviceName: testapp servicePort: 80 path: /
如果我确实描述了入口资源,我会得到:
ubuntu@ip-10-0-20-81:~/ingress$ kubectl describe ingress testappingress -n ingress
Name: testappingress
Namespace: ingress
Address:
Default backend: default-http-backend:80 (<none>)
Rules:
Host Path Backends
---- ---- --------
testapp.k8s.myorg.io
/ testapp:80 (<none>)
Annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal CREATE 15m nginx-ingress-controller Ingress ingress/testappingress
Normal CREATE 15m nginx-ingress-controller Ingress ingress/testappingress
Normal UPDATE 14m nginx-ingress-controller Ingress ingress/testappingress
Normal UPDATE 14m nginx-ingress-controller Ingress ingress/testappingress
如果我从 ingress-nginx 控制器检查日志,我会得到以下信息:
I0317 15:06:00.029706 6 event.go:221] Event(v1.ObjectReference{Kind:"Ingress", Namespace:"ingress", Name:"testappingress", UID:"2c8db73f-48c6-11e9-ae46-12bdb9ac3010", APIVersion:"extensions/v1beta1", ResourceVersion:"1185441", FieldPath:""}): type: 'Normal' reason: 'CREATE' Ingress ingress/testappingress
I0317 15:06:00.039419 6 controller.go:177] Configuration changes detected, backend reload required.
I0317 15:06:00.508433 6 controller.go:195] Backend successfully reloaded.
I0317 15:06:00.568448 6 controller.go:212] Dynamic reconfiguration succeeded.
Route53/ELB 经典设置:
- 创建了指向 kubernetes 集群实例并公开端口 80 的 ELB 经典
- 在现有托管区域 (CNAME) 中创建了从上方指向 ELB 经典的 Route53 条目。
- 在 ELB 上设置运行状况检查以指向端口上的 ingress-nginx NodePort 服务:30692有效。
当我做:
curl http://testapp.k8s.myorg.io
我没有得到任何回应。
这是我试图解决问题的方法:
如果我做:
telnet testapp.k8s.myorg.io 80
它将解析为我的 ELB 经典 DNS 名称
如果我进入 ingress 命名空间中存在的任何容器/pod 并执行以下操作:
curl http://testapp
我会得到适当的回应。
由此我可以得出以下结论:
应用程序已正确部署并通过从 kubernetes 集群内部公开的服务(ClusterIP)可用
DNS 被正确解析到 ELB
ELB 上的 HealthCheck 有效
不确定我还能做些什么来解决我无法通过 Ingress 访问我的服务的问题?
解决方案
这是我的错误。缺少的部分如下:
在 ELB 上,我没有正确设置监听器。所以基本上,需要将 ELB 的 80/443 端口指向 Ingress 服务的 NodePorts。
ingress-nginx ingress-nginx NodePort 10.96.249.168 <none> 80:32327/TCP,443:30313/TCP 25h
推荐阅读
- .net - .NET 表单大小缩放问题
- javascript - Google Apps 脚本:使用 GetMonth 从电子表格获取的日期时获取 NaN
- spring-boot - Spring Boot stomp 多次发送 RECEIPT 帧
- php - 419 页面使用 laravel sanctum 过期
- firebase - Firestore 备份 exportDocuments() 费用
- unity3d - 如何使对象悬停在显示中心?
- python - 为什么 Excel 数据时间在 Python 中失真
- python - 使用带有 jinja 宏的 form.csrf_token 不会隐藏 csrf_token 字段
- kotlin - 在 Intellij 中的编辑器和 Kotlin REPL 之间共享代码
- python - 计算器跳到结束循环?