Setup Ingress trên Kubernetes bằng Nginx Controller
Trong bài hướng dẫn này, bạn sẽ học được cách làm thế nào để tạo ingress bằng Nginx controller và route traffic vào các deployment.
Dưới đây là mô hình:
Yêu cầu:
- Kubernetes cluster.
- kubectl.
- Admin access tới kubernetes cluster.
- Và 1 domain trỏ tới ingress controller Load Balancer.
Tạo ingress controller deployment bằng kubectl:
kubectl apply-fhttps://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/mandatory.yaml
Kiểm tra các pod của ingress controller:
kubectl get pods -n ingress-nginx
Tạo 1 Load Balancer service cho Ingress Controller
vim ingress-nginx.yaml:
kind: Service
apiVersion: v1
metadata:
name: ingress-nginx
namespace: ingress-nginx
labels:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
spec:
externalTrafficPolicy: Local
type: LoadBalancer
selector:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
ports:
- name: http
port: 80
targetPort: http
- name: https
port: 443
targetPort: https
Tạo service ingress Nginx bằng cách sử dụng command kubectl apply:
kubectl apply -f ingress-nginx.yaml
Kiểm tra service và lấy thông tin IP public mà Load Balancer được cung cấp:
kubectl get svc -n ingress-nginx
Sau đó, map domain với IP public đã nhận được từ câu lệnh trên.
Tạo 1 demo application và tạo nginx ingress trỏ vào application:
Demo application:
Tạo deployments:
vim hello-app.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-app
namespace: dev
spec:
selector:
matchLabels:
app: hello
replicas: 3
template:
metadata:
labels:
app: hello
spec:
containers:
- name: hello
image: "gcr.io/google-samples/hello-app:2.0"
kubectl create -f hello-app.yaml
Tạo service:
vim hello-app-service.yaml
apiVersion: v1
kind: Service
metadata:
name: hello-service
namespace: dev
labels:
app: hello
spec:
type: ClusterIP
selector:
app: hello
ports:
- port: 80
targetPort: 8080
protocol: TCP
kubectl create -f hello-app-service.yaml
Tạo Kubernetes Ingress và trỏ vào service hello-app:
vim hello-app-ingress.yaml:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: test-ingress
namespace: dev
spec:
rules:
- host: test.apps.example.info
http:
paths:
- backend:
serviceName: hello-service
servicePort: 80
kubectl apply -f hello-app-ingress.yaml.