[轉帖]18--k8s之Nginx ingress

https://www.cnblogs.com/caodan01/p/15142709.html

 

 

一、介紹

ingress爲kubernetes集羣中的服務提供了入口,可以提供負載均衡,ssl終止和基於名稱的虛擬主機,在生產環境中常用的Ingress有treafik、Nginx、HAProxy、Istio等。在kubernetesv 1.1 版中添加的 Ingress 用於從集羣外部到集羣內部 Service 的 HTTP 和 HTTPS 路由,流量從 Internet 到 Ingress 再到 Services 最後到 Pod 上,通常情況下,Ingress 部署在所有的 Node 節點上。Ingress 可以配置提供服務外部訪問的 URL、負載均衡、終止 SSL,並提供基於域名的虛擬主機。但 Ingress 不會暴露任意端口或協議。

二、安裝nginx ingress

# 下載
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.41.2/deploy/static/provider/baremetal/deploy.yaml

# 修改自己的鏡像
    spec:
      dnsPolicy: ClusterFirst
      containers:
        - name: controller
          image: registry.cn-shanghai.aliyuncs.com/baim0os/ingress-nginx:v0.44.0
          imagePullPolicy: IfNotPresent
          lifecycle:
            preStop
    或者
修改鏡像
[root@k8s-m-01 ~]# sed -i 's#k8s.gcr.io/ingress-nginx/controller:v0.48.1@sha256:e9fb216ace49dfa4a5983b183067e97496e7a8b307d2093f4278cd550c303899#registry.cn-hangzhou.aliyuncs.com/k8sos/ingress-controller:v0.48.1#g' deploy.yaml
    
# 安裝
kubectl apply -f deploy.yaml

# 檢查是否安裝成功
kubectl get pods -n ingress-nginx

三、http部署

1.編寫一個service準備實驗

apiVersion: apps/v1
kind: Deployment
metadata:
  name: discuz
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx
---
apiVersion: v1
kind: Service
metadata:
  name: discuz
spec:
  selector:
    app: nginx
  ports:
    - port: 80
      targetPort: 80
      protocol: TCP
      nodePort: 30080
  type: NodePort

2.編寫http的ingress

kind: Ingress
apiVersion: networking.k8s.io/v1
metadata:
  name: discuz
spec:
  rules:
    - host: "www.discuz.com" # 要綁定的域名
      http:
        paths:
          - path: / # 請求的路徑
            pathType: Prefix #自由匹配
            # pathType: Exact # 精確匹配
            backend:
              service:
                name: discuz # 必須和service的名字一致纔可以綁定
                port:
                  number: 80  # 服務的端口號

3.部署

[root@m01 k8s]# kubectl apply -f nginx.yaml 
deployment.apps/discuz created
service/discuz created
ingress.networking.k8s.io/discuz created
[root@m01 k8s]# kubectl get svc -n ingress-nginx 
NAME                                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
ingress-nginx-controller             NodePort    10.99.211.135   <none>        80:30685/TCP,443:30542/TCP   3d
ingress-nginx-controller-admission   ClusterIP   10.99.2.179     <none>        443/TCP                      3d
# 配置本地的hosts去進行訪問
www.discuz.com:30685

img

四、https部署

# 生成證書
[root@m01 k8s]# openssl genrsa -out tls.key 2048
[root@m01 k8s]# openssl req -new -x509 -key tls.key -out tls.crt -subj /C=CN/ST=ShangHai/L=ShangHai/O=Ingress/CN=www.test.com

# 查看
[root@m01 k8s]# ll
-rw-r--r-- 1 root root 1289 Aug 12 22:46 tls.crt
-rw-r--r-- 1 root root 1679 Aug 12 22:46 tls.key

# 綁定證書
kubectl -n [名稱空間] create secret tls [secretname] --cert=[證書.crt] --key=[證書.key]

kubectl -n default create secret tls ingress-tls --cert=tls.crt --key=tls.key

kind: Ingress
apiVersion: networking.k8s.io/v1
metadata:
  name: discuz
spec:
  tls:
    - secretName: ingress-tls # 創建的加密的證書名
  rules:
    - host: "www.discuz.com" # 要綁定的域名
      http:
        paths:
          - path: / # 請求的路徑
            pathType: Prefix #自由匹配
            # pathType: Exact # 精確匹配
            backend:
              service:
                name: discuz # 必須和service的名字一致纔可以綁定
                port:
                  number: 80  # 服務的端口號

# 部署
kubectl apply -f

# 配置hosts訪問
www.discuz.com:30542

img

五、常用配置

通過annotations來添加各種的功能

1、生成密碼文件
[root@kubernetes-master-01 ingress]# yum install httpd-tools -y
[root@kubernetes-master-01 ingress]# htpasswd -c auth baim0

創建secret,把密碼文件放置於集羣中
[root@kubernetes-master-01 ingress]# kubectl create secret generic basic-auth --from-file=auth 

編寫註解,使用auth功能
      annotations:
        nginx.ingress.kubernetes.io/auth-type: basic # 類型
        nginx.ingress.kubernetes.io/auth-secret: basic-auth # secret
        nginx.ingress.kubernetes.io/auth-realm: "在線發牌!" # 提示信息
        
2、限制併發數
nginx.ingress.kubernetes.io/limit-connections: 1

3、每秒從給定 IP 接受的請求數
nginx.ingress.kubernetes.io/limit-rps: 1

4、每分鐘從給定 IP 接受的請求數
nginx.ingress.kubernetes.io/limit-rpm: 1

5、初始千字節數
nginx.ingress.kubernetes.io/limit-rate-after: 1

6、白名單
nginx.ingress.kubernetes.io/whitelist-source-range: 192.168.13.59

詳細請查詢

https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章