我遵循GKE ruby书架示例并引用了kubernetes示例。 在部署了资源的同时,我无法ping通我的rails frontend节点。 我实现了一个简单的ping路由来testing最基本的连接。
我已经减less了replicas到1来简化事情,并从节点抓取日志,以确认它已经启动并且没有任何错误出现。
> wget http://104.154.128.169/ping --2017-09-15 14:14:54-- http://104.154.128.169/ping Connecting to 104.154.128.169:80... failed: Connection refused.
apiVersion: v1 kind: Service metadata: name: foo-frontend labels: app: foo tier: frontend spec: type: LoadBalancer ports: - port: 80 selector: app: foo tier: frontend --- apiVersion: extensions/v1beta1 kind: Deployment metadata: name: foo-frontend labels: app: foo tier: frontend spec: replicas: 1 template: metadata: labels: app: foo tier: frontend spec: containers: - name: foo-app image: us.gcr.io/foo/api:latest imagePullPolicy: Always env: - name: FORMATION value: web=1 - name: RAILS_ENV value: production - name: RACK_ENV value: production - name: RAILS_LOG_TO_STDOUT value: enabled - name: RAILS_SERVE_STATIC_FILES value: "true" - name: SECRET_KEY_BASE valueFrom: secretKeyRef: name: production-secrets key: SECRET_KEY_BASE - name: DB_PASSWORD valueFrom: secretKeyRef: name: production-secrets key: DB_PASSWORD ports: - containerPort: 8080
片段
EXPOSE 8080/tcp CMD bundle exec foreman start --formation "$FORMATION"
web: bundle exec rackup --port 8080 worker: bundle exec rake run_worker
> kubectl get pods; kubectl get services NAME READY STATUS RESTARTS AGE foo-frontend-284775361-4pzk3 1/1 Running 0 9m NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE foo-frontend 10.15.246.177 104.154.128.169 80:30917/TCP 9m kubernetes 10.15.240.1 <none> 443/TCP 22h
和
> kubectl describe service Name: foo-frontend Namespace: default Labels: app=foo tier=frontend Annotations: <none> Selector: app=foo,tier=frontend Type: LoadBalancer IP: 10.15.246.177 LoadBalancer Ingress: 104.154.128.169 Port: <unset> 80/TCP NodePort: <unset> 30917/TCP Endpoints: 10.12.2.13:80 Session Affinity: None Events: FirstSeen LastSeen Count From SubObjectPath Type Reason Message --------- -------- ----- ---- ------------- -------- ------ ------- 10m 9m 2 service-controller Normal CreatingLoadBalancer Creating load balancer 9m 9m 2 service-controller Normal CreatedLoadBalancer Created load balancer Name: kubernetes Namespace: default Labels: component=apiserver provider=kubernetes Annotations: <none> Selector: <none> Type: ClusterIP IP: 10.15.240.1 Port: https 443/TCP Endpoints: 104.154.116.128:443 Session Affinity: ClientIP Events: <none>
我相信关键的问题是我没有在服务中指定一个targetPort 。 我设置了一个计算静态ip以及gcloud compute addresses create foo-frontend-ip --region=us-central1 ,所以无论哪种方式,这是两个之一。
apiVersion: v1 kind: Service metadata: name: foo-frontend labels: app: foo tier: frontend spec: type: LoadBalancer # use your external IP here loadBalancerIP: xxxx ports: - port: 80 targetPort: 8080 protocol: TCP selector: app: foo tier: frontend