在 Kubernetes 中,我们需要将应用程序暴露给外部。传统上,这可以通过 NodePort 或 LoadBalancer 类型的服务实现。但是,在生产环境中使用 Ingress 类型的服务可以更好地满足需求。这篇文章将介绍 Kubernetes 中使用 Ingress 实现服务暴露的详细过程,并包含示例代码,以帮助读者更好地了解 Ingress 的使用。
Ingress 是什么?
Ingress 是一种 Kubernetes 资源类型,用于将入站的 HTTP(S) 流量路由到后端服务。Ingress 是一种 API 对象,允许您定义如何将流量路由到 Kubernetes 集群中的服务。
如何使用 Ingress?
在 Kubernetes 中使用 Ingress 的步骤如下:
第一步:安装 Ingress Controller
Ingress Controller 是一个实现了 Ingress 标准的反向代理服务。在 Kubernetes 中,有很多 Ingress Controller 的实现,如 Nginx、Traefik 等。在这里,我们以 Nginx Ingress Controller 为例。
首先,我们需要安装 Ingress Controller,可以参考下面代码:
-- -------------------- ---- ------- ----------- -- ----- --------- --------- ----- ------------- ------- ----------------------- ------------- -------------------------- ------------- --- ----------- -- ----- --------- --------- ----- ------------------- ---------- ------------- ----- ------------------- ------- ---------------------- ------ ------------- - - ---- ------- -- -------- -------- ---------- ---------------- --- ----------- ------- ---------- ---------------------- --------- ------- ---------- ------------------------- ------------------ ------------------ -------- ------- - ----- ----- ---------- ---- ------ -- ----------------- -- ---------------- --------------------------------------------------------- ------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------- --------------- ------------ -------------------------- ----------------- ---- ---------------------------- ------------------ ------------ ------------------------------------------- ------------------------------- ----------------- --------------------------- -------------------------------------------------------------------------------------------------------------- ---------------- ------ -------------- ---------------------------------------- ------------------------------------------ ------------------ ---------------------------------------------------------- - - ------ ---- - - ----- -------- ---- ---- ------ --------- -- ---------------- -- --------------------- - ------ ---- - - ----- ---- ---- -------- ---- ------- ------- --------- -- ---------------- - ----- - ------ ---- - --- ----------- -- ----- --------- --------- ----- ------------ ---------- ------------- ----- ------- ------------------------------ --- ----------- -- ----- --------- --------- ----- ------------ ---------- ------------- ----- ----- ------------------------------ --- ----------- -- ----- -------------- --------- ----- ---------------------------- ---------- ------------- --- ----------- ---------------------------- ----- ----------- --------- ----- ------------------ ------ - ---------- - -- - ---------- - ----------------- ---------- - ---------- - --------- - ------- - ----- - ---- - ------- - -------- ------ - --- - ---- - ----- - ---------- - -- - ---------- - ----------------- ---------- - ----- ------ - --- - ---------- - -- - ---------- - ----------------- ---------- - -------- ------ - --- - ---- - ----- - ---------- - -- - ---------- - ----------------- ---------- - ---------- ------ - ------ - --- - ---------- - -- - ---------- - ----------------- ---------- - --------- ------ - ------ - --- - ---------- - -- - ---------- - ----------------- ---------- - ------- ------ - ------ - --- - ---------- - -- - ---------- - ----------------- ---------- - ---- ------ - --- - ---------- - -- - ---------- ---------- - ------ ------ - ------ - ----- --- ----------- ---------------------------- ----- ------------------ --------- ----- ------------------------------- -------- --------- ------------------------- ----- ----------- ----- ------------------ --------- - ----- -------------- ----- ---------------------------- ---------- ------------- --- ----------- ------------------ ----- ---------- --------- ----- ------------------------ ---------- ------------- ----- --------- - --------- ------------ ---- ------------- --------- --------- ------- ---- ------------- ----- - ------------------- ---------------------------- ------------------------------ -- ----------- - ----- ------------------------ ------ --------------------------------------------------------------------- ----- - ------------------------- - ------------------------------------------------ - ------------------------------------------------------ - ------------------------------------------------------ - ----------------------------------------------------------- - ------------------------------------------------ ---- - ----- -------- ---------- --------- ---------- ------------- - ----- ------------- ---------- --------- ---------- ------------------ ------ - ----- ---- -------------- -- --------- -- - ----- ----- -------------- --- --------- --- - ----- -------------------- -------------- ---- --- ----------- -- ----- ------- --------- ----- ------------------------ ---------- ------------- ----- ----- --------- ------ - ----- ---- ----- -- ----------- -- - ----- ----- ----- --- ----------- --- --------- ---- -------------
第二步:创建服务
创建一个后端服务,以便为访问者提供应用程序的实例。可以参考下面代码:
-- -------------------- ---- ------- ----------- ------- ----- ---------- --------- ----- ----------- ------- ---- ----------- ----- --------- - --------- ------------ ---- ----------- --------- --------- ------- ---- ----------- ----- ----------- - ----- ----------- ------ ----- ------ - -------------- -- --- ----------- -- ----- ------- --------- ----- --------------- ----- --------- ---- ----------- ------ - ----- ---- ----------- --
第三步:定义 Ingress
定义 Ingress 的规则以将访问路由到服务。在这个例子中,我们将通过域名访问应用程序,该应用程序已映射到 Kubernetes 中的 NodePort 30000。在宿主机器的 /etc/hosts 文件中,将域名指向 NodePort 30000。可以参考下面代码:
-- -------------------- ---- ------- ----------- ------------------------- ----- ------- --------- ----- --------------- ----- ------ - ----- ----------- ----- ------ - ----- -------- -------- ------------ --------------- ------------ --
第四步:测试
现在可以通过浏览器访问 http://example.com/example,应该可以看到该应用程序的页面。
总结
本文介绍了 Kubernetes 中使用 Ingress 实现服务暴露的详细过程,并提供了示例代码以帮助读者更好地了解 Ingress 的使用。使用 Ingress 可以更好地管理和控制流量,并为应用程序提供更稳定和更安全的服务,值得我们在实践中深入应用。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/659f8f5fadd4f0e0ff821eb7