還有印象雷神索爾裡面,管理著彩虹橋的海姆達爾嗎~
只有人從彩虹橋傳送進來時,第一個面對的就是他。
在k8s裡面ingress
也是扮演著相同角色,是k8s cluster 外部連接內部服務的controller
Ingress 宣告了從k8s cluster外部進入到內部服務的http(https)路由。 流量路由由Ingress定義好的規則來控制。
圖片來源
如果沒有透過ingress就變成是外部直接對應k8s內部service,正常是不會直接把內部服務直接expose出去給外部呼叫,多層 reserve proxy相對安全。
ingress提供了
一般來說使用ingess時,Service type大多會使用LoadBalancer
apiVersion: networking.k8s.io/v1
kind: Ingress #kind要使用Ingress才會動嘿~
metadata:
name: minimal-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules: #這邊定義了ingress從外部導入內部的規則
- http:
paths:
- path: /testpath
pathType: Prefix #path 前綴是/testpath時就會進入規則內
backend:
service: #對應k8s內部服務名稱 service叫test,使用80 PORT
name: test
port:
number: 80
pathType分成了 Prefix
跟Exact
二種
type | path | request path | match |
---|---|---|---|
Prefix | / | 全部路徑 | YES |
Exact | /aa | /aa | YES |
Exact | /bb | /cc | NO |
Prefix | /aa | /aa, /aa/ | YES |
Prefix | /aa/cc | /aa/ccc | NO |
基於上面邏輯的yaml,
apiVersion: networking.k8s.io/v1
kind: Ingress2
metadata:
name: ingress-test2
spec:
rules:
- host: "aa.bb.com"
http:
paths:
- pathType: Prefix
path: "/cc"
backend:
service:
name: mytest1
port:
number: 80
- host: "*.bb.com"
http:
paths:
- pathType: Prefix
path: "/cc"
backend:
service:
name: mytest2
port:
number: 80
以上就是ingress的最基礎用法啦,因為主力不是使用ingress,所以這部份就算是淺談囉