我有一个带有两个 Pod(带有 ubuntu 容器)的 minikube 集群。我需要做的是通过这个 minikube 集群将测试流量从一个端口路由到另一个端口。此流量应通过这两个 pod 发送,如图所示。我是 Kubernetes 方面的初学者,所以我真的不知道该怎么做以及该走哪条路...请帮助我或给我一些提示。
我正在开发 ubuntu 服务器版本。 18.04。
答案 0 :(得分:1)
我同意@Harsh Manvar 提供的答案,我也想就这个话题进行一些扩展。
已经有类似设置的答案。我鼓励你检查一下:
有不同的 drivers 可用于运行您的 minikube
。 在处理入站流量时,他们会有所不同。我错过了讲述设置中使用的驱动程序的部分(评论)。如果是标签中显示的 Docker
,您可以按照以下示例进行操作。
步骤:
nginx-one
和 nginx-two
Deployments
以模仿图像中的 Pods
nginx-one
发送到 nginx-two
的服务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,但这不是推荐的方式。
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 方面的初学者,所以我真的不知道该怎么做以及该走哪条路...请帮助我或给我一些提示。
您可以查看以下链接以获取更多资源:
答案 1 :(得分:0)
您可以遵循多个选项:
因为你有两个 POD,你可以通过服务公开一个,
如果您可以在一个 POD 中运行两个应用程序,那么还有一个容器到容器通信的可能性。
POD-1 到 POD-2 通信您可以使用服务选项或 POD URI。