【问题标题】:Remote access Zero to JupyterHub over Ethernet with ingress in Kubernetes通过 Kubernetes 中的入口通过以太网远程访问 JupyterHub 零
【发布时间】:2020-06-17 13:19:57
【问题描述】:

上下文

我在裸机服务器(4 个节点)上安装了 Kubernetes,并将 Zero to JupyterHub 部署到它上面。 这很好用;我可以从主节点正确访问集线器。

现在我想通过以太网从外部计算机访问服务器上的集线器。因此,我遵循official instructions 并安装了MetalLB,以便为我的proxy-public-服务(正确设置)提供外部IP。
此外,我安装了nginx-ingress-controller 以便能够进行入口,这也成功获得了外部 IP(小提示:使用 Helm-chart;我无法让服务运行应用其他推荐步骤时)。

由于我在弄清楚如何进行此入口时遇到了一些麻烦,所以这里有一个示例:

kubectl apply -f ingress.yaml --namespace jhub

#ingress.yaml:
#apiVersion: networking.k8s.io/v1beta1
#kind: Ingress
#metadata:
#  name: jupyterhub-ingress
#  annotations:
#    nginx.ingress.kubernetes.io/rewrite-target: /$1
#spec:
#  rules:
#  - host: jupyterhub.cluster
#    http:
#      paths:
#      - path: /
#        backend:
#          serviceName: proxy-public
#          servicePort: 80

无论如何,我无法打开 proxy-public 提供的外部 IP(意味着我在浏览器中插入外部 IP)。


问题

如何通过外部 IP 远程访问我的 JupyterHub;我错过了什么?

【问题讨论】:

    标签: kubernetes kubernetes-ingress nginx-ingress jupyterhub


    【解决方案1】:

    我错过了这可以通过与 Kubernetes-Dashboard 相同的方式实现:您必须建立一个开放的 ssh 连接(因此,打开一个隧道 -> tunneling) 来自外部计算机。
    当然,这不是我想到的“外部”访问,而是我的测试环境(也许还有你的)的一个有效且快速的解决方案。


    如何建立这个 ssh-connect

    首先,获取您的 proxy-public 的外部 IP 地址:

    $: kubectl get services --namespace jhub
    NAME           TYPE           CLUSTER-IP       EXTERNAL-IP     PORT(S)                      AGE
    hub            ClusterIP      10.99.241.72     <none>          8081/TCP                     95m
    proxy-api      ClusterIP      10.107.175.27    <none>          8001/TCP                     95m
    proxy-public   LoadBalancer   10.102.171.162   192.168.1.240   80:31976/TCP,443:32568/TCP   95m
    

    注意:外部 IP 的范围是在我的 MetalLB-config 中的 layer2 中定义的。

    使用此信息(假设您使用的是 Linux),打开终端并使用以下命令:

    $ ssh pi@10.10.10.2 -L 8000:192.168.1.240:80
    # -L opens a localhost-connection
    # pi@10.10.10.2 logs me into my second node with user pi
    

    注意1:localhost:8000 被配置为 proxy-public 的 targetPort 与 http 也可以在您描述服务时看到,并且分别查看端口的规格(您也可以在那里获取 https 的设置):

    kind: Service
    apiVersion: v1
    metadata:
      name: proxy-public
      namespace: jhub
      ...
    spec:
      ports:
        - name: http
          protocol: TCP
          port: 80
          targetPort: 8000
          nodePort: 31976
        - name: https
    ...
    

    最后,在您的浏览器中输入http://localhost:8000/ - 瞧,您将进入 JupyterHub 登录页面!

    【讨论】:

    • 如果您想进行远程访问,为什么要使用 localhost ? Localhost 是本地环回地址 127.0.0.1 的事实上的标准 (DNS) 名称,无法从(本地)主机本身外部访问。
    • 你是指proxy-public-service 描述中的port 和target_port 吗?老实说,这些是部署官方集线器的标准设置,我没有更改。我应该只更改 port 和 target-port 吗?如果您的意思是 localhost-ssh:这只是隧道到可以访问 192.168.1.240:80 的节点 localhost。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-03
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    • 2018-07-02
    相关资源
    最近更新 更多