开发者社区> 店家小二> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

简介: 前言 有5种方法可以让集群外访问运行在Kubernetes集群上的应用程序(pod)。接下来我们详细讨论Kubernetes的hostNetwork,hostPort,NodePort,LoadBalancer和Ingress功能。
+关注继续查看

前言

有5种方法可以让集群外访问运行在Kubernetes集群上的应用程序(pod)。接下来我们 详细讨论Kubernetes的hostNetwork,hostPort,NodePort,LoadBalancer和Ingress功能。本章内容主要解读一下hostNetwork。


hostNetwork

demo

hostNetwork设置适用于Kubernetes pod。当pod配置为hostNetwork:true时,在此类pod中运行的应用程序可以直接查看启动pod的主机的网络接口。配置为侦听所有网络接口的应用程序,又可以在主机的所有网络接口上访问。以下是使用主机网络的pod的示例定义:

apiVersion: v1 kind: Pod metadata: name: influxdb spec: hostNetwork: true containers: - name: influxdb image: influxdb

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

$ kubectl create -f influxdb-hostnetwork.yml

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

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

剖析

当pod 设置hostNetwork: true时候,Pod中的所有容器就直接暴露在宿主机的网络环境中,这时候,Pod的PodIP就是其所在Node的IP。

对于同Deployment下的hostNetwork: true启动的Pod,每个node上只能启动一个。也就是说,Host模式的Pod启动副本数不可以多于“目标node”的数量,“目标node”指的是在启动Pod时选定的node,若未选定(没有指定nodeSelector),“目标node”的数量就是集群中全部的可用的node的数量。当副本数大于“目标node”的数量时,多出来的Pod会一直处于Pending状态,因为schedule已经找不到可以调度的node了。

以下示例中,集群只有4个node,当设置副本数量为5时,最后一个Pod状态会一直处于Pending状态。

root@k8s-master yaml]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE
test-host-1108333573-11wbl 1/1 Running 0 17s 10.0.251.153 k8s-node-1
test-host-1108333573-2k35s 1/1 Running 0 17s 10.0.251.146 k8s-node-3
test-host-1108333573-lnlpy 1/1 Running 0 17s 10.0.251.222 k8s-node-4
test-host-1108333573-t6izr 1/1 Running 0 17s 10.0.251.155 k8s-node-2
test-host-1108333573-tf4mc 0/1 Pending 0 17s <none> 

当多个host模式deployment的端口冲突的时候,最后启动的那些Pod就会一直处于Pending状态。

PS

请注意,每次重新启动pod时,Kubernetes都可能将pod重新安排到其他节点上,因此应用程序的IP地址将更改。除此之外,需要相同端口的两个应用程序不能在同一节点上运行。当群集上运行的应用程序数量增加时,这可能会导致端口冲突。由于这些原因,主机网络不是使您的应用程序可以从群集外部访问的好方法。

主机网络在那些方面有用那?

  • 对于需要直接访问主机网络的情况。例如,可以将Kubernetes网络插件Flannel部署为在Kubernetes集群的所有节点上设置的守护进程。由于hostNetwork:true,Flannel完全控制集群中每个节点上的网络,允许它管理与hostNetwork:false的pod连接到的覆盖网络。
  • 因为每个node上只能启动一个同deployment的pod,通过该特性,在某种程度上可以实现同一应用的pod不部署在同一台主机的需求。但是我更倾向于使用之前文章介绍过的pod的反亲和性来解决。
本文转自中文社区-从集群外访问k8s的pod 的几种方式--hostNetwork

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
在 Kubernetes 集群上部署 VSCode
在 Kubernetes 集群上部署 Visual Studio Code 是一个轻量级但功能强大的源代码编辑器,可在您的桌面上运行,适用于 Windows、macOS 和 Linux。它内置了对 JavaScript、TypeScript 和 Node.js 的支持,并为其他语言(如 C++、C#、Java、Python、PHP、Go)和运行时(如 .NET 和 Unity)提供了丰富的扩展生态系统.
180 0
在kubernetes集群中部署open-falcon
公司最近监控系统从zabbix切换到open-falcon,需要将open-falcon部署到私有的kubernetes集群上。open-falcon团队最近没有更新维护,提交的PR没有反应,所以将部署方法记录到这里。
122 0
Kubernetes 集群包管理器 Helm3 部署
Kuberbetes 能够很好地组织和编排容器,但它缺少一个更高层次的应用打包工具,而 Helm 就是解决这个问题的。
340 0
Kubernetes 集群部署 Ingress Traefik v2.4
Traefik 是一个开源的可以使服务发布变得轻松有趣的边缘路由器。它负责接收你系统的请求,然后使用合适的组件来对这些请求进行处理。
465 0
Kubernetes集群的详细部署
一、集群机器 linux-node1:192.168.56.11 ---master 部署的服务: etcd kube-apiserver kube-controller-manager kube-scheduler docker linux-node2:192.
1247 0
在Kubernetes集群中部署Heapster
背景 公司的容器云平台需要新增应用的自动扩缩容的功能,以便能够更加智能化的对应用进行管理。 Kubernetes官方提供了HPA(Horizontal Pod Autoscaling)资源对象。要让我们部署的应用做到自动的水平的(水平指的是增减Pod副本数量)进行扩缩容,我们只需要在Kubernetes集群中创建HPA资源对象,然后让该资源对象关联某一需要进行自动扩缩容的应用即可。
1884 0
动手实操,让你的 Kubernetes 集群弹起来!
本文将对于集群自动弹性伸缩(cluster-autosclaer)进行介绍,并在 ACK 集群上进行实操。
3986 0
Kubernetes 集群故障案例
Kubernetes 集群故障案例
82 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
如何让k8s集群30s扩容3000个Pod
立即下载
开源广进,用service cataloq构造k8s服务能力中心
立即下载
k8s自动伸缩那些事资料下载
立即下载