地端 K8S 安裝 ingress-nginx

  1. 前言
  2. 前置作業
  3. 設定 Deployment、Service
  4. 安裝 ingress-nginx
  5. 補充

前言

在還沒設定 Ingress 前,我們的Service服務會設成 NodePort 來讓外部訪問使用
但若服務一多則會造成混亂,且還要提供Port號才能讓外部訪問

kubernetes 官方文件 - Ingress 可以讓我們透過設定Domain的方式 導引至不同的Service

然而 Ingress 的負載平衡功能 需由 Ingress Controller 提供
目前有許多 Ingress Controller 可供使用 可參考 kubernetes 官方文件 - Ingress Controllers

Kubernetes 維護了 ingress-gceingress-nginx,在GKE上 有預設提供 ingress-gce controller 可供使用
但在地端 則需要自行安裝 ingress controller

本文紀錄 如何 安裝 ingress-nginx

前置作業

預先準備

設定 Deployment、Service

記得設定成自己的 GCP ProjectID

cat <<EOF | kubectl create -f -
apiVersion: v1
kind: Namespace
metadata:
  name: web-sample
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dockersample-webapi
  labels:
    app: dockersample-webapi
  namespace: web-sample
spec:
  selector:
    matchLabels:
      app: dockersample-webapi
  replicas: 1
  template:
    metadata:
      labels:
        app: dockersample-webapi
    spec:
      containers:
        - name: web-container
          image: 'asia.gcr.io/$GCP ProjectID/dockersample_webapi'
          ports:
            - name: http
              containerPort: 80
              protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
  name: dockersample-webapi
  namespace: web-sample
spec:
  type: ClusterIP
  ports:
    - name: http-port
      port: 80
      targetPort: 80
      protocol: TCP
  selector:
    app: dockersample-webapi
EOF


# 輸出
namespace/web-sample created
deployment.apps/dockersample-webapi created
service/dockersample-webapi created

確認物件

kubectl get all -n web-sample

# 輸出
NAME                                       READY   STATUS    RESTARTS   AGE
pod/dockersample-webapi-7d66f7cdb7-57zgm   1/1     Running   0          109s

NAME                          TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
service/dockersample-webapi   ClusterIP   10.106.152.16   <none>        80/TCP    109s

NAME                                  READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/dockersample-webapi   1/1     1            1           109s

NAME                                             DESIRED   CURRENT   READY   AGE
replicaset.apps/dockersample-webapi-7d66f7cdb7   1         1         1       109s

先測試服務 確認服務正常

curl -i http://10.106.152.16/weatherforecast

# 輸出
HTTP/1.1 200 OK
Date: Thu, 05 May 2022 15:57:02 GMT
Content-Type: text/plain; charset=utf-8
Server: Kestrel
Transfer-Encoding: chunked

dockerSample_Service

若要清除物件 重新建立 可參考

kubectl delete all --all -n web-sample
kubectl delete ns web-sample

安裝 ingress-nginx

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.1.1/deploy/static/provider/cloud/deploy.yaml

設定 Ingress

cat <<EOF | kubectl create -f -
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: web-ingress
  namespace: web-sample
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
    nginx.ingress.kubernetes.io/force-ssl-redirect: "false"
spec:
  ingressClassName: nginx
  rules:
    - host: leozhengtest.dockersample-webapi.com
      http:
        paths:
          - path: /
            pathType: ImplementationSpecific
            backend:
              service: 
                name: dockersample-webapi
                port:
                  number: 80
EOF

查看 Ingress IP (因有安裝 MetalLB 會自動分配 IP Address,流程可參考 w4560000 - 地端 K8S 設定 MetalLB)

kubectl get ing -n web-sample -o wide

# 輸出
NAME          CLASS   HOSTS                                  ADDRESS      PORTS   AGE
web-ingress   nginx   leozhengtest.dockersample-webapi.com   10.240.0.1   80      12m

新增 domain 測試

vi /etc/hosts

10.240.0.1 leozhengtest.dockersample-webapi.com

測試 Ingress 服務 確認是否有導向 dockersample-webapi 的 service

curl -i http://leozhengtest.dockersample-webapi.com/weatherforecast

補充

ingress-nginx 不強制轉導 https

cat <<EOF | kubectl create -f -
apiVersion: v1
kind: ConfigMap
metadata:
  labels:
    app: ingress-nginx
  name: nginx-configuration
  namespace: ingress-nginx
data:
  ssl-redirect: "false"
  hsts: "false"
EOF

轉載請註明來源,若有任何錯誤或表達不清楚的地方,歡迎在下方評論區留言,也可以來信至 leozheng0621@gmail.com
如果文章對您有幫助,歡迎斗內(donate),請我喝杯咖啡

斗內💰

×

歡迎斗內

github