AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1133026
Accepted
halfer
halfer
Asked: 2023-06-11 06:01:41 +0800 CST2023-06-11 06:01:41 +0800 CST 2023-06-11 06:01:41 +0800 CST

如何跨集群在 MicroK8S 中设置端口转发(最好没有清单)?

  • 772

我正在使用 MicroK8S 学习 K8S。我有一个三节点集群,每个节点有 16G 内存。集群已自动进入 HA 模式。该集群位于我的家庭 LAN 上。

这是我的节点:

姓名 知识产权 颜色 角色
排列 192.168.50.251 黄色的 领导者
尼卡 192.168.50.74 蓝色的 工人
山崎 192.168.50.135 绿色的 工人

设置

我有一个在集群中的 pod 上运行的 Web 应用程序。它在端口 9090 上响应。这是我让它运行的方式。

我在开发笔记本电脑上有一个图像,我将其转换为压缩包:

docker save k8s-workload > k8s-workload.docker.tar

然后我将该 tarball 发送给集群的领导者:

scp k8s-workload.docker.tar 192.168.50.251:/home/myuser/

然后,我将该图像旁加载到集群上的所有节点中:

root@arran:/home/myuser# microk8s images import < k8s-workload.docker.tar
Pushing OCI images to 192.168.50.251:25000
Pushing OCI images to 192.168.50.135:25000
Pushing OCI images to 192.168.50.74:25000

然后我在每个节点上验证 MIME 类型和图像的校验和,因为我在这方面遇到了一些问题:

root@arran:/home/myuser# microk8s ctr images list | grep workload
docker.io/library/k8s-workload:latest   application/vnd.docker.distribution.manifest.v2+json    sha256:725b...582b 103.5 MiB linux/amd64

最后我运行工作负载,确保 K8S 不会尝试拉取镜像(这是不必要的,但默认策略是无论如何都会尝试):

root@arran:/home/myuser# microk8s kubectl run k8s-workload --image=k8s-workload --image-pull-policy='Never' --port=9090
pod/k8s-workload created

然后我从领导节点确认这是成功的:

root@arran:/home/myuser# microk8s kubectl get pods -o wide
NAME           READY   STATUS    RESTARTS   AGE   IP             NODE       NOMINATED NODE   READINESS GATES
k8s-workload   1/1     Running   0          83m   10.1.134.216   yamazaki   <none>           <none>

运行应用程序

为了从我的开发笔记本电脑访问 Web 应用程序,我只在一个节点上公开该应用程序。pod 在 Yamazaki 节点上运行,因此最初我从该节点运行它:

root@yamazaki:/home/myuser# microk8s kubectl port-forward pod/k8s-workload 9090 --address='0.0.0.0'
Forwarding from 0.0.0.0:9090 -> 9090

这很好用。

问题

我想通过向集群中的任何节点发出请求来访问该应用程序,而不仅仅是这个节点。目前该应用程序仅在一个节点上运行,即使我向另一个节点发出 Web 请求,我也希望它能正常工作。

我知道 K8S 有内部网络来做我想做的事。例如,如果我port-forward在 Arran 上运行命令(并在 Yamazaki 上杀死相同的命令),那么应用程序仍然可以运行,即使 pod 仅在 Yamazaki 上运行。但我仍然只能从一个 IP(运行端口转发器的 Arran)访问该应用程序。

当然,我可以通过在每个节点上的 SSH 会话上运行端口转发器来做我想做的事。但我想运行一些在所有 SSH 会话被终止后仍然存在的东西。

理想情况下,我想使用控制台命令来执行此操作,但我想知道我是否需要为此使用 YAML 清单。从我目前的研究来看,我认为我需要一个 ClusterIP。


更新/研究 1

我正在阅读有关裸机负载平衡的 K8S 手册页。该页面的一部分建议用户应用一个 646 行的配置文件,这对于学习场景来说会适得其反。

这个示例似乎更明智,但不清楚 LB 是如何被指示在所有主机上运行的。

更新/研究 2

我还找到了专门针对 MicroK8S 的资源,它推荐了一个入口插件。不幸的是,这需要将我的工作负载设置为服务,而现在我只有一个 Pod,所以认为这已经结束了。

kubernetes
  • 1 1 个回答
  • 42 Views

1 个回答

  • Voted
  1. Best Answer
    Saxtheowl
    2023-06-11T22:14:55+08:002023-06-11T22:14:55+08:00

    让我们使用一个NodePort service,它是一种抽象的方式来公开在一组上运行的应用程序Pods作为网络服务,它将每个端口上的传入流量路由Node到您的Service.

    我们可以这样定义它:

    apiVersion: v1
    kind: Service
    metadata:
      name: my-service
    spec:
      type: NodePort
      ports:
        - port: 9090
          targetPort: 9090
          nodePort: 30090
      selector:
        run: k8s-workload
    

    然后我们应用清单,它应该可以工作microk8s kubectl apply -f my-service.yaml

    • 1

相关问题

  • Nvidia Config 后 Containerd 无法启动

  • 在使用 kubeadm 引导集群之前,如何修改 CoreDNS 配置映射?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve