1

我正在尝试在我的每个部署上实现 ClusterIP-Service。仅供参考,我正在办公室自己的服务器上设置 kubernetes(由于某种原因不使用云)。以前这里是我能想到的网络/基础设施:

Ingress -> Service -> Deployment

我不确定为什么我的 Ingress 不能按预期工作。我使用https://github.com/kubernetes/ingress-nginx作为我的入口控制器。我还应用了来自https://kubernetes.github.io/ingress-nginx/deploy/的裸机服务配置

下面是我的简单 Ingress 和 ClusterIP,例如:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-service
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
    - http:
        paths:
          - path: /
            backend:
              serviceName: simpleweb-service
              servicePort: 80

---
apiVersion : v1
kind : Service
metadata:
  name: simpleweb-service
spec:
  type: ClusterIP
  ports:
  - port: 80
    targetPort: 80
  selector:
    component: web

我尝试访问http://<server-internal-ip>:80,但连接被拒绝,而不是被路由到特定服务内的我的应用程序。我上面做的任何事情都可能出错吗?

我需要LoadBalancer像下面这样在 Ingress 之前拥有吗?(哪一个是理想的)

LoadBalancer -> Ingress -> Service -> Deployment

或者可能

LoadBalancer -> Service -> Deployment

提前致谢。

4

2 回答 2

1

您有许多选项可以公开您的服务。我建议使用 metallb,它允许您使用 LoadBalancer 公开服务。使用 ClusterIP,服务不会暴露给外界,详情请参阅发布服务 - 服务类型。Ingress 不是强制性的,但没有它,您只能拥有一个服务+端口/IP 地址,而 Ingress 允许您拥有基于名称或/和路径的路由。

于 2018-10-19T15:16:25.653 回答
1

访问选项:

  • 使用 k8s 服务( clusterIP 、 nodeport 、 loadbalancer (在 aws 、 gcp 环境中))

外部负载均衡器(可选)-> nodeport 类型的服务-> Deploymenet

  • 使用入口

外部负载均衡器(可选)-> Ingress -> Service (clusterIP)-> Deploymenet

在你的情况下,你可以通过首先使用节点端口并直接访问它来测试它,然后如果工作正常,然后使用 clusterIp ,并在集群内卷曲它以确保它在端口 80 上运行,然后在入口处公开它,如果你想使用入口。同时调试和描述入口服务。

如果您收到连接被拒绝,则端口可能存在问题。

还要确保您为选择器使用正确的标签。

文档: https ://console.bluemix.net/docs/containers/cs_ingress.html#ingress

于 2018-10-19T15:12:27.153 回答