k8s ingress(nginx) 反向代理集群外的服务
Kubernetes 将根据服务的选择器(selector label)找到符合条件的 Pod,并将它们的 IP 和端口信息添加到 Endpoints 中。可以把 Service 理解为一个四层负载均衡器,而后端的 pod ip和端口信息是填写在 Endpoints 中的,Service 的转发也是根据 Endpoints。它允许你将 HTTP 和 HTTPS 流量路由到集群内的不同服务,同时提供
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 文件中。然后就可以在浏览器中用域名和默认端口访问代理的服务了。
更多推荐
所有评论(0)