【云原生】Ingress介绍及使用

142 阅读2分钟

一、Ingress知识

1.ingress是什么

把外部请求(如浏览器访问)转发到集群内部服务的入口

2.为什么service可以访问还得需要域名

1.端口太多 难以管理记忆 用域名可以用域名路由区分
2.ingress可以用https
3.负载均衡: 把流量路由到不同的service(通过路由)
   灰度发布:新旧版本按比例分流(ingress Controller)
   限流:也是通过ingressController

3.ingress和nginx的区别

nginx是干活的小弟
ingress是任务清单
nginx ingress controller 是小弟拿着清单干活(nginx实现ingress规则)

4.ingress的工作原理是什么

1.ingress声明规则,ingressController读取规则
2.ingressController读取到规则以后,把外部请求转发到对应的service
3.service将请求分发给pod

5.我需要单独部署ingressController吗

需要,没有ingress Controller,创建了ingress 也不会有请求路由到servcie

常见的ingress Controller
1.nginx ingress Controller : 简单稳定,用nginx实现ingress的功能
2.traefik :自动识别服务变化,支持更多协议,配置灵活
3.istio gateway:istio控制流量的边界入口,支持策略 安全 遥测等

6,如何部署ingress Controller

直接 # 部署 Nginx Ingress Controller
kubectl apply -f raw.githubusercontent.com/kubernetes/…

二、ingress部署实践

1.部署ingressController

kubectl apply -f raw.githubusercontent.com/kubernetes/…
确认Controller 正常运行:kubectl get pods -n ingress-nginx

2.创建Deployment+Service

apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello-deploy
spec:
  replicas: 2
  selector:
    matchLabels:
      app: hello
  template:
    metadata:
      labels:
        app: hello
    spec:
      containers:
      - name: hello
        image: hashicorp/http-echo
        args:
          - "-text=Hello World"
        ports:
        - containerPort: 5678
---
apiVersion: v1
kind: Service
metadata:
  name: hello-service
spec:
  selector:
    app: hello
  ports:
    - port: 80
      targetPort: 5678

3.创建ingress

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: hello-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: hello.local
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: hello-service
            port:
              number: 80

4.执行命令

kubectl apply -f hello.yaml
kubectl get svc hello-service
kubectl apply -f hello-ingress.yaml
kubectl get ingress

5.测试

1.本地测试,可以在 /etc/hosts 添加:

 <ingress-controller-ip> hello.local

2.浏览器访问 hello.local,应该看到:Hello World