Ingress Controller là gì và cách triển khai Nginx Ingress Controller trong Kubernetes Cluster trên AWS bằng Helm

theanh

Administrator
Nhân viên
Trước khi tiến hành cài đặt Nginx Ingress Controller, chúng ta hãy cùng xem qua Ingress và Ingress Controller là gì. Bài viết này tập trung vào phần thiết lập, chúng tôi giả định rằng bạn đã quen thuộc với tất cả các điều kiện tiên quyết để thiết lập Nginx Ingress Controller trong Kubernetes Cluster.

Kubernetes Ingress

Đây là đối tượng Kubernetes quản lý quyền truy cập bên ngoài vào các dịch vụ trong Kubernetes Cluster. Đối tượng này hiển thị các tuyến HTTP và HTTPS từ bên ngoài cụm Kubernetes đến các dịch vụ trong cụm Kubernetes.

Ingress Controller

Để sử dụng Ingress, bạn phải có Ingress Controller trong cụm Kubernetes. Đối tượng này không phải là một phần của cụm Kubernetes như các bộ điều khiển khác trong cụm, đối tượng này không tự động khởi động trong cụm. Chúng ta có thể triển khai bất kỳ số lượng Bộ điều khiển Ingress nào trong cụm Kubernetes. Để làm như vậy, chúng ta nên chú thích mỗi ingress bằng appropriateingress.class. Có rất nhiều loại Ingress Controller khác nhau. Ingress Controller là LoadBalancer cho Kubernetes Environments. Nó được sử dụng như một giải pháp quản lý lưu lượng cho các môi trường Kubernetes.

Trong bài viết này, chúng ta sẽ xem cách cài đặt Nginx Ingress Controller bằng Helm trên Kubernetes Cluster được thiết lập bằng Kops. Để biết chi tiết về Nginx Ingress Controller, hãy truy cập tài liệu chính thức tại đây.

Điều kiện tiên quyết​

  1. Tài khoản AWS (Tạo nếu bạn chưa có).
  2. Kops 1.18.2 đã được cài đặt trên máy của bạn (Nhấp vào đây để tìm hiểu cách tạo Cụm Kubernetes bằng Kops và biết thêm thông tin về nó.)
  3. Helm v3.5.3 (Nhấp vào đây để tìm hiểu cách cài đặt Helm trên Ubuntu Server)
  4. S3 Bucket (Nhấp vào đây để tìm hiểu cách tạo S3 Bucket trên AWS).
  5. Tên miền (Nhấp vào đây để tìm hiểu cách đăng ký Miền trên AWS).
  6. Vai trò IAM với quyền quản trị viên (Nhấp vào đây để tìm hiểu cách tạo vai trò IAM trên AWS).

Chúng ta sẽ làm gì?​

  1. Tạo cụm Kubernetes bằng Kops
  2. Thiết lập Nginx Ingress Controller bằng Helm
  3. Tạo Recordset trong Route53 trỏ đến LoadBalancer do Nginx Ingress Controller tạo ra
  4. CreateObject các tệp định nghĩa cho một ứng dụng mẫu
  5. Triển khai một ứng dụng mẫu
  6. Triển khai một Ingress Object

Tạo cụm Kubernetes bằng Kops​

Trước khi tiến hành tạo cụm, hãy xuất quyền truy cập Người dùng AWS IAM và khóa bí mật của bạn bằng các lệnh sau.
Mã:
export AWS_ACCESS_KEY_ID= #Xuất Khóa truy cập AWS
Mã:
export AWS_SECRET_ACCESS_KEY= ##Xuất khóa bí mật AWS export
Mã:
Bây giờ, hãy xuất biến KOPS_STATE_STORE với giá trị là tên nhóm S3 trên thiết bị đầu cuối của bạn.
Mã:
KOPS_STATE_STORE=s3://
Nếu bạn đang tạo cụm lần đầu tiên bằng Kops và sử dụng S3 Bucket được chỉ định ở trên để lưu trữ cấu hình cụm, bạn sẽ không thấy bất kỳ cụm nào khi bạn thử lấy cụm bằng lệnh sau.
Mã:
kops get clusters
Truy cập tài liệu được chỉ định trong phần điều kiện tiên quyết để hiểu chi tiết về Kops. Tại đây, để tạo cụm Kubernetes, hãy thực hiện lệnh sau bằng cách thay thế các giá trị. Tôi sẽ không đi sâu vào chi tiết ở đây.
Mã:
kops create cluster --name --state s3:// --cloud aws --master-size t2.small --master-count 1 --master-zones us-east-1a --node-size t2.small --node-count 2 --zones us-east-1a,us-east-1b,us-east-1c


Bạn có thể thấy một vài lệnh trong gợi ý.



