首页 文章

如何在Kubernetes中公开Ingress以进行外部访问?

提问于
浏览
0

我在私有网络上有一个kubernetes集群(私有服务器,不是aws或google Cloud ),我创建了一个能够访问的服务,但是,我需要能够从集群外部访问,为此我创建了一个Ingress并在集群中添加了ingress-nginx .

这是几次尝试后我使用的YAML:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: demo-ingress
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
spec:
  rules:
  - host: k8s.local
    http:
      paths:
      - path: /
        backend:
          serviceName: nginx
          servicePort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx
spec:
  type: ClusterIP
  selector:
    name: nginx
  ports:
  - port: 80
    targetPort: 80
    protocol: TCP
  # selector:
    # app: nginx
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: echoserver
        image: nginx
        ports:
        - containerPort: 80

我这样跑了yaml: kubectl create -f file.yaml

在/ etc / hosts文件中,我将 k8s.local 添加到主服务器的ip中 .

在主服务器中输入或输出命令时,会出现"Connection refused"消息: $ curl http://172.16.0.18:80/ -H 'Host: k8s.local'

我不知道它是否重要,但我在群集中使用Flannel .

我的想法只是创建一个'hello world'并将其暴露出集群!

我是否需要更改配置中的任何内容以允许此访问?


YAML文件编辑:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: demo-ingress
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
    # nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: k8s.local
    http:
      paths:
      - path: /teste
        backend:
          serviceName: nginx
          servicePort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx
spec:
  type: LoadBalancer # NodePort
  selector:
    app: nginx
  ports:
  - port: 80
    targetPort: 80
    protocol: TCP
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: echoserver
        image: nginx
        ports:
        - containerPort: 80

3 回答

  • 1

    您可以使用普通的nginx pod,但建议的方法是安装Kubernetes入口控制器,在您使用nginx的情况下,这样您就可以安装nginx ingress controller .

    Here是有关如何安装它的一些信息 .

    如果要允许外部访问,还可以将nginx入口控制器公开为LoadBalancer服务 . 您也可以使用NodePort,但必须手动将负载均衡器指向Kubernetes节点上的端口 .

    是的,“服务”上的选择器需要:

    选择器:app:nginx

  • 1

    您可以将入口控制器部署为具有主机端口80的守护进程 . 然后,控制器的服务无关紧要 . 您可以将域指向群集中的每个节点

    您可以执行NodePort类型的服务,但这会强制您使用30k附近的某个端口,您将无法使用端口80

    当然,最好的解决方案是使用带有负载均衡器的 Cloud 提供商

  • 0

    在这种情况下,NodePort可以工作 . 它将在每个节点(每个节点中的相同端口)中打开一个高端口号,以便您可以使用任何这些节点 . 如果需要,请放置Load Balancer,并将后端池指向已运行的实例 . 不要使用ClusterIP,它仅供内部使用 .

相关问题