【问题标题】:how to access service on rpi k8s cluster如何访问 rpi k8s 集群上的服务
【发布时间】:2021-06-05 06:14:25
【问题描述】:

我在本指南的帮助下构建了一个 k8s 集群:rpi+k8s。我启动并运行了一些基本的 nginx 服务,我可以从主节点 curl 到工作节点,以获取 nginx 欢迎页面内容:

k exec nginx-XXX-XXX -it -- curl localhost:80

我在以下 SO 帖子中尝试了以下建议:

link 1 link 2

但是,我仍然无法从本地计算机 (linux) 访问工作节点上的简单 nginx 服务。我用过,NODE IP:NODE PORT。我还安装了 kubefwd 并运行,sudo kubefwd svc -n nginx-ns 但我没有看到预期的输出,它将显示端口转发。任何帮助,将不胜感激。谢谢。

输出:

NAME                TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
service/nginx-svc   NodePort   10.101.19.230   <none>        80:32749/TCP   168m

NAME                    READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/nginx   3/3     3            3           168m

NAME                               DESIRED   CURRENT   READY   AGE
replicaset.apps/nginx-54485b444f   3         3         3       168m

这里是yaml文件:

kind: Namespace
apiVersion: v1
metadata:
  name: nginx-ns
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  namespace: nginx-ns
spec:
  selector:
    matchLabels:
      app: nginx 
  replicas: 3
  template:
    metadata:
      labels:
        app: nginx 
    spec:
      containers:
      - name: nginx 
        image: nginx:1.19-alpine
        ports:
        - name: nginxport
          containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-svc
  namespace: nginx-ns
  labels:
    app: nginx
spec:
  selector:
    app: nginx
  ports:
  - protocol: TCP
    name: nginxport
    port: 80
    targetPort: 80
    nodePort: 32749
  type: NodePort
  selector:
    app: backend

【问题讨论】:

    标签: kubernetes kubectl kubeadm


    【解决方案1】:

    你需要更新你的服务nginx-svc,你已经使用了两个selector。

    删除以下部分:

      selector:
        app: backend
    

    更新service.yaml:

    apiVersion: v1
    kind: Service
    metadata:
      name: nginx-svc
      namespace: nginx-ns
      labels:
        app: nginx
    spec:
      selector:
        app: nginx
      ports:
      - protocol: TCP
        name: nginxport
        port: 80
        targetPort: 80
        nodePort: 32749
      type: NodePort
    

    然后,试试这个进行端口转发。

    kubectl port-forward -n nginx-ns svc/nginx-svc 8080:80
    

    模板是这样的:

    kubectl port-forward -n &lt;namespace&gt; svc/&lt;svc_name&gt; &lt;local_port&gt;:&lt;svc_port&gt;

    然后在浏览器中使用127.0.0.1:8080 或localhost:8080 尝试

    【讨论】:

    • 您好,感谢您的建议!我没有收到通知,所以回复晚了。无论如何,当我尝试上面写的 port-forward 命令时,我得到了这个:Unable to listen on port 80: Listeners failed to create with the following errors: [unable to create listener: Error listen tcp4 127.0.0.1:80: bind: permission denied unable to create listener: Error listen tcp6 [::1]:80: bind: permission denied] error: unable to listen on any of the requested ports: [{80 80}]
    • 然后我尝试了kubectl port-forward -n nginx-ns svc/nginx-svc 32749:80,我得到了输出:Forwarding from 127.0.0.1:32749 -&gt; 80 Forwarding from [::1]:32749 -&gt; 80。它是否正确?我希望将端口 32749 转发到 80?但是,当我进入浏览器并输入 :32749 时,我仍然得到 Unable to connect。
    • 我已经更新了我的 ans 。你现在可以试试吗? nodeIP 不能在集群外工作。所以&lt;NODE_IP&gt;:32749 将不起作用。 @SpencerTrinh
    • 嗨@H.R.埃蒙。感谢您的快速响应。我确实尝试了你的建议。这是port-forward 命令的输出:Forwarding from 127.0.0.1:8080 -&gt; 80 Forwarding from [::1]:8080 -&gt; 80 。当我进入浏览器并输入:localhost:8080 我仍然得到Unable to connect, problem loading page 我尝试了 127.0.0.1 和 localhost。这个问题与我的路由器设置有什么关系吗?我的笔记本电脑通过 wifi 连接到路由器,并且 rpi 通过连接到路由器的交换机连接。
    • 是的,我确实打开了那个终端窗格并让它运行。我没有按Ctrl+c。也许我需要做一些其他的配置?我没有在rpi上设置静态ip。
    猜你喜欢
    • 2022-08-13
    • 2023-03-03
    • 2021-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-17
    • 1970-01-01
    相关资源
    最近更新 更多