Bây giờ, lần này nếu bạn thử lấy cấu hình cụm, bạn sẽ thấy tên cụm trong đầu ra cùng với Cloud và Zones.



Cho đến thời điểm này, cụm vẫn chưa được tạo, hãy thực hiện lệnh sau để cập nhật cấu hình Cụm.
Mã:
kops update cluster --name kops.devopslee.com


Bạn vẫn cần thực hiện lệnh trên với tùy chọn --yes để tạo tài nguyên cụm.
Mã:
kops update cluster --name kops.devopslee.com --yes


Xác thực xem cụm đã sẵn sàng hay chưa.
Mã:
kops validate cluster --wait 10m


Bạn cần đợi một thời gian cho đến khi cụm trở nên hoạt động bình thường.
Mã:
kops validate cluster --wait 10m


Khi cụm đã hoạt động bình thường, bạn có thể kiểm tra các pod mặc định trên tất cả các không gian tên bằng lệnh sau.
Mã:
kubectl get pods -A

Thiết lập Nginx Ingress Controller bằng Helm​

Khi Kubernetes Cluster đã sẵn sàng và hoạt động bình thường, bạn có thể cài đặt Nginx Ingress Controller bằng Helm.

Trước khi tiếp tục, hãy xác minh rằng bạn có Helm v3.5.3.

Lưu ý: Tôi đã sử dụng Helm binary tại vị trí hiện tại của mình, do đó bạn có thể thấy ./helm trong ảnh chụp màn hình.
Mã:
phiên bản helm


Thêm kho lưu trữ và cài đặt biểu đồ Helm của Nginx Ingress Controller bằng các lệnh sau. Để hiểu Helm, hãy tham khảo tài liệu được đề cập trong phần điều kiện tiên quyết.
Mã:
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
Mã:
helm repo update
Mã:
helm install nginx-ingress ingress-nginx/ingress-nginx --set controller.publishService.enabled=true


Trong ảnh chụp màn hình ở trên, bạn có thể thấy biểu đồ Helm đã được cài đặt.

Bạn có thể kiểm tra các tài nguyên đã được tạo như một phần của Bộ điều khiển Ingress.
Mã:
kubectl get pods
Mã:
kubectl get deployment
Mã:
kubectl get service


Trong ảnh chụp màn hình ở trên, bạn có thể thấy Dịch vụ "nginx-ingress-ingress-nginx-controller" loại LoadBalancer cũng đã được tạo. Điều này có nghĩa là LoadBalancer đã được tạo trong tài khoản AWS.

Tạo Recordset trong Route53 trỏ đến LoadBalancer do Nginx Ingress Controller tạo ra​

Truy cập tài khoản AWS của bạn trong vùng mà bạn đã tạo Kubernetes Cluster. Kiểm tra LoadBalancer và sao chép Tên DNS của nó.



Bây giờ, hãy truy cập Route53 và tạo một Bản ghi A duy nhất trong HostedZone.



Sau khi chúng ta tạo một bản ghi hợp lệ, bản ghi chúng ta đã tạo sẽ được sử dụng để định tuyến lưu lượng đến Kubernetes Cluster thông qua Nginx Ingress Controller mà chúng ta đã tạo. Trong trường hợp này, kops.devopslee.com sẽ định tuyến lưu lượng đến các Dịch vụ trong cụm Kubernetes thông qua Nginx Ingress Controller.

Tạo các tệp định nghĩa Object cho một ứng dụng mẫu​

Bây giờ, hãy tạo các tệp định nghĩa đối tượng để triển khai một ứng dụng mẫu. Chúng ta sẽ triển khai 3 ứng dụng bằng 3 Triển khai và 3 Dịch vụ tương ứng cho các triển khai. Sau đó, chúng tôi sẽ tạo một tài nguyên Ingress với định tuyến dựa trên đường dẫn để định tuyến lưu lượng đến các ứng dụng của chúng tôi bằng kops.devopslee.com dựa trên đường dẫn.



Tạo 1-nginx-main-app.yaml cho ứng dụng 1.

Liên kết Github: Nhấp vàođâyđể sao chép tệp từ kho lưu trữ Github của tôi.
Mã:
apiVersion: apps/v1kind: Triển khaimetadata: labels: run: nginx name: nginx-deploy-mainspec: replicas: 1 selector: matchLabels: run: nginx-main template: metadata: labels: run: nginx-main spec: containers: - image: nginx name: nginx---apiVersion: v1kind: Dịch vụmetadata: name: nginx-deploy-mainspec: type: ClusterIP ports: - port: 80 targetPort: 80 selector: run: nginx-main


Create2-nginx-green-app.yaml cho ứng dụng 2.

