关注分享主机优惠活动
国内外VPS云服务器

从集群外部访问k8s pod的几种方式 --hostNetwork

摘要:简介 有多种方法可以使集群上运行的应用程序可以从集群外部访问。 随着集群上运行的应用程序数量的增加,这可能会导致端口冲突。 由于这些原因,主机网络并不是让应用程序从集群外部访问的好方法。 例如,网络插件可以部署为在集群中每个节点上设置的守护进程。

简介

有五种方法可以从集群外部访问 Kubernetes 集群上运行的应用程序(Pod)。 接下来,我们将详细了解 Kubernetes 的 hostNetwork、hostPort、NodePort、LoadBalancer 和 Ingress 功能。 本章主要介绍主机网络。


hostNetworkdemo

hostNetwork 配置适用于 Kubernetes Pod。 当 Pod 配置为 hostNetwork:true 时,该 Pod 中运行的应用程序可以直接看到启动该 Pod 的主机的网络接口。 配置为侦听所有网络接口的应用程序可在主机的所有网络接口上访问。 以下是使用主机网络定义 pod 的示例: apiVersion: v1kind: Podmetadata: name: influxdbspec: hostNetwork: truecontainers: - name: influxdb image: influxdb

可以启动 pod 使用以下命令:

$ kubectl create -f influxdb-hostnetwork.yml

您可以检查 InfluxDB 应用程序是否正在运行:

 $ curl -v http://kubenode01.example.com:8086/ping

分析

当 p当 od 设置为 hostNetwork: true 时,Pod 中的所有容器都直接暴露于主机的网络环境。 此时Pod的PodIP就是Pod所在Node的IP。

同一部署下以hostNetwork: true启动的pod,每个节点只能启动一个。 这意味着托管模式下Pod的启动副本数量不能超过“目标节点”数量。 “目标节点”是指Pod启动时选择的节点。 如果未选择(未指定nodeSelector),则目标节点的节点计数是集群中所有可用节点的数量。 如果副本数大于“目标节点”数,则额外的副本数为

在下面的示例中,如果副本数设置为 5,则集群将有 4 个副本只是节点。

root@k8s-master yaml]# kubectl get pod -o WideNAME 就绪状态重新启动 AGE IP NODEtest-host-。   ]1108333573-11wbl 1/1 运行 0 17 秒 10.0 .251.153 k8s-node-1test-host-1108333573-2k35s 1/1 运行 0 17 秒 10.0.251.146 k8s [k4 ]节点-3test-主机-1108333573-lnlpy 1/1执行ing 0 17s 10.0.251.222 k8s-node-4test-host-1108333573-t6izr 1/1 运行 0 17s 10.0.251.155 k8s-node-2test-host [ k4]1108333573-tf4mc 0/1 Pending 0 17s  

如果多个主机模式部署存在端口冲突,则最后启动的 pod 将始终处于待处理状态。

附加说明

请注意,每次重新启动 pod 时,Kubernetes 都会将 pod 重新调度到不同的节点,因此应用程序的 IP 地址会发生变化。 除此之外,需要相同端口的两个应用程序不能在同一节点上运行。 随着集群上运行的应用程序数量的增加,这可能会导致端口冲突。 由于这些原因,主机网络并不是让应用程序从集群外部访问的好方法。

当您需要直接访问主机网络时,主机网络有何用处? 例如,Kubernetes 网络插件 Flannel 可以部署为配置在 Kubernetes 集群的所有节点上的守护进程。 hostNetwork: true 使 Flannel 能够完全控制集群中所有节点的网络,并允许它管理具有 hostNetwork: false 的 pod 连接到的覆盖网络。

由于同一部署中每个节点只能启动一个 Pod,因此这一特性在一定程度上有助于满足同一应用程序的 Pod 不部署在同一主机上的要求。 但我更喜欢使用我在上一篇文章中介绍过的 pod 反亲和力来解决。

参考文章:接入Kuberne集群外的tes pod

未经允许不得转载:主机频道 » 从集群外部访问k8s pod的几种方式 --hostNetwork

相关推荐

评论 抢沙发

评论前必须登录!