乾貨|Kubernetes叢集部署
Nginx-ingress Controller

京東科技開發者發表於2019-09-20

乾貨|Kubernetes叢集部署
Nginx-ingress Controller

Kubernetes提供了兩種內建的雲端負載均衡機制用於釋出公共應用,一種是工作於傳輸層的Service資源,它實現的是TCP負載均衡器;另一種是Ingress資源,它實現的是HTTP(S)負載均衡器。
今天我們來重點討論Ingress資源。HTTP(S)負載均衡器是應用層負載均衡機制的一種,支援根據環境做出更好的排程決策。與傳輸層排程器相比,它提供了可自定義URL對映和TLS等功能,並支援多種健康狀態檢查機制。
Ingress是Kubernetes API的標準資源型別之一,它其實就是一組基於DNS名稱或URL路徑把請求轉發至指定的Service資源的規則,用於將叢集外部的請求流量轉發至叢集內部完成服務釋出。然而,Ingress資源自身並不能進行“流量穿透”,它僅是一組路由規則的集合,這些規則要想真正發揮作用還需要其他功能的輔助,如監聽某套接字,然後根據這些規則的匹配機制路由請求流量。這種能夠為Ingress資源監聽套接字並轉發流量的元件稱為Ingress Controller。

乾貨|Kubernetes叢集部署
Nginx-ingress Controller

一、部署Helm

Helm是一個包管理工具, 把Kubernetes資源(比如deployments、services或 ingress等) 打包到一個chart中,方便將其chart儲存到chart倉庫用來儲存和分享, Helm支援釋出應用配置的版本管理, 使釋出可配置, 簡化了Kubernetes部署應用的版本控制、打包、釋出、刪除、更新等操作。
  • 安裝Helm
1、官網下載Helm二進位制檔案,當前最新版本為2.14.0;
wget 

2、解壓縮檔案並將目錄中二進位制檔案移動到/usr/local/bin/下;

tar -zxvf helm-v2.14.0-linux-amd64.tar.gz
mv linux-amd64/helm /usr/local/bin/helm
3、為Tiller新增許可權,詳見Role-based Access Control,新建 rbac-config.yaml,內容如下:
apiVersion: v1
kind: ServiceAccount
metadata:
  name: tiller
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: tiller
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
  - kind: ServiceAccount
    name: tiller
    namespace: kube-system
執行create命令:
kubectl create -f rbac-config.yaml
4、初始化 Helm 並安裝 Tiller 服務
helm init --upgrade --service-account tiller --tiller-image sapcc/tiller:v2.14.0
5、檢視helm版本,出現以下資訊,確認安裝成功:
Client: &version.Version{SemVer:"v2.14.0", GitCommit:"8478fb4fc723885b155c924d1c8c410b7a9444e6", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.14.0", GitCommit:"8478fb4fc723885b155c924d1c8c410b7a9444e6", GitTreeState:"clean"}
6、chart列表
helm repo update
7、測試chart是否可用
helm search

二、使用Helm安裝nginx-ingress

  • 安裝nginx-ingress
1、執行helm install命令
helm install stable/nginx-ingress --name my-nginx --set rbac.create=true
--name:為安裝的應用命名
2、檢視helm 列表
乾貨|Kubernetes叢集部署
Nginx-ingress Controller
3、檢視ingress的service
kuberctl get svc
乾貨|Kubernetes叢集部署
Nginx-ingress Controller

三、部署nginx例項應用

  • 部署nginx的deployment
1、編輯nginx-app.yaml檔案
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginxdemos/hello:latest
        ports:
        - containerPort: 80
2、執行create建立命令
kubectl  create  -f  nginx-app.yaml
3、檢測deployment部署情況
kubectl  get deployment  nginx-deployment
  • 為nginx的deployment建立service

1、執行expose命令

kubectl expose deployment nginx-deployment --target-port=80 --port=80 --protocol=TCP --name=jdc-test
2、確認服務建立完成
kubectl  get  svc
乾貨|Kubernetes叢集部署
Nginx-ingress Controller
  • 為service建立ingress
1、編輯 ingress-nginx.yaml檔案
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: jdc-ingress-controller-test
  annotations:
    metadata.annotations.kubernetes.io/ingress.class: "nginx"   
spec:
  rules:
  - host: test.nginx-ingress.jdc-test
    http:
      paths:
      - path: /
        backend:
          serviceName: jdc-test
          servicePort: 80
2、執行create建立命令
kubectl  create –f  ingress-nginx.yaml
3、檢視ingress部署情況
kubectl  get ingress
乾貨|Kubernetes叢集部署
Nginx-ingress Controller
4、在客戶端新增靜態解析,公網IP是nginx controller的service公網IP,域名是ingress的host:test.nginx-ingress.jdc-test
5、瀏覽器輸入url 訪問測試

乾貨|Kubernetes叢集部署
Nginx-ingress Controller

歡迎點選“ 京東雲 ”瞭解更多精彩內容


乾貨|Kubernetes叢集部署
Nginx-ingress Controller

乾貨|Kubernetes叢集部署
Nginx-ingress Controller


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69912185/viewspace-2657692/,如需轉載,請註明出處,否則將追究法律責任。

相關文章