kubernetes之Ingress详解

网友投稿 242 2022-09-09

kubernetes之Ingress详解

Ingress为Kubernetes集群中的服务提供了入口,可以提供负载均衡、SSL终止和基于名称的虚拟主机,在生产环境中常用的Ingress有Treafik、Nginx、HAProxy、Istio等。

一 、基本概念

在Kubernetesv 1.1版中添加的Ingress用于从集群外部到集群内部Service的HTTP和HTTPS路由,流量从Internet到Ingress再到Services最后到Pod上,通常情况下,Ingress部署在所有的Node节点上。

Ingress可以配置提供服务外部访问的URL、负载均衡、终止SSL,并提供基于域名的虚拟主机。但Ingress不会暴露任意端口或协议。

二、 创建一个Ingress

创建一个简单的Ingress如下:

apiVersion: networking.k8s.io/v1beta1kind: Ingressmetadata: name: simple-fanout-example annotations: nginx.ingress.kubernetes.io/rewrite-target: /spec: rules: - host: foo.bar.com paths: - path: /foo backend: serviceName: service1 servicePort: 4200 - path: /bar backend: serviceName: service2 servicePort: 8080

上述host定义该Ingress的域名,将其解析至任意Node上即可访问。

如果访问的是foo.bar.com/foo,则被转发到service1的4200端口。

如果访问的是foo.bar.com/bar,则被转发到service2的8080端口。

1. Ingress Rules

host:可选,一般都会配置对应的域名。

path:每个路径都有一个对应的serviceName和servicePort,在流量到达服务之前,主机和路径都会与传入请求的内容匹配。

backend:描述Service和Port的组合。对Ingress匹配主机和路径的HTTP与HTTPS请求将被发送到对应的后端。

2. 默认后端

没有匹配到任何规则的流量将被发送到默认后端。默认后端通常是Ingress Controller的配置选项,并未在Ingress资源中指定。​

三、 Ingress类型

1. 单域名

单个域名匹配多个path到不同的service:

此时,访问foo.bar.com/foo到service1的4200。访问foo.bar.com/bar到service2的8080。

apiVersion: networking.k8s.io/v1beta1kind: Ingressmetadata: name: simple-fanout-example annotations: nginx.ingress.kubernetes.io/rewrite-target: /spec: rules: - host: foo.bar.com paths: - path: /foo backend: serviceName: service1 servicePort: 4200 - path: /bar backend: serviceName: service2 servicePort: 8080

2. 多域名

基于域名的虚拟主机支持将HTTP流量路由到同一IP地址的多个主机名:

此时,访问foo.bar.com到service1,访问bar.foo.com到service2。

apiVersion: networking.k8s.io/v1beta1kind: Ingressmetadata: name: name-virtual-host-ingressspec: rules: - host: foo.bar.com paths: - backend: serviceName: service1 servicePort: 80 - host: bar.foo.com paths: - backend: serviceName: service2 servicePort: 80

3. 基于TLS的Ingress

首先创建证书,生产环境的证书为公司购买的证书:

kubectl -n default create secret tls nginx-test-tls --key=tls.key --cert=tls.crt

定义Ingress(此示例为Traefik,nginx-ingress将traefik改为nginx即可):

apiVersion: networking.k8s.io/v1beta1kind: Ingressmetadata: name: nginx- namespace: default annotations: kubernetes.io/ingress.class: traefikspec: rules: - host: traefix-test.com paths: - backend: serviceName: nginx-svc servicePort: 80 tls: - secretName: nginx-test-tls

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:德奥委会调查:多数运动员对参加奥运会信心坚定!
下一篇:二进制安装centos7安装glusterfs集群为kubernetes提供持久化存储,并作为kubesphere的默认存储
相关文章

 发表评论

暂时没有评论,来抢沙发吧~