什么是Ingress?

Ingress和之前提到的Service、Deployment一样,也是一个k8s的资源类型,ingress用于实现用域名的方式访问k8s内部应用。Ingress 可以提供负载均衡、SSL 终止和基于名称的虚拟托管。Ingress 不会公开任意端口或协议。 将 HTTP 和 HTTPS 以外的服务公开到 Internet 时,通常使用 Service.Type=NodePort 或 Service.Type=LoadBalancer 类型的 Service。
在这里插入图片描述

使用helm安装Ingress

下载、安装helm

下载地址-github-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

结果
在这里插入图片描述

参考

helm安装
k8s-使用helm安装ingress
k8s-Ingress
k8s-Ingress控制器
ingress安装
ingress-nginx user guide
github - ingress issue
ingress - rewrite

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