Kubernetes 我可以在没有设置loadbalancer的情况下使用带有外部IP的k8s入口服务吗

Kubernetes 我可以在没有设置loadbalancer的情况下使用带有外部IP的k8s入口服务吗,kubernetes,kubernetes-ingress,Kubernetes,Kubernetes Ingress,几个月前,我开始与kubernetes合作,为不同的后端应用程序创建服务和复制集 现在我想用我的域名使用入口服务从外部访问我的不同应用程序。由于它还没有投入生产,而且我只在节点上使用,所以我不想使用loadbalancer 是否可以使用NodePort设置服务并将其连接到入口,而不使用loadbalancer 这是我的配置: kind: Service metadata: name: nginx-replicaset-service labels: app: nginx-demo

几个月前,我开始与kubernetes合作,为不同的后端应用程序创建服务和复制集

现在我想用我的域名使用入口服务从外部访问我的不同应用程序。由于它还没有投入生产,而且我只在节点上使用,所以我不想使用loadbalancer

是否可以使用NodePort设置服务并将其连接到入口,而不使用loadbalancer

这是我的配置:

kind: Service
metadata:
  name: nginx-replicaset-service
  labels:
    app: nginx-demo
spec:
  externalIPs:
    - XXX.XXX.XXX.XXX
  selector:
    app: nginx-replica
  type: NodePort
  ports:
    - name: http
      port: 80
当我检查集群上的入口信息时,我有以下信息:

NAME         HOSTS                                   ADDRESS   PORTS   AGE
my-ingress   www.mydomain.com,test.mydomain.com                80      4d22h

地址总是空的

不是直接的,否则至少会很尴尬。出于安全原因,NodePort服务仅限于一系列高端口,因此这需要
http://externalip:43210
或它选择的任何端口。不使用负载平衡器的更常见方法是使用守护程序和主机网络模式部署入口控制器,以便它可以在80和443上侦听。不过,这仍然存在将IP发送给用户的问题。出于开发目的,您可以为节点选择任何IP并使用它。对于prod,它更难,这就是为什么一般不推荐它的原因。

如果您的集群运行在GCP或GKE上,您可以

1) 创建一个全局IP地址

gcloud compute addresses create ingress-static-ip --global
2) 在入口配置上设置kubernetes.io/ingres.global static ip name注释

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: my-ingress
  annotations:
    kubernetes.io/ingress.global-static-ip-name: ingress-static-ip
  labels:
    app: nginx-replica
3) 还有一项服务

apiVersion: v1
kind: Service
metadata:
  name: nginx-replicaset-service
  labels:
    app: nginx-demo
spec:
  selector:
    app: nginx-replica
  type: NodePort
  ports:
    - name: http
      port: 80

可以,但不应使用ExternalIPs指定NodePort。 使用ExternalIPs,您可以像这样直接指定端口:

kind: Service
metadata:
  name: nginx-replicaset-service
  labels:
    app: nginx-demo
spec:
  externalIPs:
    - XXX.XXX.XXX.XXX
  selector:
    app: nginx-replica
  ports:
    - name: http
      port: 80
这意味着您可以使用XXX.XXX.XXX.XXX:80访问该服务

在描述入口时,您通常看不到任何地址,入口将只包含您在入口中指定的内容。yaml:您只在入口中使用主机名

如果您执行“kubectl get svc”,您将看到使用externalIPs的服务


此外,为了让您的入口正常工作,这意味着www.domain.comtest.domain.com需要指向XXX.XXX.XXX

GKE即使使用此配置,仍在创建负载平衡器
kind: Service
metadata:
  name: nginx-replicaset-service
  labels:
    app: nginx-demo
spec:
  externalIPs:
    - XXX.XXX.XXX.XXX
  selector:
    app: nginx-replica
  ports:
    - name: http
      port: 80