首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Kubernetes内部socket.io连接

Kubernetes内部socket.io连接
EN

Stack Overflow用户
提问于 2021-03-31 21:23:43
回答 1查看 611关注 0票数 2

我正在遵循来自K8s的图像体系结构

但是,我似乎无法使用服务名称从socket.io服务器连接到集群内。

现状:

从POD B

  • 可以使用WS ( ws://10.10.10.1:3000 )✅直接连接应用程序A的吊舱
  • 可以使用HTTP ( http://orders:8000 )✅连接到App的服务
  • 无法使用WS连接到App的服务( ws://orders:8000 )

来自外部世界/因特网

  • 可以使用WS (ws: // my-external/orders)、✅/使用traefik路由我的外部ip/订单到服务订单:8000连接到App A的服务。
  • 可以使用HTTP ( http://my-external-ip/orders )✅//连接到App的服务,使用traefik将我的外部ip/订单路由到服务订单:8000

我当前的服务配置

代码语言:javascript
运行
AI代码解释
复制
spec:
  ports:
    - name: http
      protocol: TCP
      port: 8000
      targetPort: 3000
  selector:
    app: orders
  clusterIP: 172.20.115.234
  type: ClusterIP
  sessionAffinity: None

我的母校海图

代码语言:javascript
运行
AI代码解释
复制
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: {{ template "app.name" $ }}-backend
  annotations:
    kubernetes.io/ingress.class: traefik
    ingress.kubernetes.io/auth-type: forward
    ingress.kubernetes.io/auth-url: "http://auth.default.svc.cluster.local:8000/api/v1/oauth2/auth"
    ingress.kubernetes.io/auth-response-headers: authorization
  labels:
    {{- include "api-gw.labels" $ | indent 4 }}
spec:
  rules:
    - host: {{ .Values.deploy.host | quote }}
      http:
        paths:
          - path: /socket/events
            backend:
              serviceName: orders
              servicePort: 8000

“我的服务帮助图”

代码语言:javascript
运行
AI代码解释
复制
apiVersion: v1
kind: Service
metadata:
  name: {{ template "app.name" . }}
spec:
  {{ if not $isDebug -}}
  selector:
    app: {{ template "app.name" . }}
  {{ end -}}
  type: NodePort
  ports:
  - name: http
    port: {{ template "app.svc.port" . }}
    targetPort: {{ template "app.port" . }}
    nodePort: {{ .Values.service.exposedPort }}
    protocol: TCP



# Helpers..
# {{/* vim: set filetype=mustache: */}}
# {{- define "app.name" -}}
#     {{ default "default" .Chart.Name }}
# {{- end -}}

# {{- define "app.port" -}}
# 3000
# {{- end -}}

# {{- define "app.svc.port" -}}
# 8000
# {{- end -}}
EN

回答 1

Stack Overflow用户

发布于 2021-04-09 05:34:58

必须在容器中设置服务DNS名称才能访问其VIP地址。Kubernetes自动在具有与服务相同的选择器的所有豆荚中设置环境变量。

在您的示例中,所有带有选择器A的吊舱在部署容器时都会在其中设置环境变量,其中包含服务VIP和端口。

另一个带有选择器B的pod没有作为服务的端点链接,因此它不包含访问该服务所需的环境变量。

这是与您的问题相关的k8s文档

要解决这个问题,您可以设置一个DNS服务,k8s作为集群附件提供该服务。跟着文件就好了。

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

https://stackoverflow.com/questions/66898830

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文