Ingress
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不会暴露任意端口或协议。
Ingress安装
首先安装helm管理工具:https://helm.sh/docs/intro/install/
下载 需要的版本
解压(tar -zxvf helm-v3.0.0-linux-amd64.tar.gz)
在解压目中找到helm程序,移动到需要的目录中(mv linux-amd64/helm /usr/local/bin/helm)
然后就可以执行客户端程序并 添加稳定仓库: helm help.
使用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
2.下载ingress的helm包至本地
helm pull ingress-nginx/ingress-nginx(如已从网盘下载,省略此步骤)
3.更改对应的配置
tar xf ingress-nginx-3.6.0.tgz
cd ingress-nginx
vim values.yaml
4.需要修改的位置
a)Controller和admissionWebhook的镜像地址,需要将公网镜像同步至公司内网镜像仓库(https://blog.csdn.net/weixin_39961559/article/details/80739352,或者参考这个连接: https://blog.csdn.net/sinat_35543900/article/details/103290782)
Controller镜像地址:registry.cn-beijing.aliyuncs.com/dotbalo/controller
admissionWebhook镜像地址:registry.cn-beijing.aliyuncs.com/dotbalo/kube-webhook-certgen
b)hostNetwork设置为true
c)dnsPolicy设置为 ClusterFirstWithHostNet
d)类型更改为kind: DaemonSet
e)type: ClusterIP
f)nodeSelector:
kubernetes.io/os: linux
ingress: "true"
- 部署ingress
给需要部署ingress的节点上打标签
kubectl label node k8s-master03 ingress=true
kubectl create ns ingress-nginx
helm install ingress-nginx -n ingress-nginx .
- 将ingress controller部署至Node节点(ingress controller不能部署在master节点,需要安装视频中的步骤将ingress controller部署至Node节点,生产环境最少三个ingress controller,并且最好是独立的节点)
kubectl label node k8s-node01 ingress=true #添加标签
kubectl label node k8s-master03 ingress- #取消标签
Ingress使用
创建一个ingress:
# cat ingress.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: /
创建一个多域名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: /
网友评论