我一直在阅读关于服务和 Pod 的 DNS 的K8s 文档。我要解决的主要任务是我的 K8s 部署具有NodePort
服务类型。这意味着,我使用来自节点的外部 IP 地址将服务公开到 Internet。当我这样做时,我的 IP 地址会暴露出来,我宁愿拥有一个主机名 [一个 DNS 名称]。通过上面链接的文档,由于我是 K8s 的新手,我不太了解这些概念。
我从 NGINX 为 Bare Metal K8s 设置了 Ingress Controller,因为我的云提供商不提供负载平衡服务。
所以我的问题是:如何在我的 K8s 集群中设置 ExternalDNS?
仅供参考,这些是我在 K8s 集群中的资源。
Namespaces
NAME STATUS AGE
default Active 3d12h
ingress-nginx Active 5h53m
kube-node-lease Active 3d12h
kube-public Active 3d12h
kube-system Active 3d12h
基本上,我的所有部署都在default
命名空间内。
kubectl get all -n default
NAME READY STATUS RESTARTS AGE
pod/hello-docker-cc749b757-qfctr 1/1 Running 0 70m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/hello-docker NodePort 10.xxx.xxx.xxx <none> 3000:30072/TCP 70m
service/kubernetes ClusterIP 10.xxx.xxx.xxx <none> 443/TCP 3d12h
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/hello-docker 1/1 1 1 70m
NAME DESIRED CURRENT READY AGE
replicaset.apps/hello-docker-cc749b757 1 1 1 70m
这是我用于hello-docker
应用程序服务和部署的清单文件:
apiVersion: v1
kind: Service
metadata:
name: hello-docker
labels:
app: hello-docker
spec:
type: NodePort
ports:
- port: 3000
targetPort: 8000
protocol: TCP
name: http
selector:
app: hello-docker
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-docker
labels:
app: hello-docker
spec:
replicas: 1
selector:
matchLabels:
app: hello-docker
template:
metadata:
labels:
app: hello-docker
spec:
imagePullSecrets:
- name: regcred
containers:
- name: hello-docker
image: sebastian/hello-docker:1.1
imagePullPolicy: Always
ports:
- containerPort: 8000
任何反馈和建议将不胜感激。
我通过创建 Cloudflare 隧道(以前称为 Argo 隧道)来完成这项工作。可以在此处找到有关隧道的完整配置文档。我希望有类似问题的人觉得这很有用。