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: 9000

1.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 Kubernetes 多资源综合使用.png
  • 删除这两个内容
    • kubectl delete -A ValidatingWebhookConfiguration ingress-nginx-admission
    • kubectl 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: 8000

1.4 流量限制

高阶功能:Annotations - Ingress-Nginx Controller

  • pathType: Exact:精确模式,路径一模一样,才会走下面的服务
  • nginx.ingress.kubernetes.io/limit-rps: "1":限制访问速率为 1

注意,这个和上面的配置是不同的文件。Kubernetes 多资源综合使用-1.png

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: 8000

1.5 总体状态

600