端口80和443无法访问Kubernetes节点

时间:2018-04-17 10:49:30

标签: linux raspberry-pi kubernetes

我部署了一堆服务,并且所有这些服务都存在同样的问题:定义的端口(例如80443)无法访问,但无论如何都是自动分配的节点端口。 / p>

enter image description here

从第一个服务导出以下服务定义:

{
  "kind": "Service",
  "apiVersion": "v1",
  "metadata": {
    "name": "traefik",
    "namespace": "kube-system",
    "selfLink": "/api/v1/namespaces/kube-system/services/traefik",
    "uid": "70df3a55-422c-11e8-b7c0-b827eb28c626",
    "resourceVersion": "1531399",
    "creationTimestamp": "2018-04-17T10:45:27Z",
    "labels": {
      "app": "traefik",
      "chart": "traefik-1.28.1",
      "heritage": "Tiller",
      "release": "traefik"
    }
  },
  "spec": {
    "ports": [
      {
        "name": "http",
        "protocol": "TCP",
        "port": 80,
        "targetPort": "http",
        "nodePort": 31822
      },
      {
        "name": "https",
        "protocol": "TCP",
        "port": 443,
        "targetPort": "httpn",
        "nodePort": 32638
      }
    ],
    "selector": {
      "app": "traefik",
      "release": "traefik"
    },
    "clusterIP": "10.109.80.108",
    "type": "LoadBalancer",
    "sessionAffinity": "None",
    "externalTrafficPolicy": "Cluster"
  },
  "status": {
    "loadBalancer": {}
  }
}

enter image description here

知道我如何使用http://node-ip-addr:80以及http://node-ip-addr:443的其他服务来使用此服务?

2 个答案:

答案 0 :(得分:0)

您为服务定义的端口(在本例中为443和80--)只能从群集中访问。您可以尝试使用curl http://traefik.kube-system.svc.cluster.local或http://从另一个pod(例如,运行繁忙的框)中调用您的服务。

如果您想从群集外部访问您的服务(这是您的用例,您需要将您的服务公开为以下之一

  • NodePort
  • 负载平衡器
  • ExternalName

您选择了NodePort,这意味着群集的每个节点都会侦听特定端口上的请求(在您的情况下为31822表示http,32638表示https),然后委托给您的服务。这就是http://node-ip-addr:31822适用于您提供的服务配置的原因。

要根据您的要求调整您的配置,您必须设置“nodePort”:80,它将在每个群集节点上保留端口80以委派给您的服务。这通常不是最好的主意。您希望将端口保持为当前定义的端口,并在群集前添加代理服务器或负载平衡器,然后侦听端口80并转发到其中一个节点,以便为您的服务端口31822。

有关发布服务的详细信息,请参阅Kubernetes docs

上的文档

答案 1 :(得分:0)

检查以下工作示例。

注意:

  1. 容器侦听端口4000,containerPort
  2. 中指定为Deployment
  3. Service将容器端口4000(targetPort)映射到port 80
  4. Ingress现在指向servicePort 80
  5. apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      name: testui-deploy
    spec:
      replicas: 1
      revisionHistoryLimit: 1
      selector: 
        matchLabels: 
          app: testui
      template:
        metadata:
          labels:
            app: testui
        spec:
          containers:
            - name: testui
              image: gcr.io/test2018/testui:latest
              ports:
                - containerPort: 4000
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: testui-svc
      labels: 
        app: testui-svc
    spec:
      type: NodePort
      selector:
        app: testui
      ports:
      - protocol: TCP
        port: 80
        targetPort: 4000
    ---
    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: test-ing
      annotations:
        kubernetes.io/ingress.global-static-ip-name: test-ip
    spec:
      backend:
        serviceName: testui-svc
        servicePort: 80