我是Kubernetes的新用户,并且在以下yml
文件中创建了广告连播:
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-act
namespace: default
labels:
app: myapp
spec:
replicas: 3
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: myapp:latest
envFrom:
- configMapRef:
name: map-myapp
问题是myapp
试图查询位于我的google项目中(作为GCE
机器)但不属于GKE
集群的其他应用-没有成功。
即问题是我无法连接到群集外部的内部IP。我也尝试创建service
,但没有解决问题。我发现的所有信息都是如何将群集暴露给世界的,但这是相反的方式。
我想念什么?
答案 0 :(得分:0)
问题是我无法连接到外部IP 集群。
我相信您错过的东西叫做Ingress。
在Kubernetes v1.1中添加的Ingress公开了来自的HTTP和HTTPS路由 集群外的服务到集群内的服务。
您可以找到更多详细信息并完成文档here。
更新:正如您所指出的那样,Ingress是一项Beta版功能,但如果您对limitations感到满意,则可以成功使用它。您很可能只是在列表中浏览。在我的理解中,“部署在主服务器上”是指入口控制器在k8s主节点上工作,通常不应该困扰您的事实。接下来应该定义什么?
1。首先,您需要定义一个service,它以部署中的Pod为目标。看来您还没有这样做,对吗?
2。然后,下一步,您需要创建Ingress,如文档中所示,例如:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: test-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- http:
paths:
- path: /testpath
backend:
serviceName: your-service-name
servicePort: 80
your-service-name
是您在第1点中已经定义的服务的名称。
完成所有这些操作后,后端服务将在cluser之外的类似URL上提供:https://.service..com
答案 1 :(得分:0)
在这种情况下,您应该创建具有关联端点的外部服务类型,如下所示:
kind: Endpoints
apiVersion: v1
metadata:
name: mongo
subsets:
- addresses:
- ip: 10.240.0.4
ports:
- port: 27017
---
kind: Service
apiVersion: v1
metadata:
name: mongo
Spec:
type: ClusterIP
ports:
- port: 27017
targetPort: 27017
请参阅this GCP blog post,该书非常详细地描述了kubernetes映射外部服务(位于集群之外)的最佳实践。