目 录CONTENT

文章目录
Go

k8s 部署 Nginx 网关

Hello!你好!我是村望~!
2024-07-17 / 0 评论 / 0 点赞 / 387 阅读 / 1,056 字
温馨提示:
我不想探寻任何东西的意义,我只享受当下思考的快乐~

安装部分-需要科学上网!
首先安装 helm

brew install helm

使用 helm 安装 ingress-nginx,运行:

helm upgrade --install ingress-nginx ingress-nginx --repo https://kubernetes.github.io/ingress-nginx  --namespace ingress-nginx --create-namespace

理解一些概念

Ingress 和 Ingress Controller 在 Kubernetes 集群中扮演着关键角色,负责将外部流量高效、灵活地路由到内部服务。

想象在国际机场的场景中:

Ingress 相当于机场的信息显示屏,显示各个航班的登机口信息(服务访问入口)。

乘客(客户端)根据显示屏上的信息找到前往特定目的地的登机口(服务路径)。

显示屏本身不控制航班调度,只是展示信息。

Ingress Controller 则类似于机场的地面指挥中心,它监控所有的航班信息(服务状态)和登机口变动,确保信息显示屏上的内容是最新的。当某个航班的登机口发生变化时,地面指挥系统会立刻更新信息显示屏的内容,保证乘客能顺利找到正确的登机口,即使飞机停靠位置变动也能迅速调整指示。

Ingress 设定了流量如何进入集群并路由到正确服务的规则,而 Ingress Controller 是执行者,负责依据这些规则动态调整实际的流量路由,确保外部请求能够准确无误地被送达至集群内的服务。

在 Kubernetes 中,直接通过 NodePort 类型的服务确实可以暴露应用,让外部流量直接访问到集群内的 Pod。

不过,这种方式相对简单,对于复杂的路由规则管理、TLS 终端、负载均衡等高级功能支持有限。

引入 IngressIngress Controller 层,就像是在网络架构中添加了一个智能的网关或路由器。这不仅仅是一个简单的拦截层,更是一个策略执行层,它为集群提供了一套更加灵活和强大的流量管理机制。

通过定义 Ingress 规则,您可以指定基于主机名(域名)、URL 路径等条件来路由流量到不同的后端服务(Pod)。

这样,就可以在不影响应用部署的情况下,动态调整外部访问策略,实现更细粒度的访问控制和更高效的流量分配。

简而言之,Ingress 层的加入,使得对 Pod 的访问控制更加精细化和动态化,同时支持了诸如 SSL 终止、路径基于的路由、重定向等高级功能,从而提高了整体系统的可维护性和安全性。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: wee-book-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx # 使用 Nginx 做基础中间间
  rules: # 转发规则 当命中 ld.weebook.com/api/* 走的就是 we-book service 80 端口的pod
    - host: ld.weebook.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service: # 指向已经启动的 service->metadata->name
                name: we-book
                port:
                  number: 80 # 指向 service 集群中暴露的端口

这里的 service 是 ClusterIP 这样就不能使用宿主机通过 ip 地址访问 pod 应用

在 Kubernetes 集群中,ClusterIP 类型的 Service 提供了一个集群内部可访问的虚拟 IP 地址,允许集群内的 Pods 和其他组件通过这个 IP 和定义的端口互相通信。

然而,直接从宿主机(集群外部或者说是集群节点本身,非 Pod 内部)访问 ClusterIP 服务通常是不行的,因为 ClusterIP 地址只在集群的虚拟网络内有效。

只能通过 Ingress controller 来访问!

apiVersion: v1
kind: Service
metadata:
  name: we-book
spec:
  selector:
    app: we-book
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8888
      nodePort: 30002
  type: ClusterIP

image-20240717111649496

第一个访问到的是 Nginx

第二个是通过nodePort 访问we book pod的应用,type: ClusterIP 所以访问不到

第三个,通过 Nginx host 解析到 集群内we book pod的应用

0

评论区