我有以下设置:
- 私有 OpenStack 云- 仅 Web UI(Horizon)可访问
(API 受到限制,但我可能可以访问) - 我用过核心操作系统设置一个掌握和三个节点
- 资源标准化(OpenStack 的默认设置)
- 我按照 CoreOS 的入门指南进行操作(即我使用提供的云配置的默认 YAML)GitHub
据我所知,诸如 Web UI(kube-ui)之类的扩展可以作为附加组件添加 - 我已经添加了(仅 kube-ui)。
现在如果我运行诸如 simple-nginx 之类的测试,我会得到以下输出:
创建 Pod:
$ kubectl run my-nginx --image=nginx --replicas=2 --port=80
创建服务:
$ kubectl expose rc my-nginx --port=80 --type=LoadBalancer
NAME LABELS SELECTOR IP(S) PORT(S)
my-nginx run=my-nginx run=my-nginx 80/TCP
获取服务信息:
$ kubectl describe service my-nginx
Name: my-nginx
Namespace: default
Labels: run=my-nginx
Selector: run=my-nginx
Type: LoadBalancer
IP: 10.100.161.90
Port: <unnamed> 80/TCP
NodePort: <unnamed> 31170/TCP
Endpoints: 10.244.19.2:80,10.244.44.3:80
Session Affinity: None
No events.
我可以从节点的每个外部 IP 访问我的服务。
我现在的问题如下:
如何通过子域访问任何已启动的服务以太,因此我该如何设置此配置(例如,我以 domain.com 为例)或者是否可以打印出我必须在哪个节点 IP 上访问我的服务(尽管我只有两个副本(?!))?
为了使我的想法更容易理解,我的想法如下:
- 给定域:域名.com(指着师父)
- 启动服务简单-nginx
- 可以通过以下方式访问服务simple-nginx.domain.com
答案1
这是对该问题提出 5 年后所有看到它的人的答案。
科技越来越进步了,现在我们k8s中的入口:D。
要使用子域,请部署入口控制器,例如nginx 入口控制器
并创建一个入口对象:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress
spec:
rules:
- host: "simple-nginx.domain.com"
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: simple-nginx
port:
number: 80
现在剩下要做的就是创建一个 DNS 记录并将*.domain.com
其指向 ADDRESS 列中看到的入口 IP。
$ kubectl get ingress
NAME CLASS HOSTS ADDRESS PORTS AGE
ingress <none> simple-nginx.domain.com xxx.yyy.zzz.kkk 80 2d20h
答案2
你需要做两件事:
- 在你想要访问服务 VIP(虚拟 IP)的所有节点上运行 kube-proxy
- 将 /etc/resolv.conf 中的节点的 DNS 指向 kubernetes 集群中运行的 DNS 服务器。