资讯专栏INFORMATION COLUMN

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

weapon / 3731人阅读

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

前言

有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                

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

PS

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

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

对于需要直接访问主机网络的情况。例如,可以将Kubernetes网络插件Flannel部署为在Kubernetes集群的所有节点上设置的守护进程。由于hostNetwork:true,Flannel完全控制集群中每个节点上的网络,允许它管理与hostNetwork:false的pod连接到的覆盖网络。

因为每个node上只能启动一个同deployment的pod,通过该特性,在某种程度上可以实现同一应用的pod不部署在同一台主机的需求。但是我更倾向于使用之前文章介绍过的pod的反亲和性来解决。

参考文章:Accessing Kubernetes Pods from Outside of the Cluster

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/33063.html

相关文章

  • 集群访问k8spod 几种方式--hostNetwork

    摘要:前言有种方法可以让集群外访问运行在集群上的应用程序。当群集上运行的应用程序数量增加时,这可能会导致端口冲突。由于这些原因,主机网络不是使您的应用程序可以从群集外部访问的好方法。例如,可以将网络插件部署为在集群的所有节点上设置的守护进程。 前言 有5种方法可以让集群外访问运行在Kubernetes集群上的应用程序(pod)。接下来我们详细讨论Kubernetes的hostNetwork,...

    ispring 评论0 收藏0
  • 使用云厂商托管K8S时容器域名解析注意事项

    摘要:云厂商托管服务的域名解析注意事项使用云厂家提供托管式,的域名解析参数,通过界面创建的话,可能厂商界面没有开放配置,采用了一些默认值,在使用时候,需要了解清楚厂商提供的默认配置,否则会存在问题。原文链接使用云厂商托管时容器域名解析注意事项 云厂商托管 Kubernetes 服务的 Pod 域名解析注意事项 使用云厂家提供托管式Kubernetes,Pod的域名解析参数,通过界面创建Pod...

    canger 评论0 收藏0
  • etcd管理,证书配置,扩展,迁移恢复,带证书扩展节点

    摘要:广告各版本离线安装包证书配置生产环境中给配置证书相当重要,如果没有证书,那么集群很容易被黑客利用而去挖矿什么的。细节问题非常多,一个端口,一个都不要填错,否则就会各种错误包括新加节点要清数据这些小细节问题。 广告 | kubernetes各版本离线安装包 etcd 证书配置 生产环境中给etcd配置证书相当重要,如果没有证书,那么k8s集群很容易被黑客利用而去挖矿什么的。做法非常简单...

    张汉庆 评论0 收藏0
  • etcd管理,证书配置,扩展,迁移恢复,带证书扩展节点

    摘要:广告各版本离线安装包证书配置生产环境中给配置证书相当重要,如果没有证书,那么集群很容易被黑客利用而去挖矿什么的。细节问题非常多,一个端口,一个都不要填错,否则就会各种错误包括新加节点要清数据这些小细节问题。 广告 | kubernetes各版本离线安装包 etcd 证书配置 生产环境中给etcd配置证书相当重要,如果没有证书,那么k8s集群很容易被黑客利用而去挖矿什么的。做法非常简单...

    mengbo 评论0 收藏0
  • 带着问题学 Kubernetes 抽象对象 Service

    摘要:庆幸,引入了这个抽象的概念。会虚拟出一个,并在它销毁之前保持该地址保持不变。通过对它的访问,以代理的方式负载到对应的上,同时生命周期的变换,也会及时反应在代理上。该与同名,它所暴露的地址信息正是对应的地址。由此猜测是维护了与的映射关系。 带着问题学 Kubernetes 抽象对象 Service 摘要:本文属于原创,欢迎转载,转载请保留出处:https://github.com/jas...

    baukh789 评论0 收藏0

发表评论

0条评论

weapon

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<