首页 文章

无法与使用GitlabCI的GKE中的入口 Build 连接

提问于
浏览
0

我试图从群集中的Google Kubernetes Engine中的gitlab-registry运行Docker镜像,并通过入口nginx控制器进行流量传输 . 我无法实现它 . 这是正确的解释 . 我使用gitlab ci / cd构建一个管道,每次管道成功时,它都会将docker镜像推送到gitlab注册表 . 现在我想测试存储在gitlab注册表中的图像 . 我需要从Google Kubernetes Engine中的kubernetes集群中拉出它们并运行该图像中的容器 . 我尝试了很多方法,但一些错误不断出现 . 例如: /built_app/programs/server/node_modules/fibers/future.js:313 throw(ex); ^ MongoError: failed to connect to server [cluster1-shard-00-02-iqf6c.mongodb.net:27017] on first connect [MongoError: connection 5 to cluster1-shard-00-02-iqf6c.mongodb.net:27017 timed out] at Pool.<anonymous> (/built_app/programs/server/npm/node_modules/meteor/npm-mongo/node_modules/mongodb-core/lib/topologies/server.js:336:35) at emitOne (events.js:116:13) at Pool.emit (events.js:211:7) at Connection.<anonymous> (/built_app/programs/server/npm/node_modules/meteor/npm-mongo/node_modules/mongodb-core/lib/connection/pool.js:280:12) at Object.onceWrapper (events.js:317:30) at emitTwo (events.js:126:13) at Connection.emit (events.js:214:7) at TLSSocket.<anonymous> (/built_app/programs/server/npm/node_modules/meteor/npm-mongo/node_modules/mongodb-core/lib/connection/connection.js:199:10) at Object.onceWrapper (events.js:313:30)

我试图将环境变量设置为kubernetes集群中的秘密并使用它们 . 我还创建了一个秘密来使用它来从私有gitlab注册表中提取图像 .

我还在gitlab上安装了Nginx-ingress-controller,同时将kubernetes集群与Gitlab集成在一起 .

我想使用Ingress和GKE连接并测试来自互联网的这些docker镜像 . 我没有任何想法就被困在这里 . 对于像我这样的初学者来说,任何帮助都会很棒 .

我有kubernetes集群与gitlab CI集成,这个集成已经在我的集群中安装了一些应用程序,如ingress-nginx-controller,gitlab-runner和其他应用程序 .

这里我附加了GKE中使用的YAML文件 .

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-one
  namespace: gitlab-managed-apps
  labels:
    app: myapp
spec:
  replicas: 1
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: mycontainer
        image: my-image-from-private-gitlab-registry
        ports:
        - containerPort: 80
        env:
        - name: MONGO_URL
          valueFrom:
            secretKeyRef:
              name: envisec
              key: MONGO_URL
        - name: ROOT_URL
          valueFrom:
            secretKeyRef:
              name: envisec
              key: ROOT_URL
        - name: PORT
          valueFrom:
            secretKeyRef:
              name: envisec
              key: PORT
        ports:
        - containerPort: 80
      imagePullSecrets:
      - name: myreg

---

apiVersion: v1
kind: Service
metadata:
  name: myapp-service
  namespace: gitlab-managed-apps
  labels:
    app : myapp
spec:
  type: LoadBalancer
  ports:
  - port: 80
    protocol: TCP
  selector:
    app: myapp
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: myapp-ingress
  namespace: gitlab-managed-apps
spec:
  rules:
  - http:
  paths:
  - path: /hello
    backend:
      serviceName: myapp-service
      servicePort: 80

这些是我一直在使用的yaml文件 . 我们使用的mongodb托管在另一个服务上 . 没有使用mongoDB进行连接,我被困在这里 . 我被困住了,任何帮助都会受到赞赏..

1 回答

  • 0

    默认情况下,一旦在Kubernetes集群上部署Ingress资源,GKE就可以创建HTTP(S) Load Balancer . 您可能还需要将嵌套的Pod服务切换为 NodePort ,这是为了将网络流量路由到应用程序 . 您可以通过以下命令检查Load Balancer的外部IP地址:

    kubectl get ingress myapp-ingress

    根据您提供的配置,我建议将 LoadBalancer 替换为 NodePort 参数 . 您可以在官方Google Cloud Documentation中获取更多信息 .

相关问题