无法连接到外部IP的Kubernetes集群

4
我正在尝试访问我在Microsoft Azure上的Kubernetes集群中通过Docker容器化并挂载的.NET Web API。该应用在本地Docker机器上运行良好。集群正在运行,我的部署正确,并且pod已创建。我检查的一切都很好,但是我无法通过外部集群IP(负载均衡器)访问我的应用程序。这是我的YAML部署文件:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: ohmioapi-deployment
spec:
  selector:
    matchLabels:
      app: ohmioapi
  replicas: 1
  template:
    metadata:
      labels:
        app: ohmioapi
    spec:
      containers:
      - name: ohmioapi
        image: ohmiocontainers.azurecr.io/ohmioapi:latest
        imagePullPolicy: Always
        ports:
        - containerPort: 15200
      imagePullSecrets:
        - name: acr-auth
---
apiVersion: v1
kind: Service
metadata:
  name: ohmioapi
  labels:
    app: ohmioapi
spec:
  selector:
    app: ohmioapi
  ports:
  - port: 15200
    nodePort: 30200
    protocol: TCP
  type: LoadBalancer

有人可以给一些开始寻找的提示吗? 谢谢!


你是否使用正确的端口连接到外部IP地址?例如:http://externalip:15200 - Charlino
是的,当然 @Charlino - ericpap
3个回答

1
我建议给部署/容器端口起个名称(例如http),然后让服务以80端口提供服务,但通过名称定位到容器端口……这样当连接到服务时就不必担心端口号了。
另外,如果您使用的是LoadBalancer类型,就不需要使用nodePort
例如:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: ohmioapi-deployment
spec:
  selector:
    matchLabels:
      app: ohmioapi
  replicas: 1
  template:
    metadata:
      labels:
        app: ohmioapi
    spec:
      containers:
      - name: ohmioapi
        image: ohmiocontainers.azurecr.io/ohmioapi:latest
        imagePullPolicy: Always
        ports:
        - name: http
          containerPort: 15200
      imagePullSecrets:
        - name: acr-auth

---
apiVersion: v1
kind: Service
metadata:
  name: ohmioapi
  labels:
    app: ohmioapi
spec:
  selector:
    app: ohmioapi
  ports:
  - name: http
    port: 80
    targetPort: http
    protocol: TCP
  type: LoadBalancer

这并不会改变任何东西。通过名称设置端口可能看起来更好一些,但最终结果相同。和我提出的完全一样。 - 4c74356b41
2
并不完全正确。实际上,这个解决方案对我起作用了,但我怀疑问题出在监听端口80而不是15200上。从中我推断出这是防火墙设置的问题。谢谢! - ericpap

1
你可以使用命令kubectl get service来获取所有服务的信息并检查你的服务ohmioapi,结果将会像这样:

enter image description here

或者您可以使用命令kubectl describe service serviceName来获取有关您的服务的更多详细信息,结果将如下所示:

enter image description here

你可以在负载均衡器中检查端口映射,并通过外部IP和端口从浏览器访问。
你也可以使用命令kubectl edit service serviceName来编辑和检查由Kubernetes创建的配置文件,结果将像这样:

enter image description here


0

谢谢你的尝试,但不行。还有其他想法吗? - ericpap
我并没有尝试任何东西 ;) 我有一堆AKS集群,并且对我很有效 ;) 而且它始终只是端口或端口+目标端口。 - 4c74356b41

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接