几个月前,我开始使用kubernetes,为不同的后端应用程序创建服务和副本集。
现在,我想使用入口服务通过我的域名从外部访问我的不同应用程序。因为它还没有投入生产,我只在节点上使用,所以我不想使用负载均衡器。
是否可以在不使用负载均衡器的情况下通过NodePort设置服务并将其附加到Ingress?
这是我的配置:
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
kind: Ingress
metadata:
name: my-ingress
annotations:
kubernetes.io/ingress.class: nginx
spec:
rules:
- host: www.mydomain.com
http:
paths:
- path: /
backend:
serviceName: nginx-replicaset-service
servicePort: 80
- host: test.mydomain.com
http:
paths:
- path: /test
backend:
serviceName: other-service
servicePort: 80
当我检查集群上的入口信息时,我会看到以下信息:
NAME HOSTS ADDRESS PORTS AGE
my-ingress www.mydomain.com,test.mydomain.com 80 4d22h
地址始终为空
答案 0 :(得分:1)
如果您的群集在GCP或GKE上运行,则可以
1)创建一个全球IP地址
gcloud compute addresses create ingress-static-ip --global
2)在Ingress配置上设置 kubernetes.io/ingress.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
https://cloud.google.com/kubernetes-engine/docs/tutorials/configuring-domain-name-static-ip
答案 1 :(得分:0)
不是直接的,或者至少是尴尬的。出于安全原因,NodePort服务仅限于一系列高端口,因此这将需要http://externalip:43210
或它选择的任何端口。不使用LoadBalancer的更常见方法是使用DaemonSet和hostNetwork模式部署入口控制器,以便它可以侦听80和443。但这仍然留下了将IP提供给用户的问题。出于开发目的,您可以选择节点的任何IP并使用它。对于产品而言,这更难,这就是为什么通常不建议这样做的原因。
答案 2 :(得分:0)
是的,但是您不应该使用 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” ,您将看到带有externalIP的服务。
为了使您的入口正常运行,这意味着 www.domain.com 和 test.domain.com 需要指向 XXX.XXX.XXX.XXX 。