首页 > 解决方案 > AKS Kubernetes 问题

问题描述

有人可以解释一下 POD 到 POD 在 AKS 中的工作原理吗?从文档中,我可以看到它使用 kube 代理组件将流量发送到所需的 POD。

但有人告诉我,我必须使用clusterIP服务并将所有相关的 POD 绑定在一起。那么什么是真正的流量?或者我错过了什么。下面几个问题更清楚。

问题:

  1. 一个节点内的 POD 到 POD 如何相互通信?什么是流量?
  2. 集群内的 POD 到 POD(不同节点)如何相互通信?什么是流量?
  3. 如果可能的话,如果您能描述 kubenet 和 CNI 部署中#1 和 #2 的流程,将不胜感激。

非常感谢!

标签: kubernetesazure-aks

解决方案


对于 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-1to通信my-sts-0,你可以使用这个 dns 名称。

模板类似于my_pod_name.my_Service_Name.my_Namespace.svc.cluster-domain.example,但您可以跳过 cluster-domain.example 部分。只有Service_Name.Namespace.svc工作正常。

参考


推荐阅读