首页 > 解决方案 > 如何明确定义 Kubernetes 服务的端点

问题描述

我已经通过 kubespray 在我自己的几个虚拟机上配置了一个 kubernetes 集群。Kubespray 使用 project-calico 作为默认的网络插件,它非常适合我将集群网络中的服务代理到外部世界的要求。

Kubespray 将 apiserver 本身部署为 ClusterIP 服务。为了使它可以从外部访问,它使用主节点主机 IP 地址定义了此服务的端点,据我所知,Calico 将其路由到内部 ClusterIP。

我的问题是:如何定义我自己的端点(用于另一个服务),因为这些端点已经通过配置 service.yaml 得到隐式定义并且不能被覆盖。我想采用类似的方法让我的 Rook/Ceph Dashboard 从集群外部可见。

编辑:注意kubectl get ingresses.networking.k8s.io --all-namespaces退货No resources found.kubectl describe service kubernete退货

Name:              kubernetes
Namespace:         default
Labels:            component=apiserver
                   provider=kubernetes
Annotations:       <none>
Selector:          <none>
Type:              ClusterIP
IP:                10.233.0.1
Port:              https  443/TCP
TargetPort:        6443/TCP
Endpoints:         192.168.103.254:6443
Session Affinity:  None
Events:            <none>

标签: kuberneteskubernetes-serviceproject-calicokubespray

解决方案


我会参考你的问题:

如何定义我自己的端点?

你必须:

1 ) 创建一个没有 Pod 选择器的服务:

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  ports:
    - protocol: TCP
      port: 8080
      targetPort: 9376

(此时,K8S 不会创建自动生成的 Endpoints,因为它无法决定这些 Endpoints 应该引用哪些 Pod)。

2)创建一个Endpoints对象并将其映射到外部资源正在运行的所需网络地址和端口:

apiVersion: v1
kind: Endpoints
metadata:
  name: my-service
subsets:
  - addresses:
      - ip: 192.0.2.45
    ports:
      - port: 9376

(*) 请注意,服务名称和 Endpoints 对象的名称应该匹配。


推荐阅读