我想将流量从一个端口通过 kubernetes 集群(使用 minikube)发送到另一个物理端口。我不知道如何将流量从物理端口路由到集群以及从集群路由到第二个物理端口。我通过入口公开集群(我也测试了服务解决方案),我有一个服务将外部流量发送到 pod,另一个服务将流量从第一个 pod 发送到第二个 pod。但是我真的不知道如何将这些流量从端口发送到集群以及如何从集群发送到接收端口...
我的集群在那里描述:How to route test traffic through kubernetes cluster (minikube)?
答案 0 :(得分:0)
假设:
enp0s6
服务器上的物理 Ubuntu
端口进入并发送到Pod
Pod
配置了一些能够路由流量的软件。Pod
将接收到的流量路由到同一 enp0s5
服务器机器(或更远的线路)上的物理 Ubuntu
端口。< /li>
这个答案不承认:
Pod
路由到物理端口 enp0s5
的软件。附注!
请考虑输入我在答案中包含的每个链接,因为有很多有用的信息。
Minikube 是一种工具,可在您的机器(PC、笔记本电脑、服务器等)上生成单节点 Kubernetes 集群以用于开发目的。
它使用不同的驱动程序来运行 Kubernetes(它可以部署为 bare-metal
、docker
、virtualbox
、kvm
等)。这允许与主机(Ubuntu
服务器)隔离。这也意味着在此设置的网络部分存在差异。
通过使用 minikube
驱动程序设置 kvm2
,您需要对设置进行一些额外的更改,以便能够将流量从 192.168.0.150
路由到您的 Deployment ( Pods
组)。
假设 Deployment
清单如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 1
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
还假设 Service
清单如下:
apiVersion: v1
kind: Service
metadata:
name: nginx-deployment
spec:
type: NodePort
selector:
app: nginx # <-- this needs to match with Deployment matchLabels
ports:
- protocol: TCP
port: 80
targetPort: 80
nodePort: 30000
上面示例中 Service
类型的 NodePort
将在端口 Deployment
上的 minikube
实例 (IP) 上公开您的 30000
。
在此特定示例中,Service
(An abstract way to expose an application running on a set of Pods as a network service) 将公开 Pod
实例中的 minikube
和您的主机,但不用于外部访问(就像 192.168.0.0/24
网络中的其他机器一样)。
允许外部流量的选项有:
Ubuntu
服务器):
$ kubectl port-forward --address 192.168.0.150 service/nginx-deployment 8000:80
kubectl
将允许您的 Ubuntu
服务器上的端口 8000
上的连接直接转发到 nginx-deployment
服务和固有地转发到您的 Pod
。>
<块引用>
附注!
您还可以在您的 PC/笔记本电脑上使用 kubectl port-forward
,这样您就可以将流量从 PC/笔记本电脑端口定向到您的 Pod
。
--address 192.168.0.150
设置为专门针对 enp0s6
。
您可以按照以下答案阅读更多相关信息:
以上说明应该可以帮助您将流量直接从 Pod
引导至您的 enp0s6
。将流量从 Pod
发送到您的 enp0s5
接口非常简单。您可以运行(从您的 Pod
):
curl 10.0.0.150
(enp0s5
)curl 10.0.0.X
(enp0s5
网络中的设备)作为替代方案,您可以尝试在不使用 minikube
的情况下配置自己的 Kubernetes 集群。这将本质上消除隔离层并允许您进行更直接的访问。有很多选项,例如:
我鼓励您查看其他资源,因为 Kubernetes 是一个复杂的解决方案,并且有很多东西有待发现: