k8s ingress(nginx) 反向代理集群外的服务

Ingress 是 Kubernetes 中用于暴露 HTTP 和 HTTPS 服务的 API 资源。它允许你将 HTTP 和 HTTPS 流量路由到集群内的不同服务,同时提供了对负载均衡、SSL 终止、虚拟主机和路由等功能的支持。可以把 ingress 理解为是一个反向代理,这边 ingress controller 使用的是 nginx。

先了解一下 Endpoints 这个概念:

当为一个服务创建 Service 时控制器会自动创建一个同名字的 Endpoints 。Kubernetes 将根据服务的选择器(selector label)找到同 namespace 下符合条件的 Pod,并将它们的 IP 和端口信息添加到 Endpoints 中,当后端 pod 状态为 Noready时,控制器会将该 pod 的 ip+端口 从Eenpoints中删除。可以把 Service 理解为一个四层负载均衡器,而后端的 pod ip和端口信息是填写在 Endpoints 中的,Service 的转发也是根据 Endpoints。

例如集群外的服务 ip 和端口为:10.1.6.83:20080

编写 Service 和 Endpoints 的 yaml 文件,当 Service 的类型为 ExternalName 时,需要手动创建对应的 Endpoints 。

apiVersion: v1
kind: Service
metadata:
  name: externalname-svc
spec:
  type: ExternalName
  externalName: "10.1.6.83" 
  ports:
  - port: 20080
    protocol: TCP

---
apiVersion: v1
kind: Endpoints
metadata:
  name: externalname-svc #名字、ip、端口和上面一样的
subsets:
- addresses:
  - ip: 10.1.6.83 
  ports:
  - port: 20080

编写 ingress 的 yaml 文件

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
  namespace: default  # 和 Service 命名空间一样
spec:
  ingressClassName: nginx
  rules:
  - host: example.com  # 设置你的域名
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: externalname-svc  # 指定刚刚编写的 Service 名称
            port:
              number: 20080  # 指定服务的端口

创建 Service 和 ingress

kubectl create -f service.yaml
kubectl create -f ingress.yaml

去 DNS 服务器添加对应的域名解析,或者可以先添加在 hosts 文件中。然后就可以在浏览器中用域名和默认端口访问代理的服务了。

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值