我在设置kubernetes ingress-nginx以便在外部公开我的应用程序时遇到麻烦。这是我执行的步骤:
应用程序部署:
入口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经典设置:
当我这样做时:
curl http://testapp.k8s.myorg.io
我没有任何回应。
这是我尝试解决此问题的方法:
如果我这样做:
telnet testapp.k8s.myorg.io 80
它将解析为我的ELB经典DNS名称
如果我进入入口命名空间中存在的任何容器/容器并执行以下操作:
curl http://testapp
我会得到适当的答复。
由此我可以得出以下结论:
应用程序已正确部署,并且可以通过从Kubernetes集群内部公开的(ClusterIP)服务使用。
DNS已正确解析到ELB
对ELB进行HealthCheck的工作
不知道该如何解决我无法通过Ingress访问我的服务的问题?
答案 0 :(得分:1)
这是我的错误。缺少的部分如下:
在ELB上,我没有正确设置侦听器。因此,基本上,需要的是将80/443端口从ELB指向Ingress Service的NodePorts。
ingress-nginx ingress-nginx NodePort 10.96.249.168 <none> 80:32327/TCP,443:30313/TCP 25h
答案 1 :(得分:0)
尝试使用此设置nginx入口控制器
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/mandatory.yaml
这将创建名称空间名称为ingress-nginx的入口nginx控制器,您可以使用入口清单文件进行测试。