Liên kết Github: Nhấp vàođâyđể sao chép tệp từ kho lưu trữ Github của tôi.
Mã:
apiVersion: apps/v1kind: Triển khaimetadata: labels: run: nginx name: nginx-deploy-greenspec: replicas: 1 selector: matchLabels: run: nginx-green template: metadata: labels: run: nginx-green spec: volumes: - name: webdata emptyDir: {} initContainers: - name: web-content image: busybox volumeMounts: - name: webdata mountPath: "/webdata" lệnh: ["/bin/sh", "-c", 'echo "[HEADING=1]Tôi là XANH LÁ[/HEADING]" > /webdata/index.html'] containers: - image: nginx name: nginx volumeMounts: - name: webdata mountPath: "/usr/share/nginx/html"------apiVersion: v1kind: Servicemetadata: name: nginx-deploy-greenspec: type: ClusterIP ports: - port: 80 targetPort: 80 selector: run: nginx-green


Tạo 3-nginx-blue-app.yaml cho ứng dụng 3

Liên kết Github: Nhấp vàođâyđể sao chép tệp từ kho lưu trữ Github của tôi.
Mã:
apiVersion: apps/v1kind: Triển khaimetadata: labels: run: nginx name: nginx-deploy-bluespec: replicas: 1 selector: matchLabels: run: nginx-blue template: metadata: labels: run: nginx-blue spec: volumes: - name: webdata emptyDir: {} initContainers: - name: web-content image: busybox volumeMounts: - name: webdata mountPath: "/webdata" command: ["/bin/sh", "-c", 'echo "[HEADING=1]Tôi là BLUE[/HEADING]" > /webdata/index.html'] containers: - image: nginx name: nginx volumeMounts: - name: webdata mountPath: "/usr/share/nginx/html"---apiVersion: v1kind: Servicemetadata: name: nginx-deploy-bluespec: type: ClusterIP ports: - port: 80 targetPort: 80 selector: run: nginx-blue


Tạo 4-ingress.yaml để tạo các quy tắc Ingress dựa trên đường dẫn.

Liên kết Github: Nhấp vàođâyđể sao chép tệp từ kho lưu trữ Github của tôi.
Mã:
apiVersion: extensions/v1beta1kind: Ingressmetadata: annotations: nginx.ingress.kubernetes.io/rewrite-target: / name: ingress-resourcespec: rules: - host: kops.devopslee.com http: paths: - path: / backend: serviceName: nginx-deploy-main servicePort: 80 - path: /blue backend: serviceName: nginx-deploy-blue servicePort: 80 - path: /green backend: serviceName: nginx-deploy-green servicePort: 80
Bạn có thể tìm thấy tất cả các tệp này trên kho lưu trữ Github của tôi tại đây.

Triển khai các ứng dụng mẫu​

Hãy triển khai từng ứng dụng mẫu và kiểm tra trạng thái của chúng.
Mã:
kubectl apply -f 1-nginx-main-app.yaml
Mã:
kubectl apply -f 2-nginx-green-app.yaml
Mã:
kubectl apply -f 3-nginx-blue-app.yaml
Mã:
kubectl get deployments
Mã:
kubectl get pods
Mã:
kubectl get service

Triển khai Đối tượng Ingress​

Bây giờ, đã đến lúc tạo tài nguyên Ingress định tuyến dựa trên đường dẫn. Đồng thời, hãy kiểm tra nhật ký của Nginx Pod.
Mã:
kubectl logs nginx-ingress-ingress-nginx-controller-5c97c6b4d5-btvpl -f
Mã:
kubectl apply -f 4-ingress.yaml


Ngay sau khi tài nguyên Ingress được tạo, bạn có thể thấy Nginx đã tải cấu hình của nó.

Và bây giờ, 3 ứng dụng khác nhau đã sẵn sàng để được truy cập bằng cùng một Tên máy chủ, tức là kops.devopslee.com, trên các đường dẫn khác nhau.

URL cho các ứng dụng, tên Máy chủ ở đây sẽ khác đối với bạn.

nginx-deploy-main có thể được truy cập trên kops.devopslee.com

nginx-deploy-green có thể được truy cập onkops.devopslee.com/green và

nginx-deploy-blue có thể được truy cập onkops.devopslee.com/blue



Bạn có thể thấy rằng 3 ứng dụng khác nhau có thể được truy cập bằng cùng một Tên máy chủ dựa trên đường dẫn.


Kết luận​

Trong bài viết này, chúng ta đã thấy các bước để tạo Cụm Kubernetes bằng Kops. Bài viết này chủ yếu tập trung vào việc thiết lập Bộ điều khiển Nginx Ingress bằng Helm và tạo định tuyến dựa trên đường dẫn bằng tài nguyên Ingress. Chúng tôi đã triển khai 3 ứng dụng mẫu khác nhau và thử truy cập chúng bằng cùng một Tên máy chủ và các đường dẫn khác nhau.
 
Back
Bên trên