无法连接到kubernetes上的节点应用

时间:2018-01-23 15:42:57

标签: jenkins kubernetes google-kubernetes-engine

我刚刚完成了Google tutorial关于如何使用Jenkins在Kubernetes上实现Go应用程序的持续集成的方法,而且效果很好。我现在尝试使用在端口3001上提供的Node应用程序执行相同的操作,但我一直收到此错误:

{
  "kind": "Status",
  "apiVersion": "v1",
  "metadata": {},
  "status": "Failure",
  "message": "services \"gceme-frontend\" not found",
  "reason": "NotFound",
  "details": {
    "name": "gceme-frontend",
    "kind": "services"
  },
  "code": 404
}

我在路由方面唯一改变的是负载均衡器指向3001而不是80,因为Node应用正在监听。我非常强烈地认为错误发生在.yaml文件中。

我的节点服务器(相关部分):

const PORT = process.env.PORT || 3001;

frontend-dev.yaml :(这适用于开发环境)

kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: gceme-frontend-dev
spec:
  replicas: 
  template:
    metadata:
      name: frontend
      labels:
        app: gceme
        role: frontend
        env: dev
    spec:
      containers:
      - name: frontend
        image: gcr.io/cloud-solutions-images/gceme:1.0.0
        resources:
          limits:
            memory: "500Mi"
            cpu: "100m"
        imagePullPolicy: Always
        ports:
          - containerPort: 3001
            protocol: TCP

服务/ frontend.yaml:

kind: Service
apiVersion: v1
metadata:
  name: gceme-frontend
spec:
  type: LoadBalancer
  ports:
  - name: http
      #THIS PORT ACTUALLY GOES IN THE URL: i.e. gcme-frontend: ****
      #when it says "no endpoints available for service, that doesn't mean this one is wrong, it means that target port is not working not exist"
    port: 80
      #matches port and -port in frontend-*.yaml
    targetPort: 3001
    protocol: TCP
  selector:
    app: gceme
    role: frontend

Jenkinsfile(对于开发分支,这是我尝试工作的原因)

sh("kubectl get ns ${env.BRANCH_NAME} || kubectl create ns ${env.BRANCH_NAME}")
// Don't use public load balancing for development branches
sh("sed -i.bak 's#LoadBalancer#ClusterIP#' ./k8s/services/frontend.yaml")
sh("sed -i.bak 's#gcr.io/cloud-solutions-images/gceme:1.0.0#${imageTag}#' ./k8s/dev/*.yaml")
sh("kubectl --namespace=${env.BRANCH_NAME} apply -f k8s/services/")
sh("kubectl --namespace=${env.BRANCH_NAME} apply -f k8s/dev/")
echo 'To access your environment run `kubectl proxy`'
echo "Then access your service via http://localhost:8001/api/v1/proxy/namespaces/${env.BRANCH_NAME}/services/${feSvcName}:80/"

1 个答案:

答案 0 :(得分:0)

您是否正在创建服务或Ingress资源以将您的应用程序公开给外界?

参见教程:

有可以复制和修改的工作示例。