一、常见的服务访问方式
1、集群内部服务
(1)、DNS+ClusterIP
(2)、Headless
2、集群内访问集群外的服务
(1)IP+Port
(2)OutService
2、集群外访问集群内的服务
(1)NodePort
(2)hostip
(3)ingress
1)传统的方式
传统的方式解析域名是配置一个Nginx,在nginx.conf配置对应的域名和对应的pod的ip、端口进行配置,浏览器请求到nginx,因为nginx在集群的内部,可以访问到所有po的ip,就可以正常的请求到结果了。
但是有一个问题:如果pod经常变化,域名也经常增加,如果每次修改都要修改配置文件,还有进行reload进行重启,这样的过程比较麻烦和复杂的。
kubernetes也考虑到了这个问题,提出了ingress 概念。
2)ingress
像成熟的方案:ingress nginx、ingress gce等。
二、ingress-nginx安装部署
我们之前搭建的k8s集群支持上述的服务访问方式,像NodePort、Service 除了域名访问,这个域名访问需要使用域名的访问方案,下面我们来搭建其中的一种实现:ingress-nginx。
1、先去官网了解一下
2、ingress-nginx下载安装
(1)github地址
(2)下载配置
(1)下载
下载地址:
链接:https://pan.baidu.com/s/1eK-XnD9hRmaWIwDUyApwcw?pwd=emr9
提取码:emr9
mkdir ingress-nginx
mv mandatory.yaml
(2)进行apply
kubectl apply -f mandatory.yaml
检查一下
kubectl get all -n ingress-nginx
稍等一会。。
因为这个文件里用到了几个镜像
grep image mandatory.yaml
注意,去node-2、node-3去验证一下这些镜像能不能正常下载!!
node-2:
docker pull quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.19.0
node-3:
docker pull k8s.gcr.io/defaultbackend-amd64:1.5
发现有一个下载不了。
去这里下载
docker pull registry.cn-hangzhou.aliyuncs.com/liuyi01/defaultbackend-amd64:1.5
重新打个标签
docker tag registry.cn-hangzhou.aliyuncs.com/liuyi01/defaultbackend-amd64:1.5 k8s.gcr.io/defaultbackend-amd64:1.5
注意在node-2、node-3都要下载这些镜像。
(3)再去验证下
去node-1进行验证
kubectl get all -n ingress-nginx
(4)下面我们来暴露端口
我们这里的worker节点的80端口都在监听中
netstat -ntlp|grep 80
这个端口是harbor的
我们把node-2的harbor停掉,因为我们当前的nginx指向的是121是node-3。
到node-2上:
docker-compose down
释放掉120的80端口,将ingress controller调度在80端口上。
再次检查一下80端口和443端口
netstat -ntlp|grep 80
netstat -ntlp|grep 443
(5)进行配置
到node-1上
kubectl get nodes
把node-2打标签
kubectl label node dh-neibu-20.120-docker.cn app=ingress
修改配置文件
vi mandatory.yaml
添加如下内容:
kubectl apply -f mandatory.yaml
q
去验证一下:
kubectl get all -n ingress-nginx
稍等一下。。
kubectl get all -n ingress-nginx
现在我们去node-2上查看一下80端口
netstat -ntlp|grep 80
再看一下443
netstat -ntlp|grep 443
3、进行测试
这里我们起个服务
在node-1上配置ingress-demo.yaml
内容如下:
文件下载地址:
链接:https://pan.baidu.com/s/1s-TGvWM3yF2uDqYBUB6glg?pwd=mtrl
提取码:mtrl
然后我们create一下
kubectl create -f ingress-demo.yaml
kubectl get pod -o wide
下面我们去我们本机的host文件下新增如下:
因为我们的ingress-nginx在10.155.20.120上。
10.155.20.120 tomcat.mooc.com
10.155.20.120 api.mooc.com
打开浏览器进行访问
api.mooc.com
tomcat.imooc.com
注意,这个pod处于不可用状态是503
回去验证一下:
kubectl get pod -o wide
还在创建中。
我们去121上去看下
journalctl -f
还在下载镜像中。
再次验证
tomcat.mooc.com