无法设置kubernetes ingress-nginx

问题描述 投票:0回答:2

我在设置kubernetes ingress-nginx时遇到麻烦,以便在外部公开我的应用程序。以下是我所做的步骤:

应用部署:

  1. 创建名为ingress的命名空间
  2. 部署了statefulset set资源,用于描述我在入口命名空间中的应用程序(让我们称之为testapp)
  3. 创建了ClusterIP服务,使我的应用程序在入口命名空间中的kube集群(testapp)中可用

Ingress nginx设置:

  1. 在名称空间入口中创建了ingress-nginx控制器
  2. 在名称空间入口中创建了ingress-nginx服务
ingress-nginx          NodePort    10.102.152.58   <none>      80:30692/TCP,443:32297/TCP   6d2h
  1. 在入口命名空间中创建了类似于此的入口资源类型
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经典设置:

  1. 创建ELB classic,指向kubernetes集群实例并公开端口80
  2. 在现有托管区域(CNAME)中创建Route53条目,从上面指向ELB classic。
  3. 在ELB上设置运行状况检查以指向端口上的ingress-nginx NodePort服务:30692可以工作。

当我做:

curl http://testapp.k8s.myorg.io

我没有得到任何回应。

以下是我尝试解决问题的方法:

如果我做:

telnet testapp.k8s.myorg.io 80

它将解析为我的ELB经典DNS名称

如果我进入入口命名空间内存在的任何容器/ pod并执行以下操作:

curl http://testapp 

我会得到适当的回应。

由此我可以得出以下结论:

  1. 应用程序已正确部署,并可通过kubernetes集群内部公开的服务(ClusterIP)获得
  2. DNS可以正确解析为ELB
  3. ELB的HealthCheck工作原理

不知道我还能做些什么来解决为什么我无法通过Ingress访问我的服务?

kubernetes amazon-elb kubernetes-ingress nginx-ingress
2个回答
1
投票

这是我的错误。缺少的部分如下:

在ELB上,我没有正确设置监听器。所以基本上,需要的是将80/443端口从ELB指向Ingress服务的NodePorts。

ingress-nginx   ingress-nginx          NodePort    10.96.249.168    <none>        80:32327/TCP,443:30313/TCP   25h

0
投票

尝试使用此设置nginx入口控制器

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/mandatory.yaml

这将创建具有命名空间名称ingress-nginx的入口nginx控制器,您可以使用入口清单文件进行测试。

© www.soinside.com 2019 - 2024. All rights reserved.