Kubernetes是一种用于容器编排的开源平台,它可以自动化应用程序的部署、扩展和管理。随着越来越多的应用程序在 Kubernetes 中部署,为这些应用程序提供网络服务的需求也变得越来越重要。Ingress是一个Kubernetes的资源对象,它允许您在Kubernetes集群中公开HTTP和HTTPS服务,这种功能是非常值得使用的。本文将介绍Kubernetes Ingress Controller的操作指南。
Kubernetes Ingress简介
Ingress是一个Kubernetes的资源对象,它定义了从集群外部访问集群内部服务的规则。Ingress规则定义了一个或多个路由规则,将传入的请求路由到集群内的服务。一般来说,Ingress定义的服务比LoadBalancer更加灵活,因为它基于HTTP协议路由流量,而LoadBalancer会基于IP地址和端口号路由流量。与NodePort类似,Ingress Controller是一个Kubernetes控制器,它可以自动配置Ingress对象并将其转换为负载均衡服务。
Kubernetes Ingress Controller是一个容器编排环境下的负载均衡服务。它使用标准的HTTP/HTTPS协议来转发请求,并且添加了额外的流量控制功能,例如路由特定流量到特定的后端服务、TLS终止和可插拔程序。Ingress Controller避免了您需要编写自定义代码来实现这些功能。
Kubernetes Ingress Controller的安装
Kubernetes Ingress Controller可以使用多种方式安装,其中包括使用Kubernetes本身和使用第三方工具。以下是一些常见的安装方式:
基础安装
基础安装是使用Kubernetes原生资源的最简单方式。基础安装使用了Kubernetes的Ingress资源对象来定义负载均衡规则,并且该资源对象已经在Kubernetes 1.1版本之后开始提供。要使用基础安装,请确保您已经正确安装Kubernetes并且能够使用kubectl等工具来与集群交互。在安装Ingress Controller之前,请将api的版本升级至至少17或18以上,支持IngressClass。请根据操作系统和Kubernetes版本选择适当的安装方法。
使用Helm安装
Helm是一个流行的Kubernetes包管理器,它可以帮助您轻松地安装,升级和卸载各种Kubernetes组件。Helm为Kubernetes Ingress Controller提供了一个官方的Chart库,该库可以从GitHub下载,使用以下命令即可安装:
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx helm install ingress-nginx ingress-nginx/ingress-nginx
使用kubectl安装
如果您不想使用Helm,您还可以使用kubectl来直接安装Kubernetes Ingress Controller。根据您的需求选择以下方式之一进行安装。
- 使用官方的yaml文件进行安装:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v2.0.0/deploy/static/provider/baremetal/deploy.yaml
- 使用Fabric8 Maven插件安装:
-- -------------------- ---- ------- -------- ----------------------------- --------------------------------------------- -------------------------------------------------- ------------ ----------- --------------- --------------------- ------- --------------------- ------------------- -------- ------------ ------------- --------------- ----------- ---------- ----------------------------------------- --------------------------- ---------------------------------------------------------------- ----------- ------------ ---------------- ---------
安装成功验证
安装完毕后,您可以使用kubectl命令来验证Ingress Controller是否已经安装成功:
kubectl get pods --namespace ingress-nginx
您应该会看到类似于以下的输出:
NAME READY STATUS RESTARTS AGE ingress-nginx-controller-5cd5f8dc5f-xd5x5 1/1 Running 0 2m ingress-nginx-controller-admission-create-mhvtx 0/1 Running 0 2m ingress-nginx-controller-admission-patch-d8rxb 0/1 Running 0 2m
Kubernetes Ingress Controller的使用
安装成功后,您可以在Kubernetes集群中使用Ingress Controller来将HTTP和HTTPS流量路由到相应的服务。在使用Ingress Controller之前,您需要先了解一些Ingress相关的对象和一些基本的概念。
Ingress对象
Kubernetes Ingress对象允许您定义HTTP(s)路由规则,以将传入的请求路由到下游的Kubernetes服务。以下是一个Ingress对象的示例:
-- -------------------- ---- ------- ----------- -------------------- ----- ------- --------- ----- --------------- ----- ------ - ----- ----------- ----- ------ - ----- - --------- ------ -------- -------- ----- --------------- ----- ----- ----
该定义指定了当您访问example.com时,Ingress Controller将路由到example-service中的http服务。
IngressClass对象
IngressClass是一个Kubernetes资源对象,用于定义Ingress控制器的类(或类型)。默认情况下,Kubernetes仅提供一个Ingress 类型,即ingress.kubernetes.io/documentation中提供的普通ingress。如果您要使用其他Ingress类型,则需要创建对应的IngressClass。
示例代码:
apiVersion: networking.k8s.io/v1 kind: IngressClass metadata: name: nginx spec: controller: nginx.org/ingress-controller
该定义指定了要使用Nginx Ingress Controller来处理Ingress对象。
IngressRule对象
IngressRule是一个Kubernetes资源对象,用于定义一种路由规则。一个Ingress可以有多个IngressRule,每个IngressRule定义了一个与之匹配的路径。以下是一个IngressRule的示例:
-- -------------------- ---- ------- ----------- -------------------- ----- ------- --------- ----- --------------- ----- ------ - ----- ----------- ----- ------ - ----- ------ --------- ------ -------- -------- ----- --------------- ----- ----- ----
该定义指定了当您访问example.com/myapp时,Ingress Controller将路由到example-service中的http服务。
IngressPath对象
IngressPath是一个Kubernetes资源对象,用于定义路径和后端服务之间的关系。IngressPath必须定义在IngressRule中。以下是一个IngressPath的示例:
-- -------------------- ---- ------- ----------- -------------------- ----- ------- --------- ----- --------------- ----- ------ - ----- ----------- ----- ------ - ----- ------ --------- ------ -------- -------- ----- --------------- ----- ----- ----
该定义指定了当您访问example.com/myapp时,Ingress Controller将路由到example-service中的http服务。
Kubernetes Ingress Controller Nginx 的配置示例
Kubernetes Ingress Controller Nginx 的配置非常灵活,您可以根据需要进行自定义配置。以下是一个简单的示例,它将定义一个Ingress,并将请求路由到名称为 myapp 的服务,以响应/example路径的请求。
-- -------------------- ---- ------- ----------- ------------------------- ----- ------- --------- ----- ----- ------------ ----------------------- ------------------------- - --------- --------------------------------------------- ------- - ---------- ----- ---- - ----------- --------- - -------- ------ - ----- ----------- - -- ----- ------ - ----- -------- -------- ------------ ----- - ---------- ------------ --- - ----------
此示例包括使用TLS的配置: TLS是Transport Layer Security的简称,它是一种安全协议,用于Web服务器和Web浏览器之间的数据加密传输。
配置成功后,您可以使用以下命令来验证Ingress Controller是否正在运行:
kubectl get ingress -n <your-namespace>
您应该能够看到类似于以下的输出:
NAME HOSTS ADDRESS PORTS AGE myapp example.com 80, 443 1m
这就是本文向您介绍的Kubernetes Ingress Controller的操作指南,希望本文对您有所帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6782380f935627c900fd0f9c