带路由扇出的 Kubernetes - 对服务设置的基本了解

Kubernetes with route fanout - Basic understanding of Service setup

我对我对 k8s 集群设置的基本理解有疑问。

我在 Hetzner-cloud 上有一个 K8s 运行 并分配了一个“物理”Loadbalancer(可以通过服务上的 annotations 进行控制。) 我使用 nginx(或 traefik)作为我的 ingress-controller.

如有错误请指正:

  1. 我在与 ingress-controller 相同的 namespace 中使用 annotations 创建服务 Loadbalancer 对吗?
  2. 然后我在我的 default 命名空间中创建了一个带有标签 kubernetes.io/ingress-controller=nginxingress,其设置指向我在 default 命名空间中的服务(一个用于前端,一个用于后端)

这是正确的设置方法吗?

1.- 不。Ingress Controller 和您的工作负载不必位于同一个命名空间中。事实上,您将在与您的工作负载不同的命名空间中拥有 Ingress Controller 运行。

2.-是的。一般来说,你的 Ingress 规则,意味着你的 Ingress 对象,意味着你的 Ingress yaml 和你的 Service 必须在同一个命名空间中。所以 Ingress 无法传递命名空间。

注意:有一种方法可以让 Ingress 对象将流量发送到不同命名空间中的 Service

I create the service Loadbalancer with the annotations in the same namespace of my ingress-controller right?

理想情况下,您的入口控制器将 运行 在不同的命名空间中,您的工作负载不得 运行。

您应该只保留 Nginx 服务,type : Loadbalancer 您工作负载的其他服务应该是 ClusterIP

所以你的所有流量都从一个点进入集群。您的流程将类似于

DNS > LB > Ingress > Service > Pods > Container

Then I create an ingress with label kubernetes.io/ingress-controller=nginx in my default namespace with the settings to point to my services in the default namespace (one for frontend, one for backend)

你提到 label 理想情况下,它应该是 annotation kubernetes.io/ingress-controller=nginx.

是的,非常完美。您可以根据要公开公开的不同服务的要求,使用不同的注释规则创建不同的入口。

将您的工作负载保持在控制器的 默认 命名空间中,如果您还需要设置监控工具,您将来也可以使用不同的命名空间,例如 ingress-controller您可以创建命名空间并将其仅用于监控。