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 文件中。然后就可以在浏览器中用域名和默认端口访问代理的服务了。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