簡介
ingress簡單介紹
ingress由兩部分組成:ingress controller和ingress服務(wù)衅斩。ingress controller通過和kubernetes api交互,動態(tài)的去感知集群中ingress規(guī)則變化怠褐,然后讀取它畏梆,按照自定義的規(guī)則,規(guī)則就是寫明了哪個域名對應(yīng)哪個service奈懒,生成一段nginx配置奠涌,再寫到nginx-ingress-control的pod里,這個Ingress controller的pod里運行著一個Nginx服務(wù)磷杏,控制器會把生成的nginx配置寫入/etc/nginx.conf文件中溜畅,然后reload一下使配置生效柳畔。以此達(dá)到域名分配置和動態(tài)更新的問題际邻。
1殃姓、下載文件
下載目錄:
https://github.com/kubernetes/ingress-nginx/tree/master/deploy
yaml文件說明:
namespace.yaml
這個文件用來創(chuàng)建ingress-nginx的namespace仆邓,ingress-nginx的相關(guān)組件都將在這個namespace下桨菜。-
configmap.yaml
ConfigMap是存儲通用的配置變量的逼裆,類似于配置文件诗力,使用戶可以將分布式系統(tǒng)中用于不同模塊的環(huán)境變量統(tǒng)一到一個對象中管理烙心;而它與配置文件的區(qū)別在于它是存在集群的“環(huán)境”中的稿械,并且支持K8S集群中所有通用的操作調(diào)用方式选泻。從數(shù)據(jù)角度來看,ConfigMap的類型只是鍵值組,用于存儲被Pod或者其他資源對象(如RC)訪問的信息滔金。這與secret的設(shè)計理念有異曲同工之妙色解,主要區(qū)別在于ConfigMap通常不用于存儲敏感信息,而只存儲簡單的文本信息餐茵。
ConfigMap可以保存環(huán)境變量的屬性科阎,也可以保存配置文件。
創(chuàng)建pod時忿族,對configmap進(jìn)行綁定锣笨,pod內(nèi)的應(yīng)用可以直接引用ConfigMap的配置。相當(dāng)于configmap為應(yīng)用/運行環(huán)境封裝配置道批。
pod使用ConfigMap错英,通常用于:設(shè)置環(huán)境變量的值、設(shè)置命令行參數(shù)隆豹、創(chuàng)建配置文件椭岩。
default-backend.yaml
default-http-backend從名稱上來看即默認(rèn)的后端,當(dāng)集群外部的請求通過ingress進(jìn)入到集群內(nèi)部時璃赡,如果無法負(fù)載到相關(guān)后端的Service上判哥,這種未知的請求將會被負(fù)載到這個默認(rèn)的后端上rbac.yaml
創(chuàng)建ServiceAccount nginx-ingress-serviceaccount,并創(chuàng)建相關(guān)的ClusterRole, Role, ClusterRoleBinding, RoleBinding以對其進(jìn)行授權(quán)
簡易說明:
Service Account它并不是給kubernetes集群的用戶使用的碉考,而是給pod里面的進(jìn)程使用的塌计,它為pod提供必要的身份認(rèn)證。with-rbac.yaml
這是nginx-ingress-controller
簡易說明:
serviceAccountName: nginx-ingress-serviceaccount
這是用前面配置的serviceAccount
2侯谁、部署
其中我們只需要執(zhí)行kubectl apply -f mandatory.yaml
就可以了锌仅,因為這個yaml文件包含了其他yaml文件的所有內(nèi)容
??default-http的鏡像默認(rèn)是google的鏡像地址,你懂得墙贱,所以替換成國內(nèi)鏡像地址image: registry.cn-hangzhou.aliyuncs.com/google_containers/defaultbackend:1.4
3热芹、檢查服務(wù)
kubectl get pod -n ingress-nginx
如果這里不是
Running
那么你可能沒有下載完鏡像。
4惨撇、為nginx-ingress-controller創(chuàng)建一個Service并暴露到集群外邊
# cat ingress-nginx.svc.yaml
apiVersion: v1
kind: Service
metadata:
name: ingress-nginx
namespace: ingress-nginx
spec:
externalIPs:
- 192.168.63.101
- 192.168.63.131
- 192.168.63.148
- 192.168.63.149
- 192.168.63.151
ports:
- name: http
port: 80
targetPort: 80
protocol: TCP
- name: https
port: 443
targetPort: 443
protocol: TCP
selector:
app: ingress-nginx
??說明:
externalIPs
external-ip指的是對外暴露的ip地址,一般用公網(wǎng)IP地址,執(zhí)行那個命令過后,我們就可以在公網(wǎng)上訪問了,但是這里有個問題就是這個IP地址必須是安裝了k8s的機(jī)器的IP,如果你隨便用一個IP是不能訪問的.
如果以上都顯示正常剿吻,ingress-controller部署完成了。
5串纺、添加配置ingress轉(zhuǎn)發(fā)規(guī)則
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: test-ingress
namespace: monitoring
spec:
rules:
- host: grafana.mritd.me
http:
paths:
- path: /
backend:
serviceName: grafana
servicePort: 3000
這里為了測試我直接使用了搭建集群的時候配置的grafana服務(wù)丽旅,可以根據(jù)你想跳轉(zhuǎn)的服務(wù)進(jìn)行更改。
??說明 | 描述 |
---|---|
namespace | grafana服務(wù)所在的命名空間 |
host | 你的域名 |
servicePort | grafana服務(wù)的port端口 |
執(zhí)行完后查看
6纺棺、測試
如果你是用了個假域名來測試榄笙,那么在你的/etc/hosts
中添加域名的DNS進(jìn)行訪問。