Ingress 统一的访问入口(ingress-nginx)(一)

本次实践的主要目的就是将入口统一,不再通过 LoadBalancer 等方式将端口暴露出来,而是使用 Ingress 提供的反向代理负载均衡功能作为我们的唯一入口。

kubernetes 版本为1.16.0

部署tomcat

部署 Tomcat 但仅允许在内网访问,我们要通过 Ingress 提供的反向代理功能路由到 Tomcat 之上

apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomcat-app
spec:
  selector:
    matchLabels:
      app: tomcat
  replicas: 2
  template:
    metadata:
      labels:
        app: tomcat
    spec:
      containers:
      - name: tomcat
        image: tomcat:8.5.47
        ports:
        # 容器的默认端口
        - containerPort: 8080


---
apiVersion: v1
kind: Service
metadata:
  name: tomcat-http
spec:
  ports:
      # service 的端口
    - port: 8081
      # 容器默认端口,也就是将servcie8081 映射到 pods8080
      targetPort: 8080
  # ClusterIP, NodePort, LoadBalancer
  type: ClusterIP
  selector:
    app: tomcat

安装Nginx Ingress Controller

Ingress Controller 有许多种,我们选择最熟悉的 Nginx 来处理请求,其它可以参考

  • 官方文档
  • Nginx Ingress Controller 配置文件
mkdir -p /usr/local/kubernetes/yaml/ingress
cd /usr/local/kubernetes/yaml/ingress

# 下载配置文件
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.27.1/deploy/static/mandatory.yaml

修改配置文件vim mandatory.yaml,找到配置如下位置 (搜索 serviceAccountName) 在下面增加一句 hostNetwork: true

191 kind: Deployment
192 metadata:
193   name: nginx-ingress-controller
194   namespace: ingress-nginx
195   labels:
196     app.kubernetes.io/name: ingress-nginx
197     app.kubernetes.io/part-of: ingress-nginx
198 spec:
199   replicas: 1 # 建立改成多个.如 3
200   selector:
201     matchLabels:
202       app.kubernetes.io/name: ingress-nginx
203       app.kubernetes.io/part-of: ingress-nginx
204   template:
205     metadata:
206       labels:
207         app.kubernetes.io/name: ingress-nginx
208         app.kubernetes.io/part-of: ingress-nginx
209       annotations:
210         prometheus.io/port: "10254"
211         prometheus.io/scrape: "true"
212     spec:
213       # wait up to five minutes for the drain of connections
214       terminationGracePeriodSeconds: 300
215       serviceAccountName: nginx-ingress-serviceaccount
		 # 增加 hostNetwork: true,意思是开启主机网络模式,暴露 Nginx 服务端口 80
216       hostNetwork: true
217       nodeSelector:
218         kubernetes.io/os: linux
219       containers:
220         - name: nginx-ingress-controller
221           image: quay.io/kubernetes-ingress-controller/nginx-ingress-controller:master
222           args:
223             - /nginx-ingress-controller
224             - --configmap=$(POD_NAMESPACE)/nginx-configuration
225             - --tcp-services-configmap=$(POD_NAMESPACE)/tcp-services
226             - --udp-services-configmap=$(POD_NAMESPACE)/udp-services
227             - --publish-service=$(POD_NAMESPACE)/ingress-nginx
228             - --annotations-prefix=nginx.ingress.kubernetes.io
				'''''''''

部署Ingress(即网关)

cd /usr/local/kubernetes/yaml/ingress
vim ingress.yml

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: nginx-web
  annotations:
    # 指定 Ingress Controller 的类型
    kubernetes.io/ingress.class: "nginx"
    # 指定我们的 rules 的 path 可以使用正则表达式
    nginx.ingress.kubernetes.io/use-regex: "true"
    # 连接超时时间,默认为 5s
    nginx.ingress.kubernetes.io/proxy-connect-timeout: "600"
    # 后端服务器回转数据超时时间,默认为 60s
    nginx.ingress.kubernetes.io/proxy-send-timeout: "600"
    # 后端服务器响应超时时间,默认为 60s
    nginx.ingress.kubernetes.io/proxy-read-timeout: "600"
    # 客户端上传文件,最大大小,默认为 20m
    nginx.ingress.kubernetes.io/proxy-body-size: "10m"
    # URL 重写
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  # 路由规则
  rules:
  # 主机名,只能是域名,修改为你自己的
  - host: k8s.test.com
    http:
      paths:
      - path:
        backend:
          # 后台部署的 Service Name,与上面部署的 Tomcat 对应
          serviceName: tomcat-http
          # 后台部署的 Service Port,与上面部署的 Tomcat 对应
          servicePort: 8081

检查部署效果

请各位大大点击我,阅读下一篇哦

你可能感兴趣的:(Kubernetes)