網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
Ingress概念:
通俗來(lái)講:Ingress和之前說(shuō)的Service、Deployment一樣,也是一個(gè)k8s的資源類型;Ingress用于實(shí)現(xiàn)域名的方式訪問(wèn)k8s的內(nèi)部應(yīng)用,Service可能更適于服務(wù)間訪問(wèn)。
這東西我們使用的k8s官方維護(hù)的本版,另外nginx官方也有一個(gè)版本,怎么用看個(gè)人。
Ingress支持多種方案:包括 Nginx、Haproxy、Traefik、istio等;在實(shí)際中Ingress上面可能還有一層公司的硬件層代理。
大概的流程圖如下:
創(chuàng)建一個(gè)Ingress:
這個(gè)ingress使用Hlem方式創(chuàng)建,以后會(huì)寫一篇helm的使用,現(xiàn)在不用管原理。
所需資源準(zhǔn)備:
Ingress-nginx使用的兩個(gè)容器鏡像下載地址:
鏡像地址:registry.cn-hangzhou.aliyuncs.com
鏡像:yyangs/ingress-nginx-controller;yyangs/ingress-nginx-kube-webhook-certgen
chart包:ingress-nginx-4.0.17
首先我們先創(chuàng)建一個(gè)Helm(因?yàn)橐褂胔elm創(chuàng)建)
[root@k8s-master01 ~]# wget https://get.helm.sh/helm-v3.8.0-linux-amd64.tar.gz [root@k8s-master01 ~]# tar xf helm-v3.8.0-linux-amd64.tar.gz [root@k8s-master01 ~]# mv linux-amd64/helm /usr/local/bin/helm
創(chuàng)建一個(gè)倉(cāng)庫(kù) ,方便安裝ingress:ingress的APP VERSION版本最好要大于0.35,查看其下可用的包
[root@k8s-master01 ~]# helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx "ingress-nginx" has been added to your repositories [root@k8s-master01 ~]# helm repo list NAME URL ingress-nginx https://kubernetes.github.io/ingress-nginx [root@k8s-master01 ~]# helm search repo ingress-nginx NAME CHART VERSION APP VERSION DESCRIPTION ingress-nginx/ingress-nginx 4.0.17 1.1.1 Ingress controller for Kubernetes using NGINX a...
下載ingress包,將包解壓到一個(gè)創(chuàng)建的目錄中方便修改配置
[root@k8s-master01 ~]# helm pull ingress-nginx/ingress-nginx ingress-nginx-4.0.17.tgz [root@k8s-master01 ~]# mkdir /temp [root@k8s-master01 ~]# mv ingress-nginx-4.0.17.tgz /temp/ [root@k8s-master01 ~]# cd /temp/ [root@k8s-master01 temp]# tar xf ingress-nginx-4.0.17.tgz # 進(jìn)到ingress-nginx目錄 [root@k8s-master01 temp]# cd ingress-nginx/
修改values.yaml,基本每一行都代表一個(gè)位置
# 源位置 controller: name: controller image: registry: registry.cn-hangzhou.aliyuncs.com image: yyangs/ingress-nginx-controller ## digest: sha256:0bc88eb15f9e7f84e8e56c14fa5735aaa488b840983f87bd79b1054190e660de # dns策略 dnsPolicy: ClusterFirstWithHostNet # 使用宿主機(jī)端口號(hào),性能好 hostNetwork: true # 資源類型選擇DaemonSet,會(huì)在指定節(jié)點(diǎn)上部署 kind: DaemonSet # 在有標(biāo)簽的node上部署 nodeSelector: kubernetes.io/os: linux ingress: "true" # 類型,本地環(huán)境使用 type: ClusterIP # 最后位置的另一處源位置 patch: enabled: true image: registry: registry.cn-hangzhou.aliyuncs.com image: yyangs/ingress-nginx-kube-webhook-certgen ## digest: sha256:64d8c73dca984af206adf9d6d7e46aa550362b1d7a01f3a0a91b20cc67868660
對(duì)上面的修改做一些說(shuō)明:
鏡像源:他默認(rèn)源是國(guó)外的,我們?cè)L問(wèn)不到。所以我替換成了我的阿里源,如果做這個(gè)實(shí)驗(yàn)的小伙伴可以用我的源;最后一處的源也一樣;注意把校驗(yàn)注釋
使用hostNetwork: true創(chuàng)建,配合資源類型選擇DaemonSet性能更好
dns策略:如果使用hostNetwork,策略需要改成dnsPolicy: ClusterFirstWithHostNet
執(zhí)行yaml文件創(chuàng)建
# 創(chuàng)建一個(gè)命名空間 [root@k8s-master01 ingress-nginx]# kubectl create ns ingress-nginx namespace/ingress-nginx created # 因?yàn)橐谥付╪ode上創(chuàng)建,所以給一臺(tái)機(jī)器創(chuàng)建一個(gè)標(biāo)簽 [root@k8s-master01 ingress-nginx]# kubectl label nodes k8s-master03 ingress=true node/k8s-master03 labeled # 執(zhí)行helm創(chuàng)建,那個(gè)名稱自定義,之前出了一點(diǎn)問(wèn)題,所以換個(gè)名字。 [root@k8s-master01 ~]# cd /temp/ingress-nginx/ 您在 /var/spool/mail/root 中有新郵件 [root@k8s-master01 ingress-nginx]# helm install nginx-ingress -n ingress-nginx . [root@k8s-master01 temp]# kubectl get pod -n ingress-nginx -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-ingress-ingress-nginx-controller-lrs9s 1/1 Running 0 22h 192.168.10.4 k8s-master03
可以看到這個(gè)Pod已經(jīng)起來(lái)了,并且部署在master03節(jié)點(diǎn)上,也就是有ingress=ture
標(biāo)簽的節(jié)點(diǎn)上,這樣對(duì)ingress進(jìn)行擴(kuò)容或縮容的時(shí)候就會(huì)方便很多。
比如當(dāng)你想擴(kuò)容的時(shí)候只需要在想擴(kuò)容的節(jié)點(diǎn)打上對(duì)應(yīng)的標(biāo)簽,就會(huì)自動(dòng)部署一個(gè)新的Pod,就像下面這條命令。
kubectl label node k8s-master02 ingress=true
當(dāng)我不想要這個(gè)Pod的時(shí)候,縮容也會(huì)比較簡(jiǎn)單,去掉標(biāo)簽就可以了,可以看出標(biāo)簽的強(qiáng)大之處,減號(hào)等于刪除標(biāo)簽的意思。
kubectl label node k8s-master02 ingress-
hostNetwork方式部署的ingress,會(huì)在宿主機(jī)啟動(dòng)一個(gè)進(jìn)程,我們?nèi)ゲ渴餚od的節(jié)點(diǎn)看一下,
[root@k8s-master03 ~]# ss -tpln | grep 80 LISTEN 0 16384 192.168.10.4:2380 *:* users:(("etcd",pid=1703,fd=7)) LISTEN 0 16384 *:80 *:* users:(("nginx",pid=106434,fd=19),("nginx",pid=106427,fd=19)) LISTEN 0 16384 *:80 *:* users:(("nginx",pid=106433,fd=11),("nginx",pid=106427,fd=11)) LISTEN 0 16384 [::]:80 [::]:* users:(("nginx",pid=106433,fd=12),("nginx",pid=106427,fd=12)) LISTEN 0 16384 [::]:80 [::]:* users:(("nginx",pid=106434,fd=20),("nginx",pid=106427,fd=20)) [root@k8s-master03 ~]# ps aux | grep nginx root 2622 0.0 0.1 8852 5456 ? Ss 01:12 0:00 nginx: master process nginx -g daemon off; 101 2759 0.0 0.0 9272 2456 ? S 01:12 0:00 nginx: worker process 101 2760 0.0 0.0 9272 2456 ? S 01:12 0:00 nginx: worker process root 25605 0.0 0.0 112840 2292 pts/0 S+ 15:19 0:00 grep --color=auto nginx 101 106347 0.0 0.0 208 4 ? Ss 09:08 0:00 /usr/bin/dumb-init -- /nginx-ingress-controller --publish-service=ingress-nginx/nginx-ingress-ingress-nginx-controller --election-id=ingress-controller-leader --controller-class=k8s.io/ingress-nginx --ingress-class=nginx --configmap=ingress-nginx/nginx-ingress-ingress-nginx-controller --validating-webhook=:8443 --validating-webhook-certificate=/usr/local/certificates/cert --validating-webhook-key=/usr/local/certificates/key 101 106359 0.1 1.1 743048 44956 ? Ssl 09:08 0:25 /nginx-ingress-controller --publish-service=ingress-nginx/nginx-ingress-ingress-nginx-controller --election-id=ingress-controller-leader --controller-class=k8s.io/ingress-nginx --ingress-class=nginx --configmap=ingress-nginx/nginx-ingress-ingress-nginx-controller --validating-webhook=:8443 --validating-webhook-certificate=/usr/local/certificates/cert --validating-webhook-key=/usr/local/certificates/key 101 106427 0.0 0.9 145100 36332 ? S 09:08 0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /etc/nginx/nginx.conf 101 106433 0.0 1.0 157128 40848 ? Sl 09:08 0:06 nginx: worker process 101 106434 0.0 1.0 157128 41000 ? Sl 09:08 0:07 nginx: worker process 101 106435 0.0 0.7 143072 29120 ? S 09:08 0:00 nginx: cache manager process
運(yùn)行之后,接下來(lái)嘗試簡(jiǎn)單的使用:
傳統(tǒng)架構(gòu)中發(fā)布服務(wù),需要配置修改nginx的配置文件;在k8s中ingress與其他資源類型一樣,通過(guò)yaml去聲明一個(gè)ingress的實(shí)例。
官方網(wǎng)址:ingress-controller官方文檔詳細(xì)內(nèi)容可以看這。
使用官網(wǎng)上一個(gè)例子先認(rèn)識(shí)一下ingress
vim ingress.yaml
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: name: example spec: ingressClassName: nginx rules: # 可以配置多個(gè)rules - host: foo.bar.com # 域名匹配 http: paths: # 相當(dāng)于nginx的location配合,同一個(gè)host可以配置多個(gè)paths - path: / pathType: Prefix backend: service: name: nginx-svc # 代理的哪個(gè)svc port: number: 80
這里說(shuō)一下上面這個(gè)實(shí)例的一些說(shuō)明:
從rules開(kāi)始向下是定義前后端連接的規(guī)則:
host
:代表基于域名訪問(wèn),客戶端通過(guò)這個(gè)域名訪問(wèn)后端資源
http.paths
:相當(dāng)于nginx的location中匹配規(guī)則
pathType:Prefix
:路徑類型,路徑由“/”符號(hào)分隔為一個(gè)個(gè)元素,匹配規(guī)則為逐個(gè)元素進(jìn)行前綴匹配,默認(rèn)ImplementationSpecific,還有一種是Exact。
backend
:定義后端
service
:下定義后端的地址,包括代理的svc和端口號(hào)
這里我遇到一個(gè)問(wèn)題:
[root@k8s-master01 ~]# kubectl create -f ingress.yaml Error from server (InternalError): error when creating "ingress.yaml": Internal error occurred: failed calling webhook "validate.nginx.ingress.kubernetes.io": failed to call webhook: Post "https://ingress-nginx-controller-admission.ingress-nginx.svc:443/networking/v1/ingresses?timeout=10s": service "ingress-nginx-controller-admission" not found
創(chuàng)建的時(shí)候報(bào)錯(cuò):
yaml": Internal error occurred: failed calling webhook "validate.nginx.ingress.kubernetes. io"
我查看了下網(wǎng)上說(shuō)應(yīng)該是刪除之前創(chuàng)建的資源時(shí)沒(méi)刪干凈。
[root@k8s-master01 ~]# kubectl get validatingwebhookconfigurations.admissionregistration.k8s.io NAME WEBHOOKS AGE ingress-nginx-admission 1 3d
然后查看下果然有個(gè)ingress-nginx-admission
,刪除后在創(chuàng)建就成功了
[root@k8s-master01 ~]# kubectl delete -A validatingwebhookconfigurations.admissionregistration.k8s.io ingress-nginx-admission validatingwebhookconfiguration.admissionregistration.k8s.io "ingress-nginx-admission" deleted
執(zhí)行ingress.yaml文件,這次就創(chuàng)建成功了。
[root@k8s-master01 ~]# kubectl create -f ingress.yaml ingress.networking.k8s.io/exmple created [root@k8s-master01 ~]# kubectl get ingress NAME CLASS HOSTS ADDRESS PORTS AGE exmplefoo.bar.com 80 10m
ingress也是可以配置多域名的
就是增加一個(gè)host實(shí)例。
# 第一個(gè)域名 - host: foo.bar.com http: paths: - path: / pathType: Prefix backend: service: name: nginx-svc port: number: 80 # 第二個(gè)域名 - host: foo2.bar.com http: paths: - path: /test pathType: Prefix backend: service: name: nginx-svc-2 port: number: 80
然后更新yaml文件就好了
[root@k8s-master01 ~]# kubectl replace -f ingress.yaml
原文鏈接:https://yyang.blog.csdn.net/article/details/122924796
相關(guān)推薦
- 2022-04-27 一文教你如何封裝安全的go_Golang
- 2023-04-22 python的open函數(shù)使用案例代碼_python
- 2022-06-15 golang中net的tcp服務(wù)使用_Golang
- 2022-03-19 .NET中的Husky工具及安裝方式_實(shí)用技巧
- 2022-07-27 numpy中的converters和usecols用法詳解_python
- 2022-08-27 C++?Thread實(shí)現(xiàn)簡(jiǎn)單的socket多線程通信_(tái)C 語(yǔ)言
- 2023-07-14 react 利用antd-mobile實(shí)現(xiàn)樓層效果
- 2022-03-27 Python中Tkinter布局管理grid的使用_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支