kubernetes - AKS Kubernetes 问题
问题描述
有人可以解释一下 POD 到 POD 在 AKS 中的工作原理吗?从文档中,我可以看到它使用 kube 代理组件将流量发送到所需的 POD。
但有人告诉我,我必须使用clusterIP服务并将所有相关的 POD 绑定在一起。那么什么是真正的流量?或者我错过了什么。下面几个问题更清楚。
问题:
- 一个节点内的 POD 到 POD 如何相互通信?什么是流量?
- 集群内的 POD 到 POD(不同节点)如何相互通信?什么是流量?
- 如果可能的话,如果您能描述 kubenet 和 CNI 部署中#1 和 #2 的流程,将不胜感激。
非常感谢!
解决方案
对于 pod 到 pod 的通信,我们使用services
. 所以首先我们需要了解,
为什么我们需要服务:实际上为我们提供了什么服务,它们解析 dns 名称并为我们提供连接特定 pod 所需的确切 IP。现在,当您想与 pod 到 pod 进行通信时,您需要创建一个ClusterIP
服务。
ClusterIP:在集群内部 IP 上公开服务。选择此值使服务只能从集群内访问。这是默认的服务类型。使用 ClusterIP 服务,您无法从集群外部访问 pod,因此如果我们只想在 pod 与 pod 之间进行通信,我们会使用 clusterip 服务。
kube-proxy是在集群中每个节点上运行的网络代理。
它维护节点上的网络规则。这些网络规则允许从集群内部或外部的网络会话与 Pod 进行网络通信。每个服务都维护 iptables。kube-proxy 为每个服务处理这些 ip 表。所以是的,kube-proxy 是我们 k8s 集群中网络设置的最重要的一点。
网络策略在 Kubernetes 中的工作原理:
- 所有 Pod 都可以在不使用网络地址转换 (NAT) 的情况下与所有其他 Pod 通信。
- 所有节点都可以在没有 NAT 的情况下与所有 Pod 通信。
- Pod 认为自己的 IP 与其他人认为的 IP 相同。
与那些点:
- 容器到容器网络
- Pod 到 Pod 网络
- Pod 到服务网络
- 互联网到服务网络
它处理 pod 到 pod 之间以及与外界的数据包传输。NAT
它通过使用in实现负载平衡,充当节点上运行的 pod 的网络代理和负载平衡器iptables
。
kube-proxy 进程位于 Kubernetes 网络和在该特定节点上运行的 Pod 之间。它负责确保在集群的所有元素之间有效地维护通信。当用户创建 Kubernetes 服务对象时,kube-proxy 实例负责将该对象转换iptables
为工作节点上本地规则集中的有意义的规则。iptables 用于将分配给服务对象的虚拟 IP 转换为服务映射的所有 pod IP。我希望你对 kube 代理的想法很清楚。
让我们看一个例子它是如何工作的。我在这里使用headless service
,以便我可以连接特定的吊舱。
---
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 个 pod。如 : 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
. 现在如果你需要从my-sts-1
to通信my-sts-0
,你可以使用这个 dns 名称。
模板类似于my_pod_name.my_Service_Name.my_Namespace.svc.cluster-domain.example
,但您可以跳过 cluster-domain.example 部分。只有Service_Name.Namespace.svc
工作正常。
推荐阅读
- c - C语言中的克鲁斯卡尔算法及其作用
- javascript - 未安装的 React 组件溢出的 Redux 警告
- ionic-framework - IONIC 4:来自 api 加载的图像在 android 版本 apk 上失败
- python - 找不到用于网络抓取的表
- python - 如何添加跟随玩家的敌人精灵
- c# - 使用位掩码查找 C# 中使用的整数排列?
- html - 如何使用 HTML 和 CSS 用红色、绿色和蓝色单独的组件叠加 3 个图像?
- javascript - 为什么我的手风琴不能一直关闭?
- reactjs - FlatList 没有在 react-native-tab-view 中呈现我的数据
- java - 尝试使用 setImageResource 时应用程序崩溃