k8s-ingress-nginx 本地demo部署

首先介绍下ingress是什么?

Ingress 是对集群中服务的外部访问进行管理的 API 对象,典型的访问方式是 HTTP。

Ingress 可以提供负载均衡、SSL 终结和基于名称的虚拟托管。

为了表达更加清晰,本指南定义了以下术语:

  • 节点(Node): Kubernetes 集群中其中一台工作机器,是集群的一部分。
  • 集群(Cluster): 一组运行由 Kubernetes 管理的容器化应用程序的节点。 在此示例和在大多数常见的 Kubernetes 部署环境中,集群中的节点都不在公共网络中。
  • 边缘路由器(Edge router): 在集群中强制执行防火墙策略的路由器(router)。 可以是由云提供商管理的网关,也可以是物理硬件。
  • 集群网络(Cluster network): 一组逻辑的或物理的连接,根据 Kubernetes 网络模型 在集群内实现通信。
  • 服务(Service):Kubernetes 服务使用 标签选择算符(selectors)标识的一组 Pod。 除非另有说明,否则假定服务只具有在集群网络中可路由的虚拟 IP。

Ingress 是什么?

Ingress 公开了从集群外部到集群内服务的 HTTP 和 HTTPS 路由。 流量路由由 Ingress 资源上定义的规则控制。

下面是一个将所有流量都发送到同一 Service 的简单 Ingress 示例:

k8s-ingress-nginx 本地demo部署_第1张图片

 

可以将 Ingress 配置为服务提供外部可访问的 URL、负载均衡流量、终止 SSL/TLS,以及提供基于名称的虚拟主机等能力。 Ingress 控制器 通常负责通过负载均衡器来实现 Ingress,尽管它也可以配置边缘路由器或其他前端来帮助处理流量。

Ingress 不会公开任意端口或协议。 将 HTTP 和 HTTPS 以外的服务公开到 Internet 时,通常使用 Service.Type=NodePort 或 Service.Type=LoadBalancer 类型的服务。

 

这里我使用helm安装ingress

#安装

$ helm repo add nginx-stable https://helm.nginx.com/stable

#启动

$ helm install gateway nginx-stable/nginx-ingress \
  --set controller.service.type=NodePort \
  --set controller.service.httpPort.nodePort=30080 \
  --set controller.service.httpsPort.nodePort=30443

再启动两个本地的pod

这里使用nginx 路由匹配规则

路径/1 访问到第一个服务中

路径/2 访问到第二个服务中

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-deploy
spec:
  replicas: 1
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
        app.kubernetes.io/name: ingress-nginx
        app.kubernetes.io/part-of: ingress-nginx
    spec:
      containers:
        - name: myapp
          image: foxliang/go:v1.4
          imagePullPolicy: Always
          command: ["./main","-v","v1.1.0"]
          ports:
            - containerPort: 8080
              protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
  name: ingress-nginx
spec:
  type: NodePort
  ports:
    - name: go-port
      protocol: TCP
      port: 8080
      targetPort: 8080
      nodePort: 30082
  selector:
    app: myapp
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-deploy2
spec:
  replicas: 1
  selector:
    matchLabels:
      app: myapp2
  template:
    metadata:
      labels:
        app: myapp2
    spec:
      containers:
        - name: myapp2
          image: foxliang/go:v1.4
          imagePullPolicy: Always
          command: ["./main","-v","v3.1.0"]
          ports:
            - containerPort: 8080
              protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
  name: ingress-nginx2
spec:
  type: NodePort
  ports:
    - name: go-port2
      protocol: TCP
      port: 8080
      targetPort: 8080
      nodePort: 30081
  selector:
    app: myapp2
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-myapp
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
    - host: minikube
      http:
        paths:
          - path: /1
            pathType: Prefix
            backend:
              serviceName: ingress-nginx
              servicePort: 8080
          - path: /2
            pathType: Prefix
            backend:
              serviceName: ingress-nginx2
              servicePort: 8080

部署成功后查看pod,service

$ kubectl get pods
NAME                                     READY   STATUS    RESTARTS   AGE
gateway-nginx-ingress-6c6987b565-hng5t   1/1     Running   0          12h
myapp-deploy-7f6c4894c9-zvf5l            1/1     Running   0          12h
myapp-deploy2-77b66545f9-hznwv           1/1     Running   0          12h
$ kubectl get svc 
NAME                    TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
gateway-nginx-ingress   NodePort    10.107.251.58           80:30080/TCP,443:30443/TCP   12h
ingress-nginx           NodePort    10.98.239.245           8080:30082/TCP               12h
ingress-nginx2          NodePort    10.98.113.76            8080:30081/TCP               12h
kubernetes              ClusterIP   10.96.0.1               443/TCP                      12h
$ kubectl get ingress
NAME            CLASS    HOSTS      ADDRESS   PORTS   AGE
ingress-myapp      minikube             80      12h

请求访问 

$ curl http://minikube:30080/1

/1 This is version:v1.1.0 running in pod myapp-deploy-7f6c4894c9-zvf5l
                                                                                                                                                                                                      
$ curl http://minikube:30080/2

/2 This is version:v3.1.0 running in pod myapp-deploy2-77b66545f9-hznwv    

 

你可能感兴趣的:(k8s,Nginx,kubernetes,ingress,nginx)