什么是Ingress?
Ingress和之前提到的Service、Deployment一样,也是一个k8s的资源类型,ingress用于实现用域名的方式访问k8s内部应用。Ingress 可以提供负载均衡、SSL 终止和基于名称的虚拟托管。Ingress 不会公开任意端口或协议。 将 HTTP 和 HTTPS 以外的服务公开到 Internet 时,通常使用 Service.Type=NodePort 或 Service.Type=LoadBalancer 类型的 Service。
使用helm安装Ingress
下载、安装helm
博主下载的3.6.3
解压
tar -zxf helm-v3.6.3-linux-amd64.tar.gz
安装
mv linux-amd64/helm /usr/local/bin/helm
查看
helm version
下载、安装ingress
添加仓库
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
下载ingress
helm pull ingress-nginx/ingress-nginx
解压
修改配置
- hostNetwork设置为true
- dnsPolicy设置为 ClusterFirstWithHostNet
- nodeSelector添加ingress: “true”
- 部署至指定节点 类型更改为kind: DaemonSet
- LoadBalancer 改为 ClusterIP
nodeSelector的修改如下图所示:
其他的我就不一一截图了。
安装ingress
kubectl label node k8s-master ingress=true kubectl create ns ingress-nginx helm install ingress-nginx -n ingress-nginx .
模板
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: minimal-ingress annotations: nginx.ingress.kubernetes.io/rewrite-target: / spec: ingressClassName: nginx-example rules: # 一个Ingress可以配置多个rules - host: foo.bar.com # 域名配置,可以不写,匹配*, *.bar.com http: paths: # 相当于nginx的location配合,同一个host可以配置多个path: /、/abc - path: /testpath pathType: Prefix backend: service: name: test port: number: 80
当前支持的路径类型有三种:
- ImplementationSpecific:对于这种路径类型,匹配方法取决于 IngressClass。 具体实现可以将其作为单独的 pathType 处理或者与 Prefix 或 Exact 类型作相同处理。
- Exact:精确匹配 URL 路径,且区分大小写。
- Prefix:基于以 / 分隔的 URL 路径前缀匹配。匹配区分大小写,并且对路径中的元素逐个完成。 路径元素指的是由 / 分隔符分隔的路径中的标签列表。 如果每个 p 都是请求路径 p 的元素前缀,则请求与路径 p 匹配。
实战
创建
为ing-internal命名空间下的service hi创建一个ingress,使用app-root类型的annotations,代理端口80,域名为app.hi.com。最终实现302的效果。
ingress-app-root.html
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/app-root: /app1 name: approot namespace: ing-internal spec: ingressClassName: nginx rules: - host: app.hi.com http: paths: - path: / pathType: Prefix backend: service: name: http-svc port: number: 80
kubectl create -f ingress-app-root.html
在ingress的po中可以看到如何修改了nginx的配置文件,来实现302
删除
命令
kubectl delete -f ingress-app-root.html
结果