<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
通俗來講:Ingress和之前說的Service、Deployment一樣,也是一個k8s的資源型別;Ingress用於實現域名的方式存取k8s的內部應用,Service可能更適於服務間存取。
這東西我們使用的k8s官方維護的本版,另外nginx官方也有一個版本,怎麼用看個人。
Ingress支援多種方案:包括 Nginx、Haproxy、Traefik、istio等;在實際中Ingress上面可能還有一層公司的硬體層代理。
大概的流程圖如下:
這個ingress使用Hlem方式建立,以後會寫一篇helm的使用,現在不用管原理。
所需資源準備:
Ingress-nginx使用的兩個容器映象下載地址:
映象地址:registry.cn-hangzhou.aliyuncs.com
映象:yyangs/ingress-nginx-controller;yyangs/ingress-nginx-kube-webhook-certgen
chart包:ingress-nginx-4.0.17
首先我們先建立一個Helm(因為要使用helm建立)
[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
建立一個倉庫 ,方便安裝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包,將包解壓到一個建立的目錄中方便修改設定
[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 # 進到ingress-nginx目錄 [root@k8s-master01 temp]# cd ingress-nginx/
修改values.yaml,基本每一行都代表一個位置
# 源位置 controller: name: controller image: registry: registry.cn-hangzhou.aliyuncs.com image: yyangs/ingress-nginx-controller ## digest: sha256:0bc88eb15f9e7f84e8e56c14fa5735aaa488b840983f87bd79b1054190e660de # dns策略 dnsPolicy: ClusterFirstWithHostNet # 使用宿主機埠號,效能好 hostNetwork: true # 資源型別選擇DaemonSet,會在指定節點上部署 kind: DaemonSet # 在有標籤的node上部署 nodeSelector: kubernetes.io/os: linux ingress: "true" # 型別,本地環境使用 type: ClusterIP # 最後位置的另一處源位置 patch: enabled: true image: registry: registry.cn-hangzhou.aliyuncs.com image: yyangs/ingress-nginx-kube-webhook-certgen ## digest: sha256:64d8c73dca984af206adf9d6d7e46aa550362b1d7a01f3a0a91b20cc67868660
對上面的修改做一些說明:
映象源:他預設源是國外的,我們存取不到。所以我替換成了我的阿里源,如果做這個實驗的小夥伴可以用我的源;最後一處的源也一樣;注意把校驗註釋
使用hostNetwork: true建立,配合資源型別選擇DaemonSet效能更好
dns策略:如果使用hostNetwork,策略需要改成dnsPolicy: ClusterFirstWithHostNet
執行yaml檔案建立
# 建立一個名稱空間 [root@k8s-master01 ingress-nginx]# kubectl create ns ingress-nginx namespace/ingress-nginx created # 因為要在指定node上建立,所以給一臺機器建立一個標籤 [root@k8s-master01 ingress-nginx]# kubectl label nodes k8s-master03 ingress=true node/k8s-master03 labeled # 執行helm建立,那個名稱自定義,之前出了一點問題,所以換個名字。 [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 <none> <none>
可以看到這個Pod已經起來了,並且部署在master03節點上,也就是有ingress=ture
標籤的節點上,這樣對ingress進行擴容或縮容的時候就會方便很多。
比如當你想擴容的時候只需要在想擴容的節點打上對應的標籤,就會自動部署一個新的Pod,就像下面這條命令。
kubectl label node k8s-master02 ingress=true
當我不想要這個Pod的時候,縮容也會比較簡單,去掉標籤就可以了,可以看出標籤的強大之處,減號等於刪除標籤的意思。
kubectl label node k8s-master02 ingress-
hostNetwork方式部署的ingress,會在宿主機啟動一個程序,我們去部署Pod的節點看一下,
[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
執行之後,接下來嘗試簡單的使用:
傳統架構中釋出服務,需要設定修改nginx的組態檔;在k8s中ingress與其他資源型別一樣,通過yaml去宣告一個ingress的範例。
官方網址:ingress-controller官方檔案詳細內容可以看這。
使用官網上一個例子先認識一下ingress
vim ingress.yaml
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: name: example spec: ingressClassName: nginx rules: # 可以設定多個rules - host: foo.bar.com # 域名匹配 http: paths: # 相當於nginx的location配合,同一個host可以設定多個paths - path: / pathType: Prefix backend: service: name: nginx-svc # 代理的哪個svc port: number: 80
這裡說一下上面這個範例的一些說明:
從rules開始向下是定義前後端連線的規則:
host
:代表基於域名存取,使用者端通過這個域名存取後端資源
http.paths
:相當於nginx的location中匹配規則
pathType:Prefix
:路徑型別,路徑由“/”符號分隔為一個個元素,匹配規則為逐個元素進行字首匹配,預設ImplementationSpecific,還有一種是Exact。
backend
:定義後端
service
:下定義後端的地址,包括代理的svc和埠號
這裡我遇到一個問題:
[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
建立的時候報錯:
yaml": Internal error occurred: failed calling webhook "validate.nginx.ingress.kubernetes. io"
我檢視了下網上說應該是刪除之前建立的資源時沒刪乾淨。
[root@k8s-master01 ~]# kubectl get validatingwebhookconfigurations.admissionregistration.k8s.io NAME WEBHOOKS AGE ingress-nginx-admission 1 3d
然後檢視下果然有個ingress-nginx-admission
,刪除後在建立就成功了
[root@k8s-master01 ~]# kubectl delete -A validatingwebhookconfigurations.admissionregistration.k8s.io ingress-nginx-admission validatingwebhookconfiguration.admissionregistration.k8s.io "ingress-nginx-admission" deleted
執行ingress.yaml檔案,這次就建立成功了。
[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 exmple <none> foo.bar.com 80 10m
就是增加一個host範例。
# 第一個域名 - host: foo.bar.com http: paths: - path: / pathType: Prefix backend: service: name: nginx-svc port: number: 80 # 第二個域名 - 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
以上就是Ingress七層路由機制實現域名的方式存取k8s的詳細內容,更多關於Ingress七層路由機制域名存取k8s的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45