无法通过外网访问kubernetes服务
Cannot access kubernetes service via outside network
我使用 kubernetes 1.3.0 设置 kubernetes 环境,运行在同一主机上设置主节点和节点,我 运行 一个 tomcat Web 应用程序,一个 RC,一个服务docker,似乎 运行ning 没问题,我可以通过 curl 命令通过内部网络访问服务,但是当我尝试使用 public IP 从互联网访问服务时,失败了。
RC 配置为:
apiVersion: v1
kind: ReplicationController
metadata:
name: myweb
spec:
replicas: 2
selector:
app: myweb
template:
metadata:
labels:
app: myweb
spec:
containers:
- name: myweb
image: kubeguide/tomcat-app:v1
ports:
- containerPort: 8080
env:
- name: MYSQL_SERVICE_HOST
value: "mysql"
- name: MYSQL_SERVICE_PORT
value: '3306'
服务配置为:
apiVersion: v1
kind: Service
metadata:
name: myweb
spec:
type: NodePort
ports:
- port: 8080
nodePort: 30001
selector:
app: myweb
如你所见,Service监听30001端口,当Kubernetes Service监听该端口时,无法通过Internet访问,但是当我使用
nc -l 30001
命令在同一主机上,可以通过Internet访问,这意味着系统层的网络配置没问题。
对于主机的iptables设置,我接受了所有连接,但问题仍然出现。
那为什么我可以用kubernetes服务访问呢?有什么我想念的配置吗?
要使用主机网络公开 kubernetes 服务,您可以使用 Ingress 规则。
请参考:https://kubernetes.io/docs/concepts/services-networking/ingress/
在您的情况下,入口规则如下。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: nginx-test
spec:
rules:
- host: test.example.com
http:
paths:
- backend:
serviceName: myweb
servicePort: 30001
path: /
我使用 kubernetes 1.3.0 设置 kubernetes 环境,运行在同一主机上设置主节点和节点,我 运行 一个 tomcat Web 应用程序,一个 RC,一个服务docker,似乎 运行ning 没问题,我可以通过 curl 命令通过内部网络访问服务,但是当我尝试使用 public IP 从互联网访问服务时,失败了。
RC 配置为:
apiVersion: v1
kind: ReplicationController
metadata:
name: myweb
spec:
replicas: 2
selector:
app: myweb
template:
metadata:
labels:
app: myweb
spec:
containers:
- name: myweb
image: kubeguide/tomcat-app:v1
ports:
- containerPort: 8080
env:
- name: MYSQL_SERVICE_HOST
value: "mysql"
- name: MYSQL_SERVICE_PORT
value: '3306'
服务配置为:
apiVersion: v1
kind: Service
metadata:
name: myweb
spec:
type: NodePort
ports:
- port: 8080
nodePort: 30001
selector:
app: myweb
如你所见,Service监听30001端口,当Kubernetes Service监听该端口时,无法通过Internet访问,但是当我使用
nc -l 30001
命令在同一主机上,可以通过Internet访问,这意味着系统层的网络配置没问题。
对于主机的iptables设置,我接受了所有连接,但问题仍然出现。
那为什么我可以用kubernetes服务访问呢?有什么我想念的配置吗?
要使用主机网络公开 kubernetes 服务,您可以使用 Ingress 规则。
请参考:https://kubernetes.io/docs/concepts/services-networking/ingress/
在您的情况下,入口规则如下。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: nginx-test
spec:
rules:
- host: test.example.com
http:
paths:
- backend:
serviceName: myweb
servicePort: 30001
path: /