1 K8S 多资源综合使用
1.1 配置 Deployment 和 Service
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-server
spec:
replicas: 2
selector:
matchLabels:
app: hello-server
template:
metadata:
labels:
app: hello-server
spec:
containers:
- name: hello-server
image: registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/hello-server
ports:
- containerPort: 9000
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx-demo
name: nginx-demo
spec:
replicas: 2
selector:
matchLabels:
app: nginx-demo
template:
metadata:
labels:
app: nginx-demo
spec:
containers:
- image: nginx
name: nginx
---
apiVersion: v1
kind: Service
metadata:
labels:
app: nginx-demo
name: nginx-demo
spec:
selector:
app: nginx-demo
ports:
- port: 8000
protocol: TCP
targetPort: 80
---
apiVersion: v1
kind: Service
metadata:
labels:
app: hello-server
name: hello-server
spec:
selector:
app: hello-server
ports:
- port: 8000
protocol: TCP
targetPort: 90001.2 配置 Ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-host-bar
spec:
ingressClassName: nginx
rules:
- host: "hello.hg.com"
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: hello-server
port:
number: 8000
- host: "demo.hg.com"
http:
paths:
- pathType: Prefix
path: "/" # 把请求会转给下面的服务,下面的服务一定要能处理这个路径,不能处理就是404
backend:
service:
name: nginx-demo ## java,比如使用路径重写,去掉前缀nginx
port:
number: 8000若 kubectl apply -f ingress-rule.yaml 执行出错:
kubectl get validatingwebhookconfigurations
- 删除这两个内容
kubectl delete -A ValidatingWebhookConfiguration ingress-nginx-admissionkubectl delete -A ValidatingWebhookConfiguration ingress-nginx-admission-token
- 重新部署
kubectl apply -f ingress-rule.yaml - 查看 Ingress 状态
kubectl get ingress
本地 HOST:PORT 进行访问:
- hosts 文件中添加 DNS 映射
- 执行
source /etc/hosts。
# 集群IP 配置的Host
139.198.165.238 hello.atguigu.com
139.198.165.238 demo.atguigu.com两种 404 页面:
- 若当前的请求路径,Ingress 找不到对应的 Service,则 Ingress 报 404 错。
- 若 Ingress 找到了对应映射的服务处理,但是该服务没有办法处理,该服务报 404 错。
1.3 路径重写
高阶功能:Annotations - Ingress-Nginx Controller
相对于上面的内容,更改了:
path: "/nginx(/|$)(.*)"nginx.ingress.kubernetes.io/rewrite-target: /$2
下面的路径重写后效果:
demo.hg.com/nginx会被重写为demo.hg.com/demo.hg.com/nginx/会被重写为demo.hg.com/demo.hg.com/nginx/xxx会被重写为demo.hg.com/xxx
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$2 # 更改了这个
name: ingress-host-bar
spec:
ingressClassName: nginx
rules:
- host: "hello.hg.com"
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: hello-server
port:
number: 8000
- host: "demo.hg.com"
http:
paths:
- pathType: Prefix
path: "/nginx(/|$)(.*)" # 更改了这个内容
backend:
service:
name: nginx-demo ## java,比如使用路径重写,去掉前缀nginx
port:
number: 80001.4 流量限制
高阶功能:Annotations - Ingress-Nginx Controller
pathType: Exact:精确模式,路径一模一样,才会走下面的服务nginx.ingress.kubernetes.io/limit-rps: "1":限制访问速率为 1
注意,这个和上面的配置是不同的文件。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-limit-rate
annotations:
nginx.ingress.kubernetes.io/limit-rps: "1"
spec:
ingressClassName: nginx
rules:
- host: "haha.atguigu.com"
http:
paths:
- pathType: Exact
path: "/"
backend:
service:
name: nginx-demo
port:
number: 80001.5 总体状态
