【问题标题】:Kubernetes : What is hostPort and hostIp used for?Kubernetes:hostPort 和 hostIp 是干什么用的?
【发布时间】:2020-09-01 16:39:12
【问题描述】:

我尝试了解 Kubernetes 中的 hostIP 和 hostPort。

这是我的集群配置:

3个流浪节点:

nodes = [
  { :hostname => 'k8s-master', :ip => '192.168.150.200', :ram => 4096 },
  { :hostname => 'k8s-minion1', :ip => '192.168.150.201', :ram => 4096 },
  { :hostname => 'k8s-minion2', :ip => '192.168.150.202', :ram => 4096 },
]

我写了以下清单来测试它:

apiVersion: v1
kind: Pod
metadata:
  name: firstpod
spec:
  containers:
  - name: container
    image: nginx
    ports:
    - containerPort: 80
      hostIP: 10.0.0.1
      hostPort: 8080

我使用kubectl apply -f port.yml 进行部署 pod 在 k8s-minion2 上运行

kubectl get pods -o wide gives :
NAME       READY     STATUS    RESTARTS   AGE       IP          NODE
firstpod   1/1       Running   0          2m        10.38.0.3   k8s-minion2

我可以从集群内部卷曲 ngnix,如下所示:

#ssh inside the cluster
    vagrant ssh k8s-master
#curl the containerPort on the pod ip
    curl 10.38.0.3:80

但是,我不知道如何使用 hostIp 和 hostPort。 curl 10.0.0.1:8080 给出:

curl: (7) Failed to connect to 10.0.0.1 port 80: Connection timed out

卷曲节点或集群 Ip 给出:

curl: (7) Failed to connect to 10.38.0.3 port 8080: Connection refused

那么 8080 端口在哪里开放,hostIp 的用途是什么?

谢谢

【问题讨论】:

  • 试试nodeip:8080

标签: kubernetes port cluster-computing kubernetes-pod


【解决方案1】:

如果您查看 kubernetes API reference,您会发现 hostIP 是在将 pod 调度到节点后分配的 IP。

hostIP (string) - pod 所在主机的 IP 地址 分配的。如果尚未安排,则为空。

如果需要,这可以进一步 exposed 作为 pod 内的环境 (spec.hostIP)

使用hostPort,您可以将容器端口暴露给外部网络:,其中hostIP是运行容器的Kubernetes节点的IP地址,hostPort是用户请求的端口。你可以阅读更多关于here的信息。

如果您想访问您的 pod,还有其他方法可以做到这一点,例如 ClusterIPNodePort,具体取决于请求来自内部还是外部。这个article 介绍了它们及其差异。

【讨论】:

  • 感谢@thomas 的回答。你怎么理解你引用的那句话。因为在我看来,hostIP 字段在我的清单中被简单地忽略了。我的 pod 分配到的节点的 IP 地址是 192.168.150.202,例如将其设置为 minion1 不会改变任何内容。主机和节点有什么区别? hostIp 字段的有效值是多少?再次感谢。
  • 主机/节点是运行 k8s 集群的底层基础设施的一部分。所以你不能用 k8s yaml 文件更改/定义它的 IP 地址。
  • 再次感谢@thomas。如果我理解您所说的话,hostIp 由系统填充。但是文档没有说明它,并且 kubectl geet podd firstpod -o yaml 似乎没有填充这个字段?也许它已被弃用或遗留?请注意,我说的是裸体 pod,而不是服务。
  • 对我来说它可以工作,我可以看到主机IP。我正在使用 1.18.3 进行测试。只使用 pod 很好,但由于 pod 是一次性的和可更换的,最好使用一些静态服务来接触它们;)
【解决方案2】:

ClusterIP (10.38.0.3) 只能从集群内部访问。要从集群外部访问服务,请尝试 nodeIP:port 192.168.150.202:8080

NodePort 服务类型允许我们在每个节点上公开我们的服务 静态端口的 IP。因此,它允许从 在集群之外。

【讨论】:

  • 没有。 curl 192.168.150.202:8080 导致: curl: (7) 无法连接到 192.168.150.202 端口 8080:连接被拒绝。请注意,我没有在 pod 后面使用任何服务。这只是为了测试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-30
  • 2017-11-03
  • 2014-12-20
  • 2021-07-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多