使用nginx-ingess访问kubernetes集群中的应用程序

使用nginx-ingess访问kubernetes集群中的应用程序,kubernetes,nginx-ingress,Kubernetes,Nginx Ingress,我有一个裸机Kubernetes(1个主节点和3个节点),并使用metallb提供负载平衡。 我还安装了Jupyterhub和nginx ingress作为服务 nginx入口: NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx-ingress-controller LoadBalancer 1

我有一个裸机Kubernetes(1个主节点和3个节点),并使用metallb提供负载平衡。
我还安装了Jupyterhub和nginx ingress作为服务

nginx入口:

NAME                            TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)                      AGE
nginx-ingress-controller        LoadBalancer   10.108.54.171   192.168.1.240   80:31463/TCP,443:30231/TCP   5m11s
nginx-ingress-default-backend   ClusterIP      10.98.47.19     <none>          80/TCP                       5m11s
我可以从外部IP访问jupyterhub,但无法通过nginx入口访问它

nginx入口配置.yaml

apiVersion: extensions/v1beta1
ingress
     enabled: true
     hosts:
kind: Ingress
metadata:
     annotations:
        kubernetes.io/ingress.class: nginx
     name: myingress
     namespace: default
rbac:
   create: true
spec:
  rules:
  - host: example.com
    http:
      paths:
      - backend:
        serviceName: jhub
        servicePort: 80
      path: /classes

我的问题是,如何通过nginx ingress访问jupyterhub(代理公共)

您需要一个DNS记录或主机文件条目,指向
example.com
(可能会更改此项)ingress控制器的外部IP(
192.168.1.240


如果请求的URI与入口中的
主机
字段匹配,则入口控制器仅将请求路由到入口中定义的服务后端。

代理公共后端服务应为ClusterIP类型,而不是LoadBalancer类型,就像
nginx ingress默认后端一样
服务ingress中的服务名称应该是
proxy public
,而不是
jhub

您应该能够通过
http://192.168.1.240/classes

apiVersion: extensions/v1beta1
ingress
     enabled: true
     hosts:
kind: Ingress
metadata:
     annotations:
        kubernetes.io/ingress.class: nginx
     name: myingress
     namespace: default
rbac:
   create: true
spec:
  rules:
  - host: example.com
    http:
      paths:
      - backend:
        serviceName: jhub
        servicePort: 80
      path: /classes