如何解决如何通过 kubernetes 集群minikube路由测试流量? 生成 nginx-one 和 nginx-two Deployments 以模仿图像中的 Pods创建一个服务,用于将流量从 nginx-one 发送到 nginx-two创建允许您从 LAN 连接到 nginx-one 的服务测试设置
我有一个带有两个 Pod(带有 ubuntu 容器)的 minikube 集群。我需要做的是通过这个 minikube 集群将测试流量从一个端口路由到另一个端口。此流量应通过这两个 pod 发送,如图所示。我是 Kubernetes 方面的初学者,所以我真的不知道该怎么做以及该走哪条路...请帮助我或给我一些提示。
我正在开发 ubuntu 服务器版本。 18.04。
解决方法
我同意@Harsh Manvar 提供的答案,我也想就这个话题进行一些扩展。
已经有类似设置的答案。我鼓励你检查一下:
有不同的 drivers 可用于运行您的 minikube
。 在处理入站流量时,他们会有所不同。我错过了讲述设置中使用的驱动程序的部分(评论)。如果是标签中显示的 Docker
,您可以按照以下示例进行操作。
示例
步骤:
- 生成
nginx-one
和nginx-two
Deployments
以模仿图像中的Pods
- 创建将用于将流量从
nginx-one
发送到nginx-two
的服务 - 创建允许您从 LAN 连接到
nginx-one
的服务 - 测试设置
生成 nginx-one
和 nginx-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
) 将流量发送到 nginx-two-service
附注!
您可以在没有 Pod
的情况下使用 Service
的 IP,但这不是推荐的方式。
创建允许您从 LAN 连接到 nginx-one
的服务
假设您想使用 minikube
驱动程序向 LAN 公开您的 Docker
实例,您将需要创建一个服务并公开它。此类设置的示例如下:
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
在 LAN 上可用。它会将运行此命令的机器上的端口 8000 映射到此服务的端口 80。你可以通过在局域网的另一台机器上执行来检查它:
curl IP_ADDRESS_OF_MINIKUBE_HOST:8000
附注!
您需要根访问权限才能让入站流量进入小于 1024 的端口。
测试设置
您需要检查对象之间是否存在如下“连接图”所示的通信。
PC
-> nginx-one
-> nginx-two
-> example.com
测试方法可能如下:
PC
-> nginx-one
:
- 在局域网中的机器上运行:
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
如果您完成了上述步骤,您可以将 nginx
Pods
换成您自己的软件。
附加说明和资源:
我鼓励您检查 kubeadm
,因为它是创建您自己的 Kubernetes 集群的工具:
正如你所说:
我是 Kubernetes 方面的初学者,所以我真的不知道该怎么做以及该走哪条路...请帮助我或给我一些提示。
您可以查看以下链接以获取更多资源:
- Kubernetes.io
- Kubernetes: Docs: Concepts: Workloads: Controllers: Deployment
- Kubernetes.io: Docs: Concepts: Services networking: Service
您可以遵循多个选项:
因为你有两个 POD,你可以通过服务公开一个,
- 因此 service-1 被公开并向 POD-1 发送流量
- POD-1 将向 Kubernetes 的 service-2 发送请求
- 这样流量将被转发到 POD-2,然后从那里离开集群
如果您可以在一个 POD 中运行两个应用程序,那么还有一个容器到容器通信的可能性。
POD-1 到 POD-2 通信您可以使用服务选项或 POD URI。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。