首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向kubernetes部署golang应用程序的问题

向kubernetes部署golang应用程序的问题
EN

Stack Overflow用户
提问于 2022-07-24 19:39:11
回答 2查看 48关注 0票数 0

因此,我遵循了本教程,该教程解释了如何在Golang构建容器化微服务、Dockerize和部署到Kubernetes。

https://www.youtube.com/watch?v=H6pF2Swqrko

我已经到了可以通过迷你ip (我的是192.168.59.100)访问我的应用程序的地步。我设置了kubernetes,我现在有3个工作舱,但是我无法通过kubernetes打开我的golang应用程序,这个url是kubectl给我的:“192.168.59.100:31705.”

代码语言:javascript
复制
                                                                   ^
                                                                   |
                                                                 here

我有线索..。当我搜索"https://192.168.59.100:8443/“时,会出现错误403:

这是我的deployment.yml:

代码语言:javascript
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-deployment
  labels:
    app: web
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
      - name: go-web-app
        image: go-app-ms:latest
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80

这是我的service.yml:

代码语言:javascript
复制
apiVersion: v1
kind: Service
metadata:
  name: web-service
spec:
  type: NodePort
  selector:
    app.kubernetes.io/name: web
  ports:
    - port: 80
      targetPort: 80
EN

回答 2

Stack Overflow用户

发布于 2022-07-24 20:00:43

您的服务选择器尝试将吊舱与标签:app.kubernetes.io/name: web匹配,但是豆荚有app: web标签。它们不匹配。服务上的选择器必须与吊舱上的标签相匹配。当您使用deployment对象时,这意味着与spec.template.metadata.labels中的标签相同。

票数 1
EN

Stack Overflow用户

发布于 2022-07-24 20:06:09

@Szczad正确地描述了这个问题。我想提出一种今后避免这个问题的办法。库斯托姆是构建Kubernetes清单的工具。它内置在kubectl命令中。它的一个特性是能够将一组公共标签应用于您的资源,包括正确地填充服务和部署中的选择器。

如果我们将您的Deployment简化为此(在deployment.yaml中):

代码语言:javascript
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-deployment
spec:
  replicas: 3
  template:
    spec:
      containers:
      - name: go-web-app
        image: go-app-ms:latest
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80

以及您的Service (在service.yaml中):

代码语言:javascript
复制
apiVersion: v1
kind: Service
metadata:
  name: web-service
spec:
  type: NodePort
  ports:
    - port: 80
      targetPort: 80

我们将以下kustomization.yaml放在同一个目录中:

代码语言:javascript
复制
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

commonLabels:
  app: web

resources:
- deployment.yaml
- service.yaml

然后,我们可以通过运行以下命令来部署这个应用程序:

代码语言:javascript
复制
kubectl apply -k .

这将产生以下清单:

代码语言:javascript
复制
apiVersion: v1
kind: Service
metadata:
  labels:
    app: web
  name: web-service
spec:
  ports:
  - port: 80
    targetPort: 80
  selector:
    app: web
  type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: web
  name: web-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
      - image: go-app-ms:latest
        imagePullPolicy: IfNotPresent
        name: go-web-app
        ports:
        - containerPort: 80

正如您在这里看到的,app: web标签已经应用于部署、部署选择器、pod模板和服务选择器。

像这样通过Kustomize应用标签意味着您只需要在一个地方更改标签。它使人们更容易避免标签不匹配引起的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73101486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档