我已经通过 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/