3

我看到了一些示例,其中 Kubernetes 集群安装了入口控制器,然后入口类添加了注释和主机,如下所示。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
 annotations:
    kubernetes.io/ingress.class: nginx

spec:
 rules:
   - host: testsvc.k8s.privatecloud.com
     http:

我不确定安装了哪个服务以及使用 DNS “k8s.privatecloud.com”配置了哪个 IP以便路由请求?DNS 路由“k8s.privatecloud.com”如何将请求路由到 Kubernetes 集群?Kubernetes 桥接的入口如何工作?

此外,可能有许多服务配置了 hosts 规则,例如,

testsvc.k8s.privatecloud.com
testsvc1.k8s.privatecloud.com
testsvc2.k8s.privatecloud.com

当我们点击服务 testsvc.k8s.privatecloud.com 或 testsvc1.k8s.privatecloud.com 时,子域路由在这里是如何工作的...

谢谢

4

2 回答 2

1

您给定示例中所有主机名的 DNS(例如testsvc.k8s.privatecloud.com)将指向机器或负载均衡器,流量将通过该机器或负载均衡器到达 Ingress 控制器的 nginx,如kuberetes Ingress 文档中所述

子域路由传统上是通过“虚拟主机”(有时称为“v-host-ing”)完成的,nginx 入口使用 HTTPHost:标头来了解哪个后端服务应该接收该流量。一些 Ingress 控制器能够通过 https 使用 SNI 来实现相同的技巧。

于 2018-03-22T05:48:46.810 回答
1

除了@Matthew L Daniel 的回答。kubernetes Ingress 充当外部网络和集群之间的代理。入口的行为在对象入口中解释。例如:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test
  annotations:
    ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: foo.bar.com
    http:
      paths:
      - path: /foo
        backend:
          serviceName: s1
          servicePort: 80
      - path: /bar
        backend:
          serviceName: s2
          servicePort: 80

上面解释了如何在 2 个后端 s1 和 s2 之间路由流量。除了名称和端口之外,Ingress 不保存有关服务的任何信息,每次需要更多详细信息时,都需要从 api-server 请求。

于 2018-03-22T10:23:09.760 回答