1 Ingress概念 通俗来讲,ingress和之前提到的Service、Deployment,也是一个k8s的资源类型,ingress用于实现用域名的方式访问k8s内部应用。 Ingress为Kubernetes集群中的服务提供了入口,可以提供负载均衡、SSL终止和基于名称的虚拟主机,在生产环境中常用的Ingress有Treafik、Nginx、HAProxy、Istio等。 基本概念在Kubernetesv 1.1版中添加的Ingress用于从集群外部到集群内部Service的HTTP和HTTPS路由,流量从Internet到Ingress再到Services最后到Pod上,通常情况下,Ingress部署在所有的Node节点上。 Ingress可以配置提供服务外部访问的URL、负载均衡、终止SSL,并提供基于域名的虚拟主机。但Ingress不会暴露任意端口或协议。 2 Ingress安装首先安装helm管理工具:https://helm.sh/docs/intro/install/ Helm下载地址 Helm安装 [root@master01 ~]# tar xf helm-v3.4.1-linux-amd64.tar.gz [root@master01 ~]# mv linux-amd64/helm /usr/local/bin/helm 查看helm的版本 [root@master01 ~]# helm version 使用helm安装ingress:https://kubernetes.github.io/ingress-nginx/deploy/#using-helm 1. 添加ingress的helm仓库 helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx 查看repo源 查看ingress-nginx的版本 [root@master01 ~]# helm search repo ingress-nginx 1. 下载ingress的helm包至本地 helm pull ingress-nginx/ingress-nginx 2. 更改对应的配置 [root@master01 ~]# mkdir temp [root@master01 ~]# mv ingress-nginx-3.13.0.tgz temp/ [root@master01 ~]# cd temp/ [root@master01 temp]# tar xf ingress-nginx-3.13.0.tgz [root@master01 temp]# cd ingress-nginx [root@master01 ingress-nginx]# ls CHANGELOG.md Chart.yaml ci OWNERS README.md templates values.yaml [root@master01 ingress-nginx]#vim values.yaml 3. 需要修改的位置 a) Controller和admissionWebhook的镜像地址,需要将公网镜像同步至公司内网镜像仓库 b) hostNetwork设置为true c) dnsPolicy设置为 ClusterFirstWithHostNet d) NodeSelector添加ingress: "true"部署至指定节点 e) 类型更改为kind: DaemonSet 修改内容如下 6 repository: quay.io/kubernetes-ingress-controller/nginx-ingress-controller tag: "0.32.0" 38 dnsPolicy: ClusterFirstWithHostNet 47 hostNetwork: true 133 kind: DaemonSet 231 nodeSelector: 232 kubernetes.io/os: linux 233 ingress: "true" 380 type: ClusterIP 471 repository: registry.cn-beijing.aliyuncs.com/dotbalo/kube-webhook- certgen 4. 部署ingress 给需要部署ingress的节点上打标签 kubectl label node master02 ingress=true kubectl create ns ingress-nginx helm install ingress-nginx -n ingress-nginx . 查看pod 在创建ingress之前,确保之前创建的service可以使用 创建一个ingress: # cat ingress.yaml apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: annotations: #此处不是注释,是告诉ingress如何配置nginx配置文件 kubernetes.io/ingress.class: "nginx" name: example spec: rules: # 一个Ingress可以配置多个rules - host: foo.bar.com # 域名配置,不写默认匹配*, *.bar.com http: paths: # 相当于nginx的location配合,同一个host可以配置多个path / /abc - backend: serviceName: nginx-svc servicePort: 80 path: / [root@master01 ~]# kubectl create -f ingress.yaml ingress.networking.k8s.io/example created 给域名foo.bar.com添加hosts文件 192.168.100.203 foo.bar.com #必须是ingress所在节点 查看ingress中nginx的配置文件 /etc/nginx $ grep "foo.bar.com" nginx.conf -A 40 #查看这一行的后40行 创建一个多域名ingress cat ingress-mulDomain.yaml apiVersion: networking.k8s.io/v1beta1 # networking.k8s.io/v1 / extensions/v1beta1 kind: Ingress metadata: annotations: kubernetes.io/ingress.class: "nginx" name: example spec: rules: # 一个Ingress可以配置多个rules - host: foo.bar.com # 域名配置,可以不写,匹配*, *.bar.com http: paths: # 相当于nginx的location配合,同一个host可以配置多个path / /abc - backend: serviceName: nginx-svc servicePort: 80 path: / - host: foo2.bar.com # 域名配置,可以不写,匹配*, *.bar.com http: paths: # 相当于nginx的location配合,同一个host可以配置多个path / /abc - backend: serviceName: nginx-svc-external servicePort: 80 path: / 整体访问流程图如下: |
错误信息