【发布时间】:2021-03-05 11:49:36
【问题描述】:
我很难理解 Kubernetes 网络架构到底是什么样的。
作为一个基本的理解,“每个 IP 后面都有一台机器”,但是在托管在某个地方的集群内的节点内的 Pod 内有这些容器。
添加服务、部署和其他 kubernetes 对象,使其更加混乱。文档对此并不十分清楚。我只是迷路了,双手举在空中
我能否要求简要说明什么网络位于哪个网络中,以及哪些元素具有 IP 和/或端口?
【问题讨论】:
标签: kubernetes
我很难理解 Kubernetes 网络架构到底是什么样的。
作为一个基本的理解,“每个 IP 后面都有一台机器”,但是在托管在某个地方的集群内的节点内的 Pod 内有这些容器。
添加服务、部署和其他 kubernetes 对象,使其更加混乱。文档对此并不十分清楚。我只是迷路了,双手举在空中
我能否要求简要说明什么网络位于哪个网络中,以及哪些元素具有 IP 和/或端口?
【问题讨论】:
标签: kubernetes
“每个IP后面都有一台机器”
我不确定你说的是哪个IP
如果我们关注main,Kubernetes中有多个组件
现在,如果谈论管理流量,它的工作原理就像
入口 > 入口控制器 > 服务 > 部署 > POD > 容器
为每个 POD(工作负载)分配了 IP
但是在正常情况下它没有用,它由 K8s 自动管理,与它无关。
它将是内部 IP,因此您无法从 Kubernetes 外部连接 POD 的工作负载。
现在我们有了服务类型
集群 IP 与 Kubernetes 管理的内部 IP 相同。
负载平衡器暴露在互联网上,就像您将 LB 附加到您的工作负载或应用程序一样,因此它将暴露在互联网上。
在这种情况下,您将获得对互联网开放的外部 IP。
这就像实习生拱门。
如果我们谈论简单的集群架构
有主节点和工作节点
工作节点具有基于您的私有 Kubernetes 集群或公共 Kubernetes 集群的内部和外部 IP。
每个容器或 POD 在工作节点上运行,并且在理想情况下具有内部 IP。
多个工作负载或容器可以在单个机器或单个 VM 节点上运行。
端口的使用方式与我们通常使用的方式相同。
例如这是我的测试服务:
apiVersion: v1
kind: Service
metadata:
name: test
labels:
app: test
spec:
ports:
- name: http
port: 80
targetPort: 9595
- name: https
port: 9595
targetPort: 9595
selector:
app: test
tier: frontend
它暴露了两个端口 80 和 9595。如果你仔细观察targetPort: 9595,在这两种情况下都有一个目标端口,它将流量转移到我的容器或工作负载所在的 9595 端口正在运行。
【讨论】:
mysql-database 等服务调用您的数据库,它将自动解析IP。您的 app2 想要调用 app1 只需使用服务名称即可。