K8S基本操作-50-K8S Ingress
Ingress
一句話說 Ingress 就是用不同的 Path 導向不同 Service 的功能。
如我們有2個頁面,一個是網站一個是 API ,分別屬於不同 K8S Service 。
Ingress 可以讓兩個 Service 用以下方式存取:
# Web Service 存取路徑
http://web-app.com/web
# API Service 存取路徑
http://web-app.com/api
Ingress controller 採用不同開源軟體
Ingress 可以選擇佈署 Nginx (K8S project 官方支持), Contour, Istio, HAProxy, Traefik Proxy 來實現。
不同實現都能達到類似效果。
如果預設 K8S 沒有佈署 Ingress controller , 那需要自己手動佈署上述 Ingress controller 。
佈署 Ingress controller 的指令如下:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.2/deploy/static/provider/cloud/deploy.yaml
由於該 Deployment 很長,所以這邊就不完全展示了。
建立一個簡單的 Ingress 路徑用 YAML
參考官方範例:
https://kubernetes.io/docs/concepts/services-networking/ingress/
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: minimal-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
ingressClassName: nginx-example
rules:
- http:
paths:
- path: /testpath
pathType: Prefix
backend:
service:
name: test
port:
number: 80
我們注意到,上方只要指定 Service Name 與 Port 就能完成 Ingress 轉發。
另外一個範例:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-wear-watch
spec:
rules:
- host: wear.my-online-store.com
http:
paths:
- backend:
serviceName: wear-service
servicePort: 80
- host: watch.my-online-store.com
http:
paths:
- backend:
serviceName: watch-service
servicePort: 80
用 Kubectl 建立一個簡單的 Ingress
可以用以下指令進行建立一個 Ingress:
kubectl create deployment demo --image=httpd --port=80
kubectl expose deployment demo
kubectl create ingress demo-localhost --class=nginx \
--rule="*/*=demo:80"
kubectl port-forward --namespace=ingress-nginx service/ingress-nginx-controller 8080:80
然後在本機 http://localhost:8080 就能進行存取了。
檢視建立好了 Ingress
描述 Ingress 內容。
kubectl describe ingress <Ingress名稱>