Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kubernetes-入口路由如何工作_Kubernetes_Kubernetes Ingress - Fatal编程技术网

Kubernetes-入口路由如何工作

Kubernetes-入口路由如何工作,kubernetes,kubernetes-ingress,Kubernetes,Kubernetes Ingress,我看到了一些示例,其中Kubernetes集群安装了ingress控制器,然后ingress类添加了注释和主机,如下所示 apiVersion: extensions/v1beta1 kind: Ingress metadata: annotations: kubernetes.io/ingress.class: nginx spec: rules: - host: testsvc.k8s.privatecloud.com http: 我不确定安装了哪个服务,哪个

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

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

spec:
 rules:
   - host: testsvc.k8s.privatecloud.com
     http:
我不确定安装了哪个服务,哪个IP配置了DNS“k8s.privatecloud.com”,以便路由请求? DNS路由如何将请求路由到Kubernetes群集?库伯内特斯桥的入口是如何工作的

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

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


感谢

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


子域路由传统上是通过“虚拟主机”(有时称为“v-host-ing”)完成的,nginx入口使用HTTP
host:
头来知道哪个后端服务应该接收该流量。除了@Matthew L Daniel answer之外,一些入口控制器还可以通过https使用SNI实现同样的技巧。

。 kubernetes入口充当外部网络和集群之间的代理。入口的行为在中进行了解释。例如:

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

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

我使用的是一个由几个linux虚拟机组成的私有云。那么,我是否需要一个具有DNS名称(k8s.privatecloud.com)的网络负载平衡器,它将请求路由到Kubernetes中的入口控制器,入口将使用相应服务的子域路由?这取决于字节如何从Internet到达您的几个linux虚拟机;如果您能够从VM向Internet公开一个(或两个)端口,那么就不需要网络负载平衡器,因为nginx正在为您做这件事。如果Internet和集群的节点之间有更多的层,那么是的,需要一个单独的机制将字节下放到集群中nginx的端口。至于DNS名称,这取决于您是否希望
k8s.privatecloud.com
也由您的入口管理,在这种情况下是的,
k8s.privatecloud.com
*.k8s.privatecloud.com
都应该指向将互联网流量发送到节点上的nginx端口的相同机制在将互联网流量发送到nginx(所有*.k8s.privatecloud.com发送到nginx)之后,它如何将请求路由到Kubernetes集群中的相应服务?这种桥接是如何工作的?nginx至kubernets集群。我们在哪里配置?请阅读入口文档,这些问题不可能在600个字符的注释框中得到回答