我已经通过kubespray在自己的几个虚拟机上配置了kubernetes集群。 Kubespray使用project-calico作为默认的网络插件,非常符合我对集群网络中的代理服务到外部世界的要求。
Kubespray将apiserver本身部署为ClusterIP服务。为了使其从外部可访问,使用主节点Host IP Adress定义了该服务的端点,据我个人判断,该路由由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>
答案 0 :(得分:0)
我不确定您的意思是什么,但是我认为您正在寻找的是在外部公开服务的能力。
您可以使用“发布服务”(在外部公开内部服务的服务类型)公开Rook / Ceph仪表板等服务。
引自kubernetes文档:
对于应用程序的某些部分(例如,前端),您可以 想要将服务公开到外部的外部IP地址上 集群中的一个。
Kubernetes
ServiceTypes
允许您指定哪种服务 你要。默认值为ClusterIP
。
Type
值及其行为为:
ClusterIP
:在群集内部IP上公开服务。选择此值将使该服务仅可从 簇。这是默认的ServiceType
。NodePort
: 在静态端口上将服务公开到每个节点的IP上(NodePort
)。ClusterIP
的{{1}}服务 服务路线,是自动创建的。您将可以联系 通过请求从群集外部的NodePort
服务NodePort
。LoadBalancer
: 使用云提供商的负载平衡器对外公开服务。<NodeIP>:<NodePort>
和NodePort
服务,外部负载 平衡器路线会自动创建。ExternalName
: 将服务映射到ClusterIP
字段的内容(例如externalName
),方法是返回带有其值的foo.bar.example.com
记录。没有设置任何代理。
这里是文档中的example。
您还可以使用以下Yaml清单定义CNAME
:
Services
这将使标签为apiVersion: v1
kind: Service
metadata:
name: examplelb
spec:
type: LoadBalancer
selector:
app: asd
ports:
-
name: koala
port: 22223
targetPort: 22225
nodePort: 31913
-
name: grisly
port: 22224
targetPort: 22226
nodePort: 31914
-
name: polar
port: 22225
targetPort: 22227
nodePort: 31915
的广告连播具有以下通过模式公开的端口
内部端口app: asd
暴露在22223
上。
31913
如果类型为$ kubectl get svc examplelb
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
examplelb LoadBalancer 10.111.8.204 <pending> 22223:31913/TCP,22224:31914/TCP,22225:31915/TCP 7d2h
的服务有待处理的外部IP,您仍可以以LoadBalancer
的身份访问每个节点上的所有端口。
希望这会有所帮助。
答案 1 :(得分:0)
我将参考您的问题:
如何定义自己的端点?
您必须:
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对象的名称之间应该匹配。