Kubernetes / GKE中Pod的外部访问

时间:2019-02-10 12:28:23

标签: kubernetes

我是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,但没有解决问题。我发现的所有信息都是如何将群集暴露给世界的,但这是相反的方式。

我想念什么?

2 个答案:

答案 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映射外部服务(位于集群之外)的最佳实践。