无法与使用 Gitlab CI 的 GKE 中的入口建立连接

Unable to establish a connection with ingress in GKE which is using GitlabCI

我正在尝试 运行 来自 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集群中将环境变量设为secret并使用。我还创建了一个秘密,用于从私有 gitlab 注册表中提取图像。

在将 kubernetes 集群与 Gitlab 集成时,我还通过 gitlab 设置了 Nginx-ingress-controller。

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

我将 kubernetes 集群与 gitlab 集成 CI 并且此集成已经在我的 GKE 集群上安装了一些应用程序,如 ingress-nginx-controller、gitlab-运行ner 和其他应用程序。

这里附上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 未建立连接,我被困在这里。我被卡住了,任何帮助将不胜感激..

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

kubectl get ingress myapp-ingress

根据您提供的配置,我建议将 LoadBalancer 替换为 NodePort 参数。您可以在官方 Google 云 Documentation.

中获取更多信息