Mục Lục
- 1. NodePort
- 2. LoadBalancer
- 2.1 Xác Nhận Chế Độ strictARP
- 2.2 Cài Đặt metalLB
- 2.3 Cấu Hình IP Pool
- 2.4 Kiểm Tra Kết Quả
- 3. Ingress
- 3.1 Cài Đặt ingress controller
- 3.2 Cấu Hình Quy Tắc Routing ingress
- 3.3 Chỉ Định Dịch Vụ Hậu Cầu
1. NodePort
Tạo pod với kubectl run[root@server ~]#kubectl create deployment nginx --image=nginx:1.15 --replicas=4 deployment.apps/nginx created [root@server ~]#kubectl get pods NAME READY STATUS RESTARTS AGE nginx-79d6c79b5f-klmnp 1/1 Running 0 40s nginx-79d6c79b5f-tgqzv 1/1 Running 0 40s nginx-79d6c79b5f-xr5jw 1/1 Running 0 40s nginx-79d6c79b5f-zl2kx 1/1 Running 0 40s [root@server ~]#kubectl get all NAME READY STATUS RESTARTS AGE pod/nginx-79d6c79b5f-klmnp 1/1 Running 0 60s pod/nginx-79d6c79b5f-tgqzv 1/1 Running 0 60s pod/nginx-79d6c79b5f-xr5jw 1/1 Running 0 60s pod/nginx-79d6c79b5f-zl2kx 1/1 Running 0 60s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 3d9h NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/nginx 4/4 4 4 60s NAME DESIRED CURRENT READY AGE replicaset.apps/nginx-79d6c79b5f 4 4 4 60s`Phơi sáng container với kubectl expose`
[root@server ~]#kubectl expose deployment nginx --port=80 --target-port=80 --name=dichvu-nginx --type=NodePort service/dichvu-nginx exposed # Xem trạng thái mạng của Pod và cổng đã phơi sáng của Service [root@server ~]#kubectl get svc,pod -o wide NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 3d9h <none> service/dichvu-nginx NodePort 10.96.158.55 <none> 80:31083/TCP 3m37s app=nginx NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES pod/nginx-79d6c79b5f-klmnp 1/1 Running 0 7m48s 10.244.1.3 node01 <none> <none> pod/nginx-79d6c79b5f-tgqzv 1/1 Running 0 7m48s 10.244.2.3 node02 <none> <none> pod/nginx-79d6c79b5f-xr5jw 1/1 Running 0 7m48s 10.244.2.4 node02 <none> <none> pod/nginx-79d6c79b5f-zl2kx 1/1 Running 0 7m48s 10.244.1.4 node01 <none> <none>
2. LoadBalancer
Trong Kubernetes, các service có thể được cấu hình với các loại khác nhau như PodIP, ClusterIP và ExternalIP. Đối với môi trường cục bộ, cần cài đặt thêm một số thành phần hỗ trợ LoadBalancer. `Cấu hình LoadBalancer sử dụng metalLB`2.1 Xác nhận chế độ strictARP
Nếu bạn đang chạy trong chế độ IPVS (mặc định là iptables), thì cần bật chế độ strictARP.
[root@server ~]# curl localhost:10249/proxyMode
ipvs
[root@server ~]# kubectl edit configmap -n kube-system proxy-config
# Thay đổi giá trị strictARP thành true ở đoạn sau:
......
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: "ipvs"
ipvs:
strictARP: true
......
2.2 Cài đặt metalLB
[root@server ~]# kubectl apply -f https://gitlab.com/metal-lb/metallb/-/raw/v0.11.0/manifests/namespace.yaml [root@server ~]# kubectl apply -f https://gitlab.com/metal-lb/metallb/-/raw/v0.11.0/manifests/metallb.yaml [root@server ~]# kubectl get pods -n metallb-system NAME READY STATUS RESTARTS AGE controller-95867d5d9-h8z6p 1/1 Running 0 42s speaker-klmnp 1/1 Running 0 42s speaker-tgqzv 1/1 Running 0 42s speaker-xr5jw 1/1 Running 0 42s
2.3 Cấu hình IP pool
[root@server ~]#vim metallb.ip-pool.yaml
[root@server ~]#cat metallb.ip-pool.yaml
apiVersion: v1
kind: ConfigMap
metadata:
namespace: metallb-system
name: config
data:
config: |
address-pools:
- name: default
protocol: layer2
addresses:
- 192.168.10.180-192.168.10.210
[root@server ~]#kubectl apply -f metallb.ip-pool.yaml
2.4 Kiểm tra kết quả
[root@server ~]#vim test-nginx.yaml
[root@server ~]#cat test-nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-metallb-test
spec:
selector:
matchLabels:
app: nginx-test
template:
metadata:
labels:
app: nginx-test
spec:
containers:
- name: nginx
image: nginx:1.10
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: dichvu-nginx
spec:
type: LoadBalancer
ports:
- port: 80
targetPort: 80
selector:
app: nginx-test
[root@server ~]#kubectl apply -f test-nginx.yaml
deployment.apps/nginx-metallb-test created
service/dichvu-nginx created
3. Ingress
Ingress trong Kubernetes bao gồm hai phần chính: tài nguyên Ingress để quản lý các quy tắc routing và ingress-controller để xử lý các yêu cầu.3.1 Cài đặt ingress controller
[root@server ~]#kubectl apply -f https://gitlab.com/myrepo/ingress-nginx-deploy.yaml [root@server ~]#kubectl get pods,svc -n ingress-nginx -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES pod/ingress-nginx-admission-create--1-fgh45 0/1 Completed 0 2m12s 10.244.1.3 node01 <none> <none> pod/ingress-nginx-admission-patch--1-vxz8q 0/1 Completed 2 2m12s 10.244.2.3 node02 <none> <none> pod/ingress-nginx-controller-867b8ccd99-7gdhf 1/1 Running 0 2m12s 10.244.2.4 node02 <none> <none> NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR service/ingress-nginx-controller NodePort 10.101.83.140 <none> 80:31700/TCP,443:30401/TCP 2m12s app.kubernetes.io/component=controller,app.kubernetes.io/instance=ingress-nginx,app.kubernetes.io/name=ingress-nginx service/ingress-nginx-controller-admission ClusterIP 10.101.43.212 <none> 443/TCP 2m12s app.kubernetes.io/component=controller,app.kubernetes.io/instance=ingress-nginx,app.kubernetes.io/name=ingress-nginx
3.2 Cấu hình quy tắc routing ingress
[root@server ~]#vim ingress-rules.yaml
[root@server ~]#cat ingress-rules.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: demo-ingress
namespace: dev
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: k8s.example.com
http:
paths:
- pathType: Prefix
path: /api/v1
backend:
service:
name: service-api1
port:
number: 80
- pathType: Prefix
path: /api/v2
backend:
service:
name: service-api2
port:
number: 80
[root@server ~]#kubectl create ns dev
namespace/dev created
[root@server ~]#kubectl apply -f ingress-rules.yaml
ingress.networking.k8s.io/demo-ingress created
3.3 Chỉ định dịch vụ hậu cầu
[root@server ~]#vim backend-service1.yaml
[root@server ~]#vim backend-service2.yaml
[root@server ~]#cat backend-service1.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-api1
namespace: dev
spec:
selector:
matchLabels:
app: nginx-api1
template:
metadata:
labels:
app: nginx-api1
spec:
containers:
- name: nginx-api1
image: nginx:latest
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
namespace: dev
name: service-api1
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: nginx-api1
type: NodePort
[root@server ~]#cat backend-service2.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-api2
namespace: dev
spec:
selector:
matchLabels:
app: nginx-api2
template:
metadata:
labels:
app: nginx-api2
spec:
containers:
- name: nginx-api2
image: nginx:latest
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
namespace: dev
name: service-api2
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: nginx-api2
type: NodePort
[root@server ~]#kubectl apply -f backend-service1.yaml
deployment.apps/nginx-api1 created
service/service-api1 created
[root@server ~]#kubectl apply -f backend-service2.yaml
deployment.apps/nginx-api2 created
service/service-api2 created
Đăng vào ngày 22 tháng 6 lúc 21:43