W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
Ingress是一種 API 對象,其中定義了一些規(guī)則使得集群中的 服務(wù)可以從集群外訪問。 Ingress 控制器 負(fù)責(zé)滿足 Ingress 中所設(shè)置的規(guī)則。
本節(jié)為你展示如何配置一個簡單的 Ingress,根據(jù) HTTP URI 將服務(wù)請求路由到 服務(wù) ?web
?或 ?web2
?。
你必須擁有一個 Kubernetes 的集群,同時你的 Kubernetes 集群必須帶有 kubectl 命令行工具。 建議在至少有兩個節(jié)點的集群上運行本教程,且這些節(jié)點不作為控制平面主機(jī)。 如果你還沒有集群,你可以通過 Minikube 構(gòu)建一個你自己的集群,或者你可以使用下面任意一個 Kubernetes 工具構(gòu)建:
您的 Kubernetes 服務(wù)器版本必須不低于版本 1.19。要獲知版本信息,請輸入 ?kubectl version
?。如果你使用的是較早的 Kubernetes 版本,請切換到該版本的文檔。
minikube addons enable ingress
kubectl get pods -n ingress-nginx
說明: 最多可能需要等待一分鐘才能看到這些 Pod 運行正常。
輸出類似于:
NAME READY STATUS RESTARTS AGE
ingress-nginx-admission-create-g9g49 0/1 Completed 0 11m
ingress-nginx-admission-patch-rqp78 0/1 Completed 1 11m
ingress-nginx-controller-59b45fb494-26npt 1/1 Running 0 11m
kubectl get pods -n kube-system
說明: 最多可能需要等待一分鐘才能看到這些 Pod 運行正常。
輸出類似于:
NAME READY STATUS RESTARTS AGE
default-http-backend-59868b7dd6-xb8tq 1/1 Running 0 1m
kube-addon-manager-minikube 1/1 Running 0 3m
kube-dns-6dcb57bcc8-n4xd4 3/3 Running 0 2m
kubernetes-dashboard-5498ccf677-b8p5h 1/1 Running 0 2m
nginx-ingress-controller-5984b97644-rnkrg 1/1 Running 0 1m
storage-provisioner 1/1 Running 0 2m
請確??梢栽谳敵鲋锌吹揭粋€名稱以 ?nginx-ingress-controller-
? 為前綴的 Pod。
kubectl create deployment web --image=gcr.io/google-samples/hello-app:1.0
輸出:
deployment.apps/web created
kubectl expose deployment web --type=NodePort --port=8080
輸出:
service/web exposed
kubectl get service web
輸出類似于:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
web NodePort 10.104.133.249 <none> 8080:31637/TCP 12m
minikube service web --url
輸出類似于:
http://172.17.0.15:31637
說明: 如果使用的是 Katacoda 環(huán)境,在終端面板頂端,請點擊加號標(biāo)志。 然后點擊 Select port to view on Host 1。 輸入節(jié)點和端口號(這里是?
31637
?),之后點擊 Display Port。
輸出類似于:
Hello, world!
Version: 1.0.0
Hostname: web-55b8c6998d-8k564
你現(xiàn)在應(yīng)該可以通過 Minikube 的 IP 地址和節(jié)點端口來訪問示例應(yīng)用了。 下一步是讓自己能夠通過 Ingress 資源來訪問應(yīng)用。
下面是一個定義 Ingress 的配置文件,負(fù)責(zé)通過 ?hello-world.info
? 將請求 轉(zhuǎn)發(fā)到你的服務(wù)。
example-ingress.yaml
?:apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
rules:
- host: hello-world.info
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: web
port:
number: 8080
kubectl apply -f https://k8s.io/examples/service/networking/example-ingress.yaml
輸出:
ingress.networking.k8s.io/example-ingress created
kubectl get ingress
說明: 此操作可能需要幾分鐘時間。
接下來你將會在ADDRESS列中看到IPv4地址,例如:
NAME CLASS HOSTS ADDRESS PORTS AGE
example-ingress <none> hello-world.info 172.17.0.15 80 38s
/etc/hosts
? 文件的末尾添加以下內(nèi)容(需要管理員訪問權(quán)限):說明: 如果你在本地運行 Minikube 環(huán)境,需要使用 ?
minikube ip
? 獲得外部 IP 地址。 Ingress 列表中顯示的 IP 地址會是內(nèi)部 IP 地址。
172.17.0.15 hello-world.info
添加完成后,在瀏覽器中訪問URL ?hello-world.info
?,請求將被發(fā)送到 Minikube。
curl hello-world.info
你應(yīng)該看到類似輸出:
Hello, world!
Version: 1.0.0
Hostname: web-55b8c6998d-8k564
說明: 如果你在使用本地 Minikube 環(huán)境,你可以從瀏覽器中訪問 hello-world.info。
kubectl create deployment web2 --image=gcr.io/google-samples/hello-app:2.0
輸出:
deployment.apps/web2 created
kubectl expose deployment web2 --port=8080 --type=NodePort
輸出:
service/web2 exposed
example-ingress.yaml
?,在文件最后添加以下行: - path: /v2
pathType: Prefix
backend:
service:
name: web2
port:
number: 8080
kubectl apply -f example-ingress.yaml
輸出:
ingress.networking/example-ingress configured
curl hello-world.info
輸出類似于:
Hello, world!
Version: 1.0.0
Hostname: web-55b8c6998d-8k564
curl hello-world.info/v2
輸出類似于:
Hello, world!
Version: 2.0.0
Hostname: web2-75cd47646f-t8cjk
說明: 如果你在本地運行 Minikube 環(huán)境,你可以使用瀏覽器來訪問 hello-world.info 和 hello-world.info/v2。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: