ingress

部署

安装ingress controller https://github.com/kubernetes/ingress-nginx/blob/master/docs/deploy/index.md

https://kubernetes.github.io/ingress-nginx/deploy/#prerequisite-generic-deployment-command

更新

新的部署,nodeport已经在yaml里面了

wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/provider/baremetal/deploy.yaml
kubectl apply -f deploy.yaml

旧部署内容

复制内容

git clone https://github.com/kubernetes/ingress-nginx.git
# 或者直接去
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/mandatory.yaml
kubectl apply -f mandatory.yaml
# 增加nodeport的访问,不然外网访问不到
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/provider/baremetal/service-nodeport.yaml

kubectl apply -f service-nodeport.yaml
# 可以改变部署方式,不使用deployment的方式,而是使用daemonset的方式不是,然后使用打污点的方式,只让ingress部署在指定机器上面

部署web服务

apiVersion: apps/v1
kind: Deployment
metadata:
  name: hank-web01
  labels:
    name: hank-web01
    app: web
spec:
  replicas: 2
  selector:
    matchLabels:
      name: hank-web01
      app: web
  template:
    metadata:
      labels:
        name: hank-web01
        app: web
    spec:
      containers:
      - name: webapp
        image: hank997/webapp:v1
---
apiVersion: v1
kind: Service
metadata:
  name: hank-web-service
  labels:
    app: web-service
spec:
  selector:
    app: web
    name: hank-web01
  ports:
  - name: hank-web-port
    port: 80
    targetPort: 80

https://kubernetes.io/zh/docs/concepts/services-networking/ingress/

安装ingress

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-web
  labels:
    name: ingress-web
    app: web
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
#  backend:
#    serviceName: hank-web-service
#    servicePort: 80
  rules:
  - host: ingress.hankbook.com
    http:
      paths:
      - path:
        backend:
          serviceName: hank-web-service
          servicePort: 80
#  rules:  # 定义规则

查看

kubectl describe ingress
kubectl get pod
kubectl  exec -it -n ingress-nginx nginx-ingress-controller-568867bf56-vp8nj bash

访问: 使用域名的方式,就要使用域名的方式进行访问
因为有nodeport的访问。既需要加上端口号
直接使用backend的方式就是普通的跳转

echo 127.0.0.1 ingress.hankbook.com >> /etc/hosts
curl ingress.hankbook.com:32234

配置转发规则

全局配置

https://kubernetes.github.io/ingress-nginx/examples/rewrite/

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-web
  labels:
    name: ingress-web
    app: web
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  rules:
  - host: ingress.hankbook.com
    http:
      paths:
      - path: /v1(/|$)(.*)
        backend:
          serviceName: hank-web-service
          servicePort: 80
      - path: /v2(/|$)(.*)
        backend:
          serviceName: hank-web-service2
          servicePort: 80

修改ingress的内置参数

修改configMap,该配置在 文件 mandatory.yaml 当中

把nginx的client_max_body_size改成 20m

ingress-configmap.yaml

kind: ConfigMap
apiVersion: v1
metadata:
  name: nginx-configuration
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
data:
  proxy-body-size: “20m”
kubectl apply -f ingress-configmap.yaml

查看更多参数的对应关系 https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/configmap/

局部配置

test-ingress.yaml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-web
  labels:
    name: ingress-web
    app: web
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/proxy-body-size: "4m"
spec:
  backend:
    serviceName: hank-web-service
    servicePort: 80

查看更多参数的对应关系 https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/

进入容器内查看

kubectl exec -it -n ingress-nginx `kubectl get pod -n ingress-nginx|awk 'NR==2{print $1}'`
# 下面是容器内执行
$ grep client_max_body_size /etc/nginx/nginx.conf
Copyright © hankbook.cn 2020 all right reserved,powered by Gitbook该文件修订时间: 2022-08-08 09:48:50

results matching ""

    No results matching ""