Kubernetes:多域设置和 loadbalancer/ingress 策略
Kubernetes: multiple domain setup and loadbalancer/ingress strategy
如何在同一个集群中使用多个域?
目前我有 运行 一个集群,其中 一个域 指向硬件 loadbalancer
和 traefik
作为 ingress-controller
.
现在我想添加第二个域指向不同的workloads/services。
我需要
- 第二个
ingress-controller
和第二个 LoadBalancer
(并将第二个域指向第二个 LB)?
- 将第二个域指向相同的第一个域
LoadBalancer
仅使用一个“ingress-controller”?
我在问,因为我在将第二个域指向第二个 Loadbalancer
并将那个域指向现有的 ingress-controller
时遇到了麻烦(没有任何反应)
但是当我将 第二个域 指向第一个 Loadbalancer 时,它似乎按预期工作。
(我的猜测是:解决方案“2”)?
(我想保留一个 Ingress-controller,以为我需要两个 loadbalanacers)
是否与443、80端口被占用有关?
谢谢
我的工作方式:
- 我使用两个域,都指向 Loadbalancer(在我的例子中是 Hetzner)
- 我创建了一个服务
type: LoadBalancer
,我用相应的值对其进行注释:
load-balancer.hetzner.cloud/hostname: my.domain.com
load-balancer.hetzner.cloud/name: myloadbalancer-name
load-balancer.hetzner.cloud/protocol: http
- 我用
kubernetes.io/ingress.class: traefik
注释我的 Ingress 服务。
- 我添加了到那个入口的路由。
┌────────────┐
│ │
│ Domain A │───┐
│ │ │
└────────────┘ │ ┌───────────────┐
├───▶│ Loadbalancer A│
┌────────────┐ │ └───────────────┘
│ │ │ │
│ Domain B │───┘ ▼
│ │ ┌─────────────────┐ ┌───────────────────┐
└────────────┘ │Service │ │Ingress │
│ │◀────│ / -> frontend │
└─────────────────┘ │ /api -> backend │
│ └───────────────────┘
┌──────┴──────┐
▼ ▼
┌───────────┐ ┌───────────┐
│Service │ │Service │
│ FRONTEND │ │ BACKEND │
│ │ │ │
└───────────┘ └───────────┘
a second ingress-controller with a second LoadBalancer (and pointing
the second domain to that second LB)?
否 不需要第二个 LoadBalancer。您可以单个由入口控制器支持的 LB 并映射多个域。
将第二个域指向同一个第一个 LoadBalancer 以仅使用一个“ingress-controller”?
是的,您可以使用单个入口控制器,在 DNS 内部,您必须为两个域添加 A 值 CNAME 值.
从 DNS 所有流量都将转发到 LB,后者由 ingress controller[=55] 提供支持=].
如果您正在使用 Nginx 入口控制器,不同的域或主机就像配置中的那样
spec:
rules:
- host: foobar.com
http:
paths:
- backend:
serviceName: foobar
servicePort: 80
- host: api.foobar.com
http:
paths:
- backend:
serviceName: foobar
servicePort: 80
对于 treafik 也将是 相同的,否则您可以创建两个单独的入口而不是一个。
入口-1.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: kubernetes-dashboard
spec:
rules:
- host: dashboard.test.domain.com
http:
paths:
- path: /
backend:
serviceName: frontend
servicePort: 80
入口-2.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: kubernetes-ingress-two
spec:
rules:
- host: dashboard.domain.com
http:
paths:
- path: /api
backend:
serviceName: backend
servicePort: 80
您可以在入口实施基于路径的进一步路由。
所以你在所有拱门上都会像
所有流量都来自一个点,treafik 控制器,它公开为 Loadbalancer 服务。
所有其他 微服务 将 运行 作为 ClusterIP,因为我们不想直接从互联网。
如何在同一个集群中使用多个域?
目前我有 运行 一个集群,其中 一个域 指向硬件 loadbalancer
和 traefik
作为 ingress-controller
.
现在我想添加第二个域指向不同的workloads/services。
我需要
- 第二个
ingress-controller
和第二个LoadBalancer
(并将第二个域指向第二个 LB)? - 将第二个域指向相同的第一个域
LoadBalancer
仅使用一个“ingress-controller”?
我在问,因为我在将第二个域指向第二个 Loadbalancer
并将那个域指向现有的 ingress-controller
时遇到了麻烦(没有任何反应)
但是当我将 第二个域 指向第一个 Loadbalancer 时,它似乎按预期工作。
(我的猜测是:解决方案“2”)?
(我想保留一个 Ingress-controller,以为我需要两个 loadbalanacers)
是否与443、80端口被占用有关?
谢谢
我的工作方式:
- 我使用两个域,都指向 Loadbalancer(在我的例子中是 Hetzner)
- 我创建了一个服务
type: LoadBalancer
,我用相应的值对其进行注释:load-balancer.hetzner.cloud/hostname: my.domain.com
load-balancer.hetzner.cloud/name: myloadbalancer-name
load-balancer.hetzner.cloud/protocol: http
- 我用
kubernetes.io/ingress.class: traefik
注释我的 Ingress 服务。- 我添加了到那个入口的路由。
┌────────────┐
│ │
│ Domain A │───┐
│ │ │
└────────────┘ │ ┌───────────────┐
├───▶│ Loadbalancer A│
┌────────────┐ │ └───────────────┘
│ │ │ │
│ Domain B │───┘ ▼
│ │ ┌─────────────────┐ ┌───────────────────┐
└────────────┘ │Service │ │Ingress │
│ │◀────│ / -> frontend │
└─────────────────┘ │ /api -> backend │
│ └───────────────────┘
┌──────┴──────┐
▼ ▼
┌───────────┐ ┌───────────┐
│Service │ │Service │
│ FRONTEND │ │ BACKEND │
│ │ │ │
└───────────┘ └───────────┘
a second ingress-controller with a second LoadBalancer (and pointing the second domain to that second LB)?
否 不需要第二个 LoadBalancer。您可以单个由入口控制器支持的 LB 并映射多个域。
将第二个域指向同一个第一个 LoadBalancer 以仅使用一个“ingress-controller”?
是的,您可以使用单个入口控制器,在 DNS 内部,您必须为两个域添加 A 值 CNAME 值.
从 DNS 所有流量都将转发到 LB,后者由 ingress controller[=55] 提供支持=].
如果您正在使用 Nginx 入口控制器,不同的域或主机就像配置中的那样
spec:
rules:
- host: foobar.com
http:
paths:
- backend:
serviceName: foobar
servicePort: 80
- host: api.foobar.com
http:
paths:
- backend:
serviceName: foobar
servicePort: 80
对于 treafik 也将是 相同的,否则您可以创建两个单独的入口而不是一个。
入口-1.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: kubernetes-dashboard
spec:
rules:
- host: dashboard.test.domain.com
http:
paths:
- path: /
backend:
serviceName: frontend
servicePort: 80
入口-2.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: kubernetes-ingress-two
spec:
rules:
- host: dashboard.domain.com
http:
paths:
- path: /api
backend:
serviceName: backend
servicePort: 80
您可以在入口实施基于路径的进一步路由。
所以你在所有拱门上都会像
所有流量都来自一个点,treafik 控制器,它公开为 Loadbalancer 服务。
所有其他 微服务 将 运行 作为 ClusterIP,因为我们不想直接从互联网。