Domain-Name-System
Kubernetes 子域上的訪問服務
我有以下設置:
- 私有 OpenStack 雲- o̲n̲l̲y̲ Web UI (Horizon) 可訪問
(API 受到限制,但也許我可以訪問)
- 我使用CoreOS設置了一個主節點和三個節點
- 資源是標準化的(作為 OpenStack 的預設設置)
- 我遵循了GitHub 上的 CoreOS 入門指南(即,我使用預設的 YAML 來提供雲配置)
當我閱讀諸如 Web UI (kube-ui) 之類的擴展時,可以將其添加為 Add-On - 我已添加(僅 kube-ui)。
現在,如果我執行諸如 simple-nginx 之類的測試,我會得到以下輸出:
創建豆莢:
$ 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 上(儘管我有只有兩個副本(?!))?
為了更容易理解地描述我的想法,我的意思是:
- 給定域:domain.com(指向主控)
- 啟動服務simple-nginx
- 可以使用simple-nginx.domain.com訪問服務
這是所有這些人在提出問題 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