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

时间:2020-03-09 16:04:34

标签: kubernetes nginx-ingress

我有一个裸机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

Jupyterhub

NAME           TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)                      AGE
proxy-public   LoadBalancer   10.102.251.6    192.168.1.242   80:32691/TCP,443:31737/TCP   8h

我可以从外部IP访问jupyterhub,但无法通过nginx-ingress访问

nginx-inress config.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(代理公共)

2 个答案:

答案 0 :(得分:1)

proxy-public后端服务应该是ClusterIP类型,而不是nginx-ingress-default-backend服务那样的LoadBalancer类型。入口的服务名称应为proxy-public,而不是jhub

您应该可以通过http://192.168.1.240/classes

访问它

答案 1 :(得分:0)

您将需要DNS记录或托管指向example.com(可能会更改)指向入口控制器的外部IP(192.168.1.240)的文件条目。

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