k8s入門之Ingress(七)

Ingress 的功能其實很容易理解:所謂 Ingress,就是 Service 的「Service」,代理不同後端 Service 而設置的負載均衡服務。

一、安裝ingress

1.查找ingress安裝文件

從github上查看ingress對應k8s版本的deploy文件,鏈接地址是:

//github.com/kubernetes/ingress-nginx/tree/main/deploy/static/provider/baremetal

2.點擊Raw按鈕可得到該文件的url鏈接

//raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/baremetal/1.21/deploy.yaml

3.在master節點上下載該文件

wget //raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/baremetal/1.21/deploy.yaml

4.更改文件名

mv deploy.yaml ingress-nginx.yaml

5.替換鏡像

由於中國訪問不了Google,需要更改ingress-nginx.yaml文件中的鏡像,從docker hub上搜索相關鏡像進行替換

k8s.gcr.io/ingress-nginx/controller:v1.1.2@sha256:28b11ce69e57843de44e3db6413e98d09de0f6688e33d4bd384002a44f7
8405c 替換成 liangjw/ingress-nginx-controller:v1.1.2

k8s.gcr.io/ingress-nginx/kube-webhook-certgen:v1.1.1@sha256:64d8c73dca984af206adf9d6d7e46aa550362b1d7a01f3a0a
91b20cc67868660 替換成 liangjw/kube-webhook-certgen:v1.1.1

6.創建nginx ingress

kubectl apply -f ingress-nginx.yaml

7.查看資源

kubectl get pod,svc -n ingress-nginx

8.在集群外通過集群內任意一台節點的IP+Port就可以訪問

由於還沒有配置被代理的服務,所以返回404

二、配置

1.參考前面的章節部署nginx的deploy與service

服務名為:svc-nginx

2.配置ingress

創建ingress-svc.yaml文件

vi ingress-svc.yaml

編寫文件內容

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-demo
  # 名稱空間不要忘了
  namespace: dev
spec:
  ingressClassName: nginx
  rules:
  - host: "demo.k8s.com"
    http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          service:
            # 代理的服務名稱
            name: svc-nginx
            port:
              # 服務埠
              number: 8000

3.創建ingress對象

kubectl apply -f ingress-svc.yaml

4.查看ingress對象的資訊

5.配置域名訪問

在windows宿主機上找到hosts文件:

C:\Windows\System32\drivers\etc\hosts,

添加一條映射記錄(從三台節點中任選一台的IP進行映射):

192.168.59.112 demo.k8s.com

然後通過該域名加上ingress controller服務自己暴露的埠就可以訪問了,千萬要注意不是你代理的服務的埠。如下圖所示獲取ingress服務的埠

在瀏覽器就可以訪問被ingress代理的k8s服務了

三、路徑重寫

1.更新yaml文件

vi ingress-svc.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    # 加上此重寫配置
    nginx.ingress.kubernetes.io/rewrite-target: /$2
  name: ingress-demo
  namespace: dev
spec:
  ingressClassName: nginx
  rules:
  - host: "demo.k8s.com"
    http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          service:
            name: svc-nginx
            port:
              number: 8000
  - host: "demo2.k8s.com"
    http:
      paths:
      - pathType: Prefix
        path: "/nginx(/|$)(.*)"
        backend:
          service:
            name: svc-nginx
            port:
              number: 8000

2.更新ingress對象

kubectl apply -f ingress-svc.yaml

3.查看ingress對象

4.配置域名

在windows宿主機上找到hosts文件:

C:\Windows\System32\drivers\etc\hosts,添加一條映射記錄:

192.168.59.112 demo2.k8s.com

在瀏覽器中訪問

四、限流配置

1.更新yaml文件

vi ingress-svc.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    # 加上此重寫配置
    nginx.ingress.kubernetes.io/rewrite-target: /$2
    # 限流
    nginx.ingress.kubernetes.io/limit-rps: "1"
  name: ingress-demo
  namespace: dev
spec:
  ingressClassName: nginx
  rules:
  - host: "demo.k8s.com"
    http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          service:
            name: svc-nginx
            port:
              number: 8000
  - host: "demo2.k8s.com"
    http:
      paths:
      - pathType: Prefix
        path: "/nginx(/|$)(.*)"
        backend:
          service:
            name: svc-nginx
            port:
              number: 8000

2.更新ingress對象

kubectl apply -f ingress-svc.yaml

3.測試

快速刷新訪問會報異常,你可以自定義錯誤頁面

五、總結

目前,Ingress 只能工作在七層,而 Service 只能工作在四層。所以當你想要在 Kubernetes 里為應用進行 TLS 配置等 HTTP 相關的操作時,都必須通過 Ingress 來進行。

Tags: