Ingress详细介绍

Ingress详细介绍
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下载地址
 
https://get.helm.sh/helm-v3.4.1-linux-amd64.tar.gz
 
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一。1 Ingress概念
 
通俗来讲,ingress和之前提到的Service、Deployment,也是一个k8s的资源类型,ingress用于实现用域名的方式访问k8s内部应用。
 
Ingress为Kubernetes集群中的服务提供了入口,可以提供负载均衡、SSL终止和基于名称的虚拟主机,在生产环境中常用的Ingress有Treafik、Nginx、HAProxy、Istio等。
 
使用helm安装ingress:
 
https://kubernetes.github.io/ingress-nginx/deploy/#using-helm
 
添加ingress的helm仓库
 
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
 
查看repo源
 
查看ingress-nginx的版本
 
[root@master01 ——]# helm search repo ingress-nginx
 
下载ingress的helm包至本地
 
helm pull ingress-nginx/ingress-nginx
 
更改对应的配置
 
[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
 
需要修改的位置
 
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
 
部署ingress
 
给需要部署ingress的节点上打标签
 
kubectl label node master02 ingress=true
 
kubectl create ns ingress-nginx
 
helm install ingress-nginx -n ingress-nginx .
 
查看pod
 
1 Ingress入门使用
 
在创建ingress之前,确保之前创建的service可以使用
 
创建一个ingress:
 
创建一个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的配置文件

推荐阅读