Jür*_*nig 5 calico kubernetes kubernetes-service kubespray
我通过 kubespray 在我自己的几个虚拟机上配置了一个 kubernetes 集群。Kubespray 使用project-calico 作为默认网络插件,这非常适合我将集群网络中的代理服务连接到外部世界的要求。
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>
Run Code Online (Sandbox Code Playgroud)
Rtm*_*tmY 11
我参考一下你的问题:
如何定义我自己的端点?
你必须:
1 ) 创建一个没有 Pod 选择器的 Service:
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
ports:
- protocol: TCP
port: 8080
targetPort: 9376
Run Code Online (Sandbox Code Playgroud)
(此时,K8S 将不会创建自动生成的 Endpoint,因为它无法决定这些 Endpoint 应该引用哪个 pod)。
2 ) 创建一个Endpoints对象并将其映射到外部资源运行所需的网络地址和端口:
apiVersion: v1
kind: Endpoints
metadata:
name: my-service
subsets:
- addresses:
- ip: 192.0.2.45
ports:
- port: 9376
Run Code Online (Sandbox Code Playgroud)
(*) 请注意,服务名称和 Endpoints 对象的名称之间应该匹配。
我不太确定您的意思,但我认为您正在寻找的是向外部公开服务的能力。
\n\n您可以使用“发布服务”(向外部公开内部服务的服务类型)来公开您的服务,例如 Rook/Ceph Dashboard。
\n\n正如kubernetes文档中引用的:
\n\n\n\n\n对于应用程序的某些部分(例如前端),您可能希望将服务公开到外部 IP 地址,即集群外部的\xe2\x80\x99。
\n\nKubernetes
\n\nServiceTypes允许您指定您想要的服务类型。默认为ClusterIP.\n\n
Type价值观及其行为是:\n
\n- \n
ClusterIP:在集群内部 IP 上公开服务。选择此值使得服务只能从群集内访问。\n 这是默认设置ServiceType。- \n
NodePort:\n 在静态端口(\n )的每个 Node\xe2\x80\x99s IP 上公开服务NodePort。自动创建\n 服务路由ClusterIP到的服务 。NodePort您\xe2\x80\x99 将能够NodePort通过请求\n 从集群外部联系该服务<NodeIP>:<NodePort>。- \n
LoadBalancer:\n 使用云提供商\xe2\x80\x99s 负载均衡器在外部公开服务。\nNodePort和ClusterIP外部负载均衡器路由到的服务\n 是自动创建的。- \n
ExternalName:\n通过返回一条 记录及其值,将服务映射到字段的内容externalName(例如 \n )。没有设置任何类型的代理。foo.bar.example.comCNAME
这是文档中的示例。
\n\n您还可以Services使用 yaml 清单来定义,如下所示:
apiVersion: v1\nkind: Service\nmetadata:\n name: examplelb\nspec:\n type: LoadBalancer\n selector:\n app: asd\n ports:\n -\n name: koala\n port: 22223\n targetPort: 22225\n nodePort: 31913\n -\n name: grisly\n port: 22224\n targetPort: 22226\n nodePort: 31914\n -\n name: polar\n port: 22225\n targetPort: 22227\n nodePort: 31915\nRun Code Online (Sandbox Code Playgroud)\n\n这使得带有标签的 Pod:app: asd具有以下暴露的端口,并22223在 上暴露了模式\n内部端口31913。
$ kubectl get svc examplelb\nNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\nexamplelb LoadBalancer 10.111.8.204 <pending> 22223:31913/TCP,22224:31914/TCP,22225:31915/TCP 7d2h\nRun Code Online (Sandbox Code Playgroud)\n\n如果类型的服务LoadBalancer有外部 IP 挂起,您仍然可以作为 访问每个节点上的所有这些端口NodePort。
希望这可以帮助。
\n| 归档时间: |
|
| 查看次数: |
8477 次 |
| 最近记录: |