Kubernetes学习笔记 - Ingress

概述:

Ingress的原理目前略知一二,在今后我仍会继续深入学习,届时再展开细说。

在本地实验k8s可以使用NodePort类型的Service向集群外暴露服务,本地localhost访问。

在云上实验k8s可以使用LoadBalancer类型的Service暴露服务,云端会提供给他IP。

我在AKS上部署的Ingress,因此在Github上使用面向Azure的Ingress controller。

我对流量的理解:

Ingress rules -> Service - > Ingress controller -> Endpoints

Service在Ingress和Ingress controller中间的理由:Ingress利用Service中的标签选择器来找到后端的Endpoint,同时Service暴露服务,Ingress对象本身只是一个路由规则,而Ingress controller是一个Pod,没有Service的话也无法接收流量。

环境:

平台:Azure - AKS - Linux

设备:Mac

本地操作系统:Unix 

部署:

Ingress controller:

ingress-nginx/index.md at main · kubernetes/ingress-nginx · GitHub

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.2.0/deploy/static/provider/cloud/deploy.yaml --dry-run=client -o yaml > ingress-controller.yaml

拿到yaml代码在本地查看,可根据需求来更改。

kubectl apply -f ingress-controller.yaml

部署Ingress controller之后会在AKS上得到一个External IP

Kubernetes学习笔记 - Ingress_第1张图片 

Ingress:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-rule
  namespace: default
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx
  rules:
  - host: www.petclinic.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: gateway
            port:
              number: 8080

spec.ingressClassName这里我们填nginx,这个是在ingress-controller.yaml中声明出来的,直接用。

部署完之后需要注意host部分,我理解为Domain name,那么我们是没有这个Domain name的,因此在本地/etc/hosts中修改

sudo vi /etc/hosts,加入AKS提供的External IP  www.example.com(可自行修改为自己想要的Domain name)

Kubernetes学习笔记 - Ingress_第2张图片

接下来就可以到浏览器访问这个Domain name或者AKS提供的External IP(port可加可不加),也可以使用curl来替代浏览器。 

你可能感兴趣的:(kubernetes,kubernetes,学习,docker)