Ingress
Ingress為Kubernetes集群中的服務(wù)提供了入口,可以提供負載均衡、SSL終止和基于名稱的虛擬主機,在生產(chǎn)環(huán)境中常用的Ingress有Treafik、Nginx、HAProxy、Istio等。
基本概念
在Kubernetesv 1.1版中添加的Ingress用于從集群外部到集群內(nèi)部Service的HTTP和HTTPS路由,流量從Internet到Ingress再到Services最后到Pod上,通常情況下,Ingress部署在所有的Node節(jié)點上。
Ingress可以配置提供服務(wù)外部訪問的URL、負載均衡、終止SSL,并提供基于域名的虛擬主機。但Ingress不會暴露任意端口或協(xié)議。
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)
然后就可以執(zhí)行客戶端程序并 添加穩(wěn)定倉庫: helm help.
使用helm安裝ingress:https://kubernetes.github.io/ingress-nginx/deploy/#using-helm
1.添加ingress的helm倉庫(課程講解的版本已經(jīng)上傳至百度網(wǎng)盤)
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
2.下載ingress的helm包至本地
helm pull ingress-nginx/ingress-nginx(如已從網(wǎng)盤下載,省略此步驟)
3.更改對應(yīng)的配置
tar xf ingress-nginx-3.6.0.tgz
cd ingress-nginx
vim values.yaml
4.需要修改的位置
a)Controller和admissionWebhook的鏡像地址,需要將公網(wǎng)鏡像同步至公司內(nèi)網(wǎng)鏡像倉庫(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設(shè)置為true
c)dnsPolicy設(shè)置為 ClusterFirstWithHostNet
d)類型更改為kind: DaemonSet
e)type: ClusterIP
f)nodeSelector:
kubernetes.io/os: linux
ingress: "true"
- 部署ingress
給需要部署ingress的節(jié)點上打標(biāo)簽
kubectl label node k8s-master03 ingress=true
kubectl create ns ingress-nginx
helm install ingress-nginx -n ingress-nginx .
- 將ingress controller部署至Node節(jié)點(ingress controller不能部署在master節(jié)點,需要安裝視頻中的步驟將ingress controller部署至Node節(jié)點,生產(chǎn)環(huán)境最少三個ingress controller,并且最好是獨立的節(jié)點)
kubectl label node k8s-node01 ingress=true #添加標(biāo)簽
kubectl label node k8s-master03 ingress- #取消標(biāo)簽
Ingress使用
創(chuàng)建一個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: # 相當(dāng)于nginx的location配合,同一個host可以配置多個path / /abc
- backend:
serviceName: nginx-svc
servicePort: 80
path: /
創(chuàng)建一個多域名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: # 相當(dāng)于nginx的location配合,同一個host可以配置多個path / /abc
- backend:
serviceName: nginx-svc
servicePort: 80
path: /
- host: foo2.bar.com # 域名配置,可以不寫,匹配*, *.bar.com
http:
paths: # 相當(dāng)于nginx的location配合,同一個host可以配置多個path / /abc
- backend:
serviceName: nginx-svc-external
servicePort: 80
path: /