无法设置 kubernetes ingress-nginx
Posted
技术标签:
【中文标题】无法设置 kubernetes ingress-nginx【英文标题】:Unable to setup kubernetes ingress-nginx 【发布时间】:2019-08-08 02:37:54 【问题描述】:我在设置 kubernetes ingress-nginx 以在外部公开我的应用程序时遇到问题。以下是我执行的步骤:
应用部署:
-
创建名为 ingress 的命名空间
在 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.ObjectReferenceKind:"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 访问我的服务的问题?
【问题讨论】:
您能否在 aws 控制台中检查您的 ec2 实例是否可用于 elb? 你能从节点卷曲你的应用吗? 【参考方案1】:这是我的一个错误。缺少的部分如下:
在 ELB 上,我没有正确设置监听器。所以基本上,需要将 ELB 的 80/443 端口指向 Ingress 服务的 NodePorts。
ingress-nginx ingress-nginx NodePort 10.96.249.168 <none> 80:32327/TCP,443:30313/TCP 25h
【讨论】:
【参考方案2】:尝试使用此设置 nginx 入口控制器
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/mandatory.yaml
这将创建命名空间名称为 ingress-nginx 的入口 nginx 控制器,您可以使用入口清单文件进行测试。
【讨论】:
以上是关于无法设置 kubernetes ingress-nginx的主要内容,如果未能解决你的问题,请参考以下文章
Kubernetes - 无法从服务的 pod 连接到服务 IP
大使pod在kubernetes中失败,因为kubernetes api服务器集群IP无法访问 - [Errno 113]主机无法访问',)