当我们在kubernetes中使用kubeadm启动集群时,服务的.yaml
文件如下所示:
apiVersion: v1
kind: Service
metadata:
name: neo4j
labels:
app: neo4j
component: core
spec:
clusterIP: None
ports:
- port: 7474
targetPort: 7474
name: browser
- port: 6362
targetPort: 6362
name: backup
selector:
app: neo4j
component: core
所有Pod和服务运行完毕后,我执行kubectl proxy
并且说:
Starting to serve on 127.0.0.1:8001
因此,当我想访问此服务时:
curl localhost:8001/api/
在集群内部就可以访问!如何访问群集外的服务?
答案 0 :(得分:2)
您应该使用NodePort公开您的服务:
apiVersion: v1
kind: Service
metadata:
name: neo4j
labels:
app: neo4j
component: core
spec:
externalTrafficPolicy: Local
type: NodePort
ports:
- port: 7474
targetPort: 7474
name: browser
- port: 6362
targetPort: 6362
name: backup
selector:
app: neo4j
component: core
现在,如果您使用
描述服务 kubectl describe svc neo4j
您将获得一个介于30000-32767之间的nodeport值,并且您可以使用以下方法从群集外部访问服务:
curl http://<node_ip>:<node_port>
希望这会有所帮助。
编辑:是的,如果通过NodePort公开服务,则不能直接使用clusterIP: None
。现在clusterIP: None
意味着kubernetes并没有完成内部负载平衡,为此,我们也可以在服务定义中使用externalTrafficPolicy=Local
。
或者,您也许可以使用入口将流量路由到正确的服务。