kubernetes - Kubernetes 中的默认负载平衡

标签 kubernetes

我最近开始使用 Kubernetes 集群。我们集群中给定 Kubernetes 服务的网络调用流程类似于以下内容:

外部非 K8S 负载均衡器 -> Ingress Controller -> Ingress Resource -> Service -> Pod

对于给定的服务,有两个副本。通过查看副本中容器的日志,我可以看到调用被路由到不同的 pod。据我所知,我们还没有在任何地方为 Kubernetes 中的服务明确设置任何负载平衡策略。

我有几个问题:

1) K8S 有默认的负载均衡策略吗?我已经阅读了 kube-proxy 和随机路由。它绝对不是循环的。
2) 有没有明显的方法可以在 Ingress 资源本身中指定负载均衡规则?以每项服务为基础?

查看我们的 Ingress 资源之一,我可以看到“loadBalancer”属性为空:

---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
ingress.kubernetes.io/rewrite-target: /
kubectl.kubernetes.io/last-applied-configuration: |
  {"apiVersion":"extensions/v1beta1","kind":"Ingress","metadata":{"annotations":{"ingress.kubernetes.io/rewrite-target":"/","nginx.ingress.kubernetes.io/rewrite-target":"/"},"name":"example-service-ingress","namespace":"member"},"spec":{"rules":[{"host":"example-service.x.x.x.example.com","http":{"paths":[{"backend":{"serviceName":"example-service-service","servicePort":8080},"path":""}]}}]}}
nginx.ingress.kubernetes.io/rewrite-target: /
  creationTimestamp: "2019-02-13T17:49:29Z"
  generation: 1
  name: example-service-ingress
  namespace: x
  resourceVersion: "59178"
  selfLink: /apis/extensions/v1beta1/namespaces/x/ingresses/example-service-ingress
  uid: b61decda-2fb7-11e9-935b-02e6ca1a54ae
spec:
  rules:
  - host: example-service.x.x.x.example.com
    http:
      paths:
      - backend:
          serviceName: example-service-service
          servicePort: 8080
status:
  loadBalancer:
    ingress:
    - {}

我应该指定 - 我们使用的是本地 Kubernetes 集群,而不是在云上。

干杯!

最佳答案

服务的 Pod 之间的“内部负载平衡”已经在 this question from a few days ago 中介绍过。 .

Ingress 并没有真正做任何特别的事情(除非你在它使用的 NGINX 配置中进行了黑客攻击)——它将使用与链接问题相同的服务规则。

如果您想要或需要对 Pod 如何在服务内路由的细粒度控制,可以扩展 Kubernetes 的功能 - 我建议您查看 Istio 的流量管理功能,因为它的功能之一是能够动态控制服务中不同 pod 接收的流量。

关于kubernetes - Kubernetes 中的默认负载平衡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54736107/

相关文章:

kubernetes - 芭蕾舞女 Actor “undefined package ”与Visual Code中的kubernetes

kubernetes - 如何将文件路径读入 Kubernetes 集群中的队列?

kubernetes - 你能根据端口路由 Kubernetes 入口资源吗?

kubernetes - 如何使用 443/80 在 prem 上公开 kubernetes 服务

nginx - Ingress 不转发请求 - 适用于 Windows 和 kubernetes 的 Docker 桌面

kubernetes - kubelet.service:服务延期超时,计划重新启动

kubernetes - 在 Ingress 上启用 IAP

python - 在 K8s pod 中运行的 Logstash 容器的 http 插件应使用什么主机和端口?

ubuntu - microk8s 没有运行。使用 microk8s inspect 进行更深入的检查

dns - 在 Kubernetes 集群外访问 kube-dns