💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、豆包、星火、月之暗面及文生图、文生视频 广告
我们的环境中还没有部署 ingress 插件,因此首先需要做的是在环境中将插件安装上。在 kubernetes 集群中,Ingress Controller 是以 Pod 形式运行的。根据负载均衡器的不同出现了多种 Ingress Controller,比如: * [Kubernetes Ingress Controller](https://github.com/kubernetes/ingress-nginx): Kubernetes 官方推荐的控制器,由社区开发,最适合新手。 * [NGINX Ingress Controller](https://github.com/nginxinc/kubernetes-ingress): Nginx 公司开发的官方产品。有一个基于 NGINX Plus 的商业版。 * [Traefik](https://github.com/containous/traefik): 为部署微服务更加便捷而诞生的现代 HTTP 反向代理、负载均衡工具。支持多种后台来自动化、动态的应用它的配置文件。 * [HAProxy Ingress](https://github.com/jcmoraisjr/haproxy-ingress): 这也是在传统配置时应用非常广泛的负载均衡器。它提供了“软”配置更新(无流量损失)、基于 DNS 的服务发现和通过 API 进行动态配置。 本次实验中将会使用官方推荐的控制器 Kubernetes Ingress Controller,它的创建其实也比较简单,直接使用 YAML 文件创建即可。 需要下载`nginx-ingress-controller.yaml`文件和`ingress-service-nodeport.yaml`文件,这里已经提供了完整的 YAML 文件,大家执行下载即可: ~~~bash wget https://labfile.oss.aliyuncs.com/courses/1457/nginx-ingress-controller.yaml wget https://labfile.oss.aliyuncs.com/courses/1457/ingress-service-nodeport.yaml ~~~ 下载以后可以分别打开这两个文件查看具体的内容。 `nginx-ingress-controller.yaml`文件中,创建了名为`ingress-nginx`的命名空间(没有使用 kube-system 系统默认空间),并在该命名空间下分别创建了名为 nginx-configuration、tcp-services、udp-services 的 ConfigMap,创建了相关的服务账户、集群角色、集群角色绑定,最后使用 Deployment 部署一个名为 nginx-ingress-controller-xxx 的 Pod 副本,这个 Pod 就是 Ingress Controller。注意在 Deployment.spec.template.spec 中设置`hostNetwork: true`,将 Pod 中所有容器的端口号都映射到 Node 节点上,因为是在本机进行测试,直接使用`NodePort:containerPort`就可以直接访问该控制器。同时由于国外的镜像无法下载,这里使用阿里云提供的镜像`registry.aliyuncs.com/google_containers/nginx-ingress-controller:0.26.1`,这个容器有两个端口:`80`端口提供`http`访问,`443`端口提供`https`访问。 `nginx-ingress-controller:0.26.1`镜像实现 Ingress Controller 的基本逻辑为:监听 APIServer,获取在 Ingress 中定义的配置信息;基于 Ingress 配置信息,生成 Nginx 所需的配置文件 /etc/nginx/nginx.conf;执行`nginx -s reload`命令重新加载配置文件内容。 `ingress-service-nodeport.yaml`文件中,为 Ingress Controller Pod 创建 NodePort 类型的 Service,接收集群外部的流量。 先创建 nginx-ingress-controller Pod: ~~~bash $ kubectl create -f nginx-ingress-controller.yaml namespace/ingress-nginx created configmap/nginx-configuration created configmap/tcp-services created configmap/udp-services created serviceaccount/nginx-ingress-serviceaccount created clusterrole.rbac.authorization.k8s.io/nginx-ingress-clusterrole created role.rbac.authorization.k8s.io/nginx-ingress-role created rolebinding.rbac.authorization.k8s.io/nginx-ingress-role-nisa-binding created clusterrolebinding.rbac.authorization.k8s.io/nginx-ingress-clusterrole-nisa-binding created deployment.apps/nginx-ingress-controller created ~~~ 然后为 nginx-ingress-controller Pod 创建 NodePort 类型的 Service: ~~~bash $ kubectl create -f ingress-service-nodeport.yaml service/ingress-nginx created ~~~ 查看 ingress-nginx 命令空间下所有创建好的资源对象: ~~~bash $ kubectl get all -o wide -n ingress-nginx NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES pod/nginx-ingress-controller-6c7b8c7775-c66rv 1/1 Running 0 19m 10.192.0.3 kube-node-1 <none> <none> NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR service/ingress-nginx NodePort 10.106.187.230 <none> 80:31990/TCP,443:31480/TCP 17m app.kubernetes.io/name=ingress-nginx,app.kubernetes.io/part-of=ingress-nginx NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR deployment.apps/nginx-ingress-controller 1/1 1 1 19m nginx-ingress-controller registry.aliyuncs.com/google_containers/nginx-ingress-controller:0.26.1 app.kubernetes.io/name=ingress-nginx,app.kubernetes.io/part-of=ingress-nginx NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR replicaset.apps/nginx-ingress-controller-6c7b8c7775 1 1 1 19m nginx-ingress-controller registry.aliyuncs.com/google_containers/nginx-ingress-controller:0.26.1 app.kubernetes.io/name=ingress-nginx,app.kubernetes.io/part-of=ingress-nginx,pod-template-hash=6c7b8c7775 ~~~