Kubernetes:多域设置和 loadbalancer/ingress 策略

Kubernetes: multiple domain setup and loadbalancer/ingress strategy

如何在同一个集群中使用多个域?

目前我有 运行 一个集群,其中 一个域 指向硬件 loadbalancertraefik 作为 ingress-controller.

现在我想添加第二个域指向不同的workloads/services。

我需要

  1. 第二个 ingress-controller 和第二个 LoadBalancer(并将第二个域指向第二个 LB)?
  2. 将第二个域指向相同的第一个域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 内部,您必须为两个域添加 ACNAME 值.

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,因为我们不想直接从互联网。

阅读更多信息:https://medium.com/kubernetes-tutorials/deploying-traefik-as-ingress-controller-for-your-kubernetes-cluster-b03a0672ae0c