使用 Ingress 暴露微服务

K8s 部署node.js

回顾

上篇文章是使用 ApiService Type: NodePort 实现的直接暴露接口给外网访问, 暴露端口的这种方法本来就是不安全的,而且也不方便记忆,所以使用和nginx具有相同功能的 Ingress 来实现反向代理

作用

虽然k8s集群内部署的pod、server都有自己的IP,但是却无法提供外网访问,以前我们可以通过监听NodePort的方式暴露服务,但是这种方式并不灵活,生产环境也不建议使用。
Ingresss是k8s集群中的一个API资源对象,扮演边缘路由器(edge router)的角色,也可以理解为集群防火墙、集群网关,我们可以自定义路由规则来转发、管理、暴露服务(一组pod),非常灵活,生产环境建议使用这种方式。

加入 Ingress nodejs-ingress.yaml
---
# Ingress 负载均衡器 (可以简单的理解成 k8s 内部的 nginx)
# 为什么不使用 Nginx? 因为在k8s集群中,如果每加入一个服务,我们都要在Nginx中添加一个配置,不灵活!
# ingress 就可以解决这个问题
kind: Ingress
# 固定写法
apiVersion: extensions/v1beta1

metadata:
  # Ingress 的所属命名空间
  namespace: resource-manage-server
  # Ingress 名称
  name: nodejs-ingress-name
  # Ingress 标签

spec:
  rules:
  - host: k8s.dev-share.top
    http:
      paths:
      - path: /
        backend:
          # Service 的名称
          serviceName: nodejs-service-name
          # Service 的Port:端口
          servicePort: 80
启动Ingress
[root@k8s-master git-project]# kubectl apply -f nodejs-ingress.yaml
ingress.extensions/nodejs-ingress-name created
[root@k8s-master git-project]#
[root@k8s-master git-project]# kubectl get ingress -n resource-manage-server
NAME                  HOSTS               ADDRESS   PORTS   AGE
nodejs-ingress-name   k8s.dev-share.top             80      53s
[root@k8s-master git-project]#
查看Service类型
# 当前状态 Service 还是端口暴露的状态,我们要修改nodejs-service.yaml文件来关闭端口进行测试
[root@k8s-master git-project]# kubectl get svc -n resource-manage-server
NAME                  TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
nodejs-service-name   NodePort   10.108.72.192   <none>        80:31542/TCP   57m
[root@k8s-master git-project]#
关闭Service暴露的端口,并将Service端口改为 8080
[root@k8s-master git-project]# kubectl get svc -n resource-manage-server
NAME                  TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
nodejs-service-name   ClusterIP   10.105.90.107   <none>        8080/TCP   14m
[root@k8s-master git-project]#

创建Ingress对象,只是定义了一系列路由规则集合而已,没有任何作用
首先部署拥抱k8s的反向代理服务器(treafik、nginx等)拦截请求,然后拦截的请求会根据Ingress定义的路由规则集,转发到集群内部对应的Service。

参考文章

分类: K8s

发表评论

电子邮件地址不会被公开。 必填项已用*标注