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

Kubernetes提供了兩種內建的雲端負載均衡機制用於發佈公共應用,一種是工做於傳輸層的Service資源,它實現的是TCP負載均衡器;另外一種是Ingress資源,它實現的是HTTP(S)負載均衡器。linux

今天咱們來重點討論Ingress資源。HTTP(S)負載均衡器是應用層負載均衡機制的一種,支持根據環境作出更好的調度決策。與傳輸層調度器相比,它提供了可自定義URL映射和TLS等功能,並支持多種健康狀態檢查機制。nginx

Ingress是Kubernetes API的標準資源類型之一,它其實就是一組基於DNS名稱或URL路徑把請求轉發至指定的Service資源的規則,用於將集羣外部的請求流量轉發至集羣內部完成服務發佈。然而,Ingress資源自身並不能進行「流量穿透」,它僅是一組路由規則的集合,這些規則要想真正發揮做用還須要其餘功能的輔助,如監聽某套接字,而後根據這些規則的匹配機制路由請求流量。這種可以爲Ingress資源監聽套接字並轉發流量的組件稱爲Ingress Controller。api

1、部署Helm瀏覽器

Helm是一個包管理工具, 把Kubernetes資源(好比deployments、services或 ingress等) 打包到一個chart中,方便將其chart保存到chart倉庫用來存儲和分享, Helm支持發佈應用配置的版本管理, 使發佈可配置, 簡化了Kubernetes部署應用的版本控制、打包、發佈、刪除、更新等操做。app

  • 安裝Helm負載均衡

一、官網下載Helm二進制文件,當前最新版本爲2.14.0;工具

wget https://storage.googleapis.com/kubernetes-helm/helm-v2.14.0-linux-amd64.tar.gz

二、解壓縮文件並將目錄中二進制文件移動到/usr/local/bin/下;測試

tar -zxvf helm-v2.14.0-linux-amd64.tar.gz mv linux-amd64/helm /usr/local/bin/helm

三、爲Tiller添加權限,詳見Role-based Access Control,新建rbac-config.yaml,內容以下:google

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命令:url

kubectl create -f rbac-config.yaml

四、初始化 Helm 並安裝 Tiller 服務

helm init --upgrade --service-account tiller --tiller-image sapcc/tiller:v2.14.0

五、查看helm版本,出現如下信息,確認安裝成功:

Client: &version.Version{SemVer:"v2.14.0", GitCommit:"8478fb4fc723885b155c924d1c8c410b7a9444e6", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.14.0", GitCommit:"8478fb4fc723885b155c924d1c8c410b7a9444e6", GitTreeState:"clean"}

六、chart列表

helm repo update

七、測試chart是否可用

helm search

2、使用Helm安裝nginx-ingress

  • 安裝nginx-ingress

一、執行helm install命令

helm install stable/nginx-ingress --name my-nginx --set rbac.create=true

--name:爲安裝的應用命名

二、查看helm 列表

三、查看ingress的service

kuberctl get svc

3、部署nginx實例應用

  • 部署nginx的deployment

一、編輯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

二、執行create建立命令

kubectl  create  -f  nginx-app.yaml

三、檢測deployment部署狀況

kubectl  get deployment  nginx-deployment
  • 爲nginx的deployment建立service

一、執行expose命令

kubectl expose deployment nginx-deployment --target-port=80 --port=80 --protocol=TCP --name=jdc-test

二、確認服務建立完成

kubectl  get  svc

  • 爲service建立ingress

一、編輯 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

二、執行create建立命令

kubectl  create –f  ingress-nginx.yaml

三、查看ingress部署狀況

kubectl  get ingress

四、在客戶端添加靜態解析,公網IP是nginx controller的service公網IP,域名是ingress的host:test.nginx-ingress.jdc-test

五、瀏覽器輸入url http://test.nginx-ingress.jdc-test/jdc-test訪問測試

歡迎點擊「連接」瞭解京東雲更多精彩內容

相關文章
相關標籤/搜索