摘要:前言有种方法可以让集群外访问运行在集群上的应用程序。当群集上运行的应用程序数量增加时,这可能会导致端口冲突。由于这些原因,主机网络不是使您的应用程序可以从群集外部访问的好方法。例如,可以将网络插件部署为在集群的所有节点上设置的守护进程。
前言
有5种方法可以让集群外访问运行在Kubernetes集群上的应用程序(pod)。接下来我们详细讨论Kubernetes的hostNetwork,hostPort,NodePort,LoadBalancer和Ingress功能。本章内容主要解读一下hostNetwork。
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
摘要:前言有种方法可以让集群外访问运行在集群上的应用程序。当群集上运行的应用程序数量增加时,这可能会导致端口冲突。由于这些原因,主机网络不是使您的应用程序可以从群集外部访问的好方法。例如,可以将网络插件部署为在集群的所有节点上设置的守护进程。 前言 有5种方法可以让集群外访问运行在Kubernetes集群上的应用程序(pod)。接下来我们详细讨论Kubernetes的hostNetwork,...
摘要:云厂商托管服务的域名解析注意事项使用云厂家提供托管式,的域名解析参数,通过界面创建的话,可能厂商界面没有开放配置,采用了一些默认值,在使用时候,需要了解清楚厂商提供的默认配置,否则会存在问题。原文链接使用云厂商托管时容器域名解析注意事项 云厂商托管 Kubernetes 服务的 Pod 域名解析注意事项 使用云厂家提供托管式Kubernetes,Pod的域名解析参数,通过界面创建Pod...
摘要:广告各版本离线安装包证书配置生产环境中给配置证书相当重要,如果没有证书,那么集群很容易被黑客利用而去挖矿什么的。细节问题非常多,一个端口,一个都不要填错,否则就会各种错误包括新加节点要清数据这些小细节问题。 广告 | kubernetes各版本离线安装包 etcd 证书配置 生产环境中给etcd配置证书相当重要,如果没有证书,那么k8s集群很容易被黑客利用而去挖矿什么的。做法非常简单...
摘要:广告各版本离线安装包证书配置生产环境中给配置证书相当重要,如果没有证书,那么集群很容易被黑客利用而去挖矿什么的。细节问题非常多,一个端口,一个都不要填错,否则就会各种错误包括新加节点要清数据这些小细节问题。 广告 | kubernetes各版本离线安装包 etcd 证书配置 生产环境中给etcd配置证书相当重要,如果没有证书,那么k8s集群很容易被黑客利用而去挖矿什么的。做法非常简单...
摘要:庆幸,引入了这个抽象的概念。会虚拟出一个,并在它销毁之前保持该地址保持不变。通过对它的访问,以代理的方式负载到对应的上,同时生命周期的变换,也会及时反应在代理上。该与同名,它所暴露的地址信息正是对应的地址。由此猜测是维护了与的映射关系。 带着问题学 Kubernetes 抽象对象 Service 摘要:本文属于原创,欢迎转载,转载请保留出处:https://github.com/jas...
阅读 1640·2023-04-26 00:30
阅读 3113·2021-11-25 09:43
阅读 2768·2021-11-22 14:56
阅读 3163·2021-11-04 16:15
阅读 1108·2021-09-07 09:58
阅读 1996·2019-08-29 13:14
阅读 3085·2019-08-29 12:55
阅读 962·2019-08-29 10:57