Kubernetes部署Ingress


Ingress基本概念

通俗来讲,ingress和Service、Deployment,也是一个k8s的资源类型,ingress用于实现用域名的方式访问k8s内部应用。

通过用户访问的 URL,把请求转发给不同的后端 Service。这种全局的,为了代理不同后端Service而设置的负载均衡服务,就是Kubernetes里的Ingress服务。

client  >  负载均衡(nginx) > ingress  > service >  pod     (客户请求至负载均衡,负载均衡在到达ingress,ingress分发至不同server,server分配至pod)

1、部署ingress-nginx

获取配置文件:https://github.com/kubernetes/ingress-nginx/blob/nginx-0.20.0/deploy/mandatory.yaml

这边下载失败,直接拷贝内容自己创建mandatory.yaml。

查看一下文件需要下载一个镜像,镜像比较大,就在一台node上面直接执行下载。

在两个node上直接下载镜像:docker pull quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.20.0

以上操作完成,在k8s执行:

kubectl apply -f mandatory.yaml

执行完成查看:kubectl get pod -n ingress-nginx

然后将ingress暴露出去:vim  service-nodeport.yaml

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 apiVersion: v1 kind: Service metadata:   name: ingress-nginx   namespace: ingress-nginx   labels:     app.kubernetes.io/name: ingress-nginx     app.kubernetes.io/part-of: ingress-nginx spec:   type: NodePort   ports:     - name: http       port: 80       targetPort: 80       protocol: TCP       nodePort: 32080  #http     - name: https       port: 443       targetPort: 443       protocol: TCP       nodePort: 32443  #https   selector:     app.kubernetes.io/name: ingress-nginx     app.kubernetes.io/part-of: ingress-nginx

查看暴露出去的ingress服务:kubectl get svc -n ingress-nginx

2、创建一个server及后端deployment(以nginx为例)

vim  svc-deployment.yaml

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 ###注释:定义pod apiVersion: apps/v1 kind: Deployment metadata:   name: myapp-deploy spec:   replicas: 3   selector:     matchLabels:       app: myapp   template:     metadata:       labels:         app: myapp     spec:       containers:       - name: myapp         image: nginx         imagePullPolicy: IfNotPresent         ports:         - containerPort: 80 ####注释:添加server --- apiVersion: v1 kind: Service metadata:   name: myapp spec:   selector:     app: myapp   ports:   - name: http     port: 80     targetPort: 80

查看创建的pod

查看创建的server

 测试通过svc访问pod,nginx副本数三个,修改的html文件访问时现实顺序。

然后将nginx加入ingress中,我们定义的名字为myapp,创建时候需要用到myapp名字。

vim ingress.yaml

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 apiVersion: extensions/v1beta1 kind: Ingress metadata:   name: nginx-test spec:   rules:     - host: www.test.com       http:         paths:         - path: /           backend:             serviceName: myapp             servicePort: 80 ###注释 host:添加一个域名,测试时候通过域名访问 serviceName:将svc添加至ingress中

创建kubectl   apply -f   ingress.yaml

查看是否创建:kubectl get ingress

查看ingrss对外80暴露的端口是32080

kubectl get svc -n ingress-nginx

上面我们给ingress的yaml文件中设置了一个域名:www.test.com  我们通过外部windowns访问时就需要修改win的hosts文件

修改路径:C:\Windows\System32\drivers\etc\hosts

添加域名,及k8s服务器的ip地址。

然后测试访问,看是否通过域名可以访问。

ingress中添加的域名地址为:www.test.com ,ingress的80对外端口是32080,我们通过域名加端口进行访问测试,看是否能访问成功,访问成功是否是轮询访问三台nginx。

 

由此可见通过ingress访问server,server在分发至pod访问成功。

k8s