Kubernetes Ingress:靈活的集群外部網(wǎng)絡(luò)訪問的利器
前提條件
- 您已經(jīng)擁有一個 Kubernetes 集群,并且可以訪問該集群。
- 您已經(jīng)安裝了 kubectl 命令行工具。
版本選擇
安裝前需要選擇兼容你Kubernetes的版本,不能會失敗。
ingress由兩部分組成:
- Ingress Controller:負(fù)責(zé)處理 Ingress 請求,并將請求轉(zhuǎn)發(fā)到正確的服務(wù)。
- Ingress 資源對象:定義 Ingress 規(guī)則,包括路由規(guī)則、負(fù)載均衡、SSL/TLS 保護(hù)等。
以下就是具體的安裝步驟:
安裝 Ingress Controller
Ingress Controller 是負(fù)責(zé)處理 Ingress 請求的組件。Kubernetes 提供了多種 Ingress Controller,您可以根據(jù)需要選擇。以下是常用的 Ingress Controller:
- Nginx Ingress Controller:基于 Nginx 的 Ingress Controller,功能強(qiáng)大,易于配置。
- HAProxy Ingress Controller:基于 HAProxy 的 Ingress Controller,性能優(yōu)異,適用于高并發(fā)場景。
- Contour Ingress Controller:基于 Envoy 的 Ingress Controller,功能豐富,適用于多云場景。
在本教程中,我們將使用 Nginx Ingress Controller 進(jìn)行演示。
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.4.0/deploy/static/provider/cloud/deploy.yaml
一定要把版本后面帶的@摘要值刪除掉。
要創(chuàng)建 Ingress 資源對象,您可以使用 kubectl 命令:
kubectl apply -f deploy.yaml
#安裝后查看安裝結(jié)果
kubectl get pods -n ingress-nginx
看到下圖的結(jié)果就代表成功了,只要controller是Running,其它是Completed就可以了。
如果發(fā)現(xiàn)安裝失敗,可以嘗試刪除pod再重新kubectl apply -f deploy.yaml。
#強(qiáng)制刪除pod
kubectl delete pod --all -n ingress-nginx --force --grace-period=0
kubectl apply -f deploy.yaml
如果想查看具體的失敗原因,可以使用下面的命令。
kubectl get pods -n ingress-nginx
kubectl describe pod ingress-nginx-controller-6c978d4999-vqfwp --namespace ingress-nginx
發(fā)部署應(yīng)用
vim nginx-deploy.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx-demo
name: nginx-demo
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- image: nginx
name: nginx
---
apiVersion: v1
kind: Service
metadata:
labels:
app: nginx
name: nginx
spec:
selector:
app: nginx
ports:
- port: 8000
protocol: TCP
targetPort: 80
kubecl apply -f nginx-deploy.yaml
kubectl get pod,svc
Ingress資源對象
vim ingress-nginx.yaml:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-nginx
spec:
ingressClassName: nginx
rules:
- host: "demo.com"
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: nginx
port:
number: 8000
沒有域名可以自己在/etc/hosts 增加demo.com:
kubecl apply -f ingress-nginx.yaml
kubectl get ing
查看端口:
kubectl get pods,svc -n ingress-nginx
總結(jié)
一般安裝都會失敗,主要是國內(nèi)無法下載鏡像??梢钥吹降谝粋€deploy.yaml中要下載兩個鏡像文件分別是:
- registry.k8s.io/ingress-nginx/controller:v1.4.0。
- registry.k8s.io/ingress-nginx/kube-webhook-certgen:v20220916-gd32f8c343。
有幾種解決方案:
- 改成國內(nèi)鏡像源,一般舊怎么的還是比較多的,新版本還是比較少。
- 安裝個代理,然后下載。
- 手動下載鏡像tar,再docker load進(jìn)本地鏡像庫里。使用tag修改鏡像tag:
docker tag old_image_name new_image_name