我试图从群集中的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 回答
默认情况下,一旦在Kubernetes集群上部署Ingress资源,GKE就可以创建HTTP(S) Load Balancer . 您可能还需要将嵌套的Pod服务切换为
NodePort
,这是为了将网络流量路由到应用程序 . 您可以通过以下命令检查Load Balancer的外部IP地址:kubectl get ingress myapp-ingress
根据您提供的配置,我建议将
LoadBalancer
替换为NodePort
参数 . 您可以在官方Google Cloud Documentation中获取更多信息 .