我正在遵循来自K8s的图像体系结构
但是,我似乎无法使用服务名称从socket.io服务器连接到集群内。
现状:
从POD B
来自外部世界/因特网
我当前的服务配置
spec:
ports:
- name: http
protocol: TCP
port: 8000
targetPort: 3000
selector:
app: orders
clusterIP: 172.20.115.234
type: ClusterIP
sessionAffinity: None
我的母校海图
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
“我的服务帮助图”
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 -}}
发布于 2021-04-09 05:34:58
必须在容器中设置服务DNS名称才能访问其VIP地址。Kubernetes自动在具有与服务相同的选择器的所有豆荚中设置环境变量。
在您的示例中,所有带有选择器A的吊舱在部署容器时都会在其中设置环境变量,其中包含服务VIP和端口。
另一个带有选择器B的pod没有作为服务的端点链接,因此它不包含访问该服务所需的环境变量。
这是与您的问题相关的k8s文档。
要解决这个问题,您可以设置一个DNS服务,k8s作为集群附件提供该服务。跟着文件就好了。
https://stackoverflow.com/questions/66898830
复制相似问题