AKS Kubernetes 问题
AKS Kubernetes questions
有人可以解释一下 POD 到 POD 在 AKS 中的工作原理吗?
从文档中,我可以看到它使用 kube 代理组件将流量发送到所需的 POD。
但我被告知必须使用 clusterIP 服务并将所有相关的 POD 绑定在一起。
那么什么是真正的流量呢?或者我错过了什么。下面几个问题更清楚。
问题:
- 一个节点内的POD到POD如何相互通信?流量是多少?
- 一个集群(不同节点)内的 POD 到 POD 如何相互通信?流量是多少?
- 如果可能的话,如果您能描述 kubenet 和 CNI 部署中 #1 和 #2 的流程,我们将不胜感激。
非常感谢!
对于 pod 到 pod 的通信,我们使用 services
。所以首先我们需要了解,
为什么我们需要服务: 实际为我们提供服务的是什么,他们解析 dns 名称并为我们提供连接特定 pod 所需的确切 ip。现在,当您想与 pod 通信时,您需要创建一个 ClusterIP
服务。
ClusterIP: 在集群内部 IP 上公开服务。选择此值会使服务只能从集群内访问。这是默认的服务类型。使用 ClusterIP 服务,您无法从集群外部访问 pod,因此如果我们只想在 pod 与 pod 之间进行通信,我们会使用 clusterip 服务。
kube-proxy 是在集群中每个节点上运行的网络代理。
它维护节点上的网络规则。这些网络规则允许从集群内部或外部的网络会话与您的 Pods 进行网络通信。
每个服务维护 iptables.And kube-proxy 为每个服务处理这些 ip 表。所以是的,kube-proxy 是我们 k8s 集群中网络设置最重要的一点。
网络策略在 kubernetes 中的工作原理:
- 所有 Pods 可以在不使用网络地址转换 (NAT) 的情况下与所有其他 Pods 通信。
- 所有节点都可以在没有 NAT 的情况下与所有 Pods 通信。
- Pod 认为自己的 IP 与其他人认为的 IP 相同。
那些点:
- 容器到容器网络
- Pod 到 Pod 网络
- Pod 到服务网络
- 互联网到服务网络
它处理 pod 与 pods 之间以及与外界的数据包传输。通过使用 iptables
.
中的 NAT
实现负载平衡,它就像节点上 pods 运行 的网络代理和负载平衡器
kube-proxy 进程位于 Kubernetes 网络和该特定节点上 运行 的 pods 之间。它负责确保在集群的所有元素之间有效地维护通信。当用户创建 Kubernetes 服务对象时,kube-proxy 实例负责将该对象转换为工作节点上本地 iptables
规则集中有意义的规则。 iptables 用于将分配给服务对象的虚拟 IP 转换为该服务映射的所有 pod IP。
我希望你对 kube 代理的想法很清楚。
让我们看看它是如何工作的。
在这里我使用 headless service
以便我可以连接特定的 pod。
---
apiVersion: v1
kind: Service
metadata:
name: my-service
namespace: default
spec:
clusterIP: None
selector:
app: my-test
ports:
- port: 80
name: rest
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: my-sts
spec:
serviceName: my-service
replicas: 3
selector:
matchLabels:
app: my-test
template:
metadata:
labels:
app: my-test
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
name: web
---
这将创建 3 个 pods。如:my-sts-0
、my-sts-1
、my-sts-2
。现在,如果我们想连接到 pod my-sts-0
,只需使用此 dns 名称 my-sts-0.my-service.default.svc:80
。该服务将解析 dns 名称并提供 my-sts-0
的确切 podip。现在如果你需要从 my-sts-1
到 my-sts-0
通信,你可以使用这个 dns 名称。
模板类似于 my_pod_name.my_Service_Name.my_Namespace.svc.cluster-domain.example
,但您可以跳过 cluster-domain.example 部分。只有 Service_Name.Namespace.svc
可以正常工作。
有人可以解释一下 POD 到 POD 在 AKS 中的工作原理吗? 从文档中,我可以看到它使用 kube 代理组件将流量发送到所需的 POD。
但我被告知必须使用 clusterIP 服务并将所有相关的 POD 绑定在一起。 那么什么是真正的流量呢?或者我错过了什么。下面几个问题更清楚。
问题:
- 一个节点内的POD到POD如何相互通信?流量是多少?
- 一个集群(不同节点)内的 POD 到 POD 如何相互通信?流量是多少?
- 如果可能的话,如果您能描述 kubenet 和 CNI 部署中 #1 和 #2 的流程,我们将不胜感激。
非常感谢!
对于 pod 到 pod 的通信,我们使用 services
。所以首先我们需要了解,
为什么我们需要服务: 实际为我们提供服务的是什么,他们解析 dns 名称并为我们提供连接特定 pod 所需的确切 ip。现在,当您想与 pod 通信时,您需要创建一个 ClusterIP
服务。
ClusterIP: 在集群内部 IP 上公开服务。选择此值会使服务只能从集群内访问。这是默认的服务类型。使用 ClusterIP 服务,您无法从集群外部访问 pod,因此如果我们只想在 pod 与 pod 之间进行通信,我们会使用 clusterip 服务。
kube-proxy 是在集群中每个节点上运行的网络代理。
它维护节点上的网络规则。这些网络规则允许从集群内部或外部的网络会话与您的 Pods 进行网络通信。 每个服务维护 iptables.And kube-proxy 为每个服务处理这些 ip 表。所以是的,kube-proxy 是我们 k8s 集群中网络设置最重要的一点。
网络策略在 kubernetes 中的工作原理:
- 所有 Pods 可以在不使用网络地址转换 (NAT) 的情况下与所有其他 Pods 通信。
- 所有节点都可以在没有 NAT 的情况下与所有 Pods 通信。
- Pod 认为自己的 IP 与其他人认为的 IP 相同。
那些点:
- 容器到容器网络
- Pod 到 Pod 网络
- Pod 到服务网络
- 互联网到服务网络
它处理 pod 与 pods 之间以及与外界的数据包传输。通过使用 iptables
.
NAT
实现负载平衡,它就像节点上 pods 运行 的网络代理和负载平衡器
kube-proxy 进程位于 Kubernetes 网络和该特定节点上 运行 的 pods 之间。它负责确保在集群的所有元素之间有效地维护通信。当用户创建 Kubernetes 服务对象时,kube-proxy 实例负责将该对象转换为工作节点上本地 iptables
规则集中有意义的规则。 iptables 用于将分配给服务对象的虚拟 IP 转换为该服务映射的所有 pod IP。
我希望你对 kube 代理的想法很清楚。
让我们看看它是如何工作的。
在这里我使用 headless service
以便我可以连接特定的 pod。
---
apiVersion: v1
kind: Service
metadata:
name: my-service
namespace: default
spec:
clusterIP: None
selector:
app: my-test
ports:
- port: 80
name: rest
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: my-sts
spec:
serviceName: my-service
replicas: 3
selector:
matchLabels:
app: my-test
template:
metadata:
labels:
app: my-test
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
name: web
---
这将创建 3 个 pods。如:my-sts-0
、my-sts-1
、my-sts-2
。现在,如果我们想连接到 pod my-sts-0
,只需使用此 dns 名称 my-sts-0.my-service.default.svc:80
。该服务将解析 dns 名称并提供 my-sts-0
的确切 podip。现在如果你需要从 my-sts-1
到 my-sts-0
通信,你可以使用这个 dns 名称。
模板类似于 my_pod_name.my_Service_Name.my_Namespace.svc.cluster-domain.example
,但您可以跳过 cluster-domain.example 部分。只有 Service_Name.Namespace.svc
可以正常工作。