创建 Ingress
Ingress 规则(Kubernetes Ingress)将集群外部的 HTTP/HTTPS 路由暴露到内部路由(Kubernetes Service),实现对计算组件的外部访问控制。
创建一个 Ingress 来管理对 Service 的外部 HTTP/HTTPS 访问。
在同一命名空间内创建多个 ingress 时,不同的 ingress 不得 具有相同的 域名、协议 和 路径(即不允许重复的访问入口)。
目录
实现方式
Ingress 规则依赖于 Ingress Controller 的实现,Ingress Controller 负责监听 Ingress 和 Service 的变化。在创建新的 Ingress 规则后,Ingress Controller 内部会自动生成与该 Ingress 规则匹配的转发规则。当 Ingress Controller 收到请求时,会根据 Ingress 规则匹配转发规则,并将流量分发到指定的内部路由,如下图所示。
对于 HTTP 协议,Ingress 仅支持 80 端口作为外部端口。对于 HTTPS 协议,Ingress 仅支持 443 端口作为外部端口。平台的负载均衡器会自动添加 80 和 443 监听端口。
快速开始
接下来,我们将使用社区版本的 Ingress-NGINX,演示如何使用 NGINX controller 访问您自己的应用。
-
部署
Ingress-NGINXcontroller。使用该命令后会自动创建以下资源:
如果想更改默认的镜像仓库地址,可以先用
curl下载 YAML 文件,修改后再应用该 YAML 文件。等待
ingress-nginx-controller-xxxPod 运行。 -
本地测试
-
创建一个简单的 Web 服务器及其对应的 Service:
-
创建一个 ingress 资源。此示例使用映射到
localhost的主机: -
将本地端口转发到 ingress controller:
-
使用 curl 访问您的部署:
注意:此参数临时将域名 demo.local 解析到 IP 127.0.0.1,并用于端口 8080。当您访问 http://demo.local:8080 时,实际上访问的是 http://127.0.0.1:8080 。 另外,您应配置
hosts文件:最终您应该看到包含 “Welcome to nginx!” 字样的 HTML 响应。
然后您就可以访问网站
http://demo.local:8080/。
INFOingress-nginx-controller默认类型为LoadBalancer,如果EXTERNAL-IP字段显示为pending,说明您的 Kubernetes 集群无法自动创建负载均衡器。如果您使用的云服务商支持通过(特定云服务商的)annotations 指定 Service 的负载均衡器 IP 地址,建议切换为该方式。
-
-
在线测试
当您的
ingress-nginx-controller(LoadBalancer 类型的 Service)存在EXTERNAL-IP时,您可以创建 ingress 资源。以下示例假设您已为www.developer.io设置了 DNS 记录:您可以访问
http://www.developer.io来查看相同的输出。
前提条件
-
当前命名空间内必须存在可用的 Service。
-
请与管理员确认已为当前命名空间关联的项目分配了可用的域名。
-
若需通过 HTTPS 访问域名,需先将 HTTPS 证书保存为 TLS secret。
Ingress 示例:
- 更多配置请参考 nginx-configuration。
- 使用
ingress-nginxcontroller。 - 如果只想在本地运行 ingress,请提前配置
hosts。
使用 Web 控制台创建 Ingress
-
访问 容器平台。
-
在左侧导航栏点击 网络 > Ingress。
-
点击 创建 Ingress。
-
参考以下说明配置相关参数。
-
点击 创建。
使用 CLI 创建 Ingress
如果 ingress 没有指定 Ingress Class,所有分配给该项目的 ALB 实例都会处理该 ingress。