docker desktop kubernetes -如何映射端口与ClusterFirstWithHostNet.&l



我在windows上使用docker的kubernetes,我遇到了问题。我使用statfulset与以下部分的配置:

spec:
terminationGracePeriodSeconds: 300
hostNetwork: true
dnsPolicy: ClusterFirstWithHostNet

在经典kubernetes中,该规范在节点ip上公开pod的所有端口,因此所有端口都可以通过它访问。我正试图从docker for windows在kubernetes上开发它,但似乎我无法通过它的ip访问节点(如minikube或microk8s),但docker for windows将本地主机映射到集群。所以这里有一个问题:这个配置暴露了节点ip上的所有端口,例如192.168.65.4,但我不能从windows访问它-我只能通过localhost访问集群,但它只暴露了协议相关的端口,例如443。因此,当我的服务在端口上运行时,即10433,localhost:10433无法访问,但通常也无法通过节点ip访问。是否有任何方法可以将其配置为像经典kubernetes一样工作,其中所有端口都是公开的?我知道可以通过NodePort暴露单个端口,但对我来说,暴露pod中的所有端口以模仿真正的kubernetes行为对我来说很重要

一般来说,Docker主机网络不能在非linux平台上工作。它被接受为一个有效的Docker选项,但是"主机"选项网络实际上并不是物理系统的网络。这可能也适用于嵌入在Docker Desktop中的Kubernetes设置。

在Kubernetes中,很少需要主机网络,甚至更不寻常。主机网络禁用正常的容器间通信机制。特别是Kubernetes有一个复杂的网络环境,通常有多个节点;选择退出这样的网络设置可能会导致无法从集群内部或外部访问您的服务。

您应该使用正常的Kubernetes网络设置,而不是主机网络。几乎你创建的每个部署都需要一个匹配的服务,如果你将服务设置为具有type: nodePort,那么它将可以从集群外部访问(尝试分配的nodePort:号和服务的集群内部port:;不清楚Docker Desktop实际使用的是哪个端口)。

对于某些目的,最简单的方法是设置一个本地端口转发到服务
kubectl port-forward deployment/some-deployment 8888:3000

将设置一个端口转发,从本地系统上的端口8888到指定部署管理的pod上的端口3000。这将转发到一个单个pod(如果您有多个副本,它只针对其中一个),它比直接连接慢,并且端口转发偶尔会失败,但对于数据库迁移等维护任务来说,这已经足够了。

模仿真实的kubernetes行为

在我正常工作的环境中,每个集群有几十到几百个节点。这些节点不能从集群外部直接访问。配置PodSecurityPolicy来禁止主机联网也是相当常见的,因为它可以被视为安全问题。

相关内容

  • 没有找到相关文章

最新更新