Setup Ingress trên Kubernetes bằng Nginx Controller
![Setup Ingress trên Kubernetes bằng Nginx Controller](/content/images/size/w2000/2019/05/kube-ing.png)
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:
![](https://lazyadmin.vn/content/images/2019/05/kubernetes-ingress-777x1024.png)
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.