我的公司有一个kubernetes平台,在该平台上,我有一个运行在命名空间ingress
上的pod my_namespace
:
apiVersion: v1
kind: Pod
metadata:
name: ingress
labels:
app: ingress
spec:
containers:
- name: ingress
image: docker:5000/mma/neurotec-ingress
imagePullPolicy: Always
kubectl get pods -n my_namespace
NAME READY STATUS RESTARTS AGE
ingress 1/1 Running 1 11d
pod是一个侦听端口8080的服务器。
我还定义了一个服务,可以将广告连播导出到外部:
apiVersion: v1
kind: Service
metadata:
name: ingress
labels:
app: ingress
spec:
ports:
- port: 8080
protocol: TCP
selector:
app: ingress
type: LoadBalancer
kubectl describe service -n my_namespace ingress
Name: ingress
Namespace: my_namespace
Labels: app=ingress
Selector: app=ingress
Type: LoadBalancer
IP: 10.104.95.96
Port: <unset> 8080/TCP
TargetPort: 8080/TCP
Endpoints: 10.16.1.232:8080
我现在想从本地计算机向服务器发送消息。我要做的第一件事是确保其IP地址可访问。但是,简单的host command
返回错误:
host 10.16.1.232
Host 10.16.1.232 not found: 3(NXDOMAIN)
host ingress.my_namespace.nt // .nt is company's prefix
Host ingress.my_namespace not found: 3(NXDOMAIN)
如果我尝试运行telepresence
,它还会返回错误:
Looks like there's a bug in our code. Sorry about that!
Traceback (most recent call last):
File "/usr/bin/telepresence/telepresence/cli.py", line 135, in crash_reporting
yield
File "/usr/bin/telepresence/telepresence/main.py", line 65, in main
remote_info = start_proxy(runner)
File "/usr/bin/telepresence/telepresence/proxy/__init__.py", line 138, in start_proxy
run_id=run_id,
File "/usr/bin/telepresence/telepresence/proxy/remote.py", line 144, in get_remote_info
runner, deployment_name, deployment_type, run_id=run_id
File "/usr/bin/telepresence/telepresence/proxy/remote.py", line 91, in get_deployment_json
return json.loads(output)["items"][0]
IndexError: list index out of range
问题:如何从本地计算机访问kubernetes上的服务器?
答案 0 :(得分:0)
我认为您应该使用服务type: LoadBalancer
。 (不是ClusterIP
)
- ClusterIP:在群集内部IP上公开服务。选择此值可使服务仅可从以下位置访问 群集。。这是默认的ServiceType。
- LoadBalancer:使用云提供商的负载均衡器对外公开服务。 NodePort和ClusterIP服务, 自动创建外部负载均衡器路由。
以下是我的样本loadbalaner服务文件。我将端口80暴露给了互联网,并将端口80映射到带有标签run: my-web-portal
端口8000的Pod。
apiVersion: v1
kind: Service
metadata:
name: my-web-portal-svc
labels:
run: my-web-portal-svc
spec:
ports:
- port: 80
targetPort: 8000
protocol: TCP
name: port-80
selector:
run: my-web-portal
type: LoadBalancer
这是我的部署yml文件
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-web-portal
spec:
selector:
matchLabels:
run: my-web-portal
replicas: 1
template:
metadata:
labels:
run: my-web-portal
spec:
containers:
- name: backend
image: xxxxxx-backend
要获取端点,我运行命令
kubectl describe service my-web-portal-svc
命令将打印出用于连接到您的Pod的端点
Type: LoadBalancer
IP: 10.100.108.141
LoadBalancer Ingress: xxxxxxxxxxxxxx.us-west-2.elb.amazonaws.com
如有任何疑问,请发表评论。