在这篇博客中,我们将了解Ingress以及如何创建Ingress规则,敬请关注!
前提条件
- Minikube集群
- 安装了kubectl
什么是Ingress?
Ingress是一个API对象,允许外部流量基于路由机制进入Kubernetes集群。它提供了路由规则来管理外部用户通过HTTP/HTTPS对Kubernetes集群的访问。
为什么需要Ingress?
当你的集群上有多个服务,并且希望用户请求根据他们的路径被路由到服务时,就可以使用ingress。
例如,如果我必须去geeksforgeeks.com,那么geeksforgeeks域名将指向我的集群,我的集群应该知道这个请求到底指向哪里,这个工作由ingress来完成。
它是如何工作的呢?

在上图中:
- 用户访问浏览器中的URL,基本上会被重定向到ingress服务。
- 然后,服务将请求转发给控制器,控制器检查规则,并根据这些规则决定将请求发送到哪里。
- 如果是geeksforgeeks.com,那么我们就去这个特定的服务,如果是tutorialspoint.com,那么我们就去这个服务。
- 这些服务充当了pod的负载平衡器,因此你的请求是通过服务被发送到pod的。
此外,为了更好地理解,让我们进入demo环节。
为了更好理解,我们看看例子
1.如果你的系统中没有安装minikube和kubectl的话
2.启动你的minikube集群
minikube start
3. 启用nginx ingress控制器
minikube addons enable ingress
4.检查namespaces
kubectl get namespaces

在这里,你会看到 “ingress-nginx”
5.验证是否运行
kubectl get pods -n ingress-nginx

部署一个HelloWorld应用
现在,让我们部署一个Hello World应用程序
1.创建一个用于部署的manifest文件
apiVersion: apps/v1
kind: Deployment
metadata:
name: ingress-demo
spec:
selector:
matchLabels:
app: myapp
replicas: 1
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: ingress-cont
image: gcr.io/google-samples/hello-app:1.0
在这里,我创建了一个带有1个replica的deployment 。
2.Apply文件
kubectl apply -f [file-name]
kubectl apply -f ingress-deploy.yaml
3.检查 deployments, pods, and replicas的状态
kubectl get deployments
kubectl get pods
kubectl get replicaset
4.现在暴露deployment
kubectl expose deployment ingress-demo --type=NodePort --port=8080
5.验证service
kubectl get service
通过node-ip和node port访问应用
6.检查node ip
kubectl get nodes -o wide

打开你的浏览器,输入 < node-ip >:< node-port > [192.168.49.2:31900],像这样:

7.现在,让我们为Ingress创建一个manifest文件
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-app
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: hello-worldapp.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: ingress-demo
port:
number: 8080
该manifest文件与kubernetes中所有其他manifest文件类似。在这里,类型是Ingress,在元数据文件中,它包括关于Ingress的细节,如名称、注释。在规范部分,我们写了规则,对于规则,我们将提到主机,这样我们就可以用域名而不是IP地址访问应用程序。
8.Apply manifest文件
kubectl apply -f [file-name]
9.让我们验证下
kubectl get ingress
地址可能要几分钟:

在你的系统中的hosts(/etc/hosts)文件中添加主机和地址。

进入你的浏览器并输入hello-worldapp.com。

总结
与其通过IP地址和端口访问你的应用程序,不如创建ingress规则,通过域名访问你的应用程序。
参考
https://kubernetes.io/docs/concepts/services-networking/ingress/
https://kubernetes.io/docs/concepts/services-networking/service/
原文标题:How to create Ingress rules in Kubernetes using Minikube
原文作者:Jasmine
原文地址:https://blog.knoldus.com/how-to-create-ingress-rules-in-kubernetes-using-minikube/




