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

use*_*852 9 kubernetes kubernetes-ingress nginx-ingress

我在私有网络(私有服务器,不是 aws 或 google cloud)上有一个 kubernetes 集群,并且我创建了一个能够访问的服务,但是,我需要能够从集群外部访问,为此我创建了一个 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
Run Code Online (Sandbox Code Playgroud)

我像这样运行 yaml:kubectl create -f file.yaml

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

当在主服务器中尝试该命令时,会出现“连接被拒绝”消息: $ 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
Run Code Online (Sandbox Code Playgroud)

Ric*_*ico 2

您可以使其与普通的 nginx pod 一起使用,但推荐的方法是安装 Kubernetes 入口控制器,在您使用 nginx 的情况下,因此您可以安装nginx 入口控制器

以下是有关如何安装它的一些信息。

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

是的,“服务”上的选择器必须是:

选择器:应用程序:nginx