【问题标题】:How to route test traffic through kubernetes cluster (minikube)?如何通过 kubernetes 集群(minikube)路由测试流量?
【发布时间】:2021-04-10 03:14:07
【问题描述】:

我有一个带有两个 pod(带有 ubuntu 容器)的 minikube 集群。我需要做的是通过这个 minikube 集群将测试流量从一个端口路由到另一个端口。此流量应通过这两个 pod 发送,如图所示。我是 Kubernetes 方面的初学者,所以我真的不知道该怎么做以及走哪条路……请帮助我或给我一些提示。

我正在开发 ubuntu 服务器版本。 18.04.

enter image description here

【问题讨论】:

  • 能否请您在minikube 中包含您正在使用的驱动程序?是docker 还是virtualbox?在使用不同的驱动程序公开流量时存在一些差异。此外,我认为此文档可能对您有所帮助:kubernetes.io/docs/concepts/services-networking/service
  • 我正在使用 kvm 作为创建 minikube vm 的工具。我想通过我的集群路由 L2 流量。有可能吗?
  • 我还没有在KVM 上测试过它,但我认为kubectl port-forward 应该可以使用它。

标签: docker kubernetes minikube kubernetes-pod kubernetes-cluster


【解决方案1】:

我同意@Harsh Manvar 提供的答案,并且我还想就这个话题进行一些扩展。

已经有一个类似设置的答案。我鼓励您检查一下:

有不同的drivers 可用于运行您的minikube他们在处理入站流量时会有所不同。我错过了关于设置中使用的驱动程序的部分(评论)。如果是标签中显示的Docker,您可以按照以下示例进行操作。


示例

步骤:

  • 生成nginx-onenginx-two Deployments 以模仿图片中的Pods
  • 创建一个服务,用于将流量从nginx-one 发送到nginx-two
  • 创建一个允许您从 LAN 连接到 nginx-one 的服务
  • 测试设置

生成nginx-onenginx-two Deployments 以模仿图片中的Pods

您可以使用以下定义生成两个Deployments,其中每个都有一个Pod

  • nginx-one.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-one
spec:
  selector:
    matchLabels:
      app: nginx-one
  replicas: 1
  template:
    metadata:
      labels:
        app: nginx-one
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80
  • nginx-two.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-two
spec:
  selector:
    matchLabels:
      app: nginx-two
  replicas: 1
  template:
    metadata:
      labels:
        app: nginx-two
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80

创建一个服务,用于将流量从nginx-one 发送到nginx-two

您需要使用Service 将流量从nginx-one 发送到nginx-two。此类Service 的示例如下:

apiVersion: v1
kind: Service
metadata:
  name: nginx-two-service
spec:
  type: ClusterIP # could be changed to NodePort
  selector:
    app: nginx-two # IMPORTANT
  ports:
  - name: http
    protocol: TCP
    port: 80
    targetPort: 80

应用此定义后,您将能够使用服务名称 (nginx-two-service) 将流量发送到 nginx-two

附注!

您可以使用Pod 的IP 而不使用Service,但这不是推荐的方式。

创建一个允许您从 LAN 连接到 nginx-one 的服务

假设您想使用 Docker 驱动程序将您的 minikube 实例公开到 LAN,您将需要创建一个服务并公开它。此类设置的示例如下:

apiVersion: v1
kind: Service
metadata:
  name: nginx-one-service
spec:
  type: ClusterIP # could be changed to NodePort
  selector:
    app: nginx-one # IMPORTANT
  ports:
  - name: http
    protocol: TCP
    port: 80
    targetPort: 80

您还需要运行:

  • $ kubectl port-forward --address 0.0.0.0 service/nginx-one-service 8000:80

上述命令(在您的minikube 主机上运行!)将公开您的nginx-one-service 以在局域网上可用。它将运行此命令的机器上的端口 8000 映射到此服务的端口 80。您可以通过在 LAN 的另一台机器上执行来检查它:

  • curl IP_ADDRESS_OF_MINIKUBE_HOST:8000

附注!

您需要 root 访问权限才能让您的入站流量进入小于 1024 的端口。

测试设置

您需要检查对象之间是否存在通信,如下图“连接图”所示。

PC -> nginx-one -> nginx-two -> example.com

测试方法可能如下:

PC -> nginx-one:

  • 在 LAN 中的计算机上运行:
    • curl MINIKUBE_IP_ADDRESS:8000

nginx-one -> nginx-two:

  • 执行到您的nginx-one Pod 并运行命令:
    • $ kubectl exec -it NGINX_POD_ONE_NAME -- /bin/bash
    • $ curl nginx-two-service

nginx-two -> example.com:

  • 执行到您的nginx-two Pod 并运行命令:
    • $ kubectl exec -it NGINX_POD_TWO_NAME -- /bin/bash
    • $ curl example.com

如果您完成了上述步骤,您可以将nginxPods 换成您自己的软件。


其他说明和资源:

我鼓励您查看kubeadm,因为它是创建您自己的 Kubernetes 集群的工具:

如你所说:

我是这个 Kubernetes 方面的初学者,所以我真的不知道该怎么做以及走哪条路……请帮助我或给我一些提示。

您可以查看以下链接以获取更多资源:

【讨论】:

  • 嗨!谢谢你的教程!它有很大帮助。但是,这部分对我不起作用:PC -> nginx-one。我有 curl (7) ... port 8000: connection denied :( 我真的不知道该怎么办。这个命令 kubectl forward port 我直接在服务器上执行,而 minikube 正在运行,是吗?其余的:nginx -one-> nginx-two -> example.com 有效。
【解决方案2】:

您可以遵循多种选择:

由于您有两个 POD,您可以通过服务公开一个,

  1. 因此 service-1 被公开并向 POD-1 发送流量
  2. POD-1 将向 Kubernetes 的 service-2 发送请求
  3. 这样流量将被转发到 POD-2 并从那里离开集群

如果您可以在单个 POD 中运行两个应用程序,还可以实现容器到容器的通信。

POD-1 到 POD-2 通信可以使用服务选项或 POD URI。

【讨论】:

  • 嗨!谢谢你的提示! “这种方式流量将被转发到 POD-2 并从那里离开集群”从那里意味着来自 pod 2 或服务 2?
  • 理想情况下来自 POD-2,因为在 pOD-2 内运行的应用程序会将流量转发出去....如果您使用带有节点 js 的模块请求或 python 客户端将直接转发来自 pod 的流量。
猜你喜欢
  • 1970-01-01
  • 2021-04-28
  • 2021-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-20
  • 2019-02-28
相关资源
最近更新 更多