use*_*040 5 kubernetes jupyter jupyter-notebook jupyter-kernel
jupyter我在kubernetes 集群的命名空间中设置了 Jupyter 笔记本,并enterprise-gateway在同一集群中的命名空间中设置了 Jupyter Enterprise Gateway 作为服务。
如果我将笔记本配置为enterprise-gateway使用 clusterIP 连接到服务,则它可以正常工作。
--gateway-url=http://172.20.186.249:8888
Run Code Online (Sandbox Code Playgroud)
但如果我切换到使用服务域名,笔记本电脑会收到 503 Connection Refused 错误
--gateway-url=http://enterprise-gateway.enterprise-gateway.svc.cluster.local:8888
Run Code Online (Sandbox Code Playgroud)
当我使用 busybox check 检查 kubernetes dns 时,域按预期解析。
kubectl -n default exec -ti busybox nslookup enterprise-gateway.enterprise-gateway
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
Server: 172.20.0.10
Address 1: 172.20.0.10 kube-dns.kube-system.svc.cluster.local
Name: enterprise-gateway.enterprise-gateway
Address 1: 172.20.186.249 enterprise-gateway.enterprise-gateway.svc.cluster.local
Run Code Online (Sandbox Code Playgroud)
如何让域名发挥作用?
JEG 的服务配置如下所示......
kubectl describe svc enterprise-gateway --namespace enterprise-gateway
Name: enterprise-gateway
Namespace: enterprise-gateway
Labels: app=enterprise-gateway
app.kubernetes.io/managed-by=Helm
chart=enterprise-gateway-2.6.0
component=enterprise-gateway
heritage=Helm
release=enterprise-gateway
Annotations: meta.helm.sh/release-name: enterprise-gateway
meta.helm.sh/release-namespace: enterprise-gateway
Selector: app=enterprise-gateway
Type: NodePort
IP Family Policy: SingleStack
IP Families: IPv4
IP: 172.20.250.15
IPs: 172.20.250.15
Port: http 8888/TCP
TargetPort: 8888/TCP
NodePort: http 31366/TCP
Endpoints: 10.1.16.136:8888,10.1.2.228:8888,10.1.30.90:8888
Port: response 8877/TCP
TargetPort: 8877/TCP
NodePort: response 31201/TCP
Endpoints: 10.1.16.136:8877,10.1.2.228:8877,10.1.30.90:8877
Session Affinity: ClientIP
External Traffic Policy: Cluster
Events: <none>
Run Code Online (Sandbox Code Playgroud)
好吧,我不知道从哪里开始,我有很多发现。我将从引人注目的一个开始,我有一个工作测试项目,我可以稍后分享,如果需要,我必须在这个答案中详细说明。
步骤1
1- 我发现您的 IP 不匹配。DNS 查找未将服务 DNS 解析为正确的 IP。地址 1:172.20.186.249 与 IP:172.20.250.15 不同
调试 DNS:
kubectl exec“YOURPODNAME”cat /etc/resolv.conf
验证搜索路径和名称服务器是否设置正确
名称服务器 10.96.0.10 搜索 default.svc.cluster.local svc.cluster.local cluster.local 选项 ndots:5
检查 kubedns/coredns pod 是否正在运行
kubectl get pods --namespace=kube-system 名称就绪状态重新启动年龄 .... kube-dns-86f4d74b45-2qkfd 3/3 运行 232 133d kube-proxy-b2frq 1/1 运行 0 15m ...
如果 Pod 正在运行,则全局 DNS 服务可能出现问题
kubectl get svc --namespace=kube-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP
Run Code Online (Sandbox Code Playgroud)
您可能还需要检查 DNS 端点是否公开:
kubectl get ep kube-dns --namespace=kube-system
NAME ENDPOINTS AGE
kube-dns 172.17.0.5:53,172.17.0.5:53 133d
Run Code Online (Sandbox Code Playgroud)
这些调试操作通常会表明您的 DNS 配置存在问题,或者只会显示您应该在集群配置中启用 DNS 插件。
第2步
使用 busybox 检查 kubernetes dns 时,查看地址 1 时这似乎不正确:172.20.186.249 我希望获得 IP 10.XXX 在 pod 上安装 dnsutils,如下所示
kubectl exec --stdin --tty "YOURPODNAME" -- apt update && sudo apt-get -y install dnsutils
kubectl exec -it "YOURPODNAME" -- /bin/bash
在 Pod 内再次(奇怪)运行 apt-get install dnsutils
留在 Pod 内并运行 nslookup“YOURSERVICENAME”,您将获得 IP 和名称 (DNS)。 检查此 IP,因为它需要与服务描述的 IP 匹配。
kubectl描述svc“YOURSERVICENAME”,IP应与#4相同
你必须看到的:
步骤3
待续...
| 归档时间: |
|
| 查看次数: |
740 次 |
| 最近记录: |