我一直在经历K8s 文档关于服务和 Pod 的 DNS。我要解决的主要任务是我的 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
非常感谢任何反馈和建议。
答案1
我通过创建 Cloudflare Tunnel(以前称为 Argo Tunnel)完成了这项工作。有关隧道的完整配置文档可以在此处找到这里。我希望遇到类似问题的人会发现这篇文章很有用。