kubernetes - 如何显式定义 Kubernetes 服务的端点

标签 kubernetes kubernetes-service project-calico kubespray

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

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

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

编辑:请注意 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>

最佳答案

我会引用你的问题:

How is it possible to define my own endpoint?

你必须:

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

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

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

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

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

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

关于kubernetes - 如何显式定义 Kubernetes 服务的端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59412883/

相关文章:

kubernetes - 在同一 namespace 的服务层隔离 secret

kubernetes - Kubernetes Calico NetworkPolicy 的日志记录?

docker - 无法从 kubernetes 主节点访问服务

kubernetes - 如何在GKE中使用临时IP创建Kubernetes负载均衡器?

docker - Kubernetes pod 内的 Internet 连接不起作用

kubernetes - 如何使用导出网络策略允许访问 kubernetes api?

docker - 裸机 kubernetes 集群无法获取外部 IP

mysql - 如何跟踪MySQL容器的重启?

docker - 在 kubernetes 中获取已杀死的 docker 容器的日志

Kubernetes,暴露所有端口